@xeonr/platform-ui 1.6.2 → 1.7.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.
Files changed (52) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +11 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/kit/Anchored.d.ts.map +1 -1
  6. package/dist/kit/Anchored.js +4 -1
  7. package/dist/kit/Anchored.js.map +1 -1
  8. package/dist/kit/Badge.d.ts +23 -0
  9. package/dist/kit/Badge.d.ts.map +1 -1
  10. package/dist/kit/Badge.js +53 -0
  11. package/dist/kit/Badge.js.map +1 -1
  12. package/dist/kit/Button.d.ts +13 -0
  13. package/dist/kit/Button.d.ts.map +1 -1
  14. package/dist/kit/Button.js +7 -3
  15. package/dist/kit/Button.js.map +1 -1
  16. package/dist/kit/Checkbox.d.ts +34 -0
  17. package/dist/kit/Checkbox.d.ts.map +1 -0
  18. package/dist/kit/Checkbox.js +52 -0
  19. package/dist/kit/Checkbox.js.map +1 -0
  20. package/dist/kit/Color.d.ts +8 -1
  21. package/dist/kit/Color.d.ts.map +1 -1
  22. package/dist/kit/Color.js +14 -5
  23. package/dist/kit/Color.js.map +1 -1
  24. package/dist/kit/Controls.d.ts +2 -33
  25. package/dist/kit/Controls.d.ts.map +1 -1
  26. package/dist/kit/Controls.js +3 -44
  27. package/dist/kit/Controls.js.map +1 -1
  28. package/dist/kit/DataGrid.d.ts +42 -2
  29. package/dist/kit/DataGrid.d.ts.map +1 -1
  30. package/dist/kit/DataGrid.js +98 -7
  31. package/dist/kit/DataGrid.js.map +1 -1
  32. package/dist/kit/Form.d.ts +7 -1
  33. package/dist/kit/Form.d.ts.map +1 -1
  34. package/dist/kit/Form.js +7 -4
  35. package/dist/kit/Form.js.map +1 -1
  36. package/dist/kit/Menu.d.ts +13 -2
  37. package/dist/kit/Menu.d.ts.map +1 -1
  38. package/dist/kit/Menu.js +32 -6
  39. package/dist/kit/Menu.js.map +1 -1
  40. package/dist/kit/Spectrum.d.ts +40 -0
  41. package/dist/kit/Spectrum.d.ts.map +1 -0
  42. package/dist/kit/Spectrum.js +235 -0
  43. package/dist/kit/Spectrum.js.map +1 -0
  44. package/dist/kit/SplitButton.d.ts +43 -0
  45. package/dist/kit/SplitButton.d.ts.map +1 -0
  46. package/dist/kit/SplitButton.js +34 -0
  47. package/dist/kit/SplitButton.js.map +1 -0
  48. package/dist/theme/ThemeProvider.d.ts +21 -2
  49. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  50. package/dist/theme/ThemeProvider.js +21 -5
  51. package/dist/theme/ThemeProvider.js.map +1 -1
  52. package/package.json +2 -2
@@ -31,7 +31,12 @@ export declare function MenuItem({ icon, to, href, target, rel, external, downlo
31
31
  meta?: ReactNode | undefined;
32
32
  onClick?: (() => void) | undefined;
33
33
  danger?: boolean | undefined;
34
- disabled?: boolean | undefined;
34
+ /**
35
+ * Off: drawn dimmed, announced as disabled, skipped by the arrow keys, and a
36
+ * click on it does nothing (the menu stays open). A string is the reason,
37
+ * shown as a tooltip on the item — "Only one mipmap level" (1.7).
38
+ */
39
+ disabled?: boolean | string | undefined;
35
40
  children: ReactNode;
36
41
  }): import("react").JSX.Element;
37
42
  export interface MenuProps {
@@ -55,6 +60,12 @@ export interface MenuProps {
55
60
  label?: string | undefined;
56
61
  /** told whenever it opens or closes — a rail that stays expanded while its menu is open */
57
62
  onOpenChange?: ((open: boolean) => void) | undefined;
63
+ /**
64
+ * The menu cannot open: a click or ArrowDown on the trigger does nothing,
65
+ * and an open menu closes (1.7). Disable the trigger itself as well — this
66
+ * is what stops the menu, that is what shows it.
67
+ */
68
+ disabled?: boolean | undefined;
58
69
  }
59
70
  /**
60
71
  * Menu: click-to-open popover anchored to its trigger. It portals to
@@ -65,7 +76,7 @@ export interface MenuProps {
65
76
  * one outcome" is always the right behaviour. Arrow keys, Home and End move
66
77
  * between items.
67
78
  */
68
- export declare function Menu({ trigger, children, align, side, width, label, onOpenChange }: MenuProps): import("react").JSX.Element;
79
+ export declare function Menu({ trigger, children, align, side, width, label, onOpenChange, disabled }: MenuProps): import("react").JSX.Element;
69
80
  /**
70
81
  * OverflowMenu: the ⋯ button on a row or a card and the menu it opens.
71
82
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"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"}
package/dist/kit/Menu.js CHANGED
@@ -50,7 +50,7 @@ const RowButton = styled.button `
50
50
  ${rowCss}
51
51
  color: ${(p) => (p.$danger ? v.danger : v.muted)};
52
52
  &:hover { background: ${(p) => (p.$danger ? v.dangerBg : v.hover)}; color: ${(p) => (p.$danger ? v.danger : v.text)}; }
53
- &:disabled { opacity: 0.45; cursor: not-allowed; background: none; }
53
+ &:disabled, &[aria-disabled="true"] { opacity: 0.45; cursor: not-allowed; background: none; }
54
54
  `;
55
55
  const RowLink = styled(Link) `
56
56
  ${rowCss}
@@ -81,9 +81,20 @@ export function MenuItem({ icon, to, href, target, rel, external, download, meta
81
81
  ? _jsx(Icon, { name: icon })
82
82
  : _jsx(FontAwesomeIcon, { icon: icon, style: { width: "1em", height: "1em" } });
83
83
  const inner = _jsxs(_Fragment, { children: [glyph, children, trail] });
84
+ const why = typeof disabled === "string" && disabled ? disabled : undefined;
85
+ // swallowed, and kept from the panel, whose own click would close the menu
86
+ const swallow = (e) => { e.preventDefault(); e.stopPropagation(); };
84
87
  if ((to || href) && disabled) {
85
88
  // A link has no :disabled; off, it is a link to nowhere that says so.
86
- return _jsx(RowAnchor, { role: "menuitem", "aria-disabled": "true", tabIndex: -1, "$danger": danger, onClick: (e) => { e.preventDefault(); e.stopPropagation(); }, children: inner });
89
+ const off = _jsx(RowAnchor, { role: "menuitem", "aria-disabled": "true", "aria-description": why, tabIndex: -1, "$danger": danger, onClick: swallow, children: inner });
90
+ return why ? _jsx(Tooltip, { label: why, side: "right", style: REASON_ANCHOR, children: off }) : off;
91
+ }
92
+ if (why) {
93
+ // A native disabled button gets no pointer events, so its tooltip could
94
+ // never open: with a reason it is aria-disabled instead, out of the tab
95
+ // order and the arrow keys, and its click goes nowhere. The reason is also
96
+ // its aria-description, for a screen reader that never hovers.
97
+ return (_jsx(Tooltip, { label: why, side: "right", style: REASON_ANCHOR, children: _jsx(RowButton, { role: "menuitem", type: "button", "aria-disabled": "true", "aria-description": why, tabIndex: -1, "$danger": danger, onClick: swallow, children: inner }) }));
87
98
  }
88
99
  if (to) {
89
100
  return (_jsx(RowLink, { role: "menuitem", to: to, "$danger": danger, target: tgt, rel: linkRel, onClick: onClick, children: inner }));
@@ -91,8 +102,10 @@ export function MenuItem({ icon, to, href, target, rel, external, download, meta
91
102
  if (href) {
92
103
  return (_jsx(RowAnchor, { role: "menuitem", href: href, "$danger": danger, target: tgt, rel: linkRel, download: download === true ? "" : download || undefined, onClick: onClick, children: inner }));
93
104
  }
94
- return _jsx(RowButton, { role: "menuitem", type: "button", "$danger": danger, disabled: disabled, onClick: onClick, children: inner });
105
+ return _jsx(RowButton, { role: "menuitem", type: "button", "$danger": danger, disabled: !!disabled, onClick: onClick, children: inner });
95
106
  }
107
+ // the tooltip's anchor takes the row's full width, as the row did
108
+ const REASON_ANCHOR = { display: "flex", width: "100%" };
96
109
  const ITEMS = '[role="menuitem"]:not(:disabled):not([aria-disabled="true"])';
97
110
  /**
98
111
  * Menu: click-to-open popover anchored to its trigger. It portals to
@@ -103,7 +116,7 @@ const ITEMS = '[role="menuitem"]:not(:disabled):not([aria-disabled="true"])';
103
116
  * one outcome" is always the right behaviour. Arrow keys, Home and End move
104
117
  * between items.
105
118
  */
106
- export function Menu({ trigger, children, align = "right", side = "bottom", width = 220, label, onOpenChange }) {
119
+ export function Menu({ trigger, children, align = "right", side = "bottom", width = 220, label, onOpenChange, disabled }) {
107
120
  const [open, setOpenState] = useState(false);
108
121
  const ref = useRef(null);
109
122
  const layer = useRef(null);
@@ -126,6 +139,16 @@ export function Menu({ trigger, children, align = "right", side = "bottom", widt
126
139
  setOpen(false);
127
140
  ref.current?.querySelector("button, a, [tabindex]")?.focus();
128
141
  });
142
+ // Disabled while open: shut it, as if the outside had been clicked. The
143
+ // state is dropped during render; the listener is told after it.
144
+ if (disabled && open)
145
+ setOpenState(false);
146
+ useEffect(() => {
147
+ if (disabled && told.current) {
148
+ told.current = false;
149
+ changed.current?.(false);
150
+ }
151
+ }, [disabled]);
129
152
  useEffect(() => {
130
153
  if (!open)
131
154
  return;
@@ -162,7 +185,10 @@ export function Menu({ trigger, children, align = "right", side = "bottom", widt
162
185
  e.preventDefault();
163
186
  items[next].focus();
164
187
  };
165
- return (_jsxs(Wrap, { ref: ref, children: [_jsx("div", { onClick: () => setOpen(!open), onKeyDown: (e) => {
188
+ return (_jsxs(Wrap, { ref: ref, children: [_jsx("div", { onClick: () => { if (!disabled)
189
+ setOpen(!open); }, onKeyDown: (e) => {
190
+ if (disabled)
191
+ return;
166
192
  // ArrowDown on the trigger opens the menu with the first item focused
167
193
  if (e.key === "ArrowDown" && !open) {
168
194
  e.preventDefault();
@@ -171,7 +197,7 @@ export function Menu({ trigger, children, align = "right", side = "bottom", widt
171
197
  }
172
198
  else if (open)
173
199
  move(e);
174
- }, style: { display: "contents" }, children: trigger(open) }), open ? (_jsx(Anchored, { anchor: ref, align: align, side: side, layerRef: layer, children: _jsx(Dropdown, { role: "menu", "aria-label": label, "$width": width, onClick: () => setOpen(false), onKeyDown: move, children: children }) })) : null] }));
200
+ }, style: { display: "contents" }, children: trigger(open) }), open && !disabled ? (_jsx(Anchored, { anchor: ref, align: align, side: side, layerRef: layer, children: _jsx(Dropdown, { role: "menu", "aria-label": label, "$width": width, onClick: () => setOpen(false), onKeyDown: move, children: children }) })) : null] }));
175
201
  }
176
202
  const Isolate = styled.span `display: inline-flex;`;
177
203
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../src/kit/Menu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAA2D,MAAM,OAAO,CAAC;AAC1H,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAyC,MAAM,eAAgB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAe,CAAC;AAExC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,qBAAqB,CAAC;AAE7C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAoB;WACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;;;gBAGV,CAAC,CAAC,OAAO;sBACH,CAAC,CAAC,KAAK;mBACV,CAAC,CAAC,KAAK;gBACV,CAAC,CAAC,IAAI;;CAErB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;iBAClB,CAAC,CAAC,IAAI;;;;;WAKZ,CAAC,CAAC,KAAK;;CAEjB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA;0BACX,CAAC,CAAC,IAAI;;CAE/B,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;mEAWoD,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,IAAI;CAC3F,CAAC;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAmC;IAC9D,MAAM;WACC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;0BACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;CAEpH,CAAC;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAmC;IAC3D,MAAM;WACC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;0BACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;CACpH,CAAC;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAmC;IACzD,MAAM;WACC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;0BACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;CAEpH,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA;;;;;;;WAOd,CAAC,CAAC,KAAK;;CAEjB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EA8BpH;IACC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAC/B,MAAC,KAAK,eACH,IAAI,EACJ,QAAQ,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,IACrC,CACT,CAAC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ;QACnD,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI;QACtB,CAAC,CAAC,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAI,CAAC;IAC5E,MAAM,KAAK,GAAG,8BAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,2EAA2E;IAC3E,MAAM,OAAO,GAAG,CAAC,CAAiB,EAAE,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC7B,sEAAsE;QACtE,MAAM,GAAG,GAAG,KAAC,SAAS,IAAC,IAAI,EAAC,UAAU,mBAAe,MAAM,sBAAmB,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,aAAW,MAAM,EAAE,OAAO,EAAE,OAAO,YAAG,KAAK,GAAa,CAAC;QACxJ,OAAO,GAAG,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,aAAa,YAAG,GAAG,GAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7F,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,wEAAwE;QACxE,wEAAwE;QACxE,2EAA2E;QAC3E,+DAA+D;QAC/D,OAAO,CACL,KAAC,OAAO,IAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,aAAa,YACpD,KAAC,SAAS,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,mBAAe,MAAM,sBAAmB,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,aAAW,MAAM,EAAE,OAAO,EAAE,OAAO,YAAG,KAAK,GAAa,GACjJ,CACX,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,EAAE,CAAC;QACP,OAAO,CACL,KAAC,OAAO,IAAC,IAAI,EAAC,UAAU,EAAC,EAAE,EAAE,EAAE,aAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,YAC1F,KAAK,GACE,CACX,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CACL,KAAC,SAAS,IACR,IAAI,EAAC,UAAU,EACf,IAAI,EAAE,IAAI,aACD,MAAM,EACf,MAAM,EAAE,GAAG,EACX,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,EACxD,OAAO,EAAE,OAAO,YAEf,KAAK,GACI,CACb,CAAC;IACJ,CAAC;IACD,OAAO,KAAC,SAAS,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,aAAU,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,YAAG,KAAK,GAAa,CAAC;AAC/H,CAAC;AAED,kEAAkE;AAClE,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAW,CAAC;AAElE,MAAM,KAAK,GAAG,8DAA8D,CAAC;AA+B7E;;;;;;;;GAQG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,GAAG,QAAQ,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAa;IACjI,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,0EAA0E;IAC1E,4EAA4E;IAC5E,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE;QAC5C,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,yEAAyE;IACzE,mCAAmC;IACnC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACf,GAAG,CAAC,OAAO,EAAE,aAAa,CAAc,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,iEAAiE;IACjE,IAAI,QAAQ,IAAI,IAAI;QAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,MAAM,GAAG,CAAC,CAAa,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC,CAAC;QACF,2EAA2E;QAC3E,iCAAiC;QACjC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,MAAM,IAAI,GAAG,CAAC,CAAgB,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAc,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO;QAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC,CAAC;QAChE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;YAAE,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;aAClE,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;YAAE,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;aACnG,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,CAAC,CAAC;aAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;YAAE,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aAC7C,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACrD,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO;QACrB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAE,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,IAAC,GAAG,EAAE,GAAG,aACZ,cACE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ;oBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACjD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACf,IAAI,QAAQ;wBAAE,OAAO;oBACrB,sEAAsE;oBACtE,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC;wBACnC,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,OAAO,CAAC,IAAI,CAAC,CAAC;wBACd,qBAAqB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAc,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACzF,CAAC;yBAAM,IAAI,IAAI;wBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,YAE7B,OAAO,CAAC,IAAI,CAAC,GACV,EACL,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnB,KAAC,QAAQ,IAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,YAC9D,KAAC,QAAQ,IAAC,IAAI,EAAC,MAAM,gBAAa,KAAK,YAAU,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,YACnG,QAAQ,GACA,GACF,CACZ,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAA,uBAAuB,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,GAAG,cAAc,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,YAAY,EAAE,QAAQ,EAc1J;IACC,MAAM,IAAI,GAAG,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IACxD,OAAO,CACL,KAAC,OAAO,IAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,YACjG,KAAC,IAAI,IACH,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,KAAC,OAAO,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,OAAO,IAAI,IAAI,YAC/C,KAAC,UAAU,aAAQ,IAAI,SAAO,IAAI,gBAAc,KAAK,mBAAgB,MAAM,mBAAgB,IAAI,YAC7F,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,GACT,GACL,CACX,YAEA,QAAQ,GACJ,GACC,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type CSSProperties } from "react";
2
+ /** Hue 0–360, saturation and value 0–1. */
3
+ export interface Hsv {
4
+ h: number;
5
+ s: number;
6
+ v: number;
7
+ }
8
+ /** `#rgb`, `#rrggbb`, with or without the `#`, any case → `#rrggbb`; anything else → null. */
9
+ export declare function normaliseHex(raw: string): string | null;
10
+ export declare function hsvToHex({ h, s, v: val }: Hsv): string;
11
+ /** A hex the picker can read, as HSV; null for anything else. */
12
+ export declare function hexToHsv(hex: string): Hsv | null;
13
+ export interface SpectrumPickerProps {
14
+ /** the colour, `#rrggbb` (a `#rgb` is read too); anything else shows the last colour picked */
15
+ value: string;
16
+ /** every change, as `#rrggbb` lower case — while dragging too */
17
+ onChange: (hex: string) => void;
18
+ /** once a drag or a key press ends: for an undo step or a save */
19
+ onCommit?: ((hex: string) => void) | undefined;
20
+ /** accessible name of the whole picker (default "Colour") */
21
+ label?: string | undefined;
22
+ /** show the hex field and preview under the strip (default true) */
23
+ hexInput?: boolean | undefined;
24
+ /** px (default 220) */
25
+ width?: number | undefined;
26
+ disabled?: boolean | undefined;
27
+ className?: string | undefined;
28
+ style?: CSSProperties | undefined;
29
+ }
30
+ /**
31
+ * SpectrumPicker: pick any colour inline. Drag (or click) the square for
32
+ * saturation (across) and brightness (up), the strip for hue, or type the hex.
33
+ * Keyboard: in the square the arrows move saturation and brightness, in the
34
+ * strip they move hue; Shift moves ten times as far, Home/End go to the ends.
35
+ * Reach for it where the colour is the person's own (a paint, a label colour);
36
+ * for a choice from a fixed set use `ColorPicker`, which can offer this too
37
+ * (`spectrum`).
38
+ */
39
+ export declare function SpectrumPicker({ value, onChange, onCommit, label, hexInput, width, disabled, className, style, }: SpectrumPickerProps): import("react").JSX.Element;
40
+ //# sourceMappingURL=Spectrum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spectrum.d.ts","sourceRoot":"","sources":["../../src/kit/Spectrum.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,aAAa,EAAyC,MAAM,OAAO,CAAC;AAc/G,2CAA2C;AAC3C,MAAM,WAAW,GAAG;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAIxD,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,wBAAgB,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,MAAM,CAOtD;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAiBhD;AAiED,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAgB,EAAE,QAAe,EAAE,KAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,GACtG,EAAE,mBAAmB,+BAyKrB"}
@@ -0,0 +1,235 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import styled, { css } from "styled-components";
4
+ import { v } from "../theme/tokens.js";
5
+ import { MonoInput } from "./Form.js";
6
+ const clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
7
+ /** `#rgb`, `#rrggbb`, with or without the `#`, any case → `#rrggbb`; anything else → null. */
8
+ export function normaliseHex(raw) {
9
+ const m = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(raw.trim());
10
+ if (!m)
11
+ return null;
12
+ const d = m[1].toLowerCase();
13
+ return `#${d.length === 3 ? d.split("").map((c) => c + c).join("") : d}`;
14
+ }
15
+ export function hsvToHex({ h, s, v: val }) {
16
+ const f = (n) => {
17
+ const k = (n + h / 60) % 6;
18
+ const c = val - val * s * Math.max(0, Math.min(k, 4 - k, 1));
19
+ return Math.round(c * 255).toString(16).padStart(2, "0");
20
+ };
21
+ return `#${f(5)}${f(3)}${f(1)}`;
22
+ }
23
+ /** A hex the picker can read, as HSV; null for anything else. */
24
+ export function hexToHsv(hex) {
25
+ const n = normaliseHex(hex);
26
+ if (!n)
27
+ return null;
28
+ const r = parseInt(n.slice(1, 3), 16) / 255;
29
+ const g = parseInt(n.slice(3, 5), 16) / 255;
30
+ const b = parseInt(n.slice(5, 7), 16) / 255;
31
+ const max = Math.max(r, g, b);
32
+ const d = max - Math.min(r, g, b);
33
+ let h = 0;
34
+ if (d) {
35
+ if (max === r)
36
+ h = ((g - b) / d) % 6;
37
+ else if (max === g)
38
+ h = (b - r) / d + 2;
39
+ else
40
+ h = (r - g) / d + 4;
41
+ h *= 60;
42
+ if (h < 0)
43
+ h += 360;
44
+ }
45
+ return { h, s: max ? d / max : 0, v: max };
46
+ }
47
+ // the ends of the square, computed rather than written down
48
+ const WHITE = hsvToHex({ h: 0, s: 0, v: 1 });
49
+ const BLACK = hsvToHex({ h: 0, s: 0, v: 0 });
50
+ const RAINBOW = [0, 60, 120, 180, 240, 300, 360].map((h) => hsvToHex({ h, s: 1, v: 1 })).join(", ");
51
+ const Root = styled.div `
52
+ display: grid;
53
+ gap: 10px;
54
+ width: ${(p) => p.$width}px;
55
+ max-width: 100%;
56
+ ${(p) => p.$disabled && css `opacity: 0.5; pointer-events: none;`}
57
+ `;
58
+ const Area = styled.div `
59
+ position: relative;
60
+ aspect-ratio: 4 / 3;
61
+ border-radius: ${v.rCtl};
62
+ border: 1px solid ${v.line2};
63
+ cursor: crosshair;
64
+ touch-action: none;
65
+ user-select: none;
66
+ `;
67
+ const Strip = styled.div `
68
+ position: relative;
69
+ height: 12px;
70
+ border-radius: 6px;
71
+ border: 1px solid ${v.line2};
72
+ cursor: pointer;
73
+ touch-action: none;
74
+ user-select: none;
75
+ `;
76
+ const thumb = css `
77
+ position: absolute;
78
+ width: 14px;
79
+ height: 14px;
80
+ border-radius: 50%;
81
+ transform: translate(-50%, -50%);
82
+ background: var(--x-swatch);
83
+ /* the ring is surface then ink, so it reads on any colour under it */
84
+ box-shadow: 0 0 0 2px ${v.surface}, 0 0 0 3px ${v.text};
85
+ outline: none;
86
+ &:focus-visible { box-shadow: 0 0 0 2px ${v.surface}, 0 0 0 3px ${v.text}, ${v.ring}; }
87
+ `;
88
+ const AreaThumb = styled.div `${thumb}`;
89
+ const StripThumb = styled.div `${thumb} top: 50%;`;
90
+ const HexRow = styled.div `
91
+ display: flex;
92
+ align-items: center;
93
+ gap: 8px;
94
+ > .preview {
95
+ flex: none;
96
+ width: 26px;
97
+ height: 26px;
98
+ border-radius: 50%;
99
+ border: 1px solid ${v.line2};
100
+ background: var(--x-swatch);
101
+ }
102
+ `;
103
+ /**
104
+ * SpectrumPicker: pick any colour inline. Drag (or click) the square for
105
+ * saturation (across) and brightness (up), the strip for hue, or type the hex.
106
+ * Keyboard: in the square the arrows move saturation and brightness, in the
107
+ * strip they move hue; Shift moves ten times as far, Home/End go to the ends.
108
+ * Reach for it where the colour is the person's own (a paint, a label colour);
109
+ * for a choice from a fixed set use `ColorPicker`, which can offer this too
110
+ * (`spectrum`).
111
+ */
112
+ export function SpectrumPicker({ value, onChange, onCommit, label = "Colour", hexInput = true, width = 220, disabled, className, style, }) {
113
+ // HSV is kept here rather than derived from the hex each render: a grey
114
+ // has no hue and black has no saturation, and the square should not jump
115
+ // back to red the moment the person drags through either.
116
+ const [hsv, setHsv] = useState(() => hexToHsv(value) ?? { h: 0, s: 0, v: 0 });
117
+ const hex = hsvToHex(hsv);
118
+ const [seen, setSeen] = useState(value);
119
+ if (seen !== value) {
120
+ setSeen(value);
121
+ const next = hexToHsv(value);
122
+ if (next && normaliseHex(value) !== hex)
123
+ setHsv(next);
124
+ }
125
+ const [draft, setDraft] = useState(null);
126
+ const latest = useRef(hex);
127
+ useEffect(() => { latest.current = hex; });
128
+ const set = (next) => {
129
+ const n = { h: clamp(next.h, 0, 360), s: clamp(next.s, 0, 1), v: clamp(next.v, 0, 1) };
130
+ setHsv(n);
131
+ const out = hsvToHex(n);
132
+ latest.current = out;
133
+ if (out !== hex)
134
+ onChange(out);
135
+ };
136
+ const area = useRef(null);
137
+ const strip = useRef(null);
138
+ const areaThumb = useRef(null);
139
+ const stripThumb = useRef(null);
140
+ const partOf = (el) => (el.dataset.part === "hue" ? "hue" : "area");
141
+ const fromPointer = (part, e) => {
142
+ const r = (part === "hue" ? strip : area).current.getBoundingClientRect();
143
+ if (part === "hue") {
144
+ if (r.width)
145
+ set({ ...hsv, h: ((e.clientX - r.left) / r.width) * 360 });
146
+ }
147
+ else if (r.width && r.height) {
148
+ set({ h: hsv.h, s: (e.clientX - r.left) / r.width, v: 1 - (e.clientY - r.top) / r.height });
149
+ }
150
+ };
151
+ const onPointerDown = (e) => {
152
+ if (disabled || e.button !== 0)
153
+ return;
154
+ e.preventDefault();
155
+ e.currentTarget.setPointerCapture?.(e.pointerId);
156
+ const part = partOf(e.currentTarget);
157
+ (part === "hue" ? stripThumb : areaThumb).current?.focus();
158
+ fromPointer(part, e);
159
+ };
160
+ const onPointerMove = (e) => {
161
+ if (e.currentTarget.hasPointerCapture?.(e.pointerId))
162
+ fromPointer(partOf(e.currentTarget), e);
163
+ };
164
+ const onPointerUp = (e) => {
165
+ if (!e.currentTarget.hasPointerCapture?.(e.pointerId))
166
+ return;
167
+ e.currentTarget.releasePointerCapture?.(e.pointerId);
168
+ onCommit?.(latest.current);
169
+ };
170
+ const pointer = { onPointerDown, onPointerMove, onPointerUp };
171
+ const onKeyDown = (e) => {
172
+ if (disabled)
173
+ return;
174
+ const hue = partOf(e.currentTarget) === "hue";
175
+ const big = e.shiftKey ? 10 : 1;
176
+ const d = hue ? big : big / 100;
177
+ let next = null;
178
+ if (hue) {
179
+ if (e.key === "ArrowRight" || e.key === "ArrowUp")
180
+ next = { ...hsv, h: hsv.h + d };
181
+ else if (e.key === "ArrowLeft" || e.key === "ArrowDown")
182
+ next = { ...hsv, h: hsv.h - d };
183
+ else if (e.key === "Home")
184
+ next = { ...hsv, h: 0 };
185
+ else if (e.key === "End")
186
+ next = { ...hsv, h: 360 };
187
+ }
188
+ else {
189
+ if (e.key === "ArrowRight")
190
+ next = { ...hsv, s: hsv.s + d };
191
+ else if (e.key === "ArrowLeft")
192
+ next = { ...hsv, s: hsv.s - d };
193
+ else if (e.key === "ArrowUp")
194
+ next = { ...hsv, v: hsv.v + d };
195
+ else if (e.key === "ArrowDown")
196
+ next = { ...hsv, v: hsv.v - d };
197
+ else if (e.key === "Home")
198
+ next = { ...hsv, s: 0 };
199
+ else if (e.key === "End")
200
+ next = { ...hsv, s: 1 };
201
+ }
202
+ if (!next)
203
+ return;
204
+ e.preventDefault();
205
+ set(next);
206
+ };
207
+ const commitKey = () => onCommit?.(latest.current);
208
+ const commitHex = () => {
209
+ if (draft === null)
210
+ return;
211
+ const n = normaliseHex(draft);
212
+ setDraft(null);
213
+ const next = n ? hexToHsv(n) : null;
214
+ if (n && next && n !== hex) {
215
+ setHsv(next);
216
+ latest.current = n;
217
+ onChange(n);
218
+ onCommit?.(n);
219
+ }
220
+ };
221
+ const pct = (n) => `${Math.round(n * 100)}%`;
222
+ const hueHex = hsvToHex({ h: hsv.h, s: 1, v: 1 });
223
+ const swatch = { "--x-swatch": hex };
224
+ return (_jsxs(Root, { role: "group", "aria-label": label, "$width": width, "$disabled": !!disabled, className: className, style: style, children: [_jsx(Area, { ref: area, style: { background: `linear-gradient(to top, ${BLACK}, transparent), linear-gradient(to right, ${WHITE}, transparent), ${hueHex}` }, "data-part": "area", ...pointer, children: _jsx(AreaThumb, { ref: areaThumb, role: "slider", tabIndex: disabled ? -1 : 0, "aria-label": `${label}: saturation and brightness`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(hsv.s * 100), "aria-valuetext": `Saturation ${pct(hsv.s)}, brightness ${pct(hsv.v)}`, "aria-disabled": disabled || undefined, "data-part": "area", onKeyDown: onKeyDown, onKeyUp: commitKey, style: { ...swatch, left: pct(hsv.s), top: pct(1 - hsv.v) } }) }), _jsx(Strip, { ref: strip, style: { background: `linear-gradient(to right, ${RAINBOW})` }, "data-part": "hue", ...pointer, children: _jsx(StripThumb, { ref: stripThumb, role: "slider", tabIndex: disabled ? -1 : 0, "aria-label": `${label}: hue`, "aria-valuemin": 0, "aria-valuemax": 360, "aria-valuenow": Math.round(hsv.h), "aria-disabled": disabled || undefined, "data-part": "hue", onKeyDown: onKeyDown, onKeyUp: commitKey, style: { "--x-swatch": hueHex, left: `${(hsv.h / 360) * 100}%` } }) }), hexInput ? (_jsxs(HexRow, { children: [_jsx("span", { className: "preview", style: swatch, "aria-hidden": true }), _jsx(MonoInput, { "aria-label": `${label}: hex`, value: draft ?? hex, disabled: disabled, spellCheck: false, maxLength: 7, onChange: (e) => setDraft(e.target.value), onBlur: commitHex, onKeyDown: (e) => {
225
+ if (e.key === "Enter") {
226
+ e.preventDefault();
227
+ commitHex();
228
+ }
229
+ else if (e.key === "Escape" && draft !== null) {
230
+ e.stopPropagation();
231
+ setDraft(null);
232
+ }
233
+ } })] })) : null] }));
234
+ }
235
+ //# sourceMappingURL=Spectrum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spectrum.js","sourceRoot":"","sources":["../../src/kit/Spectrum.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { MouseEvent, ReactNode } from "react";
2
+ import { type AppButtonProps } from "./Button.tsx";
3
+ import { type IconName } from "./Icon.tsx";
4
+ import type { AnchoredAlign, AnchoredSide } from "./Anchored.tsx";
5
+ export interface SplitButtonProps {
6
+ /** the primary action's label */
7
+ children: ReactNode;
8
+ /** the primary action */
9
+ onClick?: ((e: MouseEvent<HTMLElement>) => void) | undefined;
10
+ /** the primary action is a link instead (an anchor; `download` saves it) */
11
+ href?: string | undefined;
12
+ download?: boolean | string | undefined;
13
+ target?: string | undefined;
14
+ rel?: string | undefined;
15
+ /** MenuItem, MenuLabel and MenuDivider: the action's variants */
16
+ menu: ReactNode;
17
+ /** the menu trigger's accessible name (default "More options") */
18
+ menuLabel?: string | undefined;
19
+ variant?: AppButtonProps["variant"];
20
+ size?: AppButtonProps["size"];
21
+ icon?: IconName | (string & {}) | undefined;
22
+ loading?: boolean | undefined;
23
+ /** both halves off */
24
+ disabled?: boolean | undefined;
25
+ /** only the menu off — the primary action still works */
26
+ menuDisabled?: boolean | undefined;
27
+ /** the menu's alignment against the group (default "right") */
28
+ align?: AnchoredAlign | undefined;
29
+ side?: AnchoredSide | undefined;
30
+ width?: number | undefined;
31
+ onOpenChange?: ((open: boolean) => void) | undefined;
32
+ fullWidth?: boolean | undefined;
33
+ title?: string | undefined;
34
+ }
35
+ /**
36
+ * SplitButton: a primary action with a ▾ beside it that opens a `Menu` of
37
+ * alternatives. Reach for it when one choice is the obvious one and the
38
+ * others are its variants (a format, a scope); when no option is the default,
39
+ * use a plain `Menu` behind an `AppButton`, and when the options are peers
40
+ * shown all the time, `Segmented`.
41
+ */
42
+ export declare function SplitButton({ children, onClick, href, download, target, rel, menu, menuLabel, variant, size, icon, loading, disabled, menuDisabled, align, side, width, onOpenChange, fullWidth, title, }: SplitButtonProps): import("react").JSX.Element;
43
+ //# sourceMappingURL=SplitButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitButton.d.ts","sourceRoot":"","sources":["../../src/kit/SplitButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqBlE,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,iEAAiE;IACjE,IAAI,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAA0B,EAChF,OAAiB,EAAE,IAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EACrE,KAAe,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAC7D,EAAE,gBAAgB,+BA8BlB"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ import { AppButton } from "./Button.js";
4
+ import { Icon } from "./Icon.js";
5
+ import { Menu } from "./Menu.js";
6
+ // SplitButton: one action, and the menu of its variants beside it — "Export
7
+ // PNG ▾ → PNG / BMP". Added for upl.im's gta-viewer (1.7, UPL-242), which had
8
+ // composed it from an AppButton and a Menu with a narrow trigger.
9
+ const Group = styled.span `
10
+ display: ${(p) => (p.$full ? "flex" : "inline-flex")};
11
+ align-items: stretch;
12
+ > :first-child { flex: 1 1 auto; border-top-right-radius: 0; border-bottom-right-radius: 0; }
13
+ /* the menu's trigger: square on the joined side, and a seam in the
14
+ button's own ink so it reads on every variant */
15
+ > :last-child button {
16
+ border-top-left-radius: 0;
17
+ border-bottom-left-radius: 0;
18
+ margin-left: -1px;
19
+ padding: 0 8px;
20
+ border-left-color: color-mix(in srgb, currentColor 28%, transparent);
21
+ }
22
+ `;
23
+ /**
24
+ * SplitButton: a primary action with a ▾ beside it that opens a `Menu` of
25
+ * alternatives. Reach for it when one choice is the obvious one and the
26
+ * others are its variants (a format, a scope); when no option is the default,
27
+ * use a plain `Menu` behind an `AppButton`, and when the options are peers
28
+ * shown all the time, `Segmented`.
29
+ */
30
+ export function SplitButton({ children, onClick, href, download, target, rel, menu, menuLabel = "More options", variant = "ghost", size = "sm", icon, loading, disabled, menuDisabled, align = "right", side, width, onOpenChange, fullWidth, title, }) {
31
+ const menuOff = !!(disabled || menuDisabled || loading);
32
+ return (_jsxs(Group, { "$full": fullWidth, children: [href ? (_jsx(AppButton, { as: "a", href: href, download: download, target: target, rel: rel, variant: variant, size: size, icon: icon, loading: loading, disabled: disabled, title: title, onClick: onClick, children: children })) : (_jsx(AppButton, { variant: variant, size: size, icon: icon, loading: loading, disabled: disabled, title: title, onClick: onClick, children: children })), _jsx(Menu, { align: align, side: side, width: width, label: menuLabel, disabled: menuOff, onOpenChange: onOpenChange, trigger: (open) => (_jsx(AppButton, { variant: variant, size: size, disabled: menuOff, "aria-label": menuLabel, "aria-haspopup": "menu", "aria-expanded": open, children: _jsx(Icon, { name: open ? "chevron-up" : "chevron-down" }) })), children: menu })] }));
33
+ }
34
+ //# sourceMappingURL=SplitButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitButton.js","sourceRoot":"","sources":["../../src/kit/SplitButton.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAc,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAGlC,4EAA4E;AAC5E,8EAA8E;AAC9E,kEAAkE;AAElE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAiC;aAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;;;;;;;;;;;;CAYrD,CAAC;AAiCF;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,cAAc,EAChF,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EACrE,KAAK,GAAG,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAC3C;IACjB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,CAAC;IACxD,OAAO,CACL,MAAC,KAAK,aAAQ,SAAS,aACpB,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,SAAS,IAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,YACvL,QAAQ,GACC,CACb,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,YACtH,QAAQ,GACC,CACb,EACD,KAAC,IAAI,IACH,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,gBAAc,SAAS,mBAAgB,MAAM,mBAAgB,IAAI,YACzH,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,GAAI,GAC1C,CACb,YAEA,IAAI,GACA,IACD,CACT,CAAC;AACJ,CAAC"}
@@ -28,8 +28,27 @@ export interface AppThemeProviderProps {
28
28
  * explicit localStorage choice on this host still wins.
29
29
  */
30
30
  initialPref?: ThemePref | undefined;
31
- /** Called on every change, for a host that mirrors the preference into a cookie. */
31
+ /**
32
+ * Called when the person changes the preference (`setPref`, `cycle`), for a
33
+ * host that mirrors it into a cookie — or, with `pref`, for the host that
34
+ * owns it. Never called because the `pref` prop changed.
35
+ */
32
36
  onPrefChange?: ((pref: ThemePref) => void) | undefined;
37
+ /**
38
+ * Controlled mode (1.7): the preference is the host's, not the provider's.
39
+ * For a surface that is TOLD its theme — a renderer in a sandboxed iframe
40
+ * following its host's `uplim:theme`, a thumbnail page captured light then
41
+ * dark, an embed whose parent page owns the toggle.
42
+ *
43
+ * While `pref` is given the provider touches no storage at all: it neither
44
+ * reads its key on mount (so a stale stored value cannot win a frame) nor
45
+ * writes it, ignores other tabs' changes, and does not remember the brand
46
+ * either (`brand` and `setBrand` still apply, in memory). Every render uses
47
+ * the prop, from the first one. `setPref`/`cycle` call `onPrefChange` and
48
+ * change nothing themselves; the host decides and passes the new `pref` back.
49
+ * Pass `"system"` to follow the device's scheme under the host's control.
50
+ */
51
+ pref?: ThemePref | undefined;
33
52
  /** false when the host inlines `globalCss()` itself (SSR without a styled sheet). */
34
53
  globalStyle?: boolean | undefined;
35
54
  /**
@@ -42,7 +61,7 @@ export interface AppThemeProviderProps {
42
61
  */
43
62
  brand?: string | null | undefined;
44
63
  }
45
- export declare function AppThemeProvider({ children, storageKey, initialPref, onPrefChange, globalStyle, brand: initialBrand, }: AppThemeProviderProps): import("react").JSX.Element;
64
+ export declare function AppThemeProvider({ children, storageKey, initialPref, onPrefChange, globalStyle, brand: initialBrand, pref: controlledPref, }: AppThemeProviderProps): import("react").JSX.Element;
46
65
  export declare function useTheme(): ThemeCtx;
47
66
  /** Null outside a provider — for a component that may render in either place. */
48
67
  export declare function useThemeMaybe(): ThemeCtx | null;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiB9H,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAMpD,UAAU,QAAQ;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAkDD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,oFAAoF;IACpF,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAgC,EAChC,WAAW,EACX,YAAY,EACZ,WAAkB,EAClB,KAAK,EAAE,YAAmB,GAC3B,EAAE,qBAAqB,+BAmGvB;AAED,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AAED,iFAAiF;AACjF,wBAAgB,aAAa,IAAI,QAAQ,GAAG,IAAI,CAE/C"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiG,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAoBtI,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAMpD,UAAU,QAAQ;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAkDD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAgC,EAChC,WAAW,EACX,YAAY,EACZ,WAAkB,EAClB,KAAK,EAAE,YAAmB,EAC1B,IAAI,EAAE,cAAc,GACrB,EAAE,qBAAqB,+BAiHvB;AAED,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AAED,iFAAiF;AACjF,wBAAgB,aAAa,IAAI,QAAQ,GAAG,IAAI,CAE/C"}