Manual search buckets and attribute chips (#79)
ci / rust (push) Successful in 1m54s
ci / web (push) Successful in 27s
e2e / e2e (push) Successful in 1m21s

This commit was merged in pull request #79.
This commit is contained in:
2026-08-22 22:42:50 +01:00
parent f26f278a75
commit e650a762f9
5 changed files with 991 additions and 14 deletions
+21 -8
View File
@@ -2,13 +2,13 @@
version: 1
slug: "web-src-main-ts"
primary_target: "web/src/main.ts"
related_targets: ["web/index.html","web/src/search.ts","web/src/style.css"]
related_targets: ["web/index.html","web/src/search.ts","web/src/releases.ts","web/src/style.css"]
---
# Surface: unified search (web/src/main.ts, §9.2)
# Surface: unified search + release deck (web/src/main.ts, §9.2 + §9.3)
Mode: Operate. The operator finds or adds a title without knowing which of
the two they are doing.
the two they are doing, and picks a release from decisions, not name dumps.
- Audience: the household operator; desktop mostly, phone sometimes.
- Task: one rail-mounted command input. Typing swaps the chain board for the
@@ -17,10 +17,23 @@ the two they are doing.
engraved micro-label headings, machined rows, chips on the right.
- Add flow: inline panel under a TMDB row — root radio cards (audience name,
policy name, path), main pre-selected, one confirm. Never a separate page.
- Release deck (§9.3, issue #31): a library row opens the buckets view.
ELIGIBLE leads with fixed-width attribute chips in aligned mono columns
(rem-width `.cw-*` classes shared by chips and the column header, so the
pseudo-table survives flex wrapping); WAIVED and REJECTED collapse to
counts behind cyan show/hide toggles. Release name is a secondary
truncated line, full string plus indexer/date/bytes on row expand. Every
waived/rejected row carries a verdict chip naming the rule. Grab is its
own control per row; on a waived row it is "waive + grab" and writes the
per-title override (rule→override mapping in releases.ts — bookkeeping,
never policy; verdicts always come from the API). Esc steps back one
layer: deck → search results → board.
- Manual intake: magnet / .torrent input routes to a MANUAL GRAB panel showing
parsed display name and btih; grab wiring lands with the release buckets
(issue #31/#22), and the panel says so honestly.
parsed display name and btih; magnet grab wiring is issue #22, and the
panel says so honestly.
- Constraints: 250 ms debounce, AbortController cancellation, token-gated CSS,
cyan for interaction only, dead-air rule (no idle animation).
- Unresolved: library rows are informational until the library view (#32)
gives them a destination; TMDB search is movie-only until series land (#39).
cyan for interaction only, dead-air rule (no idle animation), no horizontal
scroll at any viewport (§9.3 acceptance criterion).
- Unresolved: releases land in the persisted store only once the daemon
consumes search commands (#68-adjacent); TMDB search is movie-only until
series land (#39).