初始化奇妙小屏幕控制器项目

This commit is contained in:
2026-09-08 22:56:52 +08:00
commit 8d368de3b5
491 changed files with 67678 additions and 0 deletions
@@ -0,0 +1,84 @@
✔ derives automatic frame names from current animation name and position (0.6403ms)
✔ keeps custom frame names and restores automatic names when cleared (0.0937ms)
✔ builds non-repeating animation edit context names (0.0948ms)
✔ selects saved animation preview frames by ordered durations (0.6116ms)
✔ loads every preview frame through revision-checked pagination (1.3323ms)
✔ validates configurable animation preview concurrency (0.2673ms)
✔ rejects mixed revisions instead of showing a partial animation (0.3507ms)
✔ validates frame duration only when explicitly called (0.3759ms)
✔ moves selected frames as one ordered group (0.2669ms)
✔ protects an eight pixel ring around interactive drag controls (0.1664ms)
✔ reorders mixed library keys without mutating the source list (0.1138ms)
✔ restores drag eligibility after protected pointer cancellation and drag end (0.3556ms)
✔ animation workspace exposes two previews and the simplified control order (6.8075ms)
✔ normal and pixel modes expose independent ranges and presets (1.1726ms)
✔ pixel stamps are exact squares from 1x1 through 4x4 (0.2138ms)
✔ pixel stamps clip at every canvas edge (0.1787ms)
✔ normal circle geometry remains unchanged (0.0899ms)
✔ line interpolation includes endpoints without coordinate gaps (0.1821ms)
✔ v1 tools migrate into normal mode while v2 restores both sizes (0.2555ms)
✔ pixel mode markup and grid stay accessible and non-interactive (6.9068ms)
✔ pixel undo history stores changed snapshots, caps entries, and clears (0.5017ms)
✔ canvas view clamps scale and keeps a visible section in the viewport (0.4704ms)
✔ zooming around an anchor preserves its logical position (0.2555ms)
✔ floating editor button stays inside its safe viewport bounds (0.1233ms)
✔ canvas editor markup, guarded input, and checkpoint events stay wired (1.9429ms)
✔ normalizes and converts hexadecimal colors (1.1363ms)
✔ converts RGB and HSV boundaries (0.2535ms)
✔ round trips representative colors within 8-bit rounding (0.9763ms)
✔ recent colors deduplicate, normalize, and evict the oldest (0.2321ms)
✔ formats and projects looping playback without moving paused content (1.0057ms)
✔ seek dispatcher keeps one request in flight and flushes the newest position (2.948ms)
✔ topbar current display dialog exposes static close and animation controls (3.2173ms)
✔ device workspace exposes the compact immediate pure-color test flow (5.2123ms)
✔ font catalog normalization, grouping, and search are stable (1.7571ms)
✔ font picker implements commit-only searchable combobox keyboard behavior (2.9703ms)
✔ settings places unrestricted FRP maintenance at the bottom (4.612ms)
✔ FRP editor uses raw server storage and official validation errors (1.0223ms)
✔ network diagnostics renders layered evidence (1.448ms)
✔ unavailable controls never masquerade as indefinite loading (5.6542ms)
✔ action controls do not bypass the shared state module (6.0127ms)
✔ HTTP requests time out with a stable user-facing error (18.0299ms)
✔ demo library actions stay black, explain restrictions, and preserve copy (1.1572ms)
✔ sortable cards protect controls and keep demo cards fixed (1.0358ms)
✔ media import workspace exposes streaming upload, crop controls, and queue polling (1.1099ms)
✔ free framing starts from the complete source and keeps one pixel visible (0.6589ms)
✔ free framing copy is stable and catalogued (0.0881ms)
✔ upload action has visible ordinary-build copy (0.193ms)
✔ media naming happens after analysis and conflicts keep the draft (0.1455ms)
✔ awaiting-settings cards survive polling without hiding server transitions (0.1182ms)
✔ creates a fixed 64x64 RGB scene (1.9085ms)
✔ serializes pixelRgb as base64 and round trips an independent scene (6.1668ms)
✔ moves a valid v1 draft to the stable key before removing exact legacy keys (9.1938ms)
✔ keeps the v1 draft and all legacy keys when stable-key migration cannot write (2.3183ms)
✔ preserves and blocks a future stable draft instead of falling back or writing blank (1.224ms)
✔ preserves and blocks a damaged stable draft (0.4343ms)
✔ does not discard a damaged higher-priority legacy key during fallback migration (1.1675ms)
✔ rejects damaged scene roots while skipping only damaged elements (0.6392ms)
✔ normalizes text fields and creates a centered lowercase ok element (0.2164ms)
✔ migrates the first valid canvas by v3, v2, legacy priority and merges text v1 (8.2449ms)
✔ supports independent add, update, and delete operations for multiple text elements (0.5292ms)
✔ duplicates with a deep copy, new id, 2px offset, and topmost order (0.3276ms)
✔ alpha-composites full RGBA layers in array order without mutating inputs (1.1463ms)
✔ settings brightness explains an active temporary display-test override (5.305ms)
✔ settings exposes full OTA upload progress and service recovery polling (2.9085ms)
✔ settings automatically opens and safely copies a detailed OTA failure log (1.5356ms)
✔ settings exposes a transactional performance-mode switch with the fixed warning (1.3568ms)
✔ settings exposes persisted animation preview concurrency below performance mode (1.3258ms)
✔ template edit baseline distinguishes clean, dirty, and unbound scenes (0.9501ms)
✔ template manager uses a monitor and unified four-row card actions (6.2269ms)
✔ animation editing backs up and restores template edit ownership (1.0747ms)
✔ special editor exposes the agreed modes and guarded editing flow (6.7948ms)
✔ latched WiFi draft state remains dirty until explicitly cleared (1.022ms)
✔ WiFi settings expose independent network and prompt-delay controls (2.1695ms)
✔ workspace order resolves saved ids and appends new registrations (1.0454ms)
✔ workspace order movement is immutable and respects both boundaries (0.2573ms)
✔ drawer exposes one editable list and commits only from the save action (5.2391ms)
ℹ tests 76
ℹ suites 0
ℹ pass 76
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 502.5316