cursedbelt 5.66.0 → 5.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react/Toast.d.ts.map +1 -1
- package/dist/react/Toast.js +4 -1
- package/dist/react/Toast.js.map +1 -1
- package/dist/react/canvas-hud/CanvasToolbar.d.ts +67 -0
- package/dist/react/canvas-hud/CanvasToolbar.d.ts.map +1 -0
- package/dist/react/canvas-hud/CanvasToolbar.js +84 -0
- package/dist/react/canvas-hud/CanvasToolbar.js.map +1 -0
- package/dist/react/canvas-hud/index.d.ts +2 -0
- package/dist/react/canvas-hud/index.d.ts.map +1 -1
- package/dist/react/canvas-hud/index.js +1 -0
- package/dist/react/canvas-hud/index.js.map +1 -1
- package/dist/react/components/Button.d.ts.map +1 -1
- package/dist/react/components/Button.js +4 -8
- package/dist/react/components/Button.js.map +1 -1
- package/dist/react/components/CardTapTarget.d.ts.map +1 -1
- package/dist/react/components/CardTapTarget.js +3 -1
- package/dist/react/components/CardTapTarget.js.map +1 -1
- package/dist/react/components/ChipFilterStrip.d.ts.map +1 -1
- package/dist/react/components/ChipFilterStrip.js +2 -1
- package/dist/react/components/ChipFilterStrip.js.map +1 -1
- package/dist/react/components/ConfirmDialog.d.ts.map +1 -1
- package/dist/react/components/ConfirmDialog.js +2 -1
- package/dist/react/components/ConfirmDialog.js.map +1 -1
- package/dist/react/components/Drawer.d.ts.map +1 -1
- package/dist/react/components/Drawer.js +2 -1
- package/dist/react/components/Drawer.js.map +1 -1
- package/dist/react/components/EntityCard.d.ts +35 -0
- package/dist/react/components/EntityCard.d.ts.map +1 -0
- package/dist/react/components/EntityCard.js +18 -0
- package/dist/react/components/EntityCard.js.map +1 -0
- package/dist/react/components/Lightbox.d.ts.map +1 -1
- package/dist/react/components/Lightbox.js +2 -1
- package/dist/react/components/Lightbox.js.map +1 -1
- package/dist/react/components/Modal.d.ts.map +1 -1
- package/dist/react/components/Modal.js +5 -3
- package/dist/react/components/Modal.js.map +1 -1
- package/dist/react/components/PromptDialog.d.ts.map +1 -1
- package/dist/react/components/PromptDialog.js +2 -1
- package/dist/react/components/PromptDialog.js.map +1 -1
- package/dist/react/components/SegmentedControl.d.ts.map +1 -1
- package/dist/react/components/SegmentedControl.js +2 -1
- package/dist/react/components/SegmentedControl.js.map +1 -1
- package/dist/react/components/Tabs.d.ts.map +1 -1
- package/dist/react/components/Tabs.js +68 -15
- package/dist/react/components/Tabs.js.map +1 -1
- package/dist/react/components/TooltipImpl.d.ts.map +1 -1
- package/dist/react/components/TooltipImpl.js +2 -1
- package/dist/react/components/TooltipImpl.js.map +1 -1
- package/dist/react/components/dialog.d.ts.map +1 -1
- package/dist/react/components/dialog.js +2 -1
- package/dist/react/components/dialog.js.map +1 -1
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/layoutEngine/LayoutConfigDialog.d.ts.map +1 -1
- package/dist/react/layoutEngine/LayoutConfigDialog.js +3 -1
- package/dist/react/layoutEngine/LayoutConfigDialog.js.map +1 -1
- package/dist/react/lib/floatingStyles.d.ts +10 -2
- package/dist/react/lib/floatingStyles.d.ts.map +1 -1
- package/dist/react/lib/floatingStyles.js +12 -7
- package/dist/react/lib/floatingStyles.js.map +1 -1
- package/dist/react/lib/overlayMotion.d.ts +37 -0
- package/dist/react/lib/overlayMotion.d.ts.map +1 -0
- package/dist/react/lib/overlayMotion.js +50 -0
- package/dist/react/lib/overlayMotion.js.map +1 -0
- package/dist/react/lib/press.d.ts +37 -0
- package/dist/react/lib/press.d.ts.map +1 -0
- package/dist/react/lib/press.js +41 -0
- package/dist/react/lib/press.js.map +1 -0
- package/dist/react/nav/PlaceBar.d.ts.map +1 -1
- package/dist/react/nav/PlaceBar.js +4 -3
- package/dist/react/nav/PlaceBar.js.map +1 -1
- package/dist/react/palette/CommandPalette.d.ts.map +1 -1
- package/dist/react/palette/CommandPalette.js +3 -2
- package/dist/react/palette/CommandPalette.js.map +1 -1
- package/dist/styles-areas/analytics.css +2 -2
- package/dist/styles-areas/canvas-hud.css +6 -4
- package/dist/styles-areas/core.css +63 -56
- package/dist/styles-areas/data-table.css +3 -3
- package/dist/styles-areas/fields.css +2 -2
- package/dist/styles-areas/filter-rail.css +5 -5
- package/dist/styles-areas/media.css +4 -4
- package/dist/styles-areas/nav.css +18 -18
- package/dist/styles-areas/notifications.css +3 -3
- package/dist/styles-areas/overlays.css +2 -2
- package/dist/styles-areas/palette.css +4 -5
- package/dist/styles-areas/place-bar.css +5 -5
- package/dist/styles-areas/sharing.css +4 -4
- package/dist/styles-areas/test-report.css +4 -4
- package/dist/styles-areas/wizard.css +2 -2
- package/dist/styles-areas/workbench.css +2 -2
- package/dist/styles-utilities.css +101 -22
- package/dist/theme.css +44 -0
- package/package.json +1 -1
- package/scripts/styleAreas.ts +1 -0
- package/src/react/Toast.tsx +4 -1
- package/src/react/canvas-hud/CanvasToolbar.tsx +177 -0
- package/src/react/canvas-hud/index.ts +2 -0
- package/src/react/components/Button.spec.tsx +3 -2
- package/src/react/components/Button.tsx +4 -8
- package/src/react/components/CardTapTarget.tsx +3 -1
- package/src/react/components/ChipFilterStrip.tsx +3 -1
- package/src/react/components/ConfirmDialog.tsx +2 -2
- package/src/react/components/Drawer.tsx +2 -0
- package/src/react/components/EntityCard.tsx +76 -0
- package/src/react/components/Lightbox.tsx +2 -2
- package/src/react/components/Modal.tsx +5 -4
- package/src/react/components/PromptDialog.tsx +2 -2
- package/src/react/components/SegmentedControl.tsx +3 -1
- package/src/react/components/Tabs.tsx +78 -5
- package/src/react/components/TooltipImpl.tsx +2 -0
- package/src/react/components/dialog.tsx +2 -2
- package/src/react/index.ts +1 -0
- package/src/react/layoutEngine/LayoutConfigDialog.tsx +3 -1
- package/src/react/lib/floatingStyles.ts +12 -8
- package/src/react/lib/overlayMotion.ts +58 -0
- package/src/react/lib/press.ts +43 -0
- package/src/react/nav/PlaceBar.tsx +7 -3
- package/src/react/palette/CommandPalette.tsx +3 -2
- package/src/styles-areas/analytics.css +2 -2
- package/src/styles-areas/canvas-hud.css +6 -4
- package/src/styles-areas/core.css +63 -56
- package/src/styles-areas/data-table.css +3 -3
- package/src/styles-areas/fields.css +2 -2
- package/src/styles-areas/filter-rail.css +5 -5
- package/src/styles-areas/media.css +4 -4
- package/src/styles-areas/nav.css +18 -18
- package/src/styles-areas/notifications.css +3 -3
- package/src/styles-areas/overlays.css +2 -2
- package/src/styles-areas/palette.css +4 -5
- package/src/styles-areas/place-bar.css +5 -5
- package/src/styles-areas/sharing.css +4 -4
- package/src/styles-areas/test-report.css +4 -4
- package/src/styles-areas/wizard.css +2 -2
- package/src/styles-areas/workbench.css +2 -2
- package/src/styles-utilities.css +101 -22
- package/src/theme.css +44 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/react/Toast.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG5F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAmB5D;;;GAGG;AACH,iBAAS,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,EAAE,aAAa,mBAEjF;AAED,4EAA4E;AAC5E,eAAO,MAAM,KAAK,EAAE,OAAO,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,SAAS,CAAA;CAIhE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AAwBtE,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,+
|
|
1
|
+
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/react/Toast.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG5F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAmB5D;;;GAGG;AACH,iBAAS,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,EAAE,aAAa,mBAEjF;AAED,4EAA4E;AAC5E,eAAO,MAAM,KAAK,EAAE,OAAO,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,SAAS,CAAA;CAIhE,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AAwBtE,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,+BA8BxD"}
|
package/dist/react/Toast.js
CHANGED
|
@@ -59,7 +59,10 @@ const DESKTOP_OFFSET = { bottom: 'calc(var(--cb-bottom-chrome-h, 0px) + 24px)',
|
|
|
59
59
|
export function Toaster({ style, ...props }) {
|
|
60
60
|
return (_jsx(SonnerToaster, { style: { ...TOKEN_VARS, ...style }, position: 'bottom-right', offset: DESKTOP_OFFSET, mobileOffset: BOTTOM_OFFSET, closeButton: true, toastOptions: {
|
|
61
61
|
classNames: {
|
|
62
|
-
|
|
62
|
+
// The overlay curve and the slow speed (`lib/overlayMotion.ts`, forge task 2912) in place
|
|
63
|
+
// of sonner's 400ms `ease`. `!` because sonner's own `[data-sonner-toast]` rule sets the
|
|
64
|
+
// transition shorthand after this stylesheet; its reduced-motion rule still turns it off.
|
|
65
|
+
toast: 'rounded-lg border border-border bg-popover text-foreground shadow-overlay duration-[var(--duration-slow)]! ease-[var(--ease-out)]!',
|
|
63
66
|
title: 'text-sm font-medium',
|
|
64
67
|
// `!` because sonner colours these two with element rules of its own (`#3f3f3f` for a
|
|
65
68
|
// description, its grey scale for the close button) that no variable reaches.
|
package/dist/react/Toast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../src/react/Toast.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAsB,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;;GAKG;AACH,SAAS,UAAU,CAAC,OAAqB,EAAE,IAAoB;IAC7D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,WAAW,CACT,4BAA4B,EAC5B,yHAAyH;YACvH,6FAA6F,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,OAAqB,EAAE,MAAkB,EAAE,IAAoB;IAChF,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACvG,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,KAAK,GAAoD,MAAM,CAAC,MAAM,CACjF,CAAC,GAAG,IAAoC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EACjE,WAAW,EACX,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CACvC,CAAC;AAIF;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG;IACjB,aAAa,EAAE,gBAAgB;IAC/B,iBAAiB,EAAE,eAAe;IAClC,eAAe,EAAE,2BAA2B;CACtB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,aAAa,GAAG,EAAE,MAAM,EAAE,6CAA6C,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/F,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE,6CAA6C,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAEhG,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAgB;IACvD,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE,EAClC,QAAQ,EAAC,cAAc,EACvB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,aAAa,EAC3B,WAAW,QACX,YAAY,EAAE;YACZ,UAAU,EAAE;gBACV,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../src/react/Toast.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAsB,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;;GAKG;AACH,SAAS,UAAU,CAAC,OAAqB,EAAE,IAAoB;IAC7D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,WAAW,CACT,4BAA4B,EAC5B,yHAAyH;YACvH,6FAA6F,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,OAAqB,EAAE,MAAkB,EAAE,IAAoB;IAChF,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACvG,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,KAAK,GAAoD,MAAM,CAAC,MAAM,CACjF,CAAC,GAAG,IAAoC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EACjE,WAAW,EACX,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CACvC,CAAC;AAIF;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG;IACjB,aAAa,EAAE,gBAAgB;IAC/B,iBAAiB,EAAE,eAAe;IAClC,eAAe,EAAE,2BAA2B;CACtB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,aAAa,GAAG,EAAE,MAAM,EAAE,6CAA6C,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/F,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE,6CAA6C,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAEhG,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAgB;IACvD,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE,EAClC,QAAQ,EAAC,cAAc,EACvB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,aAAa,EAC3B,WAAW,QACX,YAAY,EAAE;YACZ,UAAU,EAAE;gBACV,0FAA0F;gBAC1F,yFAAyF;gBACzF,0FAA0F;gBAC1F,KAAK,EAAE,oIAAoI;gBAC3I,KAAK,EAAE,qBAAqB;gBAC5B,sFAAsF;gBACtF,8EAA8E;gBAC9E,WAAW,EAAE,gCAAgC;gBAC7C,YAAY,EAAE,yDAAyD;gBACvE,YAAY,EAAE,uDAAuD;gBACrE,WAAW,EAAE,0EAA0E;gBACvF,KAAK,EAAE,wDAAwD;gBAC/D,OAAO,EAAE,gDAAgD;gBACzD,OAAO,EAAE,gDAAgD;gBACzD,IAAI,EAAE,8CAA8C;aACrD;SACF,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { MouseEvent, ReactNode } from 'react';
|
|
2
|
+
export interface CanvasToolbarProps {
|
|
3
|
+
/** The left half: what the canvas shows (a reach, a layer switch). Hidden while the bar is
|
|
4
|
+
* under 768px wide when `compactFilters` is given — five stops beside the tools would scroll out of a thumb's sight. */
|
|
5
|
+
filters?: ReactNode;
|
|
6
|
+
/** The same choice as a phone wants it, usually the OS picker (`NativeSelect`): shown only while
|
|
7
|
+
* the bar is under 768px wide, on row two beside the legend. */
|
|
8
|
+
compactFilters?: ReactNode;
|
|
9
|
+
/** A key or chip strip (houses, layers, tags): ONE line that scrolls inside itself, its ends
|
|
10
|
+
* fading where there is more. Beside the filters at every width; never under 10rem. */
|
|
11
|
+
legend?: ReactNode;
|
|
12
|
+
/** Names the legend strip for a screen reader. */
|
|
13
|
+
legendLabel?: string;
|
|
14
|
+
/** The right half: the find box and the views. Never shrinks — the legend does. */
|
|
15
|
+
tools?: ReactNode;
|
|
16
|
+
/**
|
|
17
|
+
* Where the keyboard goes after a control in the bar acts: a POINTER click on a button, tab or
|
|
18
|
+
* radio, or Escape from one. Default: the `[role="application"]` beside the bar (the canvas the
|
|
19
|
+
* bar sits above). `false` keeps focus on the control, the browser's default.
|
|
20
|
+
*/
|
|
21
|
+
returnFocus?: (() => void) | false;
|
|
22
|
+
'aria-label'?: string;
|
|
23
|
+
className?: string;
|
|
24
|
+
/** Rides on the bar's root, for an app's own selectors (`data-view`, …). */
|
|
25
|
+
[data: `data-${string}`]: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Whether a POINTER click landed on a control that should hand the keyboard back to the canvas
|
|
29
|
+
* once it has acted — a filter stop, a chip, a HUD button. A field keeps focus (it is typed into);
|
|
30
|
+
* a click the keyboard made (`detail` 0 — Enter or Space on a focused button) is a reader moving
|
|
31
|
+
* by Tab, whose focus stays where they put it.
|
|
32
|
+
*
|
|
33
|
+
* 🔴 The failure this exists for (family, 2026-10-06): the reach stops are a tab list, and a click
|
|
34
|
+
* leaves focus on the stop. Every arrow after that went to the stop — ← and → re-rooted and
|
|
35
|
+
* re-packed the tree — while the reader believed they were walking the family. Figma's rule: a
|
|
36
|
+
* toolbar click acts and the canvas keeps the keyboard.
|
|
37
|
+
*/
|
|
38
|
+
export declare function controlReleasesFocus(event: Pick<MouseEvent, 'target' | 'currentTarget' | 'detail'>): boolean;
|
|
39
|
+
/** A key on a field is the field's whole language — Escape there is not the way back to the canvas. */
|
|
40
|
+
export declare const isTextControl: (target: EventTarget | null) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The toolbar a canvas wears ABOVE itself, in flow — filters left, find and views right, a legend
|
|
43
|
+
* strip that scrolls inside itself, the OS picker in place of the filters below 768px.
|
|
44
|
+
*
|
|
45
|
+
* 🔴 ONE BAR, IN FLOW — never five overlays over the drawing. family's tree floated its reach
|
|
46
|
+
* buttons, house legend, find box and view switch over the canvas's top edge until 2026-10-06, and
|
|
47
|
+
* their collisions were fought width by width while cards were drawn under them at every width. A
|
|
48
|
+
* bar above the canvas, like Figma's and Linear's, cannot collide with anything by construction:
|
|
49
|
+
* the drawing starts where the bar ends. Built from family's `TreeBar` (forge task 2917) so
|
|
50
|
+
* patterns' and desk's boards never hand-roll a second one. Not `ListToolbar`: that one is a
|
|
51
|
+
* search box and a chip filter above a list; a canvas's bar carries its own reach, a legend of
|
|
52
|
+
* anything, and gives the keyboard back to the drawing.
|
|
53
|
+
*
|
|
54
|
+
* Narrow (the BAR under 768px — a container query, so a split pane counts): row one is the
|
|
55
|
+
* `tools`, right-aligned; row two is what the canvas shows — `compactFilters` (or `filters`) and the
|
|
56
|
+
* legend strip beside it. A phone's find button and four views do not leave a picker room beside
|
|
57
|
+
* them (family at 390: 300px of tools in a 366px row), and the picker and the legend are the same
|
|
58
|
+
* question — who is drawn — so they share a row. Wide: one line when the filters, a
|
|
59
|
+
* 10rem legend and the tools fit; when they do not (a 900px window), the tools ride down to row two
|
|
60
|
+
* as a group, right-aligned, rather than the filters being cut — the stops never shrink on a wide
|
|
61
|
+
* bar. Two rows at most at every width: the legend scrolls rather than wrapping.
|
|
62
|
+
*
|
|
63
|
+
* The bar hands the keyboard back to the canvas after a control acts (`returnFocus`), because a
|
|
64
|
+
* bar in flow sits OUTSIDE the canvas, so the canvas's own hand-back never sees its clicks.
|
|
65
|
+
*/
|
|
66
|
+
export declare function CanvasToolbar({ filters, compactFilters, legend, legendLabel, tools, returnFocus, 'aria-label': ariaLabel, className, ...data }: CanvasToolbarProps): import("react").JSX.Element;
|
|
67
|
+
//# sourceMappingURL=CanvasToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasToolbar.d.ts","sourceRoot":"","sources":["../../../src/react/canvas-hud/CanvasToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlE,MAAM,WAAW,kBAAkB;IACjC;6HACyH;IACzH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;qEACiE;IACjE,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B;4FACwF;IACxF,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,CAAC,IAAI,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,eAAe,GAAG,QAAQ,CAAC,GAAG,OAAO,CAQ5G;AAED,uGAAuG;AACvG,eAAO,MAAM,aAAa,GAAI,QAAQ,WAAW,GAAG,IAAI,KAAG,OACmE,CAAC;AAM/H;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,MAAM,EACN,WAAW,EACX,KAAK,EACL,WAAW,EACX,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,kBAAkB,+BAkFpB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ScrollArea } from '../components/ScrollArea.js';
|
|
3
|
+
import { cn } from '../lib/cn.js';
|
|
4
|
+
/**
|
|
5
|
+
* Whether a POINTER click landed on a control that should hand the keyboard back to the canvas
|
|
6
|
+
* once it has acted — a filter stop, a chip, a HUD button. A field keeps focus (it is typed into);
|
|
7
|
+
* a click the keyboard made (`detail` 0 — Enter or Space on a focused button) is a reader moving
|
|
8
|
+
* by Tab, whose focus stays where they put it.
|
|
9
|
+
*
|
|
10
|
+
* 🔴 The failure this exists for (family, 2026-10-06): the reach stops are a tab list, and a click
|
|
11
|
+
* leaves focus on the stop. Every arrow after that went to the stop — ← and → re-rooted and
|
|
12
|
+
* re-packed the tree — while the reader believed they were walking the family. Figma's rule: a
|
|
13
|
+
* toolbar click acts and the canvas keeps the keyboard.
|
|
14
|
+
*/
|
|
15
|
+
export function controlReleasesFocus(event) {
|
|
16
|
+
if (event.detail === 0)
|
|
17
|
+
return false;
|
|
18
|
+
const target = event.target;
|
|
19
|
+
if (!(target instanceof Element) || target === event.currentTarget)
|
|
20
|
+
return false;
|
|
21
|
+
if (target.closest("input, select, textarea, [contenteditable='true'], [role='combobox'], [role='listbox'], [role='menu']")) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return target.closest("button, [role='tab'], [role='radio']") !== null;
|
|
25
|
+
}
|
|
26
|
+
/** A key on a field is the field's whole language — Escape there is not the way back to the canvas. */
|
|
27
|
+
export const isTextControl = (target) => target instanceof Element && target.closest("input, select, textarea, [contenteditable='true'], [role='combobox']") !== null;
|
|
28
|
+
/** The canvas drawn under a bar — the `application` in the box the bar shares with it. */
|
|
29
|
+
const canvasBeside = (bar) => bar.parentElement?.querySelector("[role='application']") ?? null;
|
|
30
|
+
/**
|
|
31
|
+
* The toolbar a canvas wears ABOVE itself, in flow — filters left, find and views right, a legend
|
|
32
|
+
* strip that scrolls inside itself, the OS picker in place of the filters below 768px.
|
|
33
|
+
*
|
|
34
|
+
* 🔴 ONE BAR, IN FLOW — never five overlays over the drawing. family's tree floated its reach
|
|
35
|
+
* buttons, house legend, find box and view switch over the canvas's top edge until 2026-10-06, and
|
|
36
|
+
* their collisions were fought width by width while cards were drawn under them at every width. A
|
|
37
|
+
* bar above the canvas, like Figma's and Linear's, cannot collide with anything by construction:
|
|
38
|
+
* the drawing starts where the bar ends. Built from family's `TreeBar` (forge task 2917) so
|
|
39
|
+
* patterns' and desk's boards never hand-roll a second one. Not `ListToolbar`: that one is a
|
|
40
|
+
* search box and a chip filter above a list; a canvas's bar carries its own reach, a legend of
|
|
41
|
+
* anything, and gives the keyboard back to the drawing.
|
|
42
|
+
*
|
|
43
|
+
* Narrow (the BAR under 768px — a container query, so a split pane counts): row one is the
|
|
44
|
+
* `tools`, right-aligned; row two is what the canvas shows — `compactFilters` (or `filters`) and the
|
|
45
|
+
* legend strip beside it. A phone's find button and four views do not leave a picker room beside
|
|
46
|
+
* them (family at 390: 300px of tools in a 366px row), and the picker and the legend are the same
|
|
47
|
+
* question — who is drawn — so they share a row. Wide: one line when the filters, a
|
|
48
|
+
* 10rem legend and the tools fit; when they do not (a 900px window), the tools ride down to row two
|
|
49
|
+
* as a group, right-aligned, rather than the filters being cut — the stops never shrink on a wide
|
|
50
|
+
* bar. Two rows at most at every width: the legend scrolls rather than wrapping.
|
|
51
|
+
*
|
|
52
|
+
* The bar hands the keyboard back to the canvas after a control acts (`returnFocus`), because a
|
|
53
|
+
* bar in flow sits OUTSIDE the canvas, so the canvas's own hand-back never sees its clicks.
|
|
54
|
+
*/
|
|
55
|
+
export function CanvasToolbar({ filters, compactFilters, legend, legendLabel, tools, returnFocus, 'aria-label': ariaLabel, className, ...data }) {
|
|
56
|
+
const giveBack = (bar) => {
|
|
57
|
+
if (returnFocus === false)
|
|
58
|
+
return false;
|
|
59
|
+
if (returnFocus) {
|
|
60
|
+
returnFocus();
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
const canvas = canvasBeside(bar);
|
|
64
|
+
canvas?.focus({ preventScroll: true });
|
|
65
|
+
return canvas !== null;
|
|
66
|
+
};
|
|
67
|
+
const onClick = (event) => {
|
|
68
|
+
if (controlReleasesFocus(event))
|
|
69
|
+
giveBack(event.currentTarget);
|
|
70
|
+
};
|
|
71
|
+
const onKeyDown = (event) => {
|
|
72
|
+
if (event.key !== 'Escape' || event.target === event.currentTarget || isTextControl(event.target))
|
|
73
|
+
return;
|
|
74
|
+
if (giveBack(event.currentTarget))
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
};
|
|
77
|
+
return (_jsx("div", { ...data, "data-slot": 'canvas-toolbar', role: 'group', "aria-label": ariaLabel, onClick: onClick, onKeyDown: onKeyDown,
|
|
78
|
+
// `@container`: the bar answers to ITS width, not the window's — a canvas in a split pane
|
|
79
|
+
// or a demo column is a phone-width bar on a desk-width screen.
|
|
80
|
+
className: cn('@container border-b border-border bg-card', className), children: _jsxs("div", { className: 'flex flex-wrap items-center gap-x-3 gap-y-2 px-3 py-2', children: [filters ? (_jsx("div", { "data-slot": 'canvas-toolbar-filters', className: cn('order-2 min-w-0 items-center gap-2 @3xl:order-none @3xl:shrink-0', compactFilters ? 'hidden @3xl:flex' : 'flex'), children: filters })) : null, compactFilters ? (_jsx("div", { "data-slot": 'canvas-toolbar-compact-filters', className: 'order-2 flex min-w-26 max-w-48 flex-1 items-center @3xl:hidden [&>*]:w-full [&_select]:w-full', children: compactFilters })) : null, legend ? (_jsx(ScrollArea, { axis: 'x', space: 'none', safeArea: false, fade: true, role: 'group', "aria-label": legendLabel, "data-slot": 'canvas-toolbar-legend', className: cn('order-3 flex min-w-40 basis-0 items-center gap-1 px-0.5 @3xl:order-none',
|
|
81
|
+
// The strip's own scrollbar is hidden; its fading ends are the "there is more" cue.
|
|
82
|
+
'[scrollbar-width:none] [&::-webkit-scrollbar]:hidden'), children: legend })) : null, tools ? (_jsx("div", { "data-slot": 'canvas-toolbar-tools', className: 'order-1 ml-auto flex flex-none basis-full items-center justify-end gap-2 @3xl:order-none @3xl:basis-auto', children: tools })) : null] }) }));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=CanvasToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasToolbar.js","sourceRoot":"","sources":["../../../src/react/canvas-hud/CanvasToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ export type { CanvasNodeMenuItem, CanvasNodeMenuProps, CanvasNodeMenuSection } f
|
|
|
4
4
|
export { CanvasNodeMenu } from './CanvasNodeMenu.js';
|
|
5
5
|
export type { CanvasSearchFieldProps } from './CanvasSearchField.js';
|
|
6
6
|
export { CanvasSearchField } from './CanvasSearchField.js';
|
|
7
|
+
export type { CanvasToolbarProps } from './CanvasToolbar.js';
|
|
8
|
+
export { CanvasToolbar, controlReleasesFocus, isTextControl } from './CanvasToolbar.js';
|
|
7
9
|
export type { CanvasZoomHintProps, HudButtonProps, HudZoomControlsProps } from './HudControls.js';
|
|
8
10
|
export { CanvasZoomHint, HudButton, HudZoomControls } from './HudControls.js';
|
|
9
11
|
export type { CanvasWheelMode, CanvasWheelOptions } from './useCanvasWheel.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/canvas-hud/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAClF,YAAY,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,MAAM,GACP,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/canvas-hud/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxF,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAClF,YAAY,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,MAAM,GACP,MAAM,eAAe,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { CanvasMinimap } from './CanvasMinimap.js';
|
|
2
2
|
export { CanvasNodeMenu } from './CanvasNodeMenu.js';
|
|
3
3
|
export { CanvasSearchField } from './CanvasSearchField.js';
|
|
4
|
+
export { CanvasToolbar, controlReleasesFocus, isTextControl } from './CanvasToolbar.js';
|
|
4
5
|
export { CanvasZoomHint, HudButton, HudZoomControls } from './HudControls.js';
|
|
5
6
|
export { readWheel, useCanvasWheel, useLevelOfDetail } from './useCanvasWheel.js';
|
|
6
7
|
export { centerView, clampScale, fitScale, fitView, LEVEL_OF_DETAIL, levelOfDetail, visibleBounds, wheelZoomFactor, zoomAt, } from './viewport.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/canvas-hud/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUlF,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,MAAM,GACP,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/canvas-hud/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUlF,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,MAAM,GACP,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,GAAG,EAGT,MAAM,OAAO,CAAC;AAEf,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,GAAG,EAGT,MAAM,OAAO,CAAC;AAEf,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKlF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc;;;8EA6G1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxF,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAElF,MAAM,WAAW,WACf,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC;;;8CAG0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;6EACyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;;;eAQW;IACX,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9C,8EAA8E;IAC9E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;;8DAI0D;IAC1D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;yFACqF;IACrF,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC;gFAC4E;IAC5E,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC;;;;;;;;;;;;;OAaG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAcD,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAe,EACf,OAAe,EACf,QAAQ,EACR,OAAO,EACP,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAsB,EACtB,YAAmB,EACnB,OAAc,EACd,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,GAAG,KAAK,EACT,EAAE,WAAW,+BA+Gb"}
|
|
@@ -7,6 +7,7 @@ import { cn } from '../lib/cn.js';
|
|
|
7
7
|
import { Tooltip } from './Tooltip.js';
|
|
8
8
|
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
9
9
|
import { RAW_BUTTON } from '../lib/cn.js';
|
|
10
|
+
import { PRESS } from '../lib/press.js';
|
|
10
11
|
/**
|
|
11
12
|
* The single source of truth for every interactive element that triggers an action.
|
|
12
13
|
* The intent variants implement the 3-weight action taxonomy (STANDARDS.md §4c:
|
|
@@ -23,14 +24,9 @@ import { RAW_BUTTON } from '../lib/cn.js';
|
|
|
23
24
|
*/
|
|
24
25
|
export const buttonVariants = cva([
|
|
25
26
|
'relative inline-flex items-center justify-center gap-2 rounded-md font-medium',
|
|
26
|
-
// 🔴 TACTILE (forge task family-app-ux-overhaul, 2026-10-06): a press is answered —
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
// finger reads as dead on a phone. `transform` is in the transition list so the dip and
|
|
30
|
-
// its release both ease rather than snap. Reduced motion turns both off; a refused press
|
|
31
|
-
// (`aria-disabled`) does not dip, because nothing happened.
|
|
32
|
-
'transition-[color,background-color,border-color,box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out)]',
|
|
33
|
-
'active:scale-[var(--press-scale)] aria-disabled:active:scale-100 motion-reduce:transition-none motion-reduce:active:scale-100',
|
|
27
|
+
// 🔴 TACTILE (forge task family-app-ux-overhaul, 2026-10-06): a press is answered — eased
|
|
28
|
+
// colours and a `--press-scale` dip while held. The contract and who is exempt: `lib/press.ts`.
|
|
29
|
+
PRESS,
|
|
34
30
|
TAP_TARGET_HEIGHT, // ≥44px touch target on coarse pointers
|
|
35
31
|
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background',
|
|
36
32
|
// Disabled = muted surface + faded + inert (never color-alone): clearly off, not a low-contrast haze.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAML,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,OAAO,EAA6C,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/react/components/Button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardTapTarget.d.ts","sourceRoot":"","sources":["../../../src/react/components/CardTapTarget.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CardTapTarget.d.ts","sourceRoot":"","sources":["../../../src/react/components/CardTapTarget.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAM/C,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;8BAC0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,GAAI,0DAM3B,kBAAkB,gCA8BpB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useRef } from 'react';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
|
+
import { PRESS_SURFACE } from '../lib/press.js';
|
|
4
5
|
import { TAP_TARGET_HEIGHT } from '../lib/tapTarget.js';
|
|
5
6
|
import { hasSelectionWithin } from '../lib/textSelection.js';
|
|
6
7
|
/**
|
|
@@ -39,6 +40,7 @@ export const CardTapTarget = ({ onClick, className, children, selectionSafe = tr
|
|
|
39
40
|
},
|
|
40
41
|
// `TAP_TARGET_HEIGHT`: a tappable row on a phone answers to a thumb — family's 35px value
|
|
41
42
|
// rows (`.ft-row`, forge task 2913) were under the 44pt floor. DESIGN.md §5.
|
|
42
|
-
|
|
43
|
+
// `PRESS_SURFACE`: the card answers a press with a dip sized for a surface (forge task 2912).
|
|
44
|
+
className: cn('cursor-pointer touch-manipulation text-left', TAP_TARGET_HEIGHT, PRESS_SURFACE, className), ...rest, children: children }));
|
|
43
45
|
};
|
|
44
46
|
//# sourceMappingURL=CardTapTarget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardTapTarget.js","sourceRoot":"","sources":["../../../src/react/components/CardTapTarget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAqB7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,GAAG,IAAI,EACY,EAAE,EAAE;IACvB,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,4EAA4E;QAC5E,+EAA+E;QAC/E,IAAI,aAAa,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QAC7D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,OAAO,CAEL,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,0FAA0F;QAC1F,6EAA6E;QAC7E,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,iBAAiB,EAAE,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"CardTapTarget.js","sourceRoot":"","sources":["../../../src/react/components/CardTapTarget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAqB7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,GAAG,IAAI,EACY,EAAE,EAAE;IACvB,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,4EAA4E;QAC5E,+EAA+E;QAC/E,IAAI,aAAa,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QAC7D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,OAAO,CAEL,cACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,0FAA0F;QAC1F,6EAA6E;QAC7E,8FAA8F;QAC9F,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,CAAC,KACrG,IAAI,YAEP,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipFilterStrip.d.ts","sourceRoot":"","sources":["../../../src/react/components/ChipFilterStrip.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChipFilterStrip.d.ts","sourceRoot":"","sources":["../../../src/react/components/ChipFilterStrip.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,mEAAmE;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAa,EACb,QAAgB,EAChB,SAAS,GACV,EAAE,oBAAoB,+BAmDtB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn, RAW_BUTTON } from '../lib/cn.js';
|
|
3
|
+
import { PRESS } from '../lib/press.js';
|
|
3
4
|
import { ScrollArea } from './ScrollArea.js';
|
|
4
5
|
function isActive(value, option) {
|
|
5
6
|
if (value === null)
|
|
@@ -49,7 +50,7 @@ function Chip({ active, onClick, children }) {
|
|
|
49
50
|
type: 'button', onClick: onClick, "aria-pressed": active, className: cn(RAW_BUTTON,
|
|
50
51
|
// 44 px min tap target height via py + min-h (STANDARDS §4a). px-4 keeps every
|
|
51
52
|
// pill's internal padding identical regardless of label length.
|
|
52
|
-
'inline-flex min-h-11 shrink-0 cursor-pointer items-center rounded-full px-4 text-sm font-medium
|
|
53
|
+
'inline-flex min-h-11 shrink-0 cursor-pointer items-center rounded-full px-4 text-sm font-medium', PRESS, 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
|
|
53
54
|
// Soft active state — an accent tint + accent text (the standardized active
|
|
54
55
|
// treatment shared with nav items and the `accent` Badge tone), not a stark
|
|
55
56
|
// solid accent block. `text-accent-strong` (not plain `text-accent`) — the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipFilterStrip.js","sourceRoot":"","sources":["../../../src/react/components/ChipFilterStrip.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChipFilterStrip.js","sourceRoot":"","sources":["../../../src/react/components/ChipFilterStrip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../src/react/components/ConfirmDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../src/react/components/ConfirmDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAM/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;yEACqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;oGACgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAO,EACP,YAAwB,EACxB,WAAsB,EACtB,WAAmB,EACnB,OAAe,EACf,SAAS,GACV,EAAE,kBAAkB,+BAiEpB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useRef } from 'react';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
|
+
import { DIALOG_MOTION } from '../lib/overlayMotion.js';
|
|
4
5
|
import { Button } from './Button.js';
|
|
5
6
|
import { Dialog, DialogContent, DialogDescription, DialogTitle } from './dialog.js';
|
|
6
7
|
/**
|
|
@@ -16,7 +17,7 @@ export function ConfirmDialog({ open, onConfirm, onCancel, title, message, confi
|
|
|
16
17
|
return (_jsx(Dialog, { open: open, onOpenChange: (v) => {
|
|
17
18
|
if (!v)
|
|
18
19
|
onCancel();
|
|
19
|
-
}, children: _jsxs(DialogContent, { ref: contentRef, className: cn('fixed top-1/2 left-1/2 flex w-[calc(100vw-2rem)] max-w-[var(--modal-w-sm)] -translate-x-1/2 -translate-y-1/2 flex-col gap-4', 'rounded-xl border border-border bg-popover p-6 text-popover-foreground shadow-overlay',
|
|
20
|
+
}, children: _jsxs(DialogContent, { ref: contentRef, className: cn('fixed top-1/2 left-1/2 flex w-[calc(100vw-2rem)] max-w-[var(--modal-w-sm)] -translate-x-1/2 -translate-y-1/2 flex-col gap-4', 'rounded-xl border border-border bg-popover p-6 text-popover-foreground shadow-overlay', DIALOG_MOTION, className),
|
|
20
21
|
// Land focus on the safe button for destructive actions; otherwise on confirm.
|
|
21
22
|
// Button isn't a forwardRef component, so target it by data attribute.
|
|
22
23
|
onOpenAutoFocus: (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.js","sourceRoot":"","sources":["../../../src/react/components/ConfirmDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoBpF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAO,EACP,YAAY,GAAG,SAAS,EACxB,WAAW,GAAG,QAAQ,EACtB,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK,EACf,SAAS,GACU;IACnB,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEhD,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;QACrB,CAAC,YAED,MAAC,aAAa,IACZ,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,EAAE,CACX,6HAA6H,EAC7H,uFAAuF,EACvF,
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","sourceRoot":"","sources":["../../../src/react/components/ConfirmDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoBpF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAO,EACP,YAAY,GAAG,SAAS,EACxB,WAAW,GAAG,QAAQ,EACtB,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK,EACf,SAAS,GACU;IACnB,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEhD,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,CAAC;gBAAE,QAAQ,EAAE,CAAC;QACrB,CAAC,YAED,MAAC,aAAa,IACZ,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,EAAE,CACX,6HAA6H,EAC7H,uFAAuF,EACvF,aAAa,EACb,SAAS,CACV;YACD,+EAA+E;YAC/E,uEAAuE;YACvE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;gBACrB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,UAAU,CAAC,OAAO;oBAChB,EAAE,aAAa,CACb,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CACvD;oBACD,EAAE,KAAK,EAAE,CAAC;YACd,CAAC,aAED,eAAK,SAAS,EAAC,+BAA+B,aAC5C,KAAC,WAAW,IAAC,SAAS,EAAC,iDAAiD,YACrE,KAAK,GACM,EACb,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,iBAAiB,IAAC,SAAS,EAAC,+BAA+B,YACzD,OAAO,GACU,CACrB,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,MAAM,4BAEL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,WAAW,YAEnB,WAAW,GACL,EACT,KAAC,MAAM;4BAEL,uEAAuE;4BACvE,0EAA0E;4BAC1E,uEAAuE;4BACvE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,EACtD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,SAAS,EAAE,EAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,YAAY,YAEpB,YAAY,GACN,IACL,IACQ,GACT,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../src/react/components/Drawer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../src/react/components/Drawer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAmB5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,IAAW,EACX,IAAc,EACd,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,UAAiB,GAClB,EAAE,WAAW,+BAuFb"}
|
|
@@ -3,6 +3,7 @@ import { X } from 'lucide-react';
|
|
|
3
3
|
import { useDiscardGuard } from '../hooks/useDiscardGuard.js';
|
|
4
4
|
import { useSwipeToDismiss } from '../hooks/useSwipeToDismiss.js';
|
|
5
5
|
import { cn } from '../lib/cn.js';
|
|
6
|
+
import { DRAWER_MOTION } from '../lib/overlayMotion.js';
|
|
6
7
|
import { FooterSlot } from './ActionBar.js';
|
|
7
8
|
import { Dialog, DialogContent, DialogTitle, focusPanelOnOpen } from './dialog.js';
|
|
8
9
|
import { IconButton } from './IconButton.js';
|
|
@@ -48,7 +49,7 @@ export function Drawer({ open, onClose, title, size = 'md', side = 'right', isDi
|
|
|
48
49
|
return (_jsx(Dialog, { open: open, onOpenChange: (v) => {
|
|
49
50
|
if (!v)
|
|
50
51
|
guardedClose();
|
|
51
|
-
}, children: _jsxs(DialogContent, { className: cn('flex flex-col gap-0 overflow-hidden bg-popover text-popover-foreground shadow-overlay', side === 'left' && [
|
|
52
|
+
}, children: _jsxs(DialogContent, { className: cn('flex flex-col gap-0 overflow-hidden bg-popover text-popover-foreground shadow-overlay', DRAWER_MOTION, side === 'left' && [
|
|
52
53
|
'fixed top-0 left-0 h-full w-full rounded-r-xl border-r border-border',
|
|
53
54
|
DRAWER_WIDTH[size],
|
|
54
55
|
'data-[state=open]:animate-in data-[state=open]:slide-in-from-left',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../../src/react/components/Drawer.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../../src/react/components/Drawer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface EntityCardProps {
|
|
3
|
+
/** The face: an `Avatar`, a portrait, a cover thumbnail. Drawn at its own size, never squeezed. */
|
|
4
|
+
media: ReactNode;
|
|
5
|
+
/** The name — one line, ellipsed. */
|
|
6
|
+
name: ReactNode;
|
|
7
|
+
/** One line under the name (dates, a role, a count) — muted, tabular figures, ellipsed. */
|
|
8
|
+
line?: ReactNode;
|
|
9
|
+
/** Fired on tap/click and on Enter/Space — the whole card is the target. */
|
|
10
|
+
onClick: () => void;
|
|
11
|
+
/** What a tap does, for a screen reader ("Open Ada Lovelace") — the name alone says what, not why. */
|
|
12
|
+
'aria-label'?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Skip `onClick` when the click only completes a text selection inside the card. Default
|
|
15
|
+
* `false`: a face, a name and one line hold nothing worth selecting, and a press that the
|
|
16
|
+
* selection check swallows reads as a dead card on a phone.
|
|
17
|
+
*/
|
|
18
|
+
selectionSafe?: boolean;
|
|
19
|
+
className?: string;
|
|
20
|
+
/** Rides on the card's root, for an app's own selectors (`data-ended`, `data-self`, …). */
|
|
21
|
+
[data: `data-${string}`]: string | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A person, a title, a game — a face, a name, one line, the whole card one tap target that dips
|
|
25
|
+
* on press. Built from family's close-family `KinCard` (forge task 2918), on `CardTapTarget`, so
|
|
26
|
+
* the tap floor (`TAP_TARGET_HEIGHT`), the press dip (`PRESS_SURFACE`) and the iPhone-safe
|
|
27
|
+
* `div[role=button]` come from the one place they are kept.
|
|
28
|
+
*
|
|
29
|
+
* The card is a row: the face left, the text beside it. It fills its grid cell, and its text
|
|
30
|
+
* truncates rather than wrapping, so every card in a grid row is the same height whatever the
|
|
31
|
+
* name. `relative isolate` keeps anything the face positions from painting over the next card and
|
|
32
|
+
* eating its taps (`CardTapTarget`'s other half).
|
|
33
|
+
*/
|
|
34
|
+
export declare function EntityCard({ media, name, line, onClick, 'aria-label': ariaLabel, selectionSafe, className, ...data }: EntityCardProps): import("react").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=EntityCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityCard.d.ts","sourceRoot":"","sources":["../../../src/react/components/EntityCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,eAAe;IAC9B,mGAAmG;IACnG,KAAK,EAAE,SAAS,CAAC;IACjB,qCAAqC;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,CAAC,IAAI,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,YAAY,EAAE,SAAS,EACvB,aAAqB,EACrB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,eAAe,+BA6BjB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../lib/cn.js';
|
|
3
|
+
import { CardTapTarget } from './CardTapTarget.js';
|
|
4
|
+
/**
|
|
5
|
+
* A person, a title, a game — a face, a name, one line, the whole card one tap target that dips
|
|
6
|
+
* on press. Built from family's close-family `KinCard` (forge task 2918), on `CardTapTarget`, so
|
|
7
|
+
* the tap floor (`TAP_TARGET_HEIGHT`), the press dip (`PRESS_SURFACE`) and the iPhone-safe
|
|
8
|
+
* `div[role=button]` come from the one place they are kept.
|
|
9
|
+
*
|
|
10
|
+
* The card is a row: the face left, the text beside it. It fills its grid cell, and its text
|
|
11
|
+
* truncates rather than wrapping, so every card in a grid row is the same height whatever the
|
|
12
|
+
* name. `relative isolate` keeps anything the face positions from painting over the next card and
|
|
13
|
+
* eating its taps (`CardTapTarget`'s other half).
|
|
14
|
+
*/
|
|
15
|
+
export function EntityCard({ media, name, line, onClick, 'aria-label': ariaLabel, selectionSafe = false, className, ...data }) {
|
|
16
|
+
return (_jsxs(CardTapTarget, { ...data, onClick: onClick, "aria-label": ariaLabel, selectionSafe: selectionSafe, className: cn('relative isolate flex min-h-14 min-w-0 items-center gap-3 rounded-lg border border-border bg-card px-3 py-2', 'hover:border-border-strong hover:bg-card-raised', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background', className), children: [_jsx("span", { "data-slot": 'entity-card-media', className: 'flex flex-none items-center', children: media }), _jsxs("span", { className: 'flex min-w-0 flex-col gap-0.5', children: [_jsx("span", { "data-slot": 'entity-card-name', className: 'truncate text-sm leading-5 font-medium text-foreground', children: name }), line ? (_jsx("span", { "data-slot": 'entity-card-line', className: 'truncate text-xs leading-4 text-muted-foreground tabular-nums', children: line })) : null] })] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=EntityCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityCard.js","sourceRoot":"","sources":["../../../src/react/components/EntityCard.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAwBnD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,YAAY,EAAE,SAAS,EACvB,aAAa,GAAG,KAAK,EACrB,SAAS,EACT,GAAG,IAAI,EACS;IAChB,OAAO,CACL,MAAC,aAAa,OACR,IAAI,EACR,OAAO,EAAE,OAAO,gBACJ,SAAS,EACrB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,EAAE,CACX,6GAA6G,EAC7G,iDAAiD,EACjD,0IAA0I,EAC1I,SAAS,CACV,aAED,4BAAgB,mBAAmB,EAAC,SAAS,EAAC,6BAA6B,YACxE,KAAK,GACD,EACP,gBAAM,SAAS,EAAC,+BAA+B,aAC7C,4BAAgB,kBAAkB,EAAC,SAAS,EAAC,wDAAwD,YAClG,IAAI,GACA,EACN,IAAI,CAAC,CAAC,CAAC,CACN,4BAAgB,kBAAkB,EAAC,SAAS,EAAC,+DAA+D,YACzG,IAAI,GACA,CACR,CAAC,CAAC,CAAC,IAAI,IACH,IACO,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../../src/react/components/Lightbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../../src/react/components/Lightbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,aAAa,+BAiC3E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { X } from 'lucide-react';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
|
+
import { DIALOG_MOTION } from '../lib/overlayMotion.js';
|
|
4
5
|
import { Dialog, DialogContent, DialogTitle, focusPanelOnOpen } from './dialog.js';
|
|
5
6
|
import { IconButton } from './IconButton.js';
|
|
6
7
|
/**
|
|
@@ -14,6 +15,6 @@ export function Lightbox({ open, onClose, children, caption }) {
|
|
|
14
15
|
return (_jsx(Dialog, { open: open, onOpenChange: (v) => {
|
|
15
16
|
if (!v)
|
|
16
17
|
onClose();
|
|
17
|
-
}, children: _jsxs(DialogContent, { overlayClassName: 'bg-black/80', className: cn('fixed inset-4 flex flex-col items-center justify-center gap-3 p-4', 'rounded-xl border-none bg-black/95 shadow-none',
|
|
18
|
+
}, children: _jsxs(DialogContent, { overlayClassName: 'bg-black/80', className: cn('fixed inset-4 flex flex-col items-center justify-center gap-3 p-4', 'rounded-xl border-none bg-black/95 shadow-none', DIALOG_MOTION), onInteractOutside: () => onClose(), onOpenAutoFocus: focusPanelOnOpen, children: [_jsx(DialogTitle, { className: 'sr-only', children: caption ?? 'Media viewer' }), _jsx(IconButton, { label: 'Close', variant: 'ghost', onClick: onClose, className: 'absolute top-4 right-4 h-auto w-auto rounded-full bg-white/10 p-1.5 text-white hover:bg-white/20 hover:text-white focus-visible:ring-offset-black', children: _jsx(X, { className: 'size-5' }) }), _jsx("div", { className: 'flex min-h-0 min-w-0 flex-1 items-center justify-center', children: children }), caption ? _jsx("p", { className: 'text-center text-sm text-white/70', children: caption }) : null] }) }));
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=Lightbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../../src/react/components/Lightbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAiB;IAC1E,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;QACpB,CAAC,YAED,MAAC,aAAa,IACZ,gBAAgB,EAAC,aAAa,EAC9B,SAAS,EAAE,EAAE,CACX,mEAAmE,EACnE,gDAAgD,EAChD,
|
|
1
|
+
{"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../../src/react/components/Lightbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAiB;IAC1E,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;QACpB,CAAC,YAED,MAAC,aAAa,IACZ,gBAAgB,EAAC,aAAa,EAC9B,SAAS,EAAE,EAAE,CACX,mEAAmE,EACnE,gDAAgD,EAChD,aAAa,CACd,EACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAClC,eAAe,EAAE,gBAAgB,aAGjC,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,YAAE,OAAO,IAAI,cAAc,GAAe,EAC1E,KAAC,UAAU,IACT,KAAK,EAAC,OAAO,EACb,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,mJAAmJ,YAE7J,KAAC,CAAC,IAAC,SAAS,EAAC,QAAQ,GAAG,GACb,EACb,cAAK,SAAS,EAAC,yDAAyD,YAAE,QAAQ,GAAO,EACxF,OAAO,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,mCAAmC,YAAE,OAAO,GAAK,CAAC,CAAC,CAAC,IAAI,IAClE,GACT,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/react/components/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/react/components/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC;AA6CvF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gFAAgF;IAChF,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,IAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAiB,EACjB,aAAoB,EACpB,KAAK,EACL,UAAiB,EACjB,SAAS,GACV,EAAE,UAAU,+BA+IZ"}
|