You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adding icon action to the query in Library.
Each Library row should expose a "plus" icon before the pencil. Clicking on it opens a chooser. The chooser contains:
Prose about adding a query to the dashboard
Dashboard selection (one of the opened)
Add and Cancel buttons.
The chooser calls the same application commands as drag/drop and produces
identical data — that equivalence is the whole point, and is what the tests
must assert.
src/dashboard/application/library-assignment.ts — the pure transforms copyLibraryQueryToPanel and the LibraryAssignmentAbort vocabulary.
src/application/library-assignment-service.ts — assignLibraryQueryToPanel , including the in-transform dirty-variable-tab gate and libraryAssignmentMessage.
Call those. Do not reimplement the semantics, and do not let the chooser reach mutateWorkspace directly.
Implementation notes
A new src/ui/library-assign-menu.ts built on ui/menu.ts's openMenu.
Two stages, both anchored on the row's trigger: dashboards → . menu.ts:125 already closes stage 1
before the callback runs, so there is no reopen race.
The affordance on the Library row (a ⋯ kebab beside star/edit/delete, an
inline +, or a kebab that absorbs edit/delete) is an open design decision —
the row's existing controls are saved-history.ts:216-248.
Add src/ui/library-assign-menu.ts to the source list in tests/unit/typography-contract.test.js (~:298-320). A new markup-bearing
UI module that is not on that list escapes the "every rendered class has a CSS
rule" gate and can ship as unstyled user-agent chrome — which is precisely the
failure that test's header comment describes.
Acceptance criteria
Every Library row exposes Add to dashboard…, reachable by keyboard alone.
The chooser offers Dashboard → Panel
Panel assignment through the chooser produce candidates
byte-identical to the equivalent drag, asserted against the same service.
Full keyboard operation: open, arrow between rows, Escape closes, focus
returns to the trigger.
src/ui/library-assign-menu.ts is on the typography-contract source list.
Goal
Adding icon action to the query in Library.
Each Library row should expose a "plus" icon before the pencil. Clicking on it opens a chooser. The chooser contains:
The chooser calls the same application commands as drag/drop and produces
identical data — that equivalence is the whole point, and is what the tests
must assert.
Adding query to Variables is not supported here.
What #428 already built for this
The command layer is done and needs no change. This issue is UI only:
src/core/library-drag.ts—LibraryQueryDragPayload,LibraryDropTarget.src/dashboard/application/library-assignment.ts— the pure transformscopyLibraryQueryToPaneland theLibraryAssignmentAbortvocabulary.src/application/library-assignment-service.ts—assignLibraryQueryToPanel, including the in-transform dirty-variable-tab gate andlibraryAssignmentMessage.Call those. Do not reimplement the semantics, and do not let the chooser reach
mutateWorkspacedirectly.Implementation notes
src/ui/library-assign-menu.tsbuilt onui/menu.ts'sopenMenu.Two stages, both anchored on the row's trigger: dashboards → .
menu.ts:125already closes stage 1before the callback runs, so there is no reopen race.
⋯kebab beside star/edit/delete, aninline
+, or a kebab that absorbs edit/delete) is an open design decision —the row's existing controls are
saved-history.ts:216-248.src/ui/library-assign-menu.tsto the source list intests/unit/typography-contract.test.js(~:298-320). A new markup-bearingUI module that is not on that list escapes the "every rendered class has a CSS
rule" gate and can ship as unstyled user-agent chrome — which is precisely the
failure that test's header comment describes.
Acceptance criteria
byte-identical to the equivalent drag, asserted against the same service.
returns to the trigger.
src/ui/library-assign-menu.tsis on the typography-contract source list.Non-goals
picker, target-panel picker, default picker, selection-mode picker, or
provider mapping (Add Library drag assignment to Dashboard panels and variables #428 non-goal, still binding).