Per-shape hide + dimmed shape list in review editor (REQ-185, amended REQ-183)

- ReviewPage: hiddenShapeIds/overriddenShapeIds session Sets, H toggles
  selected/marked shapes, purge effect removed (dimmed rows selectable
  from list), auto-override on draw/assist/copy into hidden class,
  class-eye toggle clears that class's overrides
- ReviewSidebar: all rows listed, dimmed rows get restore eye, header
  count = total shapes
- ShortcutsPanel: H entry
- docs: REQ-183 amended + REQ-185 added; design/ui-spec/tasks synced
This commit is contained in:
asus committed 2026-10-02 13:22:50 +07:00
1 parent 96a00267d9
commit 6a36f102c9
7 files changed
+175 -57

No files matched your search

+18 -12
View File
@@ -1099,6 +1099,7 @@ Handlers are attached in the **capture** phase on `document`, and:
| `T` | track selected shape forward 5 frames | same |
| `1`–`9` | set active class; reclass the selected shape if any | reclass **all marked** shapes |
| `Del` / `Backspace` | delete the selected shape | delete **all marked** shapes (confirmed) |
| `H` | hide/show the selected shape(s); no-op with nothing selected | same |
| `Esc` | cancel the gesture in flight | clear the marked set |
| hold `S` | SAM3 assist mode while held | — |
| `Enter` | apply the exemplar preview (panel open) | — |
@@ -1125,18 +1126,23 @@ network.
- **Eye button (REQ-183)** — first control in the class row, before the frame-clear `×`: a
ghost icon button (`cursor: pointer`, `aria-pressed` bound to the hidden state, title
`Hide "name"` / `Show "name"`), drawing the eye icon while the class is visible and the
slashed eye at 55 % opacity while it is hidden. Hiding drops that class's shapes from the
annotation canvas **and** from *Shapes on this frame* — not selectable, not
marquee-selectable, not deletable while hidden, and any selection or mark on them is
cleared — while the row keeps its real per-frame count (the `×` and the trash still count
every shape). The choice is **session state**: it survives frame changes, resets when the
review page is left, and never touches stored data.
slashed eye at 55 % opacity while it is hidden. Hiding stops drawing that class's shapes on
the annotation canvas — not clickable there, not marquee-selectable — but the shapes stay
listed in *Shapes on this frame*, dimmed (≈45 % opacity), each dimmed row carrying its own
show control (REQ-185), while the class row keeps its real per-frame count (the `×` and
the trash still count every shape). The choice is **session state**: it survives frame
changes, resets when the review page is left, and never touches stored data.
- **Shapes on this frame (N)** — one row per annotation: swatch, class name, and either the
score to 2 dp (auto) or the word `manual`; click selects, trash deletes. When empty:
*"None on this frame — drag to draw a shape."* plus, if the batch has shapes elsewhere, a
*Jump to Frame with Shapes [N]* button.
- **Shortcuts** — a static `<dl>` of the keyboard map. Keep it visible; this is a keyboard-first
screen and the panel is the discovery mechanism.
score to 2 dp (auto) or the word `manual`; click selects, trash deletes. The header count
and the rows cover **every** annotation on the frame, visible or not. A row is dimmed
(≈45 % opacity) when its shape is `H`-hidden or hidden by its class without an override;
a dimmed row keeps its swatch, name and score and gains an eye button (*Show shape*, the
REQ-185 eye) that first un-hides an `H`-hidden shape and otherwise overrides the class
hide; click still selects it and the trash still deletes it. Empty means the frame has
**zero shapes**, not zero visible ones: *"None on this frame — drag to draw a shape."*
plus, if the batch has shapes elsewhere, a *Jump to Frame with Shapes [N]* button.
- **Shortcuts** — a static `<dl>` of the keyboard map (it also lists `H`). Keep it visible;
this is a keyboard-first screen and the panel is the discovery mechanism.
---
@@ -1516,7 +1522,7 @@ Shortcuts).
Overlap/NMS, Min box size, Max shapes), lalu baru **Apply** yang menulis. Shift-drag = contoh
negatif ("bukan ini"). Panel filter duduk di **sidebar**, bukan menutupi frame.
- Tahan `S` = SAM3 click-assist (satu box → satu shape).
- Keyboard-first: `V ← → A X U N C T 1–9 Del Esc Enter`. Semua aksi punya shortcut; panel
- Keyboard-first: `V ← → A X U N C T 1–9 Del H Esc Enter`. Semua aksi punya shortcut; panel
Shortcuts selalu terlihat. Ctrl/Cmd/Alt **tidak pernah** di-intercept; mengetik di input tidak
memicu shortcut.
- Approve/Reject langsung pindah frame dan meng-update status lokal sebelum request selesai.