@ai-matrx/design-system 0.86.339 → 0.86.341

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/controls.cjs CHANGED
@@ -119,6 +119,9 @@ __export(controls_exports, {
119
119
  TileCardGrid: () => TileCardGrid,
120
120
  TimeField: () => TimeField,
121
121
  ToolRail: () => ToolRail,
122
+ WindowChromeButton: () => WindowChromeButton,
123
+ WindowLight: () => WindowLight,
124
+ WindowLights: () => WindowLights,
122
125
  clampDraft: () => clampDraft,
123
126
  cleanUrl: () => cleanUrl,
124
127
  firstBlockingReason: () => firstBlockingReason,
@@ -1681,9 +1684,64 @@ var Textarea2 = React10.forwardRef(
1681
1684
  );
1682
1685
  Textarea2.displayName = "Textarea";
1683
1686
 
1684
- // src/controls/decision-control.tsx
1687
+ // src/controls/window-controls.tsx
1685
1688
  var React11 = __toESM(require("react"), 1);
1686
1689
  var import_jsx_runtime10 = require("react/jsx-runtime");
1690
+ var WindowLights = React11.forwardRef(
1691
+ ({ className, inactive, touch, role = "group", "aria-label": ariaLabel = "Window controls", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1692
+ "div",
1693
+ {
1694
+ ref,
1695
+ role,
1696
+ "aria-label": ariaLabel,
1697
+ "data-matrx-window-lights": "",
1698
+ "data-inactive": inactive ? "" : void 0,
1699
+ "data-touch": touch ? "" : void 0,
1700
+ className: cn("matrx-window-lights", className),
1701
+ ...props
1702
+ }
1703
+ )
1704
+ );
1705
+ WindowLights.displayName = "WindowLights";
1706
+ function lightGlyph(kind, restores) {
1707
+ if (kind === "close") return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(XIcon, { "aria-hidden": "true" });
1708
+ if (kind === "minimize") return restores ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Maximize2Icon, { "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MinusIcon, { "aria-hidden": "true" });
1709
+ return restores ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Minimize2Icon, { "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Maximize2Icon, { "aria-hidden": "true" });
1710
+ }
1711
+ var WindowLight = React11.forwardRef(
1712
+ ({ className, kind, restores = false, type, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1713
+ "button",
1714
+ {
1715
+ ref,
1716
+ type: type ?? "button",
1717
+ "data-matrx-window-light": kind,
1718
+ "data-restores": restores ? "" : void 0,
1719
+ className: cn("matrx-window-light", className),
1720
+ ...props,
1721
+ children: lightGlyph(kind, restores)
1722
+ }
1723
+ )
1724
+ );
1725
+ WindowLight.displayName = "WindowLight";
1726
+ var WindowChromeButton = React11.forwardRef(
1727
+ ({ className, icon, type, title, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1728
+ "button",
1729
+ {
1730
+ ref,
1731
+ type: type ?? "button",
1732
+ "data-matrx-window-chrome-button": "",
1733
+ className: cn("matrx-window-chrome-button", className),
1734
+ title: title ?? props["aria-label"],
1735
+ ...props,
1736
+ children: icon
1737
+ }
1738
+ )
1739
+ );
1740
+ WindowChromeButton.displayName = "WindowChromeButton";
1741
+
1742
+ // src/controls/decision-control.tsx
1743
+ var React12 = __toESM(require("react"), 1);
1744
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1687
1745
  function find(items, value) {
1688
1746
  if (!items || !value) return null;
1689
1747
  for (const i of items) {
@@ -1694,21 +1752,21 @@ function find(items, value) {
1694
1752
  return null;
1695
1753
  }
1696
1754
  function WayOutEntries({ items, chosen, onPick }) {
1697
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(React11.Fragment, { children: [
1698
- item.group ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1699
- index > 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuSeparator, {}) : null,
1700
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuLabel, { "data-way-out-group": "", children: item.group })
1755
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, { children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(React12.Fragment, { children: [
1756
+ item.group ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1757
+ index > 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuSeparator, {}) : null,
1758
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuLabel, { "data-way-out-group": "", children: item.group })
1701
1759
  ] }) : null,
1702
- item.items?.length ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenuSub, { children: [
1703
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenuSubTrigger, { "data-way-out": item.value, className: "text-foreground", children: [
1704
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex-1", children: item.label }),
1705
- find(item.items, chosen) ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadixCheckIcon, { className: "mr-1 size-3.5", "aria-hidden": "true" }) : null
1760
+ item.items?.length ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenuSub, { children: [
1761
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenuSubTrigger, { "data-way-out": item.value, className: "text-foreground", children: [
1762
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "flex-1", children: item.label }),
1763
+ find(item.items, chosen) ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(RadixCheckIcon, { className: "mr-1 size-3.5", "aria-hidden": "true" }) : null
1706
1764
  ] }),
1707
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuSubContent, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(WayOutEntries, { items: item.items, chosen, onPick }) })
1708
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenuItem, { "data-way-out": item.value, className: "text-foreground", onSelect: () => onPick(item.value), children: [
1709
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex-1", children: item.label }),
1710
- item.meta ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-[11px] text-muted-foreground", children: item.meta }) : null,
1711
- chosen === item.value ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadixCheckIcon, { className: "size-3.5", "aria-hidden": "true" }) : null
1765
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuSubContent, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(WayOutEntries, { items: item.items, chosen, onPick }) })
1766
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenuItem, { "data-way-out": item.value, className: "text-foreground", onSelect: () => onPick(item.value), children: [
1767
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "flex-1", children: item.label }),
1768
+ item.meta ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-[11px] text-muted-foreground", children: item.meta }) : null,
1769
+ chosen === item.value ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(RadixCheckIcon, { className: "size-3.5", "aria-hidden": "true" }) : null
1712
1770
  ] })
1713
1771
  ] }, item.value)) });
1714
1772
  }
@@ -1736,8 +1794,8 @@ function DecisionControl({
1736
1794
  className,
1737
1795
  "aria-label": ariaLabel
1738
1796
  }) {
1739
- const [otherOpen, setOtherOpen] = React11.useState(false);
1740
- const [chipOpen, setChipOpen] = React11.useState(false);
1797
+ const [otherOpen, setOtherOpen] = React12.useState(false);
1798
+ const [chipOpen, setChipOpen] = React12.useState(false);
1741
1799
  const otherOn = value === "other" || otherOpen;
1742
1800
  const word = (a) => labels?.[a] ?? (a === "yes" ? "Yes" : a === "no" ? "No" : "Other");
1743
1801
  const yesMode = value === "yes" && Boolean(yesKinds?.length);
@@ -1745,18 +1803,18 @@ function DecisionControl({
1745
1803
  const chosen = yesMode ? find(yesKinds, yesKind) : otherMode ? find(wayOut, wayOutValue) : null;
1746
1804
  const chipLabel = yesMode ? chosen?.label ?? pickerPlaceholder : otherMode ? chosen?.label ?? (skipped ? skippedLabel : null) : null;
1747
1805
  const primary = yesMode && yesKinds?.[0]?.value === yesKind;
1748
- const wayOutMenu = /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1749
- wayOut?.length ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1750
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(WayOutEntries, { items: wayOut, chosen: wayOutValue, onPick: (v) => onWayOut?.(v) }),
1751
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuSeparator, {})
1806
+ const wayOutMenu = /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1807
+ wayOut?.length ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1808
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(WayOutEntries, { items: wayOut, chosen: wayOutValue, onPick: (v) => onWayOut?.(v) }),
1809
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuSeparator, {})
1752
1810
  ] }) : null,
1753
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenuItem, { "data-way-out": "skip", className: "text-foreground", onSelect: onSkip, children: [
1754
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex-1", children: skipLabel }),
1755
- skipped ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RadixCheckIcon, { className: "size-3.5", "aria-hidden": "true" }) : null
1811
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenuItem, { "data-way-out": "skip", className: "text-foreground", onSelect: onSkip, children: [
1812
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "flex-1", children: skipLabel }),
1813
+ skipped ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(RadixCheckIcon, { className: "size-3.5", "aria-hidden": "true" }) : null
1756
1814
  ] })
1757
1815
  ] });
1758
1816
  const stage = size === "stage";
1759
- const button = (a) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "data-decision-slot": a, "data-suggested": suggested === a ? "" : void 0, className: cn("inline-flex max-sm:flex-1", suggested === a && ring), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1817
+ const button = (a) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { "data-decision-slot": a, "data-suggested": suggested === a ? "" : void 0, className: cn("inline-flex max-sm:flex-1", suggested === a && ring), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1760
1818
  Button2,
1761
1819
  {
1762
1820
  variant: value === a ? a === "no" ? "danger" : "primary" : "outline",
@@ -1770,7 +1828,7 @@ function DecisionControl({
1770
1828
  children: word(a)
1771
1829
  }
1772
1830
  ) });
1773
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1831
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1774
1832
  "div",
1775
1833
  {
1776
1834
  role: "group",
@@ -1782,7 +1840,7 @@ function DecisionControl({
1782
1840
  children: [
1783
1841
  button("yes"),
1784
1842
  button("no"),
1785
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1843
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1786
1844
  DropdownMenu,
1787
1845
  {
1788
1846
  open: otherOpen,
@@ -1794,7 +1852,7 @@ function DecisionControl({
1794
1852
  setOtherOpen(next);
1795
1853
  },
1796
1854
  children: [
1797
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "data-decision-slot": "other", "data-suggested": suggested === "other" ? "" : void 0, className: cn("inline-flex max-sm:flex-1", suggested === "other" && ring), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1855
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { "data-decision-slot": "other", "data-suggested": suggested === "other" ? "" : void 0, className: cn("inline-flex max-sm:flex-1", suggested === "other" && ring), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1798
1856
  Button2,
1799
1857
  {
1800
1858
  variant: otherOn ? "primary" : "outline",
@@ -1807,12 +1865,12 @@ function DecisionControl({
1807
1865
  children: word("other")
1808
1866
  }
1809
1867
  ) }) }),
1810
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuContent, { align: "start", className: "min-w-48", children: wayOutMenu })
1868
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuContent, { align: "start", className: "min-w-48", children: wayOutMenu })
1811
1869
  ]
1812
1870
  }
1813
1871
  ),
1814
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn("flex min-w-0 items-center sm:w-40", chipLabel === null && "max-sm:hidden", "max-sm:w-full"), "data-decision-picker-slot": "", children: chipLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DropdownMenu, { open: chipOpen, onOpenChange: setChipOpen, children: [
1815
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1872
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("flex min-w-0 items-center sm:w-40", chipLabel === null && "max-sm:hidden", "max-sm:w-full"), "data-decision-picker-slot": "", children: chipLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DropdownMenu, { open: chipOpen, onOpenChange: setChipOpen, children: [
1873
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1816
1874
  Chip,
1817
1875
  {
1818
1876
  asChild: true,
@@ -1821,10 +1879,10 @@ function DecisionControl({
1821
1879
  "data-decision-picker": "",
1822
1880
  "data-picker-primary": primary ? "" : void 0,
1823
1881
  "aria-label": `${yesMode ? word("yes") : word("other")}: ${chipLabel}`,
1824
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { type: "button", disabled })
1882
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { type: "button", disabled })
1825
1883
  }
1826
1884
  ) }),
1827
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuContent, { align: "start", className: "min-w-48", children: yesMode ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(WayOutEntries, { items: yesKinds ?? [], chosen: yesKind, onPick: (v) => onYesKind?.(v) }) : wayOutMenu })
1885
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuContent, { align: "start", className: "min-w-48", children: yesMode ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(WayOutEntries, { items: yesKinds ?? [], chosen: yesKind, onPick: (v) => onYesKind?.(v) }) : wayOutMenu })
1828
1886
  ] }) })
1829
1887
  ]
1830
1888
  }
@@ -1833,7 +1891,7 @@ function DecisionControl({
1833
1891
 
1834
1892
  // src/controls/date-field.tsx
1835
1893
  var import_dates2 = require("@ai-matrx/kit/dates");
1836
- var React16 = __toESM(require("react"), 1);
1894
+ var React17 = __toESM(require("react"), 1);
1837
1895
 
1838
1896
  // src/bottom-sheet.tsx
1839
1897
  var import_react_visually_hidden = require("@radix-ui/react-visually-hidden");
@@ -1841,13 +1899,13 @@ var import_vaul2 = require("vaul");
1841
1899
 
1842
1900
  // src/drawer.tsx
1843
1901
  var import_react_tree = require("@ai-matrx/kit/react-tree");
1844
- var React14 = __toESM(require("react"), 1);
1902
+ var React15 = __toESM(require("react"), 1);
1845
1903
  var import_vaul = require("vaul");
1846
1904
 
1847
1905
  // src/floating-layer.tsx
1848
1906
  var import_react_focus_scope = require("@radix-ui/react-focus-scope");
1849
1907
  var import_react_slot3 = require("@radix-ui/react-slot");
1850
- var React12 = __toESM(require("react"), 1);
1908
+ var React13 = __toESM(require("react"), 1);
1851
1909
 
1852
1910
  // src/title-tooltips.ts
1853
1911
  function tooltipSide(el, fallback) {
@@ -2233,7 +2291,7 @@ function install(doc) {
2233
2291
  }
2234
2292
 
2235
2293
  // src/floating-layer.tsx
2236
- var import_jsx_runtime11 = require("react/jsx-runtime");
2294
+ var import_jsx_runtime12 = require("react/jsx-runtime");
2237
2295
  var FLOATING_LAYER_ATTR = "data-matrx-floating-layer";
2238
2296
  var REGISTRY_SLOT = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.modal-layer-registry");
2239
2297
  var registryHost = globalThis;
@@ -2272,7 +2330,7 @@ function isModalLayerOpen() {
2272
2330
  return registry.count > 0;
2273
2331
  }
2274
2332
  function useModalLayer(active) {
2275
- React12.useLayoutEffect(() => active ? registerModalLayer() : void 0, [active]);
2333
+ React13.useLayoutEffect(() => active ? registerModalLayer() : void 0, [active]);
2276
2334
  }
2277
2335
  var POPPER_WRAPPER = "[data-radix-popper-content-wrapper]";
2278
2336
  function isInsideFloatingLayer(target) {
@@ -2287,8 +2345,8 @@ function keepFloatingLayersInside(handler) {
2287
2345
  };
2288
2346
  }
2289
2347
  var preventAutoFocus = (event) => event.preventDefault();
2290
- var FloatingLayer = React12.forwardRef(({ children }, ref) => {
2291
- const [opener] = React12.useState(
2348
+ var FloatingLayer = React13.forwardRef(({ children }, ref) => {
2349
+ const [opener] = React13.useState(
2292
2350
  () => typeof document === "undefined" ? null : document.activeElement
2293
2351
  );
2294
2352
  const returnFocus = (event) => {
@@ -2299,7 +2357,7 @@ var FloatingLayer = React12.forwardRef(({ children }, ref) => {
2299
2357
  opener.focus({ preventScroll: true });
2300
2358
  }
2301
2359
  };
2302
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2360
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2303
2361
  import_react_focus_scope.FocusScope,
2304
2362
  {
2305
2363
  asChild: true,
@@ -2307,7 +2365,7 @@ var FloatingLayer = React12.forwardRef(({ children }, ref) => {
2307
2365
  loop: false,
2308
2366
  onMountAutoFocus: preventAutoFocus,
2309
2367
  onUnmountAutoFocus: returnFocus,
2310
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2368
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2311
2369
  import_react_slot3.Slot,
2312
2370
  {
2313
2371
  ref,
@@ -2322,25 +2380,25 @@ var FloatingLayer = React12.forwardRef(({ children }, ref) => {
2322
2380
  FloatingLayer.displayName = "FloatingLayer";
2323
2381
 
2324
2382
  // src/radix-dialog-modal-context.tsx
2325
- var React13 = __toESM(require("react"), 1);
2326
- var import_jsx_runtime12 = require("react/jsx-runtime");
2383
+ var React14 = __toESM(require("react"), 1);
2384
+ var import_jsx_runtime13 = require("react/jsx-runtime");
2327
2385
  var CONTEXT_SLOT2 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.dialog-modal-context");
2328
2386
  var contextRegistry2 = globalThis;
2329
- var RadixDialogModalContext = contextRegistry2[CONTEXT_SLOT2] ??= React13.createContext(true);
2387
+ var RadixDialogModalContext = contextRegistry2[CONTEXT_SLOT2] ??= React14.createContext(true);
2330
2388
  function RadixDialogModalProvider({
2331
2389
  children,
2332
2390
  modal
2333
2391
  }) {
2334
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RadixDialogModalContext.Provider, { value: modal, children });
2392
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RadixDialogModalContext.Provider, { value: modal, children });
2335
2393
  }
2336
2394
  function useRadixDialogModal() {
2337
- return React13.useContext(RadixDialogModalContext);
2395
+ return React14.useContext(RadixDialogModalContext);
2338
2396
  }
2339
2397
 
2340
2398
  // src/drawer.tsx
2341
- var import_jsx_runtime13 = require("react/jsx-runtime");
2342
- var DrawerDirectionContext = React14.createContext("bottom");
2343
- var useDrawerDirection = () => React14.useContext(DrawerDirectionContext);
2399
+ var import_jsx_runtime14 = require("react/jsx-runtime");
2400
+ var DrawerDirectionContext = React15.createContext("bottom");
2401
+ var useDrawerDirection = () => React15.useContext(DrawerDirectionContext);
2344
2402
  var Drawer = ({
2345
2403
  children,
2346
2404
  shouldScaleBackground = true,
@@ -2354,7 +2412,7 @@ var Drawer = ({
2354
2412
  }
2355
2413
  onOpenChange?.(open);
2356
2414
  };
2357
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RadixDialogModalProvider, { modal: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DrawerDirectionContext.Provider, { value: direction, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2415
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(RadixDialogModalProvider, { modal: true, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DrawerDirectionContext.Provider, { value: direction, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2358
2416
  import_vaul.Drawer.Root,
2359
2417
  {
2360
2418
  modal: true,
@@ -2370,7 +2428,7 @@ Drawer.displayName = "Drawer";
2370
2428
  var DrawerTrigger = import_vaul.Drawer.Trigger;
2371
2429
  var DrawerPortal = import_vaul.Drawer.Portal;
2372
2430
  var DrawerClose = import_vaul.Drawer.Close;
2373
- var DrawerOverlay = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2431
+ var DrawerOverlay = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2374
2432
  import_vaul.Drawer.Overlay,
2375
2433
  {
2376
2434
  ref,
@@ -2383,7 +2441,7 @@ var DrawerOverlay = React14.forwardRef(({ className, ...props }, ref) => /* @__P
2383
2441
  }
2384
2442
  ));
2385
2443
  DrawerOverlay.displayName = import_vaul.Drawer.Overlay.displayName;
2386
- var DrawerDescription = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2444
+ var DrawerDescription = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2387
2445
  import_vaul.Drawer.Description,
2388
2446
  {
2389
2447
  ref,
@@ -2393,9 +2451,9 @@ var DrawerDescription = React14.forwardRef(({ className, ...props }, ref) => /*
2393
2451
  }
2394
2452
  ));
2395
2453
  DrawerDescription.displayName = import_vaul.Drawer.Description.displayName;
2396
- var DrawerContentPrimitive = React14.forwardRef(({ onInteractOutside, ...props }, ref) => {
2454
+ var DrawerContentPrimitive = React15.forwardRef(({ onInteractOutside, ...props }, ref) => {
2397
2455
  useModalLayer(true);
2398
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2456
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2399
2457
  import_vaul.Drawer.Content,
2400
2458
  {
2401
2459
  "data-matrx-entrance": "none",
@@ -2419,13 +2477,13 @@ var SIZE_CLASSES = {
2419
2477
  left: { adaptive: "w-auto max-w-[92vw]", full: "h-dvh w-[92vw] max-w-sm" },
2420
2478
  right: { adaptive: "w-auto max-w-[92vw]", full: "h-dvh w-[92vw] max-w-sm" }
2421
2479
  };
2422
- var DrawerContent = React14.forwardRef(({ className, children, size = "adaptive", showHandle, ...props }, ref) => {
2480
+ var DrawerContent = React15.forwardRef(({ className, children, size = "adaptive", showHandle, ...props }, ref) => {
2423
2481
  const direction = useDrawerDirection();
2424
2482
  const hasDescription = (0, import_react_tree.treeContainsComponent)(children, DrawerDescription) || (0, import_react_tree.treeContainsComponent)(children, import_vaul.Drawer.Description);
2425
2483
  const withHandle = showHandle ?? (direction === "bottom" || direction === "top");
2426
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(DrawerPortal, { children: [
2427
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DrawerOverlay, {}),
2428
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
2484
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(DrawerPortal, { children: [
2485
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DrawerOverlay, {}),
2486
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2429
2487
  DrawerContentPrimitive,
2430
2488
  {
2431
2489
  ref,
@@ -2442,7 +2500,7 @@ var DrawerContent = React14.forwardRef(({ className, children, size = "adaptive"
2442
2500
  children: [
2443
2501
  withHandle ? (
2444
2502
  // Rule 3: the pill is 4px; the TARGET is 44px.
2445
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2503
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2446
2504
  "div",
2447
2505
  {
2448
2506
  "aria-hidden": true,
@@ -2451,7 +2509,7 @@ var DrawerContent = React14.forwardRef(({ className, children, size = "adaptive"
2451
2509
  "flex min-h-11 w-full shrink-0 cursor-grab items-center justify-center active:cursor-grabbing",
2452
2510
  direction === "top" && "order-last"
2453
2511
  ),
2454
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "h-1 w-[100px] rounded-full bg-muted" })
2512
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "h-1 w-[100px] rounded-full bg-muted" })
2455
2513
  }
2456
2514
  )
2457
2515
  ) : null,
@@ -2465,7 +2523,7 @@ DrawerContent.displayName = "DrawerContent";
2465
2523
  var DrawerHeader = ({
2466
2524
  className,
2467
2525
  ...props
2468
- }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2526
+ }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2469
2527
  "div",
2470
2528
  {
2471
2529
  "data-slot": "drawer-header",
@@ -2480,7 +2538,7 @@ DrawerHeader.displayName = "DrawerHeader";
2480
2538
  var DrawerBody = ({
2481
2539
  className,
2482
2540
  ...props
2483
- }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2541
+ }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2484
2542
  "div",
2485
2543
  {
2486
2544
  "data-slot": "drawer-body",
@@ -2492,7 +2550,7 @@ DrawerBody.displayName = "DrawerBody";
2492
2550
  var DrawerFooter = ({
2493
2551
  className,
2494
2552
  ...props
2495
- }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2553
+ }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2496
2554
  "div",
2497
2555
  {
2498
2556
  "data-slot": "drawer-footer",
@@ -2501,7 +2559,7 @@ var DrawerFooter = ({
2501
2559
  }
2502
2560
  );
2503
2561
  DrawerFooter.displayName = "DrawerFooter";
2504
- var DrawerTitle = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2562
+ var DrawerTitle = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2505
2563
  import_vaul.Drawer.Title,
2506
2564
  {
2507
2565
  ref,
@@ -2516,7 +2574,7 @@ var DrawerTitle = React14.forwardRef(({ className, ...props }, ref) => /* @__PUR
2516
2574
  DrawerTitle.displayName = import_vaul.Drawer.Title.displayName;
2517
2575
 
2518
2576
  // src/bottom-sheet.tsx
2519
- var import_jsx_runtime14 = require("react/jsx-runtime");
2577
+ var import_jsx_runtime15 = require("react/jsx-runtime");
2520
2578
  function BottomSheet({
2521
2579
  open,
2522
2580
  onOpenChange,
@@ -2527,15 +2585,15 @@ function BottomSheet({
2527
2585
  children
2528
2586
  }) {
2529
2587
  const container = usePortalContainer();
2530
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Drawer, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_vaul2.Drawer.Portal, { container, children: [
2531
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2588
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Drawer, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_vaul2.Drawer.Portal, { container, children: [
2589
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2532
2590
  import_vaul2.Drawer.Overlay,
2533
2591
  {
2534
2592
  className: cn("fixed inset-0 z-[10000] bg-[var(--matrx-overlay-scrim)]", "fixed inset-0 z-[10000]"),
2535
2593
  style: { background: "var(--matrx-overlay-scrim-drawer)" }
2536
2594
  }
2537
2595
  ),
2538
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2596
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
2539
2597
  DrawerContentPrimitive,
2540
2598
  {
2541
2599
  className: cn(
@@ -2554,11 +2612,11 @@ function BottomSheet({
2554
2612
  borderBottom: "none"
2555
2613
  } : void 0,
2556
2614
  children: [
2557
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_react_visually_hidden.VisuallyHidden, { children: [
2558
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_vaul2.Drawer.Title, { children: title }),
2559
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_vaul2.Drawer.Description, { children: "Bottom sheet panel." })
2615
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react_visually_hidden.VisuallyHidden, { children: [
2616
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_vaul2.Drawer.Title, { children: title }),
2617
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_vaul2.Drawer.Description, { children: "Bottom sheet panel." })
2560
2618
  ] }),
2561
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "mx-auto mt-3 mb-1 h-1.5 w-10 rounded-full bg-muted-foreground/30 flex-shrink-0" }),
2619
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "mx-auto mt-3 mb-1 h-1.5 w-10 rounded-full bg-muted-foreground/30 flex-shrink-0" }),
2562
2620
  children
2563
2621
  ]
2564
2622
  }
@@ -2568,8 +2626,8 @@ function BottomSheet({
2568
2626
 
2569
2627
  // src/popover.tsx
2570
2628
  var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"), 1);
2571
- var React15 = __toESM(require("react"), 1);
2572
- var import_jsx_runtime15 = require("react/jsx-runtime");
2629
+ var React16 = __toESM(require("react"), 1);
2630
+ var import_jsx_runtime16 = require("react/jsx-runtime");
2573
2631
  var Popover = PopoverPrimitive.Root;
2574
2632
  var PopoverTrigger = PopoverPrimitive.Trigger;
2575
2633
  var PopoverAnchor = PopoverPrimitive.Anchor;
@@ -2588,7 +2646,7 @@ var POPOVER_PADDING_CLASS = {
2588
2646
  md: "p-3",
2589
2647
  default: "p-4"
2590
2648
  };
2591
- var PopoverContent = React15.forwardRef(
2649
+ var PopoverContent = React16.forwardRef(
2592
2650
  ({
2593
2651
  className,
2594
2652
  align = "center",
@@ -2604,7 +2662,7 @@ var PopoverContent = React15.forwardRef(
2604
2662
  ...props
2605
2663
  }, ref) => {
2606
2664
  const portalContainer = usePortalContainer(container);
2607
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(PopoverPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2665
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2608
2666
  PopoverPrimitive.Content,
2609
2667
  {
2610
2668
  ref,
@@ -2792,9 +2850,9 @@ function monthGrid(year, month, firstDay) {
2792
2850
  var TIME_SLOTS = Array.from({ length: 48 }, (_, i) => `${pad(Math.floor(i / 2))}:${i % 2 ? "30" : "00"}`);
2793
2851
 
2794
2852
  // src/controls/date-field.tsx
2795
- var import_jsx_runtime16 = require("react/jsx-runtime");
2853
+ var import_jsx_runtime17 = require("react/jsx-runtime");
2796
2854
  var sameDay = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
2797
- var DateField = React16.forwardRef(
2855
+ var DateField = React17.forwardRef(
2798
2856
  ({
2799
2857
  value,
2800
2858
  onValueChange,
@@ -2817,15 +2875,15 @@ var DateField = React16.forwardRef(
2817
2875
  const word = emptyLabel ?? (mode === "time" ? "Pick a time" : "Pick a date");
2818
2876
  const dayText = day ? formatDay(day, locale) : "";
2819
2877
  const timeText = time ? formatTime(time, locale) : "";
2820
- const [dayDraft, setDayDraft] = React16.useState(null);
2821
- const [timeDraft, setTimeDraft] = React16.useState(null);
2822
- const [dayInvalid, setDayInvalid] = React16.useState(false);
2823
- const [timeInvalid, setTimeInvalid] = React16.useState(false);
2824
- const [open, setOpen] = React16.useState(false);
2825
- const dayRef = React16.useRef(null);
2826
- const timeRef = React16.useRef(null);
2878
+ const [dayDraft, setDayDraft] = React17.useState(null);
2879
+ const [timeDraft, setTimeDraft] = React17.useState(null);
2880
+ const [dayInvalid, setDayInvalid] = React17.useState(false);
2881
+ const [timeInvalid, setTimeInvalid] = React17.useState(false);
2882
+ const [open, setOpen] = React17.useState(false);
2883
+ const dayRef = React17.useRef(null);
2884
+ const timeRef = React17.useRef(null);
2827
2885
  const hasDraft = dayDraft !== null || timeDraft !== null;
2828
- React16.useEffect(() => {
2886
+ React17.useEffect(() => {
2829
2887
  if (!hasDraft) return;
2830
2888
  const onKey = (e) => {
2831
2889
  if (e.key !== "Escape") return;
@@ -2921,20 +2979,20 @@ var DateField = React16.forwardRef(
2921
2979
  }
2922
2980
  };
2923
2981
  const panelKind = hasDay ? "day" : "time";
2924
- const panel = panelKind === "day" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2982
+ const panel = panelKind === "day" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2925
2983
  CalendarGrid,
2926
2984
  {
2927
2985
  value: day,
2928
2986
  locale,
2929
2987
  onPick: pickDay,
2930
2988
  onClose: () => setOpen(false),
2931
- footer: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
2932
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("button", { type: "button", className: "matrx-date-panel-action", onClick: () => pickDay((0, import_dates2.toDateOnly)(/* @__PURE__ */ new Date())), children: "Today" }),
2933
- !empty && clearable ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("button", { type: "button", className: "matrx-date-panel-action", onClick: clear, children: "Clear" }) : null
2989
+ footer: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
2990
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", className: "matrx-date-panel-action", onClick: () => pickDay((0, import_dates2.toDateOnly)(/* @__PURE__ */ new Date())), children: "Today" }),
2991
+ !empty && clearable ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", className: "matrx-date-panel-action", onClick: clear, children: "Clear" }) : null
2934
2992
  ] })
2935
2993
  }
2936
- ) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TimeList, { value: time, locale, onPick: pickTime, onClose: () => setOpen(false) });
2937
- const glyph = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2994
+ ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TimeList, { value: time, locale, onPick: pickTime, onClose: () => setOpen(false) });
2995
+ const glyph = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2938
2996
  "button",
2939
2997
  {
2940
2998
  type: "button",
@@ -2945,10 +3003,10 @@ var DateField = React16.forwardRef(
2945
3003
  "aria-expanded": open,
2946
3004
  "data-matrx-date-trigger": "",
2947
3005
  onClick: () => setOpen((o) => !o),
2948
- children: hasDay ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(CalendarIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ClockIcon, {})
3006
+ children: hasDay ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(CalendarIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ClockIcon, {})
2949
3007
  }
2950
3008
  );
2951
- const capsule = /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
3009
+ const capsule = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2952
3010
  "div",
2953
3011
  {
2954
3012
  ref,
@@ -2970,7 +3028,7 @@ var DateField = React16.forwardRef(
2970
3028
  },
2971
3029
  children: [
2972
3030
  glyph,
2973
- hasDay ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3031
+ hasDay ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2974
3032
  "input",
2975
3033
  {
2976
3034
  ref: dayRef,
@@ -2995,7 +3053,7 @@ var DateField = React16.forwardRef(
2995
3053
  onKeyDown: inputKeys("day")
2996
3054
  }
2997
3055
  ) : null,
2998
- hasTime ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3056
+ hasTime ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2999
3057
  "input",
3000
3058
  {
3001
3059
  ref: timeRef,
@@ -3021,19 +3079,19 @@ var DateField = React16.forwardRef(
3021
3079
  onKeyDown: inputKeys("time")
3022
3080
  }
3023
3081
  ) : null,
3024
- clearable && !empty && !disabled ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("button", { type: "button", "aria-label": "Clear", "data-matrx-date-clear": "", onClick: clear, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(XIcon, {}) }) : null
3082
+ clearable && !empty && !disabled ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", "aria-label": "Clear", "data-matrx-date-clear": "", onClick: clear, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(XIcon, {}) }) : null
3025
3083
  ]
3026
3084
  }
3027
3085
  );
3028
3086
  if (isMobile) {
3029
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
3087
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
3030
3088
  capsule,
3031
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BottomSheet, { open, onOpenChange: setOpen, title: hasDay ? "Pick a date" : "Pick a time", surface: "solid", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "matrx-date-sheet", children: panel }) })
3089
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BottomSheet, { open, onOpenChange: setOpen, title: hasDay ? "Pick a date" : "Pick a time", surface: "solid", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "matrx-date-sheet", children: panel }) })
3032
3090
  ] });
3033
3091
  }
3034
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
3035
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverAnchor, { asChild: true, children: capsule }),
3036
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3092
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
3093
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverAnchor, { asChild: true, children: capsule }),
3094
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3037
3095
  PopoverContent,
3038
3096
  {
3039
3097
  sizing: "content",
@@ -3052,9 +3110,9 @@ var DateField = React16.forwardRef(
3052
3110
  }
3053
3111
  );
3054
3112
  DateField.displayName = "DateField";
3055
- var DateTimeField = React16.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DateField, { ref, ...props, mode: "datetime" }));
3113
+ var DateTimeField = React17.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DateField, { ref, ...props, mode: "datetime" }));
3056
3114
  DateTimeField.displayName = "DateTimeField";
3057
- var TimeField = React16.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DateField, { ref, ...props, mode: "time" }));
3115
+ var TimeField = React17.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DateField, { ref, ...props, mode: "time" }));
3058
3116
  TimeField.displayName = "TimeField";
3059
3117
  function CalendarGrid({
3060
3118
  value,
@@ -3065,15 +3123,15 @@ function CalendarGrid({
3065
3123
  }) {
3066
3124
  const selected = (0, import_dates2.parseDateOnly)(value);
3067
3125
  const today = /* @__PURE__ */ new Date();
3068
- const [focus, setFocus] = React16.useState(() => selected ?? today);
3069
- const gridRef = React16.useRef(null);
3126
+ const [focus, setFocus] = React17.useState(() => selected ?? today);
3127
+ const gridRef = React17.useRef(null);
3070
3128
  const firstDay = weekStart(locale);
3071
3129
  const days = monthGrid(focus.getFullYear(), focus.getMonth(), firstDay);
3072
3130
  const weekdayFmt = new Intl.DateTimeFormat(locale, { weekday: "short" });
3073
3131
  const weekdayLong = new Intl.DateTimeFormat(locale, { weekday: "long" });
3074
3132
  const monthFmt = new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" });
3075
3133
  const dayLabel = new Intl.DateTimeFormat(locale, { weekday: "long", month: "long", day: "numeric", year: "numeric" });
3076
- React16.useEffect(() => {
3134
+ React17.useEffect(() => {
3077
3135
  gridRef.current?.querySelector('[tabindex="0"]')?.focus();
3078
3136
  }, [focus]);
3079
3137
  const move = (days2, months = 0) => setFocus((f) => {
@@ -3107,18 +3165,18 @@ function CalendarGrid({
3107
3165
  }
3108
3166
  };
3109
3167
  const headers = days.slice(0, 7);
3110
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "matrx-date-panel", "data-matrx-date-panel": "calendar", children: [
3111
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "matrx-date-panel-head", children: [
3112
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("button", { type: "button", className: "matrx-date-panel-nav", "aria-label": "Previous month", onClick: () => move(0, -1), children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChevronLeftIcon, {}) }),
3113
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "matrx-date-panel-title", "aria-live": "polite", children: monthFmt.format(focus) }),
3114
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("button", { type: "button", className: "matrx-date-panel-nav", "aria-label": "Next month", onClick: () => move(0, 1), children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChevronRightIcon, {}) })
3168
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "matrx-date-panel", "data-matrx-date-panel": "calendar", children: [
3169
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "matrx-date-panel-head", children: [
3170
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", className: "matrx-date-panel-nav", "aria-label": "Previous month", onClick: () => move(0, -1), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ChevronLeftIcon, {}) }),
3171
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "matrx-date-panel-title", "aria-live": "polite", children: monthFmt.format(focus) }),
3172
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", className: "matrx-date-panel-nav", "aria-label": "Next month", onClick: () => move(0, 1), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ChevronRightIcon, {}) })
3115
3173
  ] }),
3116
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { ref: gridRef, role: "grid", "aria-label": monthFmt.format(focus), className: "matrx-date-grid", onKeyDown, children: [
3117
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { role: "row", className: "matrx-date-row", children: headers.map((d) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { role: "columnheader", "aria-label": weekdayLong.format(d), className: "matrx-date-weekday", children: weekdayFmt.format(d).slice(0, 2) }, d.getDay())) }),
3118
- [0, 1, 2, 3, 4, 5].map((w) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { role: "row", className: "matrx-date-row", children: days.slice(w * 7, w * 7 + 7).map((d) => {
3174
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { ref: gridRef, role: "grid", "aria-label": monthFmt.format(focus), className: "matrx-date-grid", onKeyDown, children: [
3175
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { role: "row", className: "matrx-date-row", children: headers.map((d) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { role: "columnheader", "aria-label": weekdayLong.format(d), className: "matrx-date-weekday", children: weekdayFmt.format(d).slice(0, 2) }, d.getDay())) }),
3176
+ [0, 1, 2, 3, 4, 5].map((w) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { role: "row", className: "matrx-date-row", children: days.slice(w * 7, w * 7 + 7).map((d) => {
3119
3177
  const isSelected = selected ? sameDay(d, selected) : false;
3120
3178
  const isFocus = sameDay(d, focus);
3121
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3179
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3122
3180
  "button",
3123
3181
  {
3124
3182
  type: "button",
@@ -3138,7 +3196,7 @@ function CalendarGrid({
3138
3196
  ) }, d.toISOString());
3139
3197
  }) }, w))
3140
3198
  ] }),
3141
- footer ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "matrx-date-panel-foot", children: footer }) : null
3199
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "matrx-date-panel-foot", children: footer }) : null
3142
3200
  ] });
3143
3201
  }
3144
3202
  function TimeList({
@@ -3147,10 +3205,10 @@ function TimeList({
3147
3205
  onPick,
3148
3206
  onClose
3149
3207
  }) {
3150
- const listRef = React16.useRef(null);
3208
+ const listRef = React17.useRef(null);
3151
3209
  const start = value ? TIME_SLOTS.findIndex((s) => s >= value) : TIME_SLOTS.indexOf("09:00");
3152
- const [active, setActive] = React16.useState(start < 0 ? TIME_SLOTS.length - 1 : start);
3153
- React16.useEffect(() => {
3210
+ const [active, setActive] = React17.useState(start < 0 ? TIME_SLOTS.length - 1 : start);
3211
+ React17.useEffect(() => {
3154
3212
  const el = listRef.current?.querySelector(`[data-index="${active}"]`);
3155
3213
  el?.focus();
3156
3214
  el?.scrollIntoView?.({ block: "nearest" });
@@ -3170,7 +3228,7 @@ function TimeList({
3170
3228
  run();
3171
3229
  }
3172
3230
  };
3173
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { ref: listRef, role: "listbox", "aria-label": "Times", className: "matrx-date-panel matrx-time-list", onKeyDown, children: TIME_SLOTS.map((slot, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3231
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { ref: listRef, role: "listbox", "aria-label": "Times", className: "matrx-date-panel matrx-time-list", onKeyDown, children: TIME_SLOTS.map((slot, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3174
3232
  "button",
3175
3233
  {
3176
3234
  type: "button",
@@ -3190,10 +3248,10 @@ function TimeList({
3190
3248
  // src/controls/doors.tsx
3191
3249
  var SelectPrimitive2 = __toESM(require("@radix-ui/react-select"), 1);
3192
3250
  var TabsPrimitive = __toESM(require("@radix-ui/react-tabs"), 1);
3193
- var React17 = __toESM(require("react"), 1);
3194
- var import_jsx_runtime17 = require("react/jsx-runtime");
3195
- var Input = React17.forwardRef(
3196
- ({ className, variant = "field", mono, adornment, align, numeric, mark, width, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3251
+ var React18 = __toESM(require("react"), 1);
3252
+ var import_jsx_runtime18 = require("react/jsx-runtime");
3253
+ var Input = React18.forwardRef(
3254
+ ({ className, variant = "field", mono, adornment, align, numeric, mark, width, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3197
3255
  "input",
3198
3256
  {
3199
3257
  ref,
@@ -3211,7 +3269,7 @@ var Input = React17.forwardRef(
3211
3269
  )
3212
3270
  );
3213
3271
  Input.displayName = "Input";
3214
- var SelectTrigger2 = React17.forwardRef(({ className, children, hideArrow = false, variant = "field", width, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
3272
+ var SelectTrigger2 = React18.forwardRef(({ className, children, hideArrow = false, variant = "field", width, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
3215
3273
  SelectPrimitive2.Trigger,
3216
3274
  {
3217
3275
  ref,
@@ -3223,14 +3281,14 @@ var SelectTrigger2 = React17.forwardRef(({ className, children, hideArrow = fals
3223
3281
  ...props,
3224
3282
  children: [
3225
3283
  children,
3226
- !hideArrow && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectPrimitive2.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectChevron, {}) })
3284
+ !hideArrow && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive2.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectChevron, {}) })
3227
3285
  ]
3228
3286
  }
3229
3287
  ));
3230
3288
  SelectTrigger2.displayName = "SelectTrigger";
3231
- var TabsVariantContext = React17.createContext("capsule");
3232
- var TabsList = React17.forwardRef(
3233
- ({ className, variant = "capsule", fill, rule = true, overflow, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TabsVariantContext.Provider, { value: variant, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3289
+ var TabsVariantContext = React18.createContext("capsule");
3290
+ var TabsList = React18.forwardRef(
3291
+ ({ className, variant = "capsule", fill, rule = true, overflow, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TabsVariantContext.Provider, { value: variant, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3234
3292
  TabsPrimitive.List,
3235
3293
  {
3236
3294
  ref,
@@ -3245,9 +3303,9 @@ var TabsList = React17.forwardRef(
3245
3303
  ) })
3246
3304
  );
3247
3305
  TabsList.displayName = "TabsList";
3248
- var TabsTrigger = React17.forwardRef(({ className, ...props }, ref) => {
3249
- const variant = React17.useContext(TabsVariantContext);
3250
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3306
+ var TabsTrigger = React18.forwardRef(({ className, ...props }, ref) => {
3307
+ const variant = React18.useContext(TabsVariantContext);
3308
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3251
3309
  TabsPrimitive.Trigger,
3252
3310
  {
3253
3311
  ref,
@@ -3261,23 +3319,23 @@ TabsTrigger.displayName = "TabsTrigger";
3261
3319
 
3262
3320
  // src/controls/surfaces.tsx
3263
3321
  var import_react_slot4 = require("@radix-ui/react-slot");
3264
- var React19 = __toESM(require("react"), 1);
3322
+ var React20 = __toESM(require("react"), 1);
3265
3323
 
3266
3324
  // src/alert-dialog.tsx
3267
3325
  var AlertDialogPrimitive = __toESM(require("@radix-ui/react-alert-dialog"), 1);
3268
3326
  var import_react_tree2 = require("@ai-matrx/kit/react-tree");
3269
- var React18 = __toESM(require("react"), 1);
3270
- var import_jsx_runtime18 = require("react/jsx-runtime");
3327
+ var React19 = __toESM(require("react"), 1);
3328
+ var import_jsx_runtime19 = require("react/jsx-runtime");
3271
3329
  var AlertDialog = AlertDialogPrimitive.Root;
3272
3330
  var AlertDialogPortal = ({
3273
3331
  container,
3274
3332
  ...props
3275
3333
  }) => {
3276
3334
  const resolved = usePortalContainer(container);
3277
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AlertDialogPrimitive.Portal, { container: resolved ?? null, ...props });
3335
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogPrimitive.Portal, { container: resolved ?? null, ...props });
3278
3336
  };
3279
3337
  AlertDialogPortal.displayName = "AlertDialogPortal";
3280
- var AlertDialogOverlay = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3338
+ var AlertDialogOverlay = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3281
3339
  AlertDialogPrimitive.Overlay,
3282
3340
  {
3283
3341
  ref,
@@ -3291,12 +3349,12 @@ var AlertDialogOverlay = React18.forwardRef(({ className, ...props }, ref) => /*
3291
3349
  }
3292
3350
  ));
3293
3351
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
3294
- var AlertDialogContentPrimitive = React18.forwardRef(({ onCloseAutoFocus, ...props }, ref) => {
3352
+ var AlertDialogContentPrimitive = React19.forwardRef(({ onCloseAutoFocus, ...props }, ref) => {
3295
3353
  useModalLayer(true);
3296
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AlertDialogPrimitive.Content, { ...props, ref, "aria-modal": "true", onCloseAutoFocus: keepMovedFocus(onCloseAutoFocus) });
3354
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogPrimitive.Content, { ...props, ref, "aria-modal": "true", onCloseAutoFocus: keepMovedFocus(onCloseAutoFocus) });
3297
3355
  });
3298
3356
  AlertDialogContentPrimitive.displayName = "AlertDialogContentPrimitive";
3299
- var AlertDialogDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3357
+ var AlertDialogDescription = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3300
3358
  AlertDialogPrimitive.Description,
3301
3359
  {
3302
3360
  ref,
@@ -3306,11 +3364,11 @@ var AlertDialogDescription = React18.forwardRef(({ className, ...props }, ref) =
3306
3364
  }
3307
3365
  ));
3308
3366
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
3309
- var AlertDialogContent = React18.forwardRef(({ className, children, container, animated = true, ...props }, ref) => {
3367
+ var AlertDialogContent = React19.forwardRef(({ className, children, container, animated = true, ...props }, ref) => {
3310
3368
  const hasDescription = (0, import_react_tree2.treeContainsComponent)(children, AlertDialogDescription) || (0, import_react_tree2.treeContainsComponent)(children, AlertDialogPrimitive.Description);
3311
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(AlertDialogPortal, { container, children: [
3312
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AlertDialogOverlay, {}),
3313
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
3369
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(AlertDialogPortal, { container, children: [
3370
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogOverlay, {}),
3371
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3314
3372
  AlertDialogContentPrimitive,
3315
3373
  {
3316
3374
  ref,
@@ -3330,7 +3388,7 @@ var AlertDialogContent = React18.forwardRef(({ className, children, container, a
3330
3388
  ),
3331
3389
  ...props,
3332
3390
  children: [
3333
- hasDescription ? null : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AlertDialogPrimitive.Description, { className: "sr-only", children: "Please confirm the action described in this dialog." }),
3391
+ hasDescription ? null : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogPrimitive.Description, { className: "sr-only", children: "Please confirm the action described in this dialog." }),
3334
3392
  children
3335
3393
  ]
3336
3394
  }
@@ -3341,7 +3399,7 @@ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
3341
3399
  var AlertDialogHeader = ({
3342
3400
  className,
3343
3401
  ...props
3344
- }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3402
+ }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3345
3403
  "div",
3346
3404
  {
3347
3405
  "data-slot": "alert-dialog-header",
@@ -3353,7 +3411,7 @@ AlertDialogHeader.displayName = "AlertDialogHeader";
3353
3411
  var AlertDialogFooter = ({
3354
3412
  className,
3355
3413
  ...props
3356
- }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3414
+ }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3357
3415
  "div",
3358
3416
  {
3359
3417
  "data-slot": "alert-dialog-footer",
@@ -3385,7 +3443,7 @@ var AlertDialogFooter = ({
3385
3443
  }
3386
3444
  );
3387
3445
  AlertDialogFooter.displayName = "AlertDialogFooter";
3388
- var AlertDialogTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3446
+ var AlertDialogTitle = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3389
3447
  AlertDialogPrimitive.Title,
3390
3448
  {
3391
3449
  ref,
@@ -3395,7 +3453,7 @@ var AlertDialogTitle = React18.forwardRef(({ className, ...props }, ref) => /* @
3395
3453
  }
3396
3454
  ));
3397
3455
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
3398
- var AlertDialogAction = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3456
+ var AlertDialogAction = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3399
3457
  AlertDialogPrimitive.Action,
3400
3458
  {
3401
3459
  ref,
@@ -3405,7 +3463,7 @@ var AlertDialogAction = React18.forwardRef(({ className, ...props }, ref) => /*
3405
3463
  }
3406
3464
  ));
3407
3465
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
3408
- var AlertDialogCancel = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3466
+ var AlertDialogCancel = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3409
3467
  AlertDialogPrimitive.Cancel,
3410
3468
  {
3411
3469
  ref,
@@ -3421,7 +3479,7 @@ var AlertDialogCancel = React18.forwardRef(({ className, ...props }, ref) => /*
3421
3479
  AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
3422
3480
 
3423
3481
  // src/confirm-dialog.tsx
3424
- var import_jsx_runtime19 = require("react/jsx-runtime");
3482
+ var import_jsx_runtime20 = require("react/jsx-runtime");
3425
3483
  function ConfirmDialog({
3426
3484
  open,
3427
3485
  onOpenChange,
@@ -3438,20 +3496,20 @@ function ConfirmDialog({
3438
3496
  portalContainer,
3439
3497
  onConfirm
3440
3498
  }) {
3441
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3499
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3442
3500
  AlertDialogContent,
3443
3501
  {
3444
3502
  className: contentClassName,
3445
3503
  ...portalContainer === void 0 ? {} : { container: portalContainer },
3446
3504
  children: [
3447
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(AlertDialogHeader, { children: [
3448
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogTitle, { children: title }),
3449
- description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogDescription, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { children: description }) }) : null
3505
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(AlertDialogHeader, { children: [
3506
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AlertDialogTitle, { children: title }),
3507
+ description ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AlertDialogDescription, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { children: description }) }) : null
3450
3508
  ] }),
3451
3509
  content ?? null,
3452
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(AlertDialogFooter, { children: [
3453
- cancelLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogCancel, { className: "max-lg:min-h-11", disabled: busy, children: cancelLabel }),
3454
- confirmHeld ? null : /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3510
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(AlertDialogFooter, { children: [
3511
+ cancelLabel === null ? null : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AlertDialogCancel, { className: "max-lg:min-h-11", disabled: busy, children: cancelLabel }),
3512
+ confirmHeld ? null : /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3455
3513
  AlertDialogAction,
3456
3514
  {
3457
3515
  disabled: busy || confirmDisabled,
@@ -3467,7 +3525,7 @@ function ConfirmDialog({
3467
3525
  variant === "destructive" && buttonVariants({ variant: "destructive" })
3468
3526
  ),
3469
3527
  children: [
3470
- busy ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Loader2Icon, { className: cn("mr-2 h-4 w-4", MOTION_SPIN) }) : null,
3528
+ busy ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Loader2Icon, { className: cn("mr-2 h-4 w-4", MOTION_SPIN) }) : null,
3471
3529
  confirmLabel
3472
3530
  ]
3473
3531
  }
@@ -3479,7 +3537,7 @@ function ConfirmDialog({
3479
3537
  }
3480
3538
 
3481
3539
  // src/skeleton.tsx
3482
- var import_jsx_runtime20 = require("react/jsx-runtime");
3540
+ var import_jsx_runtime21 = require("react/jsx-runtime");
3483
3541
  var SHAPE_CLASS = {
3484
3542
  line: "h-3.5 rounded",
3485
3543
  title: "h-6 rounded-md",
@@ -3518,7 +3576,7 @@ function Skeleton({ className, animated = true, motion = "pulse", shape, height,
3518
3576
  shape === "block" && HEIGHT_CLASS[height ?? "md"],
3519
3577
  shape && WIDTH_CLASS[width ?? "full"]
3520
3578
  );
3521
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3579
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3522
3580
  "div",
3523
3581
  {
3524
3582
  "data-slot": "skeleton",
@@ -3537,9 +3595,9 @@ function Skeleton({ className, animated = true, motion = "pulse", shape, height,
3537
3595
  }
3538
3596
 
3539
3597
  // src/controls/surfaces.tsx
3540
- var import_jsx_runtime21 = require("react/jsx-runtime");
3598
+ var import_jsx_runtime22 = require("react/jsx-runtime");
3541
3599
  function RowGroup({ title, danger, className, children, ...props }) {
3542
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3600
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3543
3601
  "section",
3544
3602
  {
3545
3603
  "data-matrx-row-group": "",
@@ -3547,35 +3605,35 @@ function RowGroup({ title, danger, className, children, ...props }) {
3547
3605
  className: cn("matrx-control-group", className),
3548
3606
  ...props,
3549
3607
  children: [
3550
- title ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { className: "matrx-control-group-title", children: title }) : null,
3551
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-group-body", children })
3608
+ title ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h2", { className: "matrx-control-group-title", children: title }) : null,
3609
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-group-body", children })
3552
3610
  ]
3553
3611
  }
3554
3612
  );
3555
3613
  }
3556
3614
  function SettingRow({ label, line, htmlFor, children, className }) {
3557
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "data-matrx-setting-row": "", className: cn("matrx-control-setting-row", className), children: [
3558
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "matrx-control-setting-text", children: [
3559
- htmlFor ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor, className: "matrx-control-setting-label", children: label }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-setting-label", children: label }),
3560
- line ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-setting-line", children: line }) : null
3615
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-matrx-setting-row": "", className: cn("matrx-control-setting-row", className), children: [
3616
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "matrx-control-setting-text", children: [
3617
+ htmlFor ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor, className: "matrx-control-setting-label", children: label }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-setting-label", children: label }),
3618
+ line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-setting-line", children: line }) : null
3561
3619
  ] }),
3562
- children ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ControlRow, { nowrap: true, "data-matrx-row-actions": "", children }) : null
3620
+ children ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ControlRow, { nowrap: true, "data-matrx-row-actions": "", children }) : null
3563
3621
  ] });
3564
3622
  }
3565
- var Tile = React19.forwardRef(
3623
+ var Tile = React20.forwardRef(
3566
3624
  ({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone: tone2, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
3567
3625
  const Component = asChild ? import_react_slot4.Slot : "button";
3568
3626
  const ariaDisabled = props["aria-disabled"];
3569
3627
  const inert = ariaDisabled === true || ariaDisabled === "true";
3570
- const body = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
3571
- icon ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-tile-icon", children: icon }) : null,
3572
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: "matrx-tile-text", children: [
3573
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-tile-title", children: title }),
3574
- line ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-tile-line", children: line }) : null
3628
+ const body = /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
3629
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-icon", children: icon }) : null,
3630
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "matrx-tile-text", children: [
3631
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-title", children: title }),
3632
+ line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-line", children: line }) : null
3575
3633
  ] }),
3576
- end ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-tile-end", children: end }) : null
3634
+ end ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-end", children: end }) : null
3577
3635
  ] });
3578
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3636
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3579
3637
  Component,
3580
3638
  {
3581
3639
  ref,
@@ -3603,14 +3661,14 @@ var Tile = React19.forwardRef(
3603
3661
  className: cn("matrx-tile", className),
3604
3662
  ...props,
3605
3663
  onClick: inert ? swallowClick : onClick,
3606
- children: asChild && React19.isValidElement(children) ? React19.cloneElement(children, void 0, body) : body
3664
+ children: asChild && React20.isValidElement(children) ? React20.cloneElement(children, void 0, body) : body
3607
3665
  }
3608
3666
  );
3609
3667
  }
3610
3668
  );
3611
3669
  Tile.displayName = "Tile";
3612
- var DisclosureHeader = React19.forwardRef(
3613
- ({ open, variant = "row", icon, glyphTone, title, meta, end, line, chevron = "start", className, type, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3670
+ var DisclosureHeader = React20.forwardRef(
3671
+ ({ open, variant = "row", icon, glyphTone, title, meta, end, line, chevron = "start", className, type, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3614
3672
  "button",
3615
3673
  {
3616
3674
  ref,
@@ -3623,28 +3681,28 @@ var DisclosureHeader = React19.forwardRef(
3623
3681
  className: cn("matrx-disclosure", className),
3624
3682
  ...props,
3625
3683
  children: [
3626
- chevron === "start" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ChevronRightIcon, {}) }) : null,
3627
- icon ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-icon", "data-glyph-tone": glyphTone, children: icon }) : null,
3628
- line ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: "matrx-disclosure-text", children: [
3629
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-title", children: title }),
3630
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-line", children: line })
3631
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-title", children: title }),
3632
- meta === void 0 || meta === null || meta === false ? null : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-meta", children: meta }),
3633
- end ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-end", children: end }) : null,
3634
- chevron === "end" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-disclosure-chevron", "data-end": "", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ChevronRightIcon, {}) }) : null
3684
+ chevron === "start" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-chevron", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ChevronRightIcon, {}) }) : null,
3685
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-icon", "data-glyph-tone": glyphTone, children: icon }) : null,
3686
+ line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "matrx-disclosure-text", children: [
3687
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-title", children: title }),
3688
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-line", children: line })
3689
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-title", children: title }),
3690
+ meta === void 0 || meta === null || meta === false ? null : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-meta", children: meta }),
3691
+ end ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-end", children: end }) : null,
3692
+ chevron === "end" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-disclosure-chevron", "data-end": "", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ChevronRightIcon, {}) }) : null
3635
3693
  ]
3636
3694
  }
3637
3695
  )
3638
3696
  );
3639
3697
  DisclosureHeader.displayName = "DisclosureHeader";
3640
3698
  function EmptyState({ icon, title, line, action, className }) {
3641
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "data-matrx-empty-state": "", className: cn("matrx-control-empty", className), children: [
3642
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-empty-disc", "aria-hidden": "true", children: icon }),
3643
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
3644
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-empty-title", children: title }),
3645
- line ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-empty-line", children: line }) : null
3699
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-matrx-empty-state": "", className: cn("matrx-control-empty", className), children: [
3700
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-empty-disc", "aria-hidden": "true", children: icon }),
3701
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { children: [
3702
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-empty-title", children: title }),
3703
+ line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-empty-line", children: line }) : null
3646
3704
  ] }),
3647
- action ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ControlRow, { className: "justify-center", children: action }) : null
3705
+ action ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ControlRow, { className: "justify-center", children: action }) : null
3648
3706
  ] });
3649
3707
  }
3650
3708
  function RegionSkeleton({
@@ -3656,34 +3714,34 @@ function RegionSkeleton({
3656
3714
  }) {
3657
3715
  const items = Array.from({ length: count }, (_, i) => i);
3658
3716
  if (shape === "form") {
3659
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "aria-busy": "true", "aria-label": ariaLabel, className: cn("flex flex-col gap-3", className), children: items.map((i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
3660
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "h-3 w-24" }),
3661
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "h-7 rounded-full" })
3717
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "aria-busy": "true", "aria-label": ariaLabel, className: cn("flex flex-col gap-3", className), children: items.map((i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
3718
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "h-3 w-24" }),
3719
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "h-7 rounded-full" })
3662
3720
  ] }, i)) });
3663
3721
  }
3664
3722
  if (shape === "cards") {
3665
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "aria-busy": "true", "aria-label": ariaLabel, className: cn("grid gap-2 sm:grid-cols-3", className), children: items.map((i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-3 rounded-lg border border-border p-3", children: [
3666
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "size-8 rounded-full" }),
3667
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-1 flex-col gap-1.5", children: [
3668
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "h-3.5 w-2/3" }),
3669
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "h-2.5 w-1/2" })
3723
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "aria-busy": "true", "aria-label": ariaLabel, className: cn("grid gap-2 sm:grid-cols-3", className), children: items.map((i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-3 rounded-lg border border-border p-3", children: [
3724
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "size-8 rounded-full" }),
3725
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex flex-1 flex-col gap-1.5", children: [
3726
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "h-3.5 w-2/3" }),
3727
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "h-2.5 w-1/2" })
3670
3728
  ] })
3671
3729
  ] }, i)) });
3672
3730
  }
3673
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "aria-busy": "true", "aria-label": ariaLabel, className: cn("divide-y divide-border", className), children: items.map((i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex min-h-9 items-center gap-3 px-3 py-1.5", children: [
3674
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "size-4 rounded-full" }),
3675
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
3676
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "h-3.5", style: { width: `${30 + i * 17 % 35}%` } }),
3677
- twoLine ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "h-2.5 w-1/4" }) : null
3731
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "aria-busy": "true", "aria-label": ariaLabel, className: cn("divide-y divide-border", className), children: items.map((i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex min-h-9 items-center gap-3 px-3 py-1.5", children: [
3732
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "size-4 rounded-full" }),
3733
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
3734
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "h-3.5", style: { width: `${30 + i * 17 % 35}%` } }),
3735
+ twoLine ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "h-2.5 w-1/4" }) : null
3678
3736
  ] }),
3679
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "hidden h-[1.125rem] w-16 rounded-md sm:block" }),
3680
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Skeleton, { className: "size-5 rounded-full" })
3737
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "hidden h-[1.125rem] w-16 rounded-md sm:block" }),
3738
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Skeleton, { className: "size-5 rounded-full" })
3681
3739
  ] }, i)) });
3682
3740
  }
3683
- var DeleteButton = React19.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Button2, { ref, variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Trash2Icon, {}), "data-delete": "", title: props["aria-label"], ...props }));
3741
+ var DeleteButton = React20.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Button2, { ref, variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Trash2Icon, {}), "data-delete": "", title: props["aria-label"], ...props }));
3684
3742
  DeleteButton.displayName = "DeleteButton";
3685
3743
  function ConfirmDelete({ open, onOpenChange, title, cost, confirmLabel, onConfirm, busy }) {
3686
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3744
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3687
3745
  ConfirmDialog,
3688
3746
  {
3689
3747
  open,
@@ -3702,7 +3760,7 @@ function DangerZone({
3702
3760
  children,
3703
3761
  className
3704
3762
  }) {
3705
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(RowGroup, { title, danger: true, className, children });
3763
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(RowGroup, { title, danger: true, className, children });
3706
3764
  }
3707
3765
  function PromoBanner({
3708
3766
  icon,
@@ -3716,7 +3774,7 @@ function PromoBanner({
3716
3774
  className,
3717
3775
  "aria-label": ariaLabel
3718
3776
  }) {
3719
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3777
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3720
3778
  "section",
3721
3779
  {
3722
3780
  "aria-label": ariaLabel ?? (typeof eyebrow === "string" ? eyebrow : "Featured"),
@@ -3725,17 +3783,17 @@ function PromoBanner({
3725
3783
  "data-wrap": wrap ? "" : void 0,
3726
3784
  className: cn("matrx-control-promo", className),
3727
3785
  children: [
3728
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-control-promo-disc", "aria-hidden": "true", children: icon }),
3729
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "matrx-control-promo-text", children: [
3730
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "matrx-control-promo-head", children: [
3731
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-control-promo-eyebrow", children: eyebrow }) : null,
3732
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-control-promo-eyebrow", "aria-hidden": "true", children: "\xB7" }) : null,
3733
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "matrx-control-promo-title", children: title })
3786
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-control-promo-disc", "aria-hidden": "true", children: icon }),
3787
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "matrx-control-promo-text", children: [
3788
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "matrx-control-promo-head", children: [
3789
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-control-promo-eyebrow", children: eyebrow }) : null,
3790
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-control-promo-eyebrow", "aria-hidden": "true", children: "\xB7" }) : null,
3791
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-control-promo-title", children: title })
3734
3792
  ] }),
3735
- line ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-promo-line", children: line }) : null
3793
+ line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-promo-line", children: line }) : null
3736
3794
  ] }),
3737
- chips ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "matrx-control-promo-chips", children: chips }) : null,
3738
- action ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ControlRow, { nowrap: true, className: "matrx-control-promo-action", children: action }) : null
3795
+ chips ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-promo-chips", children: chips }) : null,
3796
+ action ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ControlRow, { nowrap: true, className: "matrx-control-promo-action", children: action }) : null
3739
3797
  ]
3740
3798
  }
3741
3799
  );
@@ -3743,7 +3801,7 @@ function PromoBanner({
3743
3801
 
3744
3802
  // src/controls/number-stepper.tsx
3745
3803
  var import_react2 = require("react");
3746
- var import_jsx_runtime22 = require("react/jsx-runtime");
3804
+ var import_jsx_runtime23 = require("react/jsx-runtime");
3747
3805
  function NumberStepper({
3748
3806
  value,
3749
3807
  onChange,
@@ -3772,7 +3830,7 @@ function NumberStepper({
3772
3830
  commit(base + delta);
3773
3831
  };
3774
3832
  const btnCls = "flex items-center justify-center border border-input bg-background text-muted-foreground hover:text-foreground hover:bg-muted transition-colors select-none shrink-0 h-full aspect-square leading-none";
3775
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3833
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
3776
3834
  "div",
3777
3835
  {
3778
3836
  className: cn(
@@ -3780,7 +3838,7 @@ function NumberStepper({
3780
3838
  className
3781
3839
  ),
3782
3840
  children: [
3783
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3841
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3784
3842
  "button",
3785
3843
  {
3786
3844
  type: "button",
@@ -3791,10 +3849,10 @@ function NumberStepper({
3791
3849
  className: cn(btnCls, "rounded-l-md border-r-0"),
3792
3850
  tabIndex: -1,
3793
3851
  "aria-label": "Decrease",
3794
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(MinusIcon, { width: 12, height: 12, strokeWidth: 2.25 })
3852
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(MinusIcon, { width: 12, height: 12, strokeWidth: 2.25 })
3795
3853
  }
3796
3854
  ),
3797
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3855
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3798
3856
  "input",
3799
3857
  {
3800
3858
  type: "text",
@@ -3825,7 +3883,7 @@ function NumberStepper({
3825
3883
  )
3826
3884
  }
3827
3885
  ),
3828
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3886
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3829
3887
  "button",
3830
3888
  {
3831
3889
  type: "button",
@@ -3836,7 +3894,7 @@ function NumberStepper({
3836
3894
  className: cn(btnCls, "rounded-r-md border-l-0"),
3837
3895
  tabIndex: -1,
3838
3896
  "aria-label": "Increase",
3839
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PlusIcon, { width: 12, height: 12, strokeWidth: 2.25 })
3897
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(PlusIcon, { width: 12, height: 12, strokeWidth: 2.25 })
3840
3898
  }
3841
3899
  )
3842
3900
  ]
@@ -3846,8 +3904,8 @@ function NumberStepper({
3846
3904
 
3847
3905
  // src/slider.tsx
3848
3906
  var SliderPrimitive = __toESM(require("@radix-ui/react-slider"), 1);
3849
- var React20 = __toESM(require("react"), 1);
3850
- var import_jsx_runtime23 = require("react/jsx-runtime");
3907
+ var React21 = __toESM(require("react"), 1);
3908
+ var import_jsx_runtime24 = require("react/jsx-runtime");
3851
3909
  var TRACK_CLASSES = {
3852
3910
  sm: "h-1",
3853
3911
  md: "h-1.5",
@@ -3858,12 +3916,12 @@ var THUMB_CLASSES = {
3858
3916
  md: "h-4 w-4",
3859
3917
  lg: "h-5 w-5"
3860
3918
  };
3861
- var Slider = React20.forwardRef(({ className, size = "md", ...props }, ref) => {
3919
+ var Slider = React21.forwardRef(({ className, size = "md", ...props }, ref) => {
3862
3920
  const thumbCount = Math.max(
3863
3921
  1,
3864
3922
  (props.value ?? props.defaultValue ?? [0]).length
3865
3923
  );
3866
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
3924
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
3867
3925
  SliderPrimitive.Root,
3868
3926
  {
3869
3927
  ref,
@@ -3875,7 +3933,7 @@ var Slider = React20.forwardRef(({ className, size = "md", ...props }, ref) => {
3875
3933
  ),
3876
3934
  ...props,
3877
3935
  children: [
3878
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3936
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3879
3937
  SliderPrimitive.Track,
3880
3938
  {
3881
3939
  "data-slot": "slider-track",
@@ -3884,7 +3942,7 @@ var Slider = React20.forwardRef(({ className, size = "md", ...props }, ref) => {
3884
3942
  TRACK_CLASSES[size],
3885
3943
  "data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"
3886
3944
  ),
3887
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3945
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3888
3946
  SliderPrimitive.Range,
3889
3947
  {
3890
3948
  "data-slot": "slider-range",
@@ -3893,7 +3951,7 @@ var Slider = React20.forwardRef(({ className, size = "md", ...props }, ref) => {
3893
3951
  )
3894
3952
  }
3895
3953
  ),
3896
- Array.from({ length: thumbCount }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3954
+ Array.from({ length: thumbCount }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3897
3955
  SliderPrimitive.Thumb,
3898
3956
  {
3899
3957
  "data-slot": "slider-thumb",
@@ -3918,7 +3976,7 @@ var Slider = React20.forwardRef(({ className, size = "md", ...props }, ref) => {
3918
3976
  Slider.displayName = SliderPrimitive.Root.displayName;
3919
3977
 
3920
3978
  // src/controls/stage-steps.tsx
3921
- var import_jsx_runtime24 = require("react/jsx-runtime");
3979
+ var import_jsx_runtime25 = require("react/jsx-runtime");
3922
3980
  function stageSlots(count, current, maxVisible) {
3923
3981
  const all = Array.from({ length: count }, (_, index) => ({ kind: "step", index }));
3924
3982
  if (!maxVisible || count <= Math.max(5, maxVisible)) return all;
@@ -3941,12 +3999,12 @@ function stageStates(count, current) {
3941
3999
  function StageSteps({ steps, current, labels = "all", maxVisible, className, ...props }) {
3942
4000
  const states = stageStates(steps.length, current);
3943
4001
  const slots = stageSlots(steps.length, current, maxVisible);
3944
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ol", { "data-matrx-control": "stage-steps", "data-labels": labels, className: cn("matrx-stage-steps", className), ...props, children: slots.map((slot, n) => {
4002
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ol", { "data-matrx-control": "stage-steps", "data-labels": labels, className: cn("matrx-stage-steps", className), ...props, children: slots.map((slot, n) => {
3945
4003
  if (slot.kind === "more") {
3946
4004
  const hidden = steps.slice(slot.from, slot.to + 1);
3947
4005
  const state2 = states[slot.from];
3948
4006
  const names = hidden.map((step2) => step2.label).join(", ");
3949
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
4007
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3950
4008
  "li",
3951
4009
  {
3952
4010
  "data-stage": "more",
@@ -3955,8 +4013,8 @@ function StageSteps({ steps, current, labels = "all", maxVisible, className, ...
3955
4013
  "aria-label": `${hidden.length} more steps: ${names}`,
3956
4014
  className: "matrx-stage-steps-item",
3957
4015
  children: [
3958
- n > 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "matrx-stage-steps-sep", "aria-hidden": "true" }) : null,
3959
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "matrx-stage-steps-more", "aria-hidden": "true", children: [
4016
+ n > 0 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "matrx-stage-steps-sep", "aria-hidden": "true" }) : null,
4017
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "matrx-stage-steps-more", "aria-hidden": "true", children: [
3960
4018
  "+",
3961
4019
  hidden.length
3962
4020
  ] })
@@ -3968,7 +4026,7 @@ function StageSteps({ steps, current, labels = "all", maxVisible, className, ...
3968
4026
  const i = slot.index;
3969
4027
  const step = steps[i];
3970
4028
  const state = states[i];
3971
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
4029
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3972
4030
  "li",
3973
4031
  {
3974
4032
  "data-stage": step.id,
@@ -3977,11 +4035,11 @@ function StageSteps({ steps, current, labels = "all", maxVisible, className, ...
3977
4035
  title: step.label,
3978
4036
  className: "matrx-stage-steps-item",
3979
4037
  children: [
3980
- n > 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "matrx-stage-steps-sep", "aria-hidden": "true" }) : null,
3981
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "matrx-stage-steps-mark", "aria-hidden": "true", children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixCheckIcon, {}) : i + 1 }),
3982
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "matrx-stage-steps-label", children: [
4038
+ n > 0 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "matrx-stage-steps-sep", "aria-hidden": "true" }) : null,
4039
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "matrx-stage-steps-mark", "aria-hidden": "true", children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(RadixCheckIcon, {}) : i + 1 }),
4040
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "matrx-stage-steps-label", children: [
3983
4041
  step.label,
3984
- state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "matrx-sr-only", children: " (done)" }) : null
4042
+ state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "matrx-sr-only", children: " (done)" }) : null
3985
4043
  ] })
3986
4044
  ]
3987
4045
  },
@@ -3992,7 +4050,7 @@ function StageSteps({ steps, current, labels = "all", maxVisible, className, ...
3992
4050
 
3993
4051
  // src/controls/clamped-number-input.tsx
3994
4052
  var import_react3 = require("react");
3995
- var import_jsx_runtime25 = require("react/jsx-runtime");
4053
+ var import_jsx_runtime26 = require("react/jsx-runtime");
3996
4054
  function shownDraft(raw, min, max, decimal = false) {
3997
4055
  const next = clampDraft(raw, min, max, decimal);
3998
4056
  if (next === null) return null;
@@ -4037,7 +4095,7 @@ function ClampedNumberInput({
4037
4095
  setDraft(String(next));
4038
4096
  if (next !== value) onChange(next);
4039
4097
  };
4040
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4098
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4041
4099
  Input,
4042
4100
  {
4043
4101
  id,
@@ -4070,7 +4128,7 @@ function ClampedNumberInput({
4070
4128
 
4071
4129
  // src/controls/light-switch-toggle.tsx
4072
4130
  var import_react4 = require("react");
4073
- var import_jsx_runtime26 = require("react/jsx-runtime");
4131
+ var import_jsx_runtime27 = require("react/jsx-runtime");
4074
4132
  var defaultSizes = {
4075
4133
  width: "w-48",
4076
4134
  height: "h-16"
@@ -4108,7 +4166,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4108
4166
  const buttonBaseClasses = "relative w-1/2 h-full transition-all duration-300";
4109
4167
  const activeButtonClasses = "bg-primary transform -translate-y-px shadow-[inset_0_1px_3px_rgba(0,0,0,0.2)]";
4110
4168
  const inactiveButtonClasses = "bg-muted/60 transform -translate-y-1.5";
4111
- const renderOption = (isActive, label, side, onClick) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
4169
+ const renderOption = (isActive, label, side, onClick) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
4112
4170
  "button",
4113
4171
  {
4114
4172
  type: "button",
@@ -4120,7 +4178,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4120
4178
  isActive ? activeButtonClasses : inactiveButtonClasses
4121
4179
  ),
4122
4180
  children: [
4123
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4181
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4124
4182
  "div",
4125
4183
  {
4126
4184
  className: cn(
@@ -4131,7 +4189,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4131
4189
  )
4132
4190
  }
4133
4191
  ),
4134
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4192
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4135
4193
  "span",
4136
4194
  {
4137
4195
  className: cn(
@@ -4144,8 +4202,8 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4144
4202
  ]
4145
4203
  }
4146
4204
  );
4147
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { ref, className: containerClasses, children: [
4148
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "absolute left-1/2 top-0 bottom-0 w-[2px] bg-border transform -translate-x-1/2 z-10" }),
4205
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { ref, className: containerClasses, children: [
4206
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "absolute left-1/2 top-0 bottom-0 w-[2px] bg-border transform -translate-x-1/2 z-10" }),
4149
4207
  renderOption(!isOn, labels.off, "left", () => handleToggle(false)),
4150
4208
  renderOption(isOn, labels.on, "right", () => handleToggle(true))
4151
4209
  ] }) });
@@ -4159,39 +4217,39 @@ var import_react5 = require("react");
4159
4217
  // src/command.tsx
4160
4218
  var DialogPrimitive2 = __toESM(require("@radix-ui/react-dialog"), 1);
4161
4219
  var import_cmdk = require("cmdk");
4162
- var React22 = __toESM(require("react"), 1);
4220
+ var React23 = __toESM(require("react"), 1);
4163
4221
 
4164
4222
  // src/close-slot.tsx
4165
4223
  var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
4166
- var React21 = __toESM(require("react"), 1);
4167
- var import_jsx_runtime27 = require("react/jsx-runtime");
4224
+ var React22 = __toESM(require("react"), 1);
4225
+ var import_jsx_runtime28 = require("react/jsx-runtime");
4168
4226
  var CLOSE_CONTROL_CLASSES = "flex h-11 w-11 shrink-0 items-center justify-center rounded-sm text-muted-foreground ring-offset-background transition-colors hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none lg:h-8 lg:w-8";
4169
4227
  function CloseControl({ className }) {
4170
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DialogPrimitive.Close, { "data-slot": "dialog-close", "aria-label": "Close", className: cn(CLOSE_CONTROL_CLASSES, className), children: [
4171
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(XIcon, { className: "h-4 w-4", "aria-hidden": "true" }),
4172
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "sr-only", children: "Close" })
4228
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(DialogPrimitive.Close, { "data-slot": "dialog-close", "aria-label": "Close", className: cn(CLOSE_CONTROL_CLASSES, className), children: [
4229
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(XIcon, { className: "h-4 w-4", "aria-hidden": "true" }),
4230
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "sr-only", children: "Close" })
4173
4231
  ] });
4174
4232
  }
4175
- var CloseSlotContext = React21.createContext(null);
4176
- var SearchRowCloseSlotContext = React21.createContext(null);
4233
+ var CloseSlotContext = React22.createContext(null);
4234
+ var SearchRowCloseSlotContext = React22.createContext(null);
4177
4235
  function useCloseSlot(enabled) {
4178
- const [claims, setClaims] = React21.useState([]);
4236
+ const [claims, setClaims] = React22.useState([]);
4179
4237
  const owner = claims[0] ?? null;
4180
- const claim = React21.useCallback((id) => {
4238
+ const claim = React22.useCallback((id) => {
4181
4239
  setClaims((list) => [...list, id]);
4182
4240
  return () => setClaims((list) => list.filter((c) => c !== id));
4183
4241
  }, []);
4184
- const slot = React21.useMemo(() => enabled ? { claim, owner } : null, [enabled, claim, owner]);
4242
+ const slot = React22.useMemo(() => enabled ? { claim, owner } : null, [enabled, claim, owner]);
4185
4243
  return { slot, claimed: owner !== null };
4186
4244
  }
4187
4245
  var CloseSlotProvider = CloseSlotContext.Provider;
4188
4246
  var SearchRowCloseSlotProvider = SearchRowCloseSlotContext.Provider;
4189
4247
  function useClaim(context, declined) {
4190
- const slot = React21.useContext(context);
4191
- const id = React21.useId();
4248
+ const slot = React22.useContext(context);
4249
+ const id = React22.useId();
4192
4250
  const claim = slot?.claim;
4193
4251
  const wants = claim !== void 0 && !declined;
4194
- React21.useLayoutEffect(() => wants && claim ? claim(id) : void 0, [wants, claim, id]);
4252
+ React22.useLayoutEffect(() => wants && claim ? claim(id) : void 0, [wants, claim, id]);
4195
4253
  return wants && slot?.owner === id;
4196
4254
  }
4197
4255
  function useCloseSlotClaim(declined = false) {
@@ -4201,7 +4259,7 @@ function useSearchRowCloseSlotClaim() {
4201
4259
  return useClaim(SearchRowCloseSlotContext, false);
4202
4260
  }
4203
4261
  function CloseRow({ className }) {
4204
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { "data-slot": "close-row", className: cn("flex justify-end", className), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CloseControl, {}) });
4262
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { "data-slot": "close-row", className: cn("flex justify-end", className), children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseControl, {}) });
4205
4263
  }
4206
4264
  var BODY_LAYOUT = /^!?(?:[a-z0-9]+:)*(?:flex|grid|flex-(?:row|col)(?:-reverse)?|grid-(?:cols|rows|flow)-\S+|place-\S+|items-\S+|justify-\S+|content-\S+|gap(?:-[xy])?-\S+|space-[xy]-\S+|text-(?:left|center|right|start|end)|flex-wrap|flex-nowrap)$/;
4207
4265
  var OLD_CLOSE_RESERVE = /^pr-(?:8|9|10|11|12|14|16)$/;
@@ -4224,19 +4282,19 @@ function HeaderWithClose({
4224
4282
  }) {
4225
4283
  const owns = useCloseSlotClaim(/(?:^|\s)(?:sr-only|hidden)(?:\s|$)/.test(className ?? ""));
4226
4284
  if (!owns) {
4227
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { "data-slot": slotName, className: cn(baseClassName, className), ...props, children });
4285
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { "data-slot": slotName, className: cn(baseClassName, className), ...props, children });
4228
4286
  }
4229
4287
  const { row, body } = splitHeaderClasses(className);
4230
4288
  const rowish = /(?:^|\s)(?:[a-z0-9]+:)*flex-row(?:\s|$)/.test(body);
4231
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { "data-slot": slotName, "data-has-close": "", className: cn("flex gap-2", rowish ? "items-center" : "items-start", row), ...props, children: [
4232
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { "data-slot": `${slotName}-body`, className: cn("min-w-0 flex-1", baseClassName, body), children }),
4233
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CloseControl, { className: cn("-mr-2", !rowish && closeOffsetClassName) })
4289
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { "data-slot": slotName, "data-has-close": "", className: cn("flex gap-2", rowish ? "items-center" : "items-start", row), ...props, children: [
4290
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { "data-slot": `${slotName}-body`, className: cn("min-w-0 flex-1", baseClassName, body), children }),
4291
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseControl, { className: cn("-mr-2", !rowish && closeOffsetClassName) })
4234
4292
  ] });
4235
4293
  }
4236
4294
 
4237
4295
  // src/command.tsx
4238
- var import_jsx_runtime28 = require("react/jsx-runtime");
4239
- var Command = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4296
+ var import_jsx_runtime29 = require("react/jsx-runtime");
4297
+ var Command = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4240
4298
  import_cmdk.Command,
4241
4299
  {
4242
4300
  ref,
@@ -4251,14 +4309,14 @@ Command.displayName = import_cmdk.Command.displayName;
4251
4309
  var DIALOG_DESKTOP_CLASSES = `fixed left-[50%] top-[50%] z-[10000] grid min-w-0 w-full max-w-lg ${CENTERED_DIALOG} gap-4 overflow-x-clip border bg-background p-6 shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full sm:rounded-lg`;
4252
4310
  var DIALOG_MOBILE_SHEET_CLASSES = "fixed inset-x-0 bottom-0 left-0 right-0 top-auto z-[10000] flex min-w-0 flex-col w-full max-w-full max-h-[90dvh] translate-x-0 translate-y-0 gap-4 overflow-x-clip border-t bg-background p-4 pb-safe shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full rounded-t-2xl rounded-b-none overflow-y-auto overscroll-contain";
4253
4311
  var DIALOG_MOBILE_SHEET_OVERRIDE = "inset-x-0 bottom-0 left-0 right-0 top-auto translate-x-0 translate-y-0 w-full max-w-full max-h-[90dvh] rounded-b-none rounded-t-2xl overflow-y-auto";
4254
- var CommandDialogContent = React22.forwardRef(({ className, children, container, onInteractOutside, ...props }, ref) => {
4312
+ var CommandDialogContent = React23.forwardRef(({ className, children, container, onInteractOutside, ...props }, ref) => {
4255
4313
  const isMobile = (0, import_media_query.useIsMobile)();
4256
4314
  const isModal = useRadixDialogModal();
4257
4315
  useModalLayer(isModal);
4258
4316
  const portalContainer = usePortalContainer(container);
4259
4317
  const closeSlot = useCloseSlot(true);
4260
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(DialogPrimitive2.Portal, { container: portalContainer, children: [
4261
- isModal ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4318
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPrimitive2.Portal, { container: portalContainer, children: [
4319
+ isModal ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4262
4320
  DialogPrimitive2.Overlay,
4263
4321
  {
4264
4322
  className: cn(
@@ -4267,7 +4325,7 @@ var CommandDialogContent = React22.forwardRef(({ className, children, container,
4267
4325
  )
4268
4326
  }
4269
4327
  ) : null,
4270
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
4328
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4271
4329
  DialogPrimitive2.Content,
4272
4330
  {
4273
4331
  ref,
@@ -4283,19 +4341,19 @@ var CommandDialogContent = React22.forwardRef(({ className, children, container,
4283
4341
  ...props,
4284
4342
  onInteractOutside: keepFloatingLayersInside(onInteractOutside),
4285
4343
  children: [
4286
- closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseRow, { className: "px-4 pt-4" }) : null,
4287
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseSlotProvider, { value: null, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SearchRowCloseSlotProvider, { value: closeSlot.slot, children }) })
4344
+ closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseRow, { className: "px-4 pt-4" }) : null,
4345
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseSlotProvider, { value: null, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SearchRowCloseSlotProvider, { value: closeSlot.slot, children }) })
4288
4346
  ]
4289
4347
  }
4290
4348
  )
4291
4349
  ] });
4292
4350
  });
4293
4351
  CommandDialogContent.displayName = "CommandDialogContent";
4294
- var CommandInput = React22.forwardRef(({ className, ...props }, ref) => {
4352
+ var CommandInput = React23.forwardRef(({ className, ...props }, ref) => {
4295
4353
  const ownsClose = useSearchRowCloseSlotClaim();
4296
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2 border-b px-3", "cmdk-input-wrapper": "", children: [
4297
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MagnifyingGlassIcon, { className: "h-4 w-4 shrink-0 opacity-50" }),
4298
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4354
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2 border-b px-3", "cmdk-input-wrapper": "", children: [
4355
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(MagnifyingGlassIcon, { className: "h-4 w-4 shrink-0 opacity-50" }),
4356
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4299
4357
  import_cmdk.Command.Input,
4300
4358
  {
4301
4359
  ref,
@@ -4306,11 +4364,11 @@ var CommandInput = React22.forwardRef(({ className, ...props }, ref) => {
4306
4364
  ...props
4307
4365
  }
4308
4366
  ),
4309
- ownsClose ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseControl, { className: "-mr-1" }) : null
4367
+ ownsClose ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseControl, { className: "-mr-1" }) : null
4310
4368
  ] });
4311
4369
  });
4312
4370
  CommandInput.displayName = import_cmdk.Command.Input.displayName;
4313
- var CommandList = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4371
+ var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4314
4372
  import_cmdk.Command.List,
4315
4373
  {
4316
4374
  ref,
@@ -4319,7 +4377,7 @@ var CommandList = React22.forwardRef(({ className, ...props }, ref) => /* @__PUR
4319
4377
  }
4320
4378
  ));
4321
4379
  CommandList.displayName = import_cmdk.Command.List.displayName;
4322
- var CommandEmpty = React22.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4380
+ var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4323
4381
  import_cmdk.Command.Empty,
4324
4382
  {
4325
4383
  ref,
@@ -4328,7 +4386,7 @@ var CommandEmpty = React22.forwardRef((props, ref) => /* @__PURE__ */ (0, import
4328
4386
  }
4329
4387
  ));
4330
4388
  CommandEmpty.displayName = import_cmdk.Command.Empty.displayName;
4331
- var CommandGroup = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4389
+ var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4332
4390
  import_cmdk.Command.Group,
4333
4391
  {
4334
4392
  ref,
@@ -4340,7 +4398,7 @@ var CommandGroup = React22.forwardRef(({ className, ...props }, ref) => /* @__PU
4340
4398
  }
4341
4399
  ));
4342
4400
  CommandGroup.displayName = import_cmdk.Command.Group.displayName;
4343
- var CommandSeparator = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4401
+ var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4344
4402
  import_cmdk.Command.Separator,
4345
4403
  {
4346
4404
  ref,
@@ -4349,7 +4407,7 @@ var CommandSeparator = React22.forwardRef(({ className, ...props }, ref) => /* @
4349
4407
  }
4350
4408
  ));
4351
4409
  CommandSeparator.displayName = import_cmdk.Command.Separator.displayName;
4352
- var CommandItem = React22.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4410
+ var CommandItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4353
4411
  import_cmdk.Command.Item,
4354
4412
  {
4355
4413
  ref,
@@ -4365,7 +4423,7 @@ var CommandShortcut = ({
4365
4423
  className,
4366
4424
  ...props
4367
4425
  }) => {
4368
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4426
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4369
4427
  "span",
4370
4428
  {
4371
4429
  className: cn(
@@ -4379,7 +4437,7 @@ var CommandShortcut = ({
4379
4437
  CommandShortcut.displayName = "CommandShortcut";
4380
4438
 
4381
4439
  // src/controls/option-combobox.tsx
4382
- var import_jsx_runtime29 = require("react/jsx-runtime");
4440
+ var import_jsx_runtime30 = require("react/jsx-runtime");
4383
4441
  function OptionCombobox({
4384
4442
  value,
4385
4443
  onChange,
@@ -4413,7 +4471,7 @@ function OptionCombobox({
4413
4471
  setOpen(false);
4414
4472
  setQuery("");
4415
4473
  };
4416
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4474
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4417
4475
  Popover,
4418
4476
  {
4419
4477
  open,
@@ -4425,7 +4483,7 @@ function OptionCombobox({
4425
4483
  }
4426
4484
  },
4427
4485
  children: [
4428
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4486
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4429
4487
  "button",
4430
4488
  {
4431
4489
  id,
@@ -4446,7 +4504,7 @@ function OptionCombobox({
4446
4504
  ),
4447
4505
  children: [
4448
4506
  hasValue && renderIcon?.(value),
4449
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4507
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4450
4508
  "span",
4451
4509
  {
4452
4510
  className: cn(
@@ -4455,22 +4513,22 @@ function OptionCombobox({
4455
4513
  ),
4456
4514
  children: [
4457
4515
  hasValue ? getLabel(value) : placeholder,
4458
- hint && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: hint })
4516
+ hint && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: hint })
4459
4517
  ]
4460
4518
  }
4461
4519
  ),
4462
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectChevron, { size: "sm", className: variant === "inline" ? "h-3 w-3" : void 0 })
4520
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectChevron, { size: "sm", className: variant === "inline" ? "h-3 w-3" : void 0 })
4463
4521
  ]
4464
4522
  }
4465
4523
  ) }),
4466
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4524
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4467
4525
  PopoverContent,
4468
4526
  {
4469
4527
  sizing: "content",
4470
4528
  align: "start",
4471
4529
  className: "p-0",
4472
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Command, { shouldFilter: false, children: [
4473
- searchable && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4530
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Command, { shouldFilter: false, children: [
4531
+ searchable && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4474
4532
  CommandInput,
4475
4533
  {
4476
4534
  placeholder: searchPlaceholder,
@@ -4478,8 +4536,8 @@ function OptionCombobox({
4478
4536
  onValueChange: setQuery
4479
4537
  }
4480
4538
  ),
4481
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(CommandList, { className: "max-h-72", children: [
4482
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(CommandEmpty, { children: [
4539
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(CommandList, { className: "max-h-72", children: [
4540
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(CommandEmpty, { children: [
4483
4541
  "No match for \u201C",
4484
4542
  query,
4485
4543
  "\u201D."
@@ -4489,24 +4547,24 @@ function OptionCombobox({
4489
4547
  if (visible.length === 0) return null;
4490
4548
  const folded = group.collapsed && !showMore && !q && !group.options.includes(value);
4491
4549
  if (folded) {
4492
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CommandGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4550
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CommandGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4493
4551
  CommandItem,
4494
4552
  {
4495
4553
  value: `__more_${gi}`,
4496
4554
  onSelect: () => setShowMore(true),
4497
4555
  className: "text-muted-foreground",
4498
4556
  children: [
4499
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
4557
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
4500
4558
  group.heading ?? "More",
4501
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "ml-auto type-secondary tabular-nums", children: group.options.length })
4559
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-auto type-secondary tabular-nums", children: group.options.length })
4502
4560
  ]
4503
4561
  }
4504
4562
  ) }, `g-${gi}`);
4505
4563
  }
4506
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CommandGroup, { heading: group.heading, children: visible.map((o) => {
4564
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CommandGroup, { heading: group.heading, children: visible.map((o) => {
4507
4565
  const selected = o === value;
4508
4566
  const h = getHint?.(o);
4509
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4567
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4510
4568
  CommandItem,
4511
4569
  {
4512
4570
  value: o,
@@ -4514,11 +4572,11 @@ function OptionCombobox({
4514
4572
  className: "gap-2",
4515
4573
  children: [
4516
4574
  renderIcon?.(o),
4517
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "min-w-0 flex-1 truncate", children: [
4575
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "min-w-0 flex-1 truncate", children: [
4518
4576
  getLabel(o),
4519
- h && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: h })
4577
+ h && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: h })
4520
4578
  ] }),
4521
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4579
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4522
4580
  CheckIcon,
4523
4581
  {
4524
4582
  className: cn(
@@ -4620,7 +4678,7 @@ function groupRatioOptions(options) {
4620
4678
  }
4621
4679
 
4622
4680
  // src/controls/aspect-ratio-select.tsx
4623
- var import_jsx_runtime30 = require("react/jsx-runtime");
4681
+ var import_jsx_runtime31 = require("react/jsx-runtime");
4624
4682
  function AspectRatioGlyph({
4625
4683
  value,
4626
4684
  className
@@ -4628,7 +4686,7 @@ function AspectRatioGlyph({
4628
4686
  const r = parseRatio(value);
4629
4687
  const box = 14;
4630
4688
  if (!r) {
4631
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4689
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4632
4690
  "span",
4633
4691
  {
4634
4692
  "aria-hidden": true,
@@ -4636,14 +4694,14 @@ function AspectRatioGlyph({
4636
4694
  "inline-flex h-3.5 w-3.5 shrink-0 items-center justify-center",
4637
4695
  className
4638
4696
  ),
4639
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "h-2.5 w-2.5 rounded-[2px] border border-dashed border-current opacity-60" })
4697
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "h-2.5 w-2.5 rounded-[2px] border border-dashed border-current opacity-60" })
4640
4698
  }
4641
4699
  );
4642
4700
  }
4643
4701
  const k = r.w / r.h;
4644
4702
  const w = k >= 1 ? box : Math.max(3, box * k);
4645
4703
  const h = k >= 1 ? Math.max(3, box / k) : box;
4646
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4704
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4647
4705
  "span",
4648
4706
  {
4649
4707
  "aria-hidden": true,
@@ -4651,7 +4709,7 @@ function AspectRatioGlyph({
4651
4709
  "inline-flex h-3.5 w-3.5 shrink-0 items-center justify-center",
4652
4710
  className
4653
4711
  ),
4654
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4712
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4655
4713
  "span",
4656
4714
  {
4657
4715
  className: "rounded-[2px] border-[1.5px] border-current opacity-80",
@@ -4678,7 +4736,7 @@ function AspectRatioSelect({
4678
4736
  { options: common },
4679
4737
  ...more.length ? [{ heading: "More ratios", options: more, collapsed: true }] : []
4680
4738
  ];
4681
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4739
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4682
4740
  OptionCombobox,
4683
4741
  {
4684
4742
  value,
@@ -4686,7 +4744,7 @@ function AspectRatioSelect({
4686
4744
  groups,
4687
4745
  getLabel: (o) => parseRatio(o) ? o : humanizeRatioWord(o),
4688
4746
  getHint: (o) => ratioShapeName(o),
4689
- renderIcon: (o) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(AspectRatioGlyph, { value: o, className: "text-muted-foreground" }),
4747
+ renderIcon: (o) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(AspectRatioGlyph, { value: o, className: "text-muted-foreground" }),
4690
4748
  searchable: options.length > 12,
4691
4749
  searchPlaceholder: "Search ratios\u2026",
4692
4750
  placeholder,
@@ -4703,19 +4761,19 @@ function AspectRatioSelect({
4703
4761
  var import_react6 = require("react");
4704
4762
 
4705
4763
  // src/table.tsx
4706
- var React23 = __toESM(require("react"), 1);
4707
- var import_jsx_runtime31 = require("react/jsx-runtime");
4764
+ var React24 = __toESM(require("react"), 1);
4765
+ var import_jsx_runtime32 = require("react/jsx-runtime");
4708
4766
  var TABLE_SIZES = {
4709
4767
  sm: { head: "px-2", cell: "p-2" },
4710
4768
  md: { head: "px-3", cell: "p-3" }
4711
4769
  };
4712
- var TableSizeContext = React23.createContext("md");
4770
+ var TableSizeContext = React24.createContext("md");
4713
4771
  function useTableSize() {
4714
- return React23.useContext(TableSizeContext);
4772
+ return React24.useContext(TableSizeContext);
4715
4773
  }
4716
- var Table = React23.forwardRef(
4774
+ var Table = React24.forwardRef(
4717
4775
  ({ className, size = "md", wrap = true, wrapperClassName, ...props }, ref) => {
4718
- const table = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4776
+ const table = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4719
4777
  "table",
4720
4778
  {
4721
4779
  ref,
@@ -4725,7 +4783,7 @@ var Table = React23.forwardRef(
4725
4783
  ...props
4726
4784
  }
4727
4785
  );
4728
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(TableSizeContext.Provider, { value: size, children: wrap ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4786
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableSizeContext.Provider, { value: size, children: wrap ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4729
4787
  "div",
4730
4788
  {
4731
4789
  "data-slot": "table-wrapper",
@@ -4736,7 +4794,7 @@ var Table = React23.forwardRef(
4736
4794
  }
4737
4795
  );
4738
4796
  Table.displayName = "Table";
4739
- var TableHeader = React23.forwardRef(({ className, sticky = false, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4797
+ var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4740
4798
  "thead",
4741
4799
  {
4742
4800
  ref,
@@ -4750,7 +4808,7 @@ var TableHeader = React23.forwardRef(({ className, sticky = false, ...props }, r
4750
4808
  }
4751
4809
  ));
4752
4810
  TableHeader.displayName = "TableHeader";
4753
- var TableBody = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4811
+ var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4754
4812
  "tbody",
4755
4813
  {
4756
4814
  ref,
@@ -4760,7 +4818,7 @@ var TableBody = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE_
4760
4818
  }
4761
4819
  ));
4762
4820
  TableBody.displayName = "TableBody";
4763
- var TableFooter = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4821
+ var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4764
4822
  "tfoot",
4765
4823
  {
4766
4824
  ref,
@@ -4773,7 +4831,7 @@ var TableFooter = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
4773
4831
  }
4774
4832
  ));
4775
4833
  TableFooter.displayName = "TableFooter";
4776
- var TableRow = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4834
+ var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4777
4835
  "tr",
4778
4836
  {
4779
4837
  ref,
@@ -4786,9 +4844,9 @@ var TableRow = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__
4786
4844
  }
4787
4845
  ));
4788
4846
  TableRow.displayName = "TableRow";
4789
- var TableHead = React23.forwardRef(({ className, ...props }, ref) => {
4847
+ var TableHead = React24.forwardRef(({ className, ...props }, ref) => {
4790
4848
  const size = useTableSize();
4791
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4849
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4792
4850
  "th",
4793
4851
  {
4794
4852
  ref,
@@ -4803,9 +4861,9 @@ var TableHead = React23.forwardRef(({ className, ...props }, ref) => {
4803
4861
  );
4804
4862
  });
4805
4863
  TableHead.displayName = "TableHead";
4806
- var TableCell = React23.forwardRef(({ className, ...props }, ref) => {
4864
+ var TableCell = React24.forwardRef(({ className, ...props }, ref) => {
4807
4865
  const size = useTableSize();
4808
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4866
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4809
4867
  "td",
4810
4868
  {
4811
4869
  ref,
@@ -4820,7 +4878,7 @@ var TableCell = React23.forwardRef(({ className, ...props }, ref) => {
4820
4878
  );
4821
4879
  });
4822
4880
  TableCell.displayName = "TableCell";
4823
- var TableCaption = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4881
+ var TableCaption = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4824
4882
  "caption",
4825
4883
  {
4826
4884
  ref,
@@ -4871,7 +4929,7 @@ function isReactElementLike(value) {
4871
4929
  }
4872
4930
 
4873
4931
  // src/controls/configuration-fields.tsx
4874
- var import_jsx_runtime32 = require("react/jsx-runtime");
4932
+ var import_jsx_runtime33 = require("react/jsx-runtime");
4875
4933
  var CONFIGURATION_CHOICE_SIZE = "h-[34px] min-h-[34px] rounded-lg px-2.5 text-[11.5px] font-medium";
4876
4934
  var FIELD_HELP_OPEN = "matrx:field-help-open";
4877
4935
  function FieldHelp({
@@ -4928,8 +4986,8 @@ function FieldHelp({
4928
4986
  if (closeTimer.current) clearTimeout(closeTimer.current);
4929
4987
  };
4930
4988
  }, [id]);
4931
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Popover, { open, onOpenChange: changeOpen, children: [
4932
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4989
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Popover, { open, onOpenChange: changeOpen, children: [
4990
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4933
4991
  "button",
4934
4992
  {
4935
4993
  ref: trigger,
@@ -4965,10 +5023,10 @@ function FieldHelp({
4965
5023
  event.preventDefault();
4966
5024
  changeOpen(true);
4967
5025
  },
4968
- children: triggerIcon ?? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(CircleHelpIcon, { className: "size-3.5", "aria-hidden": "true" })
5026
+ children: triggerIcon ?? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CircleHelpIcon, { className: "size-3.5", "aria-hidden": "true" })
4969
5027
  }
4970
5028
  ) }),
4971
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5029
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
4972
5030
  PopoverContent,
4973
5031
  {
4974
5032
  ref: content,
@@ -5003,11 +5061,11 @@ function FieldHelp({
5003
5061
  ),
5004
5062
  onOpenAutoFocus: (event) => event.preventDefault(),
5005
5063
  children: [
5006
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
5007
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "font-medium", children: label }),
5008
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(XIcon, {}), "aria-label": `Close help: ${label}`, onClick: () => changeOpen(false), className: "shrink-0" })
5064
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
5065
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium", children: label }),
5066
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(XIcon, {}), "aria-label": `Close help: ${label}`, onClick: () => changeOpen(false), className: "shrink-0" })
5009
5067
  ] }),
5010
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "whitespace-pre-wrap break-words text-foreground", children })
5068
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "whitespace-pre-wrap break-words text-foreground", children })
5011
5069
  ]
5012
5070
  }
5013
5071
  )
@@ -5033,7 +5091,7 @@ function StatusToken({
5033
5091
  label
5034
5092
  }) {
5035
5093
  const { Icon: Icon3, color, label: defaultLabel } = STATUS[status];
5036
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5094
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5037
5095
  "span",
5038
5096
  {
5039
5097
  className: cn(
@@ -5042,14 +5100,14 @@ function StatusToken({
5042
5100
  color
5043
5101
  ),
5044
5102
  children: [
5045
- Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon3, { className: "size-3.5 shrink-0", "aria-hidden": "true" }) : null,
5046
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "break-words", children: label ?? defaultLabel })
5103
+ Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon3, { className: "size-3.5 shrink-0", "aria-hidden": "true" }) : null,
5104
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "break-words", children: label ?? defaultLabel })
5047
5105
  ]
5048
5106
  }
5049
5107
  );
5050
5108
  }
5051
5109
  function MissingTag({ children = "Not provided" }) {
5052
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5110
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5053
5111
  "span",
5054
5112
  {
5055
5113
  "data-matrx-missing": "",
@@ -5060,18 +5118,18 @@ function MissingTag({ children = "Not provided" }) {
5060
5118
  }
5061
5119
  function RowHelp({ label, help }) {
5062
5120
  if (typeof help === "string" || typeof help === "number") {
5063
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5121
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5064
5122
  "span",
5065
5123
  {
5066
5124
  title: String(help),
5067
5125
  "aria-label": String(help),
5068
5126
  "data-matrx-row-help": "",
5069
5127
  className: "inline-flex shrink-0 cursor-help text-muted-foreground hover:text-foreground",
5070
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" })
5128
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" })
5071
5129
  }
5072
5130
  );
5073
5131
  }
5074
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FieldHelp, { label, triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" }), children: help });
5132
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FieldHelp, { label, triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" }), children: help });
5075
5133
  }
5076
5134
  function isBlank(v) {
5077
5135
  return v === null || v === void 0 || v === false || v === "";
@@ -5103,7 +5161,7 @@ function PropertyRow({
5103
5161
  const valueClass = cn("min-w-0 type-value leading-5 [overflow-wrap:anywhere]", mono && "font-mono");
5104
5162
  const focusRing = "rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-ring";
5105
5163
  if (layout === "inline") {
5106
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5164
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5107
5165
  "div",
5108
5166
  {
5109
5167
  "data-matrx-property-row": "inline",
@@ -5113,32 +5171,32 @@ function PropertyRow({
5113
5171
  className
5114
5172
  ),
5115
5173
  children: [
5116
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex min-w-0 shrink-0 items-center gap-1.5 type-label leading-4 sm:w-44", children: [
5117
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "break-words", children: label }),
5118
- help != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RowHelp, { label, help }) : null
5174
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex min-w-0 shrink-0 items-center gap-1.5 type-label leading-4 sm:w-44", children: [
5175
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "break-words", children: label }),
5176
+ help != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RowHelp, { label, help }) : null
5119
5177
  ] }),
5120
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-6 gap-y-1", children: [
5121
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: cn("flex-1", valueClass), children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(MissingTag, { children: missingText }) : content }),
5122
- source != null || state != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 type-secondary text-foreground", children: [
5123
- source != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { children: [
5124
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "font-medium", children: "Source:" }),
5178
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-6 gap-y-1", children: [
5179
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn("flex-1", valueClass), children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(MissingTag, { children: missingText }) : content }),
5180
+ source != null || state != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 type-secondary text-foreground", children: [
5181
+ source != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
5182
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium", children: "Source:" }),
5125
5183
  " ",
5126
5184
  source
5127
5185
  ] }) : null,
5128
- state != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { children: [
5129
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "font-medium", children: "State:" }),
5186
+ state != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
5187
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium", children: "State:" }),
5130
5188
  " ",
5131
5189
  state
5132
5190
  ] }) : null
5133
5191
  ] }) : null,
5134
- meta != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "flex shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5192
+ meta != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5135
5193
  ] })
5136
5194
  ]
5137
5195
  }
5138
5196
  );
5139
5197
  }
5140
5198
  const margin = expandable || gutter;
5141
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5199
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5142
5200
  "div",
5143
5201
  {
5144
5202
  "data-matrx-property-row": "stacked",
@@ -5149,7 +5207,7 @@ function PropertyRow({
5149
5207
  className
5150
5208
  ),
5151
5209
  children: [
5152
- margin ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "flex h-4 items-center", children: expandable ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5210
+ margin ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex h-4 items-center", children: expandable ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5153
5211
  "button",
5154
5212
  {
5155
5213
  type: "button",
@@ -5157,15 +5215,15 @@ function PropertyRow({
5157
5215
  "aria-expanded": open,
5158
5216
  "aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
5159
5217
  className: cn("inline-flex text-muted-foreground hover:text-foreground", focusRing),
5160
- children: open ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ChevronDownIcon, { className: "size-3.5", "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
5218
+ children: open ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ChevronDownIcon, { className: "size-3.5", "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
5161
5219
  }
5162
5220
  ) : null }) : null,
5163
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex h-4 min-w-0 items-center gap-1.5", children: [
5164
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "truncate type-label leading-4", children: label }),
5165
- help != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RowHelp, { label, help }) : null,
5166
- meta != null ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "ml-auto flex min-w-0 shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5221
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex h-4 min-w-0 items-center gap-1.5", children: [
5222
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "truncate type-label leading-4", children: label }),
5223
+ help != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RowHelp, { label, help }) : null,
5224
+ meta != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "ml-auto flex min-w-0 shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5167
5225
  ] }),
5168
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5226
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5169
5227
  "div",
5170
5228
  {
5171
5229
  className: cn(
@@ -5174,7 +5232,7 @@ function PropertyRow({
5174
5232
  // A "Not provided" row is exactly as tall as a text row: the value line is a fixed 20px.
5175
5233
  isMissing ? "flex h-5 items-center" : expandable && open ? "mt-1" : "flex min-h-5 items-center"
5176
5234
  ),
5177
- children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(MissingTag, { children: missingText }) : expandable && open ? expanded : expandable ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5235
+ children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(MissingTag, { children: missingText }) : expandable && open ? expanded : expandable ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5178
5236
  "button",
5179
5237
  {
5180
5238
  type: "button",
@@ -5182,7 +5240,7 @@ function PropertyRow({
5182
5240
  className: cn("block max-w-full truncate text-left", valueClass, focusRing),
5183
5241
  children: content
5184
5242
  }
5185
- ) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: valueClass, children: content })
5243
+ ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: valueClass, children: content })
5186
5244
  }
5187
5245
  )
5188
5246
  ]
@@ -5193,9 +5251,9 @@ function ConfigurationValueList({
5193
5251
  label,
5194
5252
  entries
5195
5253
  }) {
5196
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dl", { "aria-label": label, className: "min-w-0 divide-y divide-border rounded-lg border border-border bg-card type-body text-foreground", children: entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "min-w-0 p-3", children: [
5197
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dt", { className: "mb-2 break-words font-semibold", children: entry.label }),
5198
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dd", { className: "min-w-0 [overflow-wrap:anywhere]", children: entry.value })
5254
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("dl", { "aria-label": label, className: "min-w-0 divide-y divide-border rounded-lg border border-border bg-card type-body text-foreground", children: entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "min-w-0 p-3", children: [
5255
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("dt", { className: "mb-2 break-words font-semibold", children: entry.label }),
5256
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("dd", { className: "min-w-0 [overflow-wrap:anywhere]", children: entry.value })
5199
5257
  ] }, entry.key)) });
5200
5258
  }
5201
5259
  function ConfigurationTable({
@@ -5203,7 +5261,7 @@ function ConfigurationTable({
5203
5261
  columns,
5204
5262
  children
5205
5263
  }) {
5206
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "min-w-0 rounded-lg border border-border bg-card", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5264
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "min-w-0 rounded-lg border border-border bg-card", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5207
5265
  Table,
5208
5266
  {
5209
5267
  size: "sm",
@@ -5211,19 +5269,19 @@ function ConfigurationTable({
5211
5269
  "aria-label": label,
5212
5270
  className: cn("matrx-config-table", "type-body text-foreground"),
5213
5271
  children: [
5214
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableHeader, { className: "matrx-config-head", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableRow, { className: "bg-accent/40 hover:bg-accent/40", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5272
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableHeader, { className: "matrx-config-head", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableRow, { className: "bg-accent/40 hover:bg-accent/40", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5215
5273
  TableHead,
5216
5274
  {
5217
5275
  scope: "col",
5218
5276
  className: "whitespace-normal align-middle font-semibold text-foreground",
5219
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: "matrx-config-heading", children: [
5277
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "matrx-config-heading", children: [
5220
5278
  column.label,
5221
- column.help ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5279
+ column.help ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5222
5280
  ] })
5223
5281
  },
5224
5282
  column.key
5225
5283
  )) }) }),
5226
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableBody, { className: "matrx-config-body", children })
5284
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableBody, { className: "matrx-config-body", children })
5227
5285
  ]
5228
5286
  }
5229
5287
  ) });
@@ -5232,16 +5290,16 @@ function ConfigurationTableRow({
5232
5290
  columns,
5233
5291
  cells
5234
5292
  }) {
5235
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5293
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5236
5294
  TableRow,
5237
5295
  {
5238
5296
  className: cn("matrx-config-row", "border-b border-border last:border-b-0"),
5239
- children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5297
+ children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5240
5298
  TableCell,
5241
5299
  {
5242
5300
  className: cn("matrx-config-cell", "min-w-0 whitespace-normal align-middle"),
5243
5301
  children: [
5244
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
5302
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5245
5303
  "span",
5246
5304
  {
5247
5305
  className: cn(
@@ -5251,11 +5309,11 @@ function ConfigurationTableRow({
5251
5309
  children: [
5252
5310
  column.label,
5253
5311
  ":",
5254
- column.help ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5312
+ column.help ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5255
5313
  ]
5256
5314
  }
5257
5315
  ),
5258
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "matrx-config-cell-content", children: cells[column.key] ?? "Not specified" })
5316
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "matrx-config-cell-content", children: cells[column.key] ?? "Not specified" })
5259
5317
  ]
5260
5318
  },
5261
5319
  column.key
@@ -5265,7 +5323,7 @@ function ConfigurationTableRow({
5265
5323
  }
5266
5324
 
5267
5325
  // src/indicator-strip.tsx
5268
- var import_jsx_runtime33 = require("react/jsx-runtime");
5326
+ var import_jsx_runtime34 = require("react/jsx-runtime");
5269
5327
  var TONE = {
5270
5328
  danger: "text-destructive",
5271
5329
  warning: "text-warning",
@@ -5278,7 +5336,7 @@ function indicatorText(item) {
5278
5336
  return item.detail ? `${item.label}: yes \u2014 ${item.detail}` : `${item.label}: yes`;
5279
5337
  }
5280
5338
  function IndicatorStrip({ items, className, ...props }) {
5281
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5339
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5282
5340
  "span",
5283
5341
  {
5284
5342
  "data-slot": "indicator-strip",
@@ -5288,7 +5346,7 @@ function IndicatorStrip({ items, className, ...props }) {
5288
5346
  children: items.map((item) => {
5289
5347
  const Icon3 = item.icon;
5290
5348
  const text = indicatorText(item);
5291
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5349
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5292
5350
  "span",
5293
5351
  {
5294
5352
  role: "listitem",
@@ -5301,7 +5359,7 @@ function IndicatorStrip({ items, className, ...props }) {
5301
5359
  item.on ? TONE[item.tone ?? "warning"] : "text-muted-foreground opacity-30",
5302
5360
  item.on && item.soft && "opacity-55"
5303
5361
  ),
5304
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon3, { className: "size-3.5", "aria-hidden": true })
5362
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon3, { className: "size-3.5", "aria-hidden": true })
5305
5363
  },
5306
5364
  item.id
5307
5365
  );
@@ -5311,7 +5369,7 @@ function IndicatorStrip({ items, className, ...props }) {
5311
5369
  }
5312
5370
 
5313
5371
  // src/controls/middle-truncate.tsx
5314
- var import_jsx_runtime34 = require("react/jsx-runtime");
5372
+ var import_jsx_runtime35 = require("react/jsx-runtime");
5315
5373
  var DEFAULT_TAIL = 10;
5316
5374
  function splitForMiddleTruncate(text, tail = DEFAULT_TAIL) {
5317
5375
  const keep = Math.min(tail, Math.floor(text.length / 2));
@@ -5324,15 +5382,15 @@ function MiddleTruncate({
5324
5382
  className
5325
5383
  }) {
5326
5384
  const { head, end } = splitForMiddleTruncate(text, tail);
5327
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: cn("flex min-w-0 items-baseline", className), title: text, children: [
5328
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "sr-only", children: text }),
5329
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { "aria-hidden": true, className: "min-w-0 truncate whitespace-pre", children: head }),
5330
- end ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { "aria-hidden": true, className: "shrink-0 whitespace-pre", children: end }) : null
5385
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: cn("flex min-w-0 items-baseline", className), title: text, children: [
5386
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "sr-only", children: text }),
5387
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": true, className: "min-w-0 truncate whitespace-pre", children: head }),
5388
+ end ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": true, className: "shrink-0 whitespace-pre", children: end }) : null
5331
5389
  ] });
5332
5390
  }
5333
5391
 
5334
5392
  // src/controls/callout-banner.tsx
5335
- var import_jsx_runtime35 = require("react/jsx-runtime");
5393
+ var import_jsx_runtime36 = require("react/jsx-runtime");
5336
5394
  var TONE2 = {
5337
5395
  destructive: { container: "border-destructive/30 bg-destructive/10", icon: "text-destructive" },
5338
5396
  warning: { container: "border-warning/30 bg-warning/10", icon: "text-warning" },
@@ -5350,7 +5408,7 @@ function CalloutBanner({
5350
5408
  className
5351
5409
  }) {
5352
5410
  const t = TONE2[tone2];
5353
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
5411
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
5354
5412
  "div",
5355
5413
  {
5356
5414
  className: cn(
@@ -5360,16 +5418,16 @@ function CalloutBanner({
5360
5418
  ),
5361
5419
  role: "status",
5362
5420
  children: [
5363
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-2", children: [
5364
- Icon3 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon3, { className: cn("mt-0.5 h-4 w-4 shrink-0", t.icon), "aria-hidden": true }),
5365
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "min-w-0", children: [
5366
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "type-title text-foreground", children: title }),
5367
- description && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "mt-0.5 type-secondary text-muted-foreground", children: description })
5421
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-2", children: [
5422
+ Icon3 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon3, { className: cn("mt-0.5 h-4 w-4 shrink-0", t.icon), "aria-hidden": true }),
5423
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "min-w-0", children: [
5424
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "type-title text-foreground", children: title }),
5425
+ description && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "mt-0.5 type-secondary text-muted-foreground", children: description })
5368
5426
  ] })
5369
5427
  ] }),
5370
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5 sm:ml-2", children: [
5428
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5 sm:ml-2", children: [
5371
5429
  actions,
5372
- onDismiss && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(XIcon, {}), "aria-label": "Dismiss", onClick: onDismiss, disabled: dismissing })
5430
+ onDismiss && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(XIcon, {}), "aria-label": "Dismiss", onClick: onDismiss, disabled: dismissing })
5373
5431
  ] })
5374
5432
  ]
5375
5433
  }
@@ -5377,8 +5435,8 @@ function CalloutBanner({
5377
5435
  }
5378
5436
 
5379
5437
  // src/controls/gated-action-button.tsx
5380
- var React24 = __toESM(require("react"), 1);
5381
- var import_jsx_runtime36 = require("react/jsx-runtime");
5438
+ var React25 = __toESM(require("react"), 1);
5439
+ var import_jsx_runtime37 = require("react/jsx-runtime");
5382
5440
  function firstBlockingReason(checks) {
5383
5441
  for (const check of checks) {
5384
5442
  if (check && check.when) return check.reason;
@@ -5394,10 +5452,10 @@ function GatedActionButton({
5394
5452
  children,
5395
5453
  ...buttonProps
5396
5454
  }) {
5397
- const reactId = React24.useId();
5455
+ const reactId = React25.useId();
5398
5456
  const blocked = Boolean(reason && reason.trim());
5399
5457
  const reasonId = `gated-action-reason-${reactId}`;
5400
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
5458
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
5401
5459
  "span",
5402
5460
  {
5403
5461
  className: cn(
@@ -5405,7 +5463,7 @@ function GatedActionButton({
5405
5463
  wrapperClassName
5406
5464
  ),
5407
5465
  children: [
5408
- blocked ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5466
+ blocked ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5409
5467
  "span",
5410
5468
  {
5411
5469
  id: reasonId,
@@ -5418,7 +5476,7 @@ function GatedActionButton({
5418
5476
  children: reason
5419
5477
  }
5420
5478
  ) : null,
5421
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5479
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5422
5480
  Button,
5423
5481
  {
5424
5482
  ...buttonProps,
@@ -5436,7 +5494,7 @@ GatedActionButton.displayName = "GatedActionButton";
5436
5494
 
5437
5495
  // src/controls/search-input.tsx
5438
5496
  var import_react7 = require("react");
5439
- var import_jsx_runtime37 = require("react/jsx-runtime");
5497
+ var import_jsx_runtime38 = require("react/jsx-runtime");
5440
5498
  function SearchInput({
5441
5499
  value,
5442
5500
  defaultValue = "",
@@ -5492,21 +5550,21 @@ function SearchInput({
5492
5550
  onSearch?.("");
5493
5551
  inputRef.current?.focus();
5494
5552
  };
5495
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
5553
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
5496
5554
  "form",
5497
5555
  {
5498
5556
  onSubmit: handleSubmit,
5499
5557
  className: cn("flex min-w-0 items-center gap-2", className),
5500
5558
  children: [
5501
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
5502
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5559
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
5560
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5503
5561
  SearchIcon,
5504
5562
  {
5505
5563
  className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
5506
5564
  "aria-hidden": true
5507
5565
  }
5508
5566
  ),
5509
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5567
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5510
5568
  Input,
5511
5569
  {
5512
5570
  ref: inputRef,
@@ -5520,7 +5578,7 @@ function SearchInput({
5520
5578
  adornment: showClearButton && searchValue ? "both" : "start"
5521
5579
  }
5522
5580
  ),
5523
- showClearButton && searchValue ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5581
+ showClearButton && searchValue ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5524
5582
  "button",
5525
5583
  {
5526
5584
  type: "button",
@@ -5528,14 +5586,14 @@ function SearchInput({
5528
5586
  disabled,
5529
5587
  "aria-label": "Clear search",
5530
5588
  className: "absolute right-2 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:text-disabled-foreground",
5531
- children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(XIcon, { className: "h-3.5 w-3.5" })
5589
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(XIcon, { className: "h-3.5 w-3.5" })
5532
5590
  }
5533
5591
  ) : null
5534
5592
  ] }),
5535
- showSubmitButton ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5593
+ showSubmitButton ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5536
5594
  Button2,
5537
5595
  {
5538
- icon: loading ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Loader2Icon, { className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SearchIcon, {}),
5596
+ icon: loading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Loader2Icon, { className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SearchIcon, {}),
5539
5597
  variant: "primary",
5540
5598
  type: "submit",
5541
5599
  disabled: disabled || loading,
@@ -5553,22 +5611,22 @@ var import_react8 = require("react");
5553
5611
 
5554
5612
  // src/tooltip.tsx
5555
5613
  var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"), 1);
5556
- var React26 = __toESM(require("react"), 1);
5557
- var import_jsx_runtime38 = require("react/jsx-runtime");
5614
+ var React27 = __toESM(require("react"), 1);
5615
+ var import_jsx_runtime39 = require("react/jsx-runtime");
5558
5616
  function TooltipProvider({ titleTooltips = true, disableHoverableContent = false, ...props }) {
5559
- React26.useEffect(() => {
5617
+ React27.useEffect(() => {
5560
5618
  if (!titleTooltips) return;
5561
5619
  return acquireTitleTooltips();
5562
5620
  }, [titleTooltips]);
5563
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TooltipPrimitive.Provider, { ...props, disableHoverableContent });
5621
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Provider, { ...props, disableHoverableContent });
5564
5622
  }
5565
- var TriggerContext = React26.createContext(null);
5623
+ var TriggerContext = React27.createContext(null);
5566
5624
  var Tooltip = ({ onOpenChange, ...props }) => {
5567
- const ref = React26.useRef(null);
5568
- const [open, setOpen] = React26.useState(Boolean(props.open ?? props.defaultOpen));
5625
+ const ref = React27.useRef(null);
5626
+ const [open, setOpen] = React27.useState(Boolean(props.open ?? props.defaultOpen));
5569
5627
  const shown = props.open ?? open;
5570
- const value = React26.useMemo(() => ({ ref, open: shown }), [shown]);
5571
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TriggerContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5628
+ const value = React27.useMemo(() => ({ ref, open: shown }), [shown]);
5629
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TriggerContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5572
5630
  TooltipPrimitive.Root,
5573
5631
  {
5574
5632
  ...props,
@@ -5580,9 +5638,9 @@ var Tooltip = ({ onOpenChange, ...props }) => {
5580
5638
  ) });
5581
5639
  };
5582
5640
  Tooltip.displayName = "Tooltip";
5583
- var TooltipTrigger = React26.forwardRef((props, ref) => {
5584
- const trigger = React26.useContext(TriggerContext);
5585
- const setRef = React26.useCallback(
5641
+ var TooltipTrigger = React27.forwardRef((props, ref) => {
5642
+ const trigger = React27.useContext(TriggerContext);
5643
+ const setRef = React27.useCallback(
5586
5644
  (node) => {
5587
5645
  if (trigger) trigger.ref.current = node;
5588
5646
  if (typeof ref === "function") ref(node);
@@ -5590,14 +5648,14 @@ var TooltipTrigger = React26.forwardRef((props, ref) => {
5590
5648
  },
5591
5649
  [trigger, ref]
5592
5650
  );
5593
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TooltipPrimitive.Trigger, { ref: setRef, ...{ [TOOLTIP_TRIGGER_ATTR]: "" }, ...props });
5651
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Trigger, { ref: setRef, ...{ [TOOLTIP_TRIGGER_ATTR]: "" }, ...props });
5594
5652
  });
5595
5653
  TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
5596
- var TooltipContent = React26.forwardRef(({ className, side, fallbackSide, sideOffset = 4, collisionPadding = TOOLTIP_EDGE_PX, container, animated = true, children, style, ...props }, ref) => {
5654
+ var TooltipContent = React27.forwardRef(({ className, side, fallbackSide, sideOffset = 4, collisionPadding = TOOLTIP_EDGE_PX, container, animated = true, children, style, ...props }, ref) => {
5597
5655
  const resolved = usePortalContainer(container);
5598
- const trigger = React26.useContext(TriggerContext);
5656
+ const trigger = React27.useContext(TriggerContext);
5599
5657
  const placed = side ?? (trigger?.open ? tooltipSide(trigger.ref.current, fallbackSide) : fallbackSide ?? "top");
5600
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TooltipPrimitive.Portal, { container: resolved ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5658
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Portal, { container: resolved ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5601
5659
  TooltipPrimitive.Content,
5602
5660
  {
5603
5661
  ref,
@@ -5620,7 +5678,7 @@ var TooltipContent = React26.forwardRef(({ className, side, fallbackSide, sideOf
5620
5678
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
5621
5679
 
5622
5680
  // src/controls/collapsible-text.tsx
5623
- var import_jsx_runtime39 = require("react/jsx-runtime");
5681
+ var import_jsx_runtime40 = require("react/jsx-runtime");
5624
5682
  function CollapsibleText({
5625
5683
  children,
5626
5684
  expanded,
@@ -5654,8 +5712,8 @@ function CollapsibleText({
5654
5712
  }, [children, collapsedLines]);
5655
5713
  const isCollapsed = isOverflowing && !expanded;
5656
5714
  if (showLabel) {
5657
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "relative min-w-0", children: [
5658
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5715
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "relative min-w-0", children: [
5716
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5659
5717
  "div",
5660
5718
  {
5661
5719
  ref: contentRef,
@@ -5668,7 +5726,7 @@ function CollapsibleText({
5668
5726
  children
5669
5727
  }
5670
5728
  ),
5671
- isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
5729
+ isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
5672
5730
  "button",
5673
5731
  {
5674
5732
  type: "button",
@@ -5679,15 +5737,15 @@ function CollapsibleText({
5679
5737
  },
5680
5738
  className: "mt-0.5 inline-flex min-h-6 items-center gap-0.5 rounded text-xs font-medium text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring",
5681
5739
  children: [
5682
- isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ChevronDownIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ChevronUpIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }),
5740
+ isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronDownIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronUpIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }),
5683
5741
  isCollapsed ? expandLabel : collapseLabel
5684
5742
  ]
5685
5743
  }
5686
5744
  ) : null
5687
5745
  ] });
5688
5746
  }
5689
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "relative min-w-0", children: [
5690
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5747
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "relative min-w-0", children: [
5748
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5691
5749
  "div",
5692
5750
  {
5693
5751
  ref: contentRef,
@@ -5700,10 +5758,10 @@ function CollapsibleText({
5700
5758
  children
5701
5759
  }
5702
5760
  ),
5703
- isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5761
+ isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5704
5762
  Button2,
5705
5763
  {
5706
- icon: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ChevronDownIcon, {}),
5764
+ icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronDownIcon, {}),
5707
5765
  type: "button",
5708
5766
  variant: "outline",
5709
5767
  "aria-label": expandLabel,
@@ -5714,10 +5772,10 @@ function CollapsibleText({
5714
5772
  },
5715
5773
  className: "pointer-events-auto"
5716
5774
  }
5717
- ) }) : isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "flex justify-center pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5775
+ ) }) : isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex justify-center pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5718
5776
  Button2,
5719
5777
  {
5720
- icon: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ChevronUpIcon, {}),
5778
+ icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronUpIcon, {}),
5721
5779
  type: "button",
5722
5780
  variant: "quiet",
5723
5781
  "aria-label": collapseLabel,
@@ -5737,12 +5795,12 @@ function CollapsibleTextGroupControls({
5737
5795
  anyExpanded,
5738
5796
  disabled = false
5739
5797
  }) {
5740
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center gap-0.5", children: [
5741
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Tooltip, { children: [
5742
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5798
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-center gap-0.5", children: [
5799
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Tooltip, { children: [
5800
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5743
5801
  Button2,
5744
5802
  {
5745
- icon: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ChevronsDownIcon, { className: "!size-[18px] lg:!size-3.5" }),
5803
+ icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronsDownIcon, { className: "!size-[18px] lg:!size-3.5" }),
5746
5804
  type: "button",
5747
5805
  variant: "quiet",
5748
5806
  "aria-label": "Expand all",
@@ -5750,13 +5808,13 @@ function CollapsibleTextGroupControls({
5750
5808
  disabled: disabled || allExpanded
5751
5809
  }
5752
5810
  ) }),
5753
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipContent, { side: "top", children: "Expand all" })
5811
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipContent, { side: "top", children: "Expand all" })
5754
5812
  ] }),
5755
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Tooltip, { children: [
5756
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5813
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Tooltip, { children: [
5814
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5757
5815
  Button2,
5758
5816
  {
5759
- icon: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ChevronsUpIcon, { className: "!size-[18px] lg:!size-3.5" }),
5817
+ icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronsUpIcon, { className: "!size-[18px] lg:!size-3.5" }),
5760
5818
  type: "button",
5761
5819
  variant: "quiet",
5762
5820
  "aria-label": "Collapse all",
@@ -5764,14 +5822,14 @@ function CollapsibleTextGroupControls({
5764
5822
  disabled: disabled || !anyExpanded
5765
5823
  }
5766
5824
  ) }),
5767
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipContent, { side: "top", children: "Collapse all" })
5825
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipContent, { side: "top", children: "Collapse all" })
5768
5826
  ] })
5769
5827
  ] });
5770
5828
  }
5771
5829
 
5772
5830
  // src/controls/info-hint.tsx
5773
5831
  var import_react9 = require("react");
5774
- var import_jsx_runtime40 = require("react/jsx-runtime");
5832
+ var import_jsx_runtime41 = require("react/jsx-runtime");
5775
5833
  var COARSE_POINTER_QUERY = "(pointer: coarse)";
5776
5834
  function subscribeCoarse(onChange) {
5777
5835
  const mq = window.matchMedia(COARSE_POINTER_QUERY);
@@ -5795,10 +5853,10 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5795
5853
  const coarse = useCoarsePointer();
5796
5854
  const isMobile = (0, import_media_query.useIsMobile)();
5797
5855
  const [open, setOpen] = (0, import_react9.useState)(false);
5798
- const glyph = /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(InfoIcon, { "aria-hidden": true, className: "h-3.5 w-3.5", strokeWidth: 2 });
5856
+ const glyph = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(InfoIcon, { "aria-hidden": true, className: "h-3.5 w-3.5", strokeWidth: 2 });
5799
5857
  if (coarse || isMobile) {
5800
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
5801
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5858
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
5859
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5802
5860
  "button",
5803
5861
  {
5804
5862
  type: "button",
@@ -5812,7 +5870,7 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5812
5870
  children: glyph
5813
5871
  }
5814
5872
  ) }),
5815
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5873
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5816
5874
  PopoverContent,
5817
5875
  {
5818
5876
  side,
@@ -5829,8 +5887,8 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5829
5887
  return (
5830
5888
  // Brings its own provider: an official component works wherever it is imported (a
5831
5889
  // test, a portal, a page without the app shell) — 2026-09-30, final-switch tests.
5832
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Tooltip, { open, onOpenChange: setOpen, children: [
5833
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5890
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { open, onOpenChange: setOpen, children: [
5891
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5834
5892
  "button",
5835
5893
  {
5836
5894
  type: "button",
@@ -5846,13 +5904,13 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5846
5904
  children: glyph
5847
5905
  }
5848
5906
  ) }),
5849
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipContent, { side, className: CONTENT_CLASS, onClick: isolate, children: text })
5907
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { side, className: CONTENT_CLASS, onClick: isolate, children: text })
5850
5908
  ] }) })
5851
5909
  );
5852
5910
  }
5853
5911
 
5854
5912
  // src/controls/status-badge.tsx
5855
- var import_jsx_runtime41 = require("react/jsx-runtime");
5913
+ var import_jsx_runtime42 = require("react/jsx-runtime");
5856
5914
  var STATUS_TONES = ["success", "warning", "danger", "neutral", "info"];
5857
5915
  var TONE_CLASS = {
5858
5916
  success: "border-success/40 bg-success/15 text-success-ink",
@@ -5868,7 +5926,7 @@ var SIZE_CLASS = {
5868
5926
  };
5869
5927
  function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trailing, className }) {
5870
5928
  const s = SIZE_CLASS[size];
5871
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
5929
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
5872
5930
  "span",
5873
5931
  {
5874
5932
  role: "status",
@@ -5884,7 +5942,7 @@ function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trai
5884
5942
  className
5885
5943
  ),
5886
5944
  children: [
5887
- Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon3, { "aria-hidden": true, className: cn("shrink-0", s.icon) }) : null,
5945
+ Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon3, { "aria-hidden": true, className: cn("shrink-0", s.icon) }) : null,
5888
5946
  label,
5889
5947
  trailing
5890
5948
  ]
@@ -5893,8 +5951,8 @@ function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trai
5893
5951
  }
5894
5952
 
5895
5953
  // src/controls/structured-section-card.tsx
5896
- var React27 = __toESM(require("react"), 1);
5897
- var import_jsx_runtime42 = require("react/jsx-runtime");
5954
+ var React28 = __toESM(require("react"), 1);
5955
+ var import_jsx_runtime43 = require("react/jsx-runtime");
5898
5956
  var TITLE_TONE = {
5899
5957
  primary: "text-primary-ink",
5900
5958
  foreground: "text-foreground"
@@ -5911,24 +5969,24 @@ function StructuredSectionCard({
5911
5969
  className
5912
5970
  }) {
5913
5971
  const hasFooter = footerLeft || footerCenter || footerRight;
5914
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
5972
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
5915
5973
  "div",
5916
5974
  {
5917
5975
  "data-slot": "structured-section-card",
5918
5976
  className: cn("overflow-hidden rounded-xl border-border bg-textured shadow-sm", className),
5919
5977
  children: [
5920
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-muted px-4 py-3", children: [
5921
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "min-w-0", children: [
5922
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("h3", { className: cn("font-medium", TITLE_TONE[titleTone]), children: title }),
5923
- description && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { className: "type-body text-muted-foreground", children: description })
5978
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-muted px-4 py-3", children: [
5979
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "min-w-0", children: [
5980
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h3", { className: cn("font-medium", TITLE_TONE[titleTone]), children: title }),
5981
+ description && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "type-body text-muted-foreground", children: description })
5924
5982
  ] }),
5925
- headerActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "ml-4 flex shrink-0 items-center space-x-2", children: headerActions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(React27.Fragment, { children: action }, index)) })
5983
+ headerActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "ml-4 flex shrink-0 items-center space-x-2", children: headerActions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(React28.Fragment, { children: action }, index)) })
5926
5984
  ] }),
5927
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "p-4", children }),
5928
- hasFooter && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex flex-wrap items-center border-t border-border px-4 py-3", children: [
5929
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "flex min-w-[33%] flex-1 justify-start space-x-2 sm:min-w-0", children: footerLeft }),
5930
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-center space-x-2 sm:mt-0 sm:min-w-0", children: footerCenter }),
5931
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-end space-x-2 sm:mt-0 sm:min-w-0", children: footerRight })
5985
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "p-4", children }),
5986
+ hasFooter && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex flex-wrap items-center border-t border-border px-4 py-3", children: [
5987
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "flex min-w-[33%] flex-1 justify-start space-x-2 sm:min-w-0", children: footerLeft }),
5988
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-center space-x-2 sm:mt-0 sm:min-w-0", children: footerCenter }),
5989
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-end space-x-2 sm:mt-0 sm:min-w-0", children: footerRight })
5932
5990
  ] })
5933
5991
  ]
5934
5992
  }
@@ -5936,7 +5994,7 @@ function StructuredSectionCard({
5936
5994
  }
5937
5995
 
5938
5996
  // src/controls/icon-dropdown-menu.tsx
5939
- var import_jsx_runtime43 = require("react/jsx-runtime");
5997
+ var import_jsx_runtime44 = require("react/jsx-runtime");
5940
5998
  function IconDropdownMenu({
5941
5999
  options,
5942
6000
  value,
@@ -5951,21 +6009,21 @@ function IconDropdownMenu({
5951
6009
  console.warn("IconDropdownMenu: no option to show \u2014 pass at least one option.");
5952
6010
  return null;
5953
6011
  }
5954
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(DropdownMenu, { children: [
5955
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
6012
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(DropdownMenu, { children: [
6013
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
5956
6014
  Button2,
5957
6015
  {
5958
- icon: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SelectedIcon, {}),
5959
- iconEnd: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ChevronDownIcon, {}),
6016
+ icon: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SelectedIcon, {}),
6017
+ iconEnd: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ChevronDownIcon, {}),
5960
6018
  variant: "outline",
5961
6019
  "aria-label": selected.label,
5962
6020
  ...className ? { className } : {}
5963
6021
  }
5964
6022
  ) }),
5965
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(DropdownMenuContent, { align, className: cn("rounded-2xl p-1", menuWidth), children: options.map((option) => {
6023
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuContent, { align, className: cn("rounded-2xl p-1", menuWidth), children: options.map((option) => {
5966
6024
  const isSelected = option.value === value;
5967
6025
  const OptionIcon = option.icon;
5968
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
6026
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
5969
6027
  DropdownMenuItem,
5970
6028
  {
5971
6029
  onClick: () => onValueChange(option.value),
@@ -5975,9 +6033,9 @@ function IconDropdownMenu({
5975
6033
  isSelected && "bg-primary/10"
5976
6034
  ),
5977
6035
  children: [
5978
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(OptionIcon, { className: cn("h-4 w-4 shrink-0", isSelected ? "text-primary-ink" : "text-muted-foreground") }),
5979
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: cn("type-body flex-1 leading-tight", isSelected ? "font-medium text-primary-ink" : "text-foreground"), children: option.label }),
5980
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0 text-primary-ink" })
6036
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(OptionIcon, { className: cn("h-4 w-4 shrink-0", isSelected ? "text-primary-ink" : "text-muted-foreground") }),
6037
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: cn("type-body flex-1 leading-tight", isSelected ? "font-medium text-primary-ink" : "text-foreground"), children: option.label }),
6038
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0 text-primary-ink" })
5981
6039
  ]
5982
6040
  },
5983
6041
  String(option.value)
@@ -5987,23 +6045,23 @@ function IconDropdownMenu({
5987
6045
  }
5988
6046
 
5989
6047
  // src/error-box.tsx
5990
- var React28 = __toESM(require("react"), 1);
5991
- var import_jsx_runtime44 = require("react/jsx-runtime");
6048
+ var React29 = __toESM(require("react"), 1);
6049
+ var import_jsx_runtime45 = require("react/jsx-runtime");
5992
6050
  var CONTEXT_KEY = /* @__PURE__ */ Symbol.for("@ai-matrx/design-system/error-actions");
5993
6051
  var registry2 = globalThis;
5994
- var ErrorActionsContext = registry2[CONTEXT_KEY] ?? (registry2[CONTEXT_KEY] = React28.createContext(null));
6052
+ var ErrorActionsContext = registry2[CONTEXT_KEY] ?? (registry2[CONTEXT_KEY] = React29.createContext(null));
5995
6053
  var MENUS_KEY = /* @__PURE__ */ Symbol.for("@ai-matrx/design-system/error-card-menus");
5996
6054
  var menusRegistry = globalThis;
5997
- var ErrorCardMenusContext = menusRegistry[MENUS_KEY] ?? (menusRegistry[MENUS_KEY] = React28.createContext(null));
6055
+ var ErrorCardMenusContext = menusRegistry[MENUS_KEY] ?? (menusRegistry[MENUS_KEY] = React29.createContext(null));
5998
6056
  function useErrorActions() {
5999
- return React28.useContext(ErrorActionsContext);
6057
+ return React29.useContext(ErrorActionsContext);
6000
6058
  }
6001
6059
  function ErrorActions(props) {
6002
6060
  const render = useErrorActions();
6003
6061
  if (!render) return null;
6004
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children: render(props) });
6062
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: render(props) });
6005
6063
  }
6006
- var ErrorBox = React28.forwardRef(function ErrorBox2({
6064
+ var ErrorBox = React29.forwardRef(function ErrorBox2({
6007
6065
  as = "p",
6008
6066
  message,
6009
6067
  title,
@@ -6025,17 +6083,17 @@ var ErrorBox = React28.forwardRef(function ErrorBox2({
6025
6083
  ...unsavedInput !== void 0 ? { unsavedInput } : {},
6026
6084
  ...origin !== void 0 ? { origin } : {}
6027
6085
  };
6028
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Tag, { ref, role: "alert", "data-error-box": "", ...rest, children: [
6086
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Tag, { ref, role: "alert", "data-error-box": "", ...rest, children: [
6029
6087
  children ?? message,
6030
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ErrorActions, { ...facts })
6088
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ErrorActions, { ...facts })
6031
6089
  ] });
6032
6090
  });
6033
6091
 
6034
6092
  // src/label.tsx
6035
6093
  var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
6036
- var React29 = __toESM(require("react"), 1);
6037
- var import_jsx_runtime45 = require("react/jsx-runtime");
6038
- var Label3 = React29.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
6094
+ var React30 = __toESM(require("react"), 1);
6095
+ var import_jsx_runtime46 = require("react/jsx-runtime");
6096
+ var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
6039
6097
  LabelPrimitive.Root,
6040
6098
  {
6041
6099
  ref,
@@ -6049,7 +6107,7 @@ var Label3 = React29.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
6049
6107
  Label3.displayName = LabelPrimitive.Root.displayName;
6050
6108
 
6051
6109
  // src/controls/field.tsx
6052
- var import_jsx_runtime46 = require("react/jsx-runtime");
6110
+ var import_jsx_runtime47 = require("react/jsx-runtime");
6053
6111
  function LabeledField({
6054
6112
  label,
6055
6113
  htmlFor,
@@ -6068,9 +6126,9 @@ function LabeledField({
6068
6126
  const hasCounter = typeof count === "number";
6069
6127
  const overLimit = hasCounter && maxCount != null && count > maxCount;
6070
6128
  const nearLimit = hasCounter && maxCount != null && count > maxCount * 0.9 && !overLimit;
6071
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { "data-field-root": "", className: cn("group/field space-y-1.5", className), children: [
6072
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center gap-1.5", children: [
6073
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
6129
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-field-root": "", className: cn("group/field space-y-1.5", className), children: [
6130
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1.5", children: [
6131
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6074
6132
  Label3,
6075
6133
  {
6076
6134
  htmlFor,
@@ -6080,27 +6138,27 @@ function LabeledField({
6080
6138
  ),
6081
6139
  children: [
6082
6140
  label,
6083
- required && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-destructive ml-1", "aria-hidden": true, children: "*" }),
6084
- !required && optional && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-muted-foreground ml-1.5 type-secondary font-normal", children: "(optional)" })
6141
+ required && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-destructive ml-1", "aria-hidden": true, children: "*" }),
6142
+ !required && optional && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-muted-foreground ml-1.5 type-secondary font-normal", children: "(optional)" })
6085
6143
  ]
6086
6144
  }
6087
6145
  ),
6088
- typeof help === "string" && help && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(InfoHint, { text: help, label: typeof label === "string" ? `About ${label}` : "Help" }),
6089
- help && typeof help !== "string" && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Tooltip, { children: [
6090
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
6146
+ typeof help === "string" && help && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(InfoHint, { text: help, label: typeof label === "string" ? `About ${label}` : "Help" }),
6147
+ help && typeof help !== "string" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Tooltip, { children: [
6148
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6091
6149
  "button",
6092
6150
  {
6093
6151
  type: "button",
6094
6152
  "aria-label": "Help",
6095
6153
  className: "inline-flex items-center justify-center h-4 w-4 rounded-full text-muted-foreground hover:text-foreground transition-colors",
6096
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CircleHelpIcon, { className: "h-3.5 w-3.5" })
6154
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleHelpIcon, { className: "h-3.5 w-3.5" })
6097
6155
  }
6098
6156
  ) }),
6099
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TooltipContent, { side: "top", className: "max-w-xs type-secondary", children: help })
6157
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TooltipContent, { side: "top", className: "max-w-xs type-secondary", children: help })
6100
6158
  ] }) })
6101
6159
  ] }),
6102
- description && !error && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "type-secondary text-muted-foreground", children: description }),
6103
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
6160
+ description && !error && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "type-secondary text-muted-foreground", children: description }),
6161
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6104
6162
  "div",
6105
6163
  {
6106
6164
  "data-slot": "field-control",
@@ -6111,7 +6169,7 @@ function LabeledField({
6111
6169
  children
6112
6170
  }
6113
6171
  ),
6114
- (error || hasCounter || requiredEmpty) && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
6172
+ (error || hasCounter || requiredEmpty) && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6115
6173
  "div",
6116
6174
  {
6117
6175
  className: cn(
@@ -6123,10 +6181,10 @@ function LabeledField({
6123
6181
  !error && !hasCounter && "hidden [[data-field-root]:has(:placeholder-shown)_&]:flex"
6124
6182
  ),
6125
6183
  children: [
6126
- error ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("p", { className: "type-secondary text-destructive flex items-center gap-1", children: [
6127
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6128
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: error }),
6129
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
6184
+ error ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("p", { className: "type-secondary text-destructive flex items-center gap-1", children: [
6185
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6186
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: error }),
6187
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6130
6188
  ErrorActions,
6131
6189
  {
6132
6190
  ...typeof error === "string" ? { message: error } : {},
@@ -6134,18 +6192,18 @@ function LabeledField({
6134
6192
  origin: "design-system/LabeledField"
6135
6193
  }
6136
6194
  )
6137
- ] }) : requiredEmpty ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
6195
+ ] }) : requiredEmpty ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6138
6196
  "p",
6139
6197
  {
6140
6198
  "data-slot": "field-empty-notice",
6141
6199
  className: "hidden type-secondary text-muted-foreground items-center gap-1 [[data-field-root]:has(:placeholder-shown)_&]:flex",
6142
6200
  children: [
6143
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6144
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: "Empty \u2014 the gray text is an example, not your answer." })
6201
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6202
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: "Empty \u2014 the gray text is an example, not your answer." })
6145
6203
  ]
6146
6204
  }
6147
- ) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", {}),
6148
- hasCounter && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
6205
+ ) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", {}),
6206
+ hasCounter && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6149
6207
  "span",
6150
6208
  {
6151
6209
  className: cn(
@@ -6166,10 +6224,10 @@ function LabeledField({
6166
6224
  var import_clipboard = require("@ai-matrx/kit/clipboard");
6167
6225
  var import_clipboard_fallback_opener = require("@ai-matrx/kit/clipboard-fallback-opener");
6168
6226
  var import_notify = require("@ai-matrx/kit/notify");
6169
- var React30 = __toESM(require("react"), 1);
6227
+ var React31 = __toESM(require("react"), 1);
6170
6228
  var import_react_dom = require("react-dom");
6171
- var import_jsx_runtime47 = require("react/jsx-runtime");
6172
- var { useState: useState17, useLayoutEffect: useLayoutEffect4, useRef: useRef12 } = React30;
6229
+ var import_jsx_runtime48 = require("react/jsx-runtime");
6230
+ var { useState: useState17, useLayoutEffect: useLayoutEffect4, useRef: useRef12 } = React31;
6173
6231
  function HelpIcon({
6174
6232
  text,
6175
6233
  content,
@@ -6267,13 +6325,13 @@ function HelpIcon({
6267
6325
  }, [isVisible]);
6268
6326
  const formatTextWithLineBreaks = (text2) => {
6269
6327
  const processedText = text2.replace(/\\n/g, "\n");
6270
- return processedText.split("\n").map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(React30.Fragment, { children: [
6271
- index > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("br", {}),
6328
+ return processedText.split("\n").map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(React31.Fragment, { children: [
6329
+ index > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("br", {}),
6272
6330
  line
6273
6331
  ] }, index));
6274
6332
  };
6275
6333
  if (!text && !content) return null;
6276
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6334
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6277
6335
  "div",
6278
6336
  {
6279
6337
  className: `inline-block relative cursor-help ${className}`,
@@ -6281,9 +6339,9 @@ function HelpIcon({
6281
6339
  onMouseEnter: showTooltip,
6282
6340
  onMouseLeave: hideTooltip,
6283
6341
  children: [
6284
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(InfoIcon, { className: "h-4 w-4 text-muted-foreground transition-colors duration-200" }),
6342
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(InfoIcon, { className: "h-4 w-4 text-muted-foreground transition-colors duration-200" }),
6285
6343
  isVisible && typeof document !== "undefined" && (0, import_react_dom.createPortal)(
6286
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6344
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6287
6345
  "div",
6288
6346
  {
6289
6347
  ref: tooltipRef,
@@ -6296,29 +6354,29 @@ function HelpIcon({
6296
6354
  onMouseEnter: cancelHideTooltip,
6297
6355
  onMouseLeave: hideTooltip,
6298
6356
  children: [
6299
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "p-3", children: [
6300
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
6301
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleHelpIcon, { className: "h-4 w-4 flex-shrink-0 text-info-ink" }),
6302
- title && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { className: "text-foreground type-title", children: title }),
6303
- text && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6357
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "p-3", children: [
6358
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
6359
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleHelpIcon, { className: "h-4 w-4 flex-shrink-0 text-info-ink" }),
6360
+ title && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "text-foreground type-title", children: title }),
6361
+ text && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6304
6362
  Button2,
6305
6363
  {
6306
6364
  variant: "quiet",
6307
6365
  className: "ml-auto",
6308
- icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CopyIcon, {}),
6366
+ icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CopyIcon, {}),
6309
6367
  "aria-label": "Copy to clipboard",
6310
6368
  onClick: handleCopy
6311
6369
  }
6312
6370
  )
6313
6371
  ] }),
6314
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "type-body text-foreground leading-relaxed", children: content ? content : text && formatTextWithLineBreaks(text) }),
6315
- required && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "mt-3 inline-flex items-center gap-1.5 px-2.5 py-1 bg-warning/15 text-warning-ink type-secondary font-medium rounded-full", children: [
6316
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "w-1.5 h-1.5 bg-warning-ink rounded-full" }),
6372
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "type-body text-foreground leading-relaxed", children: content ? content : text && formatTextWithLineBreaks(text) }),
6373
+ required && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "mt-3 inline-flex items-center gap-1.5 px-2.5 py-1 bg-warning/15 text-warning-ink type-secondary font-medium rounded-full", children: [
6374
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "w-1.5 h-1.5 bg-warning-ink rounded-full" }),
6317
6375
  "Required Field"
6318
6376
  ] }),
6319
- onAiAssistance && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Button2, { variant: "primary", icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleDotIcon, {}), className: "mt-3 w-full", onClick: handleAiClick, children: "Get Help From Matrx AI" })
6377
+ onAiAssistance && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button2, { variant: "primary", icon: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleDotIcon, {}), className: "mt-3 w-full", onClick: handleAiClick, children: "Get Help From Matrx AI" })
6320
6378
  ] }),
6321
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "absolute -bottom-1.5 left-1/2 -translate-x-1/2 w-3 h-3 bg-textured border-r border-b border-border rotate-45" })
6379
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "absolute -bottom-1.5 left-1/2 -translate-x-1/2 w-3 h-3 bg-textured border-r border-b border-border rotate-45" })
6322
6380
  ]
6323
6381
  }
6324
6382
  ),
@@ -6333,8 +6391,8 @@ function HelpIcon({
6333
6391
  var import_clipboard2 = require("@ai-matrx/kit/clipboard");
6334
6392
  var import_notify2 = require("@ai-matrx/kit/notify");
6335
6393
  var import_clipboard_fallback_opener2 = require("@ai-matrx/kit/clipboard-fallback-opener");
6336
- var React31 = __toESM(require("react"), 1);
6337
- var import_jsx_runtime48 = require("react/jsx-runtime");
6394
+ var React32 = __toESM(require("react"), 1);
6395
+ var import_jsx_runtime49 = require("react/jsx-runtime");
6338
6396
  function cleanUrl(url) {
6339
6397
  try {
6340
6398
  const parsed = new URL(url);
@@ -6359,9 +6417,9 @@ function TextArrayInput({
6359
6417
  shouldCleanUrl = false,
6360
6418
  auxiliaryControlsTabIndex
6361
6419
  }) {
6362
- const [internalValue, setInternalValue] = React31.useState([]);
6363
- const [inputValue, setInputValue] = React31.useState("");
6364
- const [copied, setCopied] = React31.useState(false);
6420
+ const [internalValue, setInternalValue] = React32.useState([]);
6421
+ const [inputValue, setInputValue] = React32.useState("");
6422
+ const [copied, setCopied] = React32.useState(false);
6365
6423
  const value = externalValue || internalValue;
6366
6424
  const tabIndexProp = auxiliaryControlsTabIndex === void 0 ? {} : { tabIndex: auxiliaryControlsTabIndex };
6367
6425
  const handleCopy = async () => {
@@ -6390,9 +6448,9 @@ function TextArrayInput({
6390
6448
  handleChange([...value, ...added]);
6391
6449
  setInputValue("");
6392
6450
  };
6393
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: `space-y-3 ${className}`, children: [
6394
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full", children: [
6395
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6451
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: `space-y-3 ${className}`, children: [
6452
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full", children: [
6453
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6396
6454
  Input,
6397
6455
  {
6398
6456
  adornment: "end",
@@ -6406,12 +6464,12 @@ function TextArrayInput({
6406
6464
  className: "w-full"
6407
6465
  }
6408
6466
  ),
6409
- showCopyIcon && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6467
+ showCopyIcon && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6410
6468
  Button2,
6411
6469
  {
6412
6470
  ...tabIndexProp,
6413
6471
  variant: "quiet",
6414
- icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CopyIcon, {}),
6472
+ icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CopyIcon, {}),
6415
6473
  ...copied ? { glyphTone: "success" } : {},
6416
6474
  "aria-label": "Copy values",
6417
6475
  onClick: handleCopy,
@@ -6419,13 +6477,13 @@ function TextArrayInput({
6419
6477
  }
6420
6478
  )
6421
6479
  ] }),
6422
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex flex-wrap gap-2", children: value.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "type-body inline-flex items-center rounded-full bg-muted px-3 py-1 text-muted-foreground", children: "None Added" }) : value.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6480
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex flex-wrap gap-2", children: value.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "type-body inline-flex items-center rounded-full bg-muted px-3 py-1 text-muted-foreground", children: "None Added" }) : value.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
6423
6481
  "span",
6424
6482
  {
6425
6483
  className: `inline-flex cursor-default items-center gap-1 rounded-full px-3 py-1 text-sm transition-all duration-200 ${chipClassName}`,
6426
6484
  children: [
6427
6485
  item,
6428
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6486
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6429
6487
  "button",
6430
6488
  {
6431
6489
  ...tabIndexProp,
@@ -6436,7 +6494,7 @@ function TextArrayInput({
6436
6494
  },
6437
6495
  className: "cursor-pointer rounded-full p-0.5 transition-colors duration-200 hover:bg-primary-foreground/20",
6438
6496
  "aria-label": `Remove ${item}`,
6439
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(XIcon, { className: "h-3.5 w-3.5" })
6497
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(XIcon, { className: "h-3.5 w-3.5" })
6440
6498
  }
6441
6499
  )
6442
6500
  ]
@@ -6447,7 +6505,7 @@ function TextArrayInput({
6447
6505
  }
6448
6506
 
6449
6507
  // src/host-link.tsx
6450
- var React32 = __toESM(require("react"), 1);
6508
+ var React33 = __toESM(require("react"), 1);
6451
6509
 
6452
6510
  // src/stand-in-notice.ts
6453
6511
  var announced = /* @__PURE__ */ new Set();
@@ -6465,21 +6523,21 @@ function getTapTargetLinkComponent() {
6465
6523
  }
6466
6524
 
6467
6525
  // src/host-link.tsx
6468
- var import_jsx_runtime49 = require("react/jsx-runtime");
6469
- var HostLink = React32.forwardRef(function HostLink2({ href, prefetch, ...rest }, ref) {
6526
+ var import_jsx_runtime50 = require("react/jsx-runtime");
6527
+ var HostLink = React33.forwardRef(function HostLink2({ href, prefetch, ...rest }, ref) {
6470
6528
  const Registered = getTapTargetLinkComponent();
6471
6529
  if (Registered) {
6472
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Registered, { ref, href, ...prefetch === void 0 ? {} : { prefetch }, ...rest });
6530
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Registered, { ref, href, ...prefetch === void 0 ? {} : { prefetch }, ...rest });
6473
6531
  }
6474
6532
  announceStandIn(
6475
6533
  "link-host",
6476
6534
  "HostLink drew a plain <a>: register the app's link component once with setTapTargetLinkComponent() from @ai-matrx/design-system/tap-target."
6477
6535
  );
6478
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("a", { ref, href, "data-link-host": UNCONFIGURED, ...rest });
6536
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("a", { ref, href, "data-link-host": UNCONFIGURED, ...rest });
6479
6537
  });
6480
6538
 
6481
6539
  // src/read-state/untrusted-count.tsx
6482
- var import_jsx_runtime50 = require("react/jsx-runtime");
6540
+ var import_jsx_runtime51 = require("react/jsx-runtime");
6483
6541
  function countReadState(input) {
6484
6542
  const { read, trustworthy } = input;
6485
6543
  if (trustworthy === false) return "failed";
@@ -6496,7 +6554,7 @@ function unavailableCountLabel(label) {
6496
6554
  }
6497
6555
 
6498
6556
  // src/controls/kpi-tile.tsx
6499
- var import_jsx_runtime51 = require("react/jsx-runtime");
6557
+ var import_jsx_runtime52 = require("react/jsx-runtime");
6500
6558
  var TONE_VALUE = {
6501
6559
  neutral: "text-foreground",
6502
6560
  good: "text-success-ink",
@@ -6519,7 +6577,7 @@ function KpiSparkline({ trend, label }) {
6519
6577
  const range = Math.max(max - min, Math.abs(max) * 0.1) || 1;
6520
6578
  const y = (v) => max === min ? SPARK_H / 2 : SPARK_H - 2 - (v - min) / range * (SPARK_H - 4);
6521
6579
  const pts = trend.values.map((v, i) => `${(i / (n - 1) * SPARK_W).toFixed(1)},${y(v).toFixed(1)}`).join(" ");
6522
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
6580
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
6523
6581
  "svg",
6524
6582
  {
6525
6583
  viewBox: `0 0 ${SPARK_W} ${SPARK_H}`,
@@ -6528,9 +6586,9 @@ function KpiSparkline({ trend, label }) {
6528
6586
  "aria-label": `${trend.label ?? label}, last ${trend.period}`,
6529
6587
  className: "h-5 w-16 shrink-0 text-primary",
6530
6588
  children: [
6531
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("title", { children: `${trend.label ?? label}, last ${trend.period}` }),
6532
- max === min ? null : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("polygon", { points: `0,${SPARK_H} ${pts} ${SPARK_W},${SPARK_H}`, fill: "currentColor", fillOpacity: 0.15 }),
6533
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("polyline", { points: pts, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" })
6589
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("title", { children: `${trend.label ?? label}, last ${trend.period}` }),
6590
+ max === min ? null : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("polygon", { points: `0,${SPARK_H} ${pts} ${SPARK_W},${SPARK_H}`, fill: "currentColor", fillOpacity: 0.15 }),
6591
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("polyline", { points: pts, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" })
6534
6592
  ]
6535
6593
  }
6536
6594
  );
@@ -6552,19 +6610,19 @@ function KpiTile({
6552
6610
  const failed = readState === "failed";
6553
6611
  const shown = failed ? null : value;
6554
6612
  const dot = TONE_DOT[tone2];
6555
- const body = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
6556
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "flex min-w-0 items-start gap-1.5 type-meta font-medium uppercase tracking-wide text-muted-foreground", children: [
6557
- dot ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { "aria-hidden": true, className: cn("mt-1 inline-block h-2 w-2 shrink-0 rounded-sm", dot) }) : null,
6558
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "line-clamp-2 break-words", children: [
6613
+ const body = /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
6614
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex min-w-0 items-start gap-1.5 type-meta font-medium uppercase tracking-wide text-muted-foreground", children: [
6615
+ dot ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { "aria-hidden": true, className: cn("mt-1 inline-block h-2 w-2 shrink-0 rounded-sm", dot) }) : null,
6616
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("span", { className: "line-clamp-2 break-words", children: [
6559
6617
  label,
6560
- title ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
6618
+ title ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
6561
6619
  " ",
6562
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(InfoHint, { text: title, label: `What ${label} means` })
6620
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(InfoHint, { text: title, label: `What ${label} means` })
6563
6621
  ] }) : null
6564
6622
  ] })
6565
6623
  ] }),
6566
- loading ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "my-0.5 h-6 w-12 animate-pulse rounded bg-muted", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "flex min-w-0 items-end justify-between gap-2", children: [
6567
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
6624
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "my-0.5 h-6 w-12 animate-pulse rounded bg-muted", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex min-w-0 items-end justify-between gap-2", children: [
6625
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6568
6626
  "div",
6569
6627
  {
6570
6628
  className: cn(
@@ -6576,16 +6634,16 @@ function KpiTile({
6576
6634
  children: shown === null ? "\u2014" : shown
6577
6635
  }
6578
6636
  ),
6579
- trend && shown !== null ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(KpiSparkline, { trend, label }) : null
6637
+ trend && shown !== null ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(KpiSparkline, { trend, label }) : null
6580
6638
  ] }),
6581
- hint ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "truncate type-meta text-muted-foreground", children: hint }) : null
6639
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "truncate type-meta text-muted-foreground", children: hint }) : null
6582
6640
  ] });
6583
6641
  const shell = cn(
6584
6642
  "flex min-w-0 flex-col gap-0.5 rounded-md border border-border bg-card px-3 py-2",
6585
6643
  className
6586
6644
  );
6587
6645
  if (href && !loading && shown !== null) {
6588
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
6646
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6589
6647
  HostLink,
6590
6648
  {
6591
6649
  href,
@@ -6598,13 +6656,13 @@ function KpiTile({
6598
6656
  }
6599
6657
  );
6600
6658
  }
6601
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: shell, "data-look-surface": "card", "aria-busy": loading || void 0, children: body });
6659
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: shell, "data-look-surface": "card", "aria-busy": loading || void 0, children: body });
6602
6660
  }
6603
6661
  function KpiGrid({
6604
6662
  children,
6605
6663
  className
6606
6664
  }) {
6607
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
6665
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6608
6666
  "div",
6609
6667
  {
6610
6668
  className: cn(
@@ -6617,8 +6675,8 @@ function KpiGrid({
6617
6675
  }
6618
6676
 
6619
6677
  // src/controls/action-feedback-button.tsx
6620
- var React33 = __toESM(require("react"), 1);
6621
- var import_jsx_runtime52 = require("react/jsx-runtime");
6678
+ var React34 = __toESM(require("react"), 1);
6679
+ var import_jsx_runtime53 = require("react/jsx-runtime");
6622
6680
  function ActionFeedbackButton({
6623
6681
  icon,
6624
6682
  tooltip,
@@ -6632,9 +6690,9 @@ function ActionFeedbackButton({
6632
6690
  disabled = false,
6633
6691
  ...props
6634
6692
  }) {
6635
- const [showSuccess, setShowSuccess] = React33.useState(false);
6636
- const timer = React33.useRef(null);
6637
- React33.useEffect(() => () => {
6693
+ const [showSuccess, setShowSuccess] = React34.useState(false);
6694
+ const timer = React34.useRef(null);
6695
+ React34.useEffect(() => () => {
6638
6696
  if (timer.current) clearTimeout(timer.current);
6639
6697
  }, []);
6640
6698
  const handleClick = () => {
@@ -6644,11 +6702,11 @@ function ActionFeedbackButton({
6644
6702
  timer.current = setTimeout(() => setShowSuccess(false), feedbackDuration);
6645
6703
  };
6646
6704
  const text = showSuccess ? successTooltip : disabled && disabledTooltip ? disabledTooltip : tooltip;
6647
- const button = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6705
+ const button = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6648
6706
  Button2,
6649
6707
  {
6650
6708
  variant,
6651
- icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CheckCircle2Icon, {}) : icon,
6709
+ icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CheckCircle2Icon, {}) : icon,
6652
6710
  ...showSuccess ? { glyphTone: "success" } : glyphTone ? { glyphTone } : {},
6653
6711
  ...props,
6654
6712
  "aria-label": text,
@@ -6656,15 +6714,15 @@ function ActionFeedbackButton({
6656
6714
  onClick: handleClick
6657
6715
  }
6658
6716
  );
6659
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(Tooltip, { children: [
6660
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "inline-flex", children: button }) : button }),
6661
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(TooltipContent, { side: "bottom", sideOffset: 5, className: "z-[9999]", children: text })
6717
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(Tooltip, { children: [
6718
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "inline-flex", children: button }) : button }),
6719
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(TooltipContent, { side: "bottom", sideOffset: 5, className: "z-[9999]", children: text })
6662
6720
  ] });
6663
6721
  }
6664
6722
 
6665
6723
  // src/controls/citation-chip.tsx
6666
6724
  var import_react10 = require("react");
6667
- var import_jsx_runtime53 = require("react/jsx-runtime");
6725
+ var import_jsx_runtime54 = require("react/jsx-runtime");
6668
6726
  function CitationPopoverBody({
6669
6727
  icon: Icon3,
6670
6728
  label,
@@ -6674,32 +6732,32 @@ function CitationPopoverBody({
6674
6732
  onOpen,
6675
6733
  openLabel = "Open source"
6676
6734
  }) {
6677
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-2", children: [
6678
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-start gap-2", children: [
6679
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6735
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col gap-2", children: [
6736
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-start gap-2", children: [
6737
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6680
6738
  Icon3,
6681
6739
  {
6682
6740
  className: "mt-0.5 h-4 w-4 shrink-0 text-muted-foreground",
6683
6741
  "aria-hidden": true
6684
6742
  }
6685
6743
  ),
6686
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "min-w-0", children: [
6687
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "truncate type-title text-foreground", children: label }),
6688
- locator && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "type-secondary text-muted-foreground", children: locator })
6744
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "min-w-0", children: [
6745
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "truncate type-title text-foreground", children: label }),
6746
+ locator && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "type-secondary text-muted-foreground", children: locator })
6689
6747
  ] })
6690
6748
  ] }),
6691
- excerpt && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("blockquote", { className: "flex gap-2 rounded-md bg-muted/60 p-2 type-secondary italic text-muted-foreground", children: [
6692
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(QuoteIcon, { className: "h-3 w-3 shrink-0", "aria-hidden": true }),
6693
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("not-italic", clampExcerpt && "line-clamp-6"), children: excerpt })
6749
+ excerpt && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("blockquote", { className: "flex gap-2 rounded-md bg-muted/60 p-2 type-secondary italic text-muted-foreground", children: [
6750
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(QuoteIcon, { className: "h-3 w-3 shrink-0", "aria-hidden": true }),
6751
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn("not-italic", clampExcerpt && "line-clamp-6"), children: excerpt })
6694
6752
  ] }),
6695
- onOpen && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
6753
+ onOpen && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
6696
6754
  "button",
6697
6755
  {
6698
6756
  type: "button",
6699
6757
  onClick: onOpen,
6700
6758
  className: "inline-flex items-center gap-1 self-start text-xs font-medium text-primary hover:underline",
6701
6759
  children: [
6702
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ArrowUpRightIcon, { className: "h-3 w-3", "aria-hidden": true }),
6760
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ArrowUpRightIcon, { className: "h-3 w-3", "aria-hidden": true }),
6703
6761
  openLabel
6704
6762
  ]
6705
6763
  }
@@ -6719,8 +6777,8 @@ function CitationChip({
6719
6777
  setOpen(false);
6720
6778
  body.onOpen?.();
6721
6779
  } : void 0;
6722
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
6723
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
6780
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
6781
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
6724
6782
  "button",
6725
6783
  {
6726
6784
  type: "button",
@@ -6730,20 +6788,20 @@ function CitationChip({
6730
6788
  chipClassName
6731
6789
  ),
6732
6790
  children: [
6733
- number != null && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full bg-muted px-1 text-[0.65rem] font-medium leading-none text-muted-foreground", children: number }),
6734
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Icon3, { className: "h-3 w-3 shrink-0 text-muted-foreground", "aria-hidden": true }),
6735
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "truncate", children: label }),
6736
- chipSuffix && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "shrink-0 text-muted-foreground", children: chipSuffix })
6791
+ number != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full bg-muted px-1 text-[0.65rem] font-medium leading-none text-muted-foreground", children: number }),
6792
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon3, { className: "h-3 w-3 shrink-0 text-muted-foreground", "aria-hidden": true }),
6793
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "truncate", children: label }),
6794
+ chipSuffix && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "shrink-0 text-muted-foreground", children: chipSuffix })
6737
6795
  ]
6738
6796
  }
6739
6797
  ) }),
6740
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PopoverContent, { sizing: "content", align: "start", className: "p-3", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CitationPopoverBody, { ...body, onOpen }) })
6798
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PopoverContent, { sizing: "content", align: "start", className: "p-3", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CitationPopoverBody, { ...body, onOpen }) })
6741
6799
  ] });
6742
6800
  }
6743
6801
 
6744
6802
  // src/controls/tool-rail.tsx
6745
- var React34 = __toESM(require("react"), 1);
6746
- var import_jsx_runtime54 = require("react/jsx-runtime");
6803
+ var React35 = __toESM(require("react"), 1);
6804
+ var import_jsx_runtime55 = require("react/jsx-runtime");
6747
6805
  function ToolRail({
6748
6806
  groups,
6749
6807
  value,
@@ -6753,11 +6811,11 @@ function ToolRail({
6753
6811
  className,
6754
6812
  "aria-label": ariaLabel
6755
6813
  }) {
6756
- const flat = React34.useMemo(() => groups.flat(), [groups]);
6757
- const refs = React34.useRef(/* @__PURE__ */ new Map());
6814
+ const flat = React35.useMemo(() => groups.flat(), [groups]);
6815
+ const refs = React35.useRef(/* @__PURE__ */ new Map());
6758
6816
  const enabled = flat.filter((t) => !t.disabled);
6759
6817
  const activeEnabled = enabled.find((t) => t.id === value);
6760
- const [focusId, setFocusId] = React34.useState(null);
6818
+ const [focusId, setFocusId] = React35.useState(null);
6761
6819
  const stopId = (focusId && enabled.some((t) => t.id === focusId) ? focusId : null) ?? activeEnabled?.id ?? enabled[0]?.id;
6762
6820
  const vertical = orientation === "vertical";
6763
6821
  const focusAt = (id) => {
@@ -6783,7 +6841,7 @@ function ToolRail({
6783
6841
  focusAt(enabled[enabled.length - 1]?.id);
6784
6842
  }
6785
6843
  };
6786
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6844
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6787
6845
  "div",
6788
6846
  {
6789
6847
  role: "toolbar",
@@ -6792,8 +6850,8 @@ function ToolRail({
6792
6850
  "data-matrx-tool-rail": "",
6793
6851
  "data-orientation": orientation,
6794
6852
  className: cn("flex w-fit shrink-0 items-center gap-1", vertical ? "flex-col" : "flex-row", className),
6795
- children: groups.map((group, gi) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(React34.Fragment, { children: [
6796
- gi > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6853
+ children: groups.map((group, gi) => /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(React35.Fragment, { children: [
6854
+ gi > 0 ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6797
6855
  "div",
6798
6856
  {
6799
6857
  role: "separator",
@@ -6805,8 +6863,8 @@ function ToolRail({
6805
6863
  const on = tool.id === value;
6806
6864
  const Icon3 = tool.icon;
6807
6865
  const name = tool.shortcut ? `${tool.label} (${tool.shortcut})` : tool.label;
6808
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Tooltip, { children: [
6809
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6866
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Tooltip, { children: [
6867
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6810
6868
  Button2,
6811
6869
  {
6812
6870
  ref: (el) => {
@@ -6814,7 +6872,7 @@ function ToolRail({
6814
6872
  else refs.current.delete(tool.id);
6815
6873
  },
6816
6874
  variant: on ? "primary" : "quiet",
6817
- icon: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon3, {}),
6875
+ icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon3, {}),
6818
6876
  "aria-label": name,
6819
6877
  pressed: on,
6820
6878
  disabled: tool.disabled,
@@ -6825,7 +6883,7 @@ function ToolRail({
6825
6883
  onClick: () => onValueChange(on && allowDeselect ? null : tool.id, tool)
6826
6884
  }
6827
6885
  ) }),
6828
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipContent, { side: vertical ? "right" : "bottom", sideOffset: 6, children: name })
6886
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(TooltipContent, { side: vertical ? "right" : "bottom", sideOffset: 6, children: name })
6829
6887
  ] }, tool.id);
6830
6888
  })
6831
6889
  ] }, gi))
@@ -6834,7 +6892,7 @@ function ToolRail({
6834
6892
  }
6835
6893
 
6836
6894
  // src/controls/page-range-input.tsx
6837
- var React35 = __toESM(require("react"), 1);
6895
+ var React36 = __toESM(require("react"), 1);
6838
6896
 
6839
6897
  // src/controls/page-ranges.ts
6840
6898
  var WORD_END = /^(end|last)$/i;
@@ -6905,7 +6963,7 @@ function formatPageRanges(pages) {
6905
6963
  }
6906
6964
 
6907
6965
  // src/controls/page-range-input.tsx
6908
- var import_jsx_runtime55 = require("react/jsx-runtime");
6966
+ var import_jsx_runtime56 = require("react/jsx-runtime");
6909
6967
  function PageRangeInput({
6910
6968
  value,
6911
6969
  onChange,
@@ -6917,13 +6975,13 @@ function PageRangeInput({
6917
6975
  id,
6918
6976
  "aria-label": ariaLabel = "Page range"
6919
6977
  }) {
6920
- const autoId = React35.useId();
6978
+ const autoId = React36.useId();
6921
6979
  const hintId = `${id ?? autoId}-hint`;
6922
- const parsed = React35.useMemo(() => parsePageRanges(value, pageCount), [value, pageCount]);
6980
+ const parsed = React36.useMemo(() => parsePageRanges(value, pageCount), [value, pageCount]);
6923
6981
  const first = parsed.issues[0];
6924
6982
  const hint = parsed.empty ? `${pageCount} page${pageCount === 1 ? "" : "s"}` : first ? first.hint : `${parsed.pages.length} page${parsed.pages.length === 1 ? "" : "s"}: ${formatPageRanges(parsed.pages)}`;
6925
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cn("flex min-w-0 flex-col gap-1", className), "data-matrx-page-range-input": "", children: [
6926
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6983
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: cn("flex min-w-0 flex-col gap-1", className), "data-matrx-page-range-input": "", children: [
6984
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6927
6985
  Input,
6928
6986
  {
6929
6987
  id,
@@ -6942,7 +7000,7 @@ function PageRangeInput({
6942
7000
  }
6943
7001
  }
6944
7002
  ),
6945
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
7003
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6946
7004
  "p",
6947
7005
  {
6948
7006
  id: hintId,
@@ -6956,8 +7014,8 @@ function PageRangeInput({
6956
7014
  }
6957
7015
 
6958
7016
  // src/controls/opacity-slider.tsx
6959
- var React36 = __toESM(require("react"), 1);
6960
- var import_jsx_runtime56 = require("react/jsx-runtime");
7017
+ var React37 = __toESM(require("react"), 1);
7018
+ var import_jsx_runtime57 = require("react/jsx-runtime");
6961
7019
  var clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
6962
7020
  var toPercent = (v) => Math.round(v * 100);
6963
7021
  function OpacitySlider({
@@ -6969,7 +7027,7 @@ function OpacitySlider({
6969
7027
  className,
6970
7028
  "aria-label": ariaLabel = "Opacity"
6971
7029
  }) {
6972
- const [draft, setDraft] = React36.useState(null);
7030
+ const [draft, setDraft] = React37.useState(null);
6973
7031
  const percent = toPercent(clamp(value, min, max));
6974
7032
  const commit = () => {
6975
7033
  if (draft !== null && draft.trim() !== "" && Number.isFinite(Number(draft))) {
@@ -6977,8 +7035,8 @@ function OpacitySlider({
6977
7035
  }
6978
7036
  setDraft(null);
6979
7037
  };
6980
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: cn("flex min-w-0 items-center gap-2", className), "data-matrx-opacity-slider": "", children: [
6981
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
7038
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex min-w-0 items-center gap-2", className), "data-matrx-opacity-slider": "", children: [
7039
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6982
7040
  Slider,
6983
7041
  {
6984
7042
  className: "min-w-0 flex-1",
@@ -6991,8 +7049,8 @@ function OpacitySlider({
6991
7049
  onValueChange: ([v]) => onChange(clamp((v ?? 0) / 100, min, max))
6992
7050
  }
6993
7051
  ),
6994
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex w-16 shrink-0 items-center gap-1", style: { ["--matrx-control-field-min"]: "0px" }, children: [
6995
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
7052
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex w-16 shrink-0 items-center gap-1", style: { ["--matrx-control-field-min"]: "0px" }, children: [
7053
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6996
7054
  Input,
6997
7055
  {
6998
7056
  numeric: true,
@@ -7011,14 +7069,14 @@ function OpacitySlider({
7011
7069
  }
7012
7070
  }
7013
7071
  ),
7014
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { "aria-hidden": true, className: "text-xs text-muted-foreground", children: "%" })
7072
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { "aria-hidden": true, className: "text-xs text-muted-foreground", children: "%" })
7015
7073
  ] })
7016
7074
  ] });
7017
7075
  }
7018
7076
 
7019
7077
  // src/controls/color-swatch-row.tsx
7020
- var React37 = __toESM(require("react"), 1);
7021
- var import_jsx_runtime57 = require("react/jsx-runtime");
7078
+ var React38 = __toESM(require("react"), 1);
7079
+ var import_jsx_runtime58 = require("react/jsx-runtime");
7022
7080
  function ColorSwatchRow({
7023
7081
  colors,
7024
7082
  value,
@@ -7027,7 +7085,7 @@ function ColorSwatchRow({
7027
7085
  className,
7028
7086
  "aria-label": ariaLabel = "Color"
7029
7087
  }) {
7030
- const refs = React37.useRef([]);
7088
+ const refs = React38.useRef([]);
7031
7089
  const chosen = colors.findIndex((c) => c.value.toLowerCase() === (value ?? "").toLowerCase());
7032
7090
  const stop = chosen >= 0 ? chosen : 0;
7033
7091
  const move = (to) => {
@@ -7037,7 +7095,7 @@ function ColorSwatchRow({
7037
7095
  refs.current[i]?.focus();
7038
7096
  onChange(c.value, c);
7039
7097
  };
7040
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
7098
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7041
7099
  "div",
7042
7100
  {
7043
7101
  role: "radiogroup",
@@ -7047,7 +7105,7 @@ function ColorSwatchRow({
7047
7105
  "data-matrx-color-swatch-row": "",
7048
7106
  children: colors.map((c, i) => {
7049
7107
  const on = i === chosen;
7050
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
7108
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7051
7109
  "button",
7052
7110
  {
7053
7111
  ref: (el) => {
@@ -7085,7 +7143,7 @@ function ColorSwatchRow({
7085
7143
  on && "ring-2 ring-foreground ring-offset-1 ring-offset-background"
7086
7144
  ),
7087
7145
  style: { backgroundColor: c.value },
7088
- children: on ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(RadixCheckIcon, { className: "size-3 mix-blend-difference text-white" }) : null
7146
+ children: on ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(RadixCheckIcon, { className: "size-3 mix-blend-difference text-white" }) : null
7089
7147
  },
7090
7148
  `${c.value}-${i}`
7091
7149
  );
@@ -7095,8 +7153,8 @@ function ColorSwatchRow({
7095
7153
  }
7096
7154
 
7097
7155
  // src/controls/anchored-toolbar.tsx
7098
- var React38 = __toESM(require("react"), 1);
7099
- var import_jsx_runtime58 = require("react/jsx-runtime");
7156
+ var React39 = __toESM(require("react"), 1);
7157
+ var import_jsx_runtime59 = require("react/jsx-runtime");
7100
7158
  function virtualFor(rect) {
7101
7159
  return {
7102
7160
  getBoundingClientRect: () => ({
@@ -7124,14 +7182,14 @@ function AnchoredToolbar({
7124
7182
  children
7125
7183
  }) {
7126
7184
  const x = rect?.x ?? 0, y = rect?.y ?? 0, w = rect?.width ?? 0, h = rect?.height ?? 0;
7127
- const virtualRef = React38.useMemo(
7185
+ const virtualRef = React39.useMemo(
7128
7186
  () => ({ current: virtualFor({ x, y, width: w, height: h }) }),
7129
7187
  [x, y, w, h]
7130
7188
  );
7131
7189
  const visible = open && rect !== null;
7132
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Popover, { open: visible, ...onOpenChange ? { onOpenChange } : {}, children: [
7133
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(PopoverAnchor, { virtualRef }),
7134
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7190
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Popover, { open: visible, ...onOpenChange ? { onOpenChange } : {}, children: [
7191
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(PopoverAnchor, { virtualRef }),
7192
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7135
7193
  PopoverContent,
7136
7194
  {
7137
7195
  role: "toolbar",
@@ -7154,9 +7212,9 @@ function AnchoredToolbar({
7154
7212
  }
7155
7213
 
7156
7214
  // src/controls/icon-select.tsx
7157
- var React39 = __toESM(require("react"), 1);
7215
+ var React40 = __toESM(require("react"), 1);
7158
7216
  var import_outbound = require("@ai-matrx/kit/outbound");
7159
- var import_jsx_runtime59 = require("react/jsx-runtime");
7217
+ var import_jsx_runtime60 = require("react/jsx-runtime");
7160
7218
  function wantsNewTab(e) {
7161
7219
  return Boolean(e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button === 1);
7162
7220
  }
@@ -7165,8 +7223,8 @@ var TRIGGER_SIZE = {
7165
7223
  touch: "!h-10 !w-10 sm:!h-8 sm:!w-8"
7166
7224
  };
7167
7225
  var TRIGGER_FACE = "h-7 w-7 justify-center border-none bg-muted px-0 focus:outline-none focus:ring-0";
7168
- var IconSelectTrigger = React39.forwardRef(function IconSelectTrigger2({ icon, disabled, ariaLabel, size = "default", className, ...rest }, ref) {
7169
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7226
+ var IconSelectTrigger = React40.forwardRef(function IconSelectTrigger2({ icon, disabled, ariaLabel, size = "default", className, ...rest }, ref) {
7227
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7170
7228
  Button2,
7171
7229
  {
7172
7230
  ref,
@@ -7191,16 +7249,16 @@ function IconSelect({
7191
7249
  size = "default",
7192
7250
  className
7193
7251
  }) {
7194
- const [open, setOpen] = React39.useState(false);
7195
- const skipSelectRef = React39.useRef(false);
7252
+ const [open, setOpen] = React40.useState(false);
7253
+ const skipSelectRef = React40.useRef(false);
7196
7254
  if (searchable) {
7197
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
7198
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(IconSelectTrigger, { icon, disabled, ariaLabel, size, className }) }),
7199
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(PopoverContent, { sizing: "content", className: "p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Command, { children: [
7200
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CommandInput, { placeholder: searchPlaceholder, className: "h-9 text-sm" }),
7201
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(CommandList, { children: [
7202
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CommandEmpty, { children: "No results found." }),
7203
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CommandGroup, { className: "max-h-72 overflow-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7255
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
7256
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconSelectTrigger, { icon, disabled, ariaLabel, size, className }) }),
7257
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PopoverContent, { sizing: "content", className: "p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Command, { children: [
7258
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CommandInput, { placeholder: searchPlaceholder, className: "h-9 text-sm" }),
7259
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(CommandList, { children: [
7260
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CommandEmpty, { children: "No results found." }),
7261
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CommandGroup, { className: "max-h-72 overflow-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7204
7262
  CommandItem,
7205
7263
  {
7206
7264
  value: item.label,
@@ -7220,8 +7278,8 @@ function IconSelect({
7220
7278
  onValueChange?.(item.value);
7221
7279
  setOpen(false);
7222
7280
  },
7223
- children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "flex items-center", children: [
7224
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "mr-2", children: item.icon }),
7281
+ children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex items-center", children: [
7282
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "mr-2", children: item.icon }),
7225
7283
  item.label
7226
7284
  ] })
7227
7285
  },
@@ -7231,8 +7289,8 @@ function IconSelect({
7231
7289
  ] }) })
7232
7290
  ] });
7233
7291
  }
7234
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Select, { ...value === void 0 ? {} : { value }, ...onValueChange ? { onValueChange } : {}, disabled, children: [
7235
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7292
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Select, { ...value === void 0 ? {} : { value }, ...onValueChange ? { onValueChange } : {}, disabled, children: [
7293
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7236
7294
  SelectTrigger,
7237
7295
  {
7238
7296
  "aria-label": ariaLabel,
@@ -7241,7 +7299,7 @@ function IconSelect({
7241
7299
  children: icon
7242
7300
  }
7243
7301
  ),
7244
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(SelectContent, { children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(SelectGroup, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7302
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(SelectContent, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(SelectGroup, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7245
7303
  SelectItem,
7246
7304
  {
7247
7305
  value: item.value,
@@ -7251,8 +7309,8 @@ function IconSelect({
7251
7309
  (0, import_outbound.openOutbound)(item.href, "_blank", "noopener");
7252
7310
  }
7253
7311
  },
7254
- children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "flex items-center", children: [
7255
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "mr-2", children: item.icon }),
7312
+ children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex items-center", children: [
7313
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "mr-2", children: item.icon }),
7256
7314
  item.label
7257
7315
  ] })
7258
7316
  },
@@ -7262,18 +7320,18 @@ function IconSelect({
7262
7320
  }
7263
7321
 
7264
7322
  // src/controls/advanced-collapsible.tsx
7265
- var React43 = __toESM(require("react"), 1);
7323
+ var React44 = __toESM(require("react"), 1);
7266
7324
  var import_clipboard3 = require("@ai-matrx/kit/clipboard");
7267
7325
  var import_clipboard_fallback_opener3 = require("@ai-matrx/kit/clipboard-fallback-opener");
7268
7326
  var import_notify3 = require("@ai-matrx/kit/notify");
7269
7327
 
7270
7328
  // src/collapsible.tsx
7271
7329
  var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"), 1);
7272
- var React40 = __toESM(require("react"), 1);
7273
- var import_jsx_runtime60 = require("react/jsx-runtime");
7330
+ var React41 = __toESM(require("react"), 1);
7331
+ var import_jsx_runtime61 = require("react/jsx-runtime");
7274
7332
  var Collapsible = CollapsiblePrimitive.Root;
7275
7333
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
7276
- var CollapsibleContent2 = React40.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7334
+ var CollapsibleContent2 = React41.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
7277
7335
  CollapsiblePrimitive.CollapsibleContent,
7278
7336
  {
7279
7337
  ref,
@@ -7291,16 +7349,16 @@ CollapsibleContent2.displayName = "CollapsibleContent";
7291
7349
  var DialogPrimitive3 = __toESM(require("@radix-ui/react-dialog"), 1);
7292
7350
  var VisuallyHidden2 = __toESM(require("@radix-ui/react-visually-hidden"), 1);
7293
7351
  var import_react_tree3 = require("@ai-matrx/kit/react-tree");
7294
- var React42 = __toESM(require("react"), 1);
7352
+ var React43 = __toESM(require("react"), 1);
7295
7353
 
7296
7354
  // src/look.tsx
7297
- var React41 = __toESM(require("react"), 1);
7298
- var import_jsx_runtime61 = require("react/jsx-runtime");
7355
+ var React42 = __toESM(require("react"), 1);
7356
+ var import_jsx_runtime62 = require("react/jsx-runtime");
7299
7357
  var CONTEXT_SLOT3 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.look-context");
7300
7358
  var registry3 = globalThis;
7301
- var LookContext = registry3[CONTEXT_SLOT3] ??= React41.createContext("web");
7359
+ var LookContext = registry3[CONTEXT_SLOT3] ??= React42.createContext("web");
7302
7360
  function useLook() {
7303
- return React41.useContext(LookContext);
7361
+ return React42.useContext(LookContext);
7304
7362
  }
7305
7363
 
7306
7364
  // src/layer-front.ts
@@ -7551,8 +7609,8 @@ function useDragMove(options) {
7551
7609
  }
7552
7610
 
7553
7611
  // src/dialog.tsx
7554
- var import_jsx_runtime62 = require("react/jsx-runtime");
7555
- var DialogWindowedByDefaultContext = React42.createContext(false);
7612
+ var import_jsx_runtime63 = require("react/jsx-runtime");
7613
+ var DialogWindowedByDefaultContext = React43.createContext(false);
7556
7614
  var Dialog = ({
7557
7615
  children,
7558
7616
  ...props
@@ -7560,7 +7618,7 @@ var Dialog = ({
7560
7618
  const isMobile = (0, import_media_query.useIsMobile)();
7561
7619
  const desktopLook = useLook() === "desktop";
7562
7620
  const modal = desktopLook || (props.modal ?? isMobile);
7563
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogWindowedByDefaultContext.Provider, { value: !desktopLook && props.modal === void 0, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(RadixDialogModalProvider, { modal, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogPrimitive3.Root, { ...props, modal, children }) }) });
7621
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogWindowedByDefaultContext.Provider, { value: !desktopLook && props.modal === void 0, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(RadixDialogModalProvider, { modal, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogPrimitive3.Root, { ...props, modal, children }) }) });
7564
7622
  };
7565
7623
  Dialog.displayName = "Dialog";
7566
7624
  var DialogPortal = ({
@@ -7568,13 +7626,13 @@ var DialogPortal = ({
7568
7626
  ...props
7569
7627
  }) => {
7570
7628
  const resolved = usePortalContainer(container);
7571
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogPrimitive3.Portal, { container: resolved ?? null, ...props });
7629
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogPrimitive3.Portal, { container: resolved ?? null, ...props });
7572
7630
  };
7573
7631
  DialogPortal.displayName = "DialogPortal";
7574
7632
  var CONTEXT_SLOT4 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.dialog-container-context");
7575
7633
  var contextRegistry3 = globalThis;
7576
- var DialogContainerContext = contextRegistry3[CONTEXT_SLOT4] ??= React42.createContext(null);
7577
- var DialogOverlay = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7634
+ var DialogContainerContext = contextRegistry3[CONTEXT_SLOT4] ??= React43.createContext(null);
7635
+ var DialogOverlay = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7578
7636
  DialogPrimitive3.Overlay,
7579
7637
  {
7580
7638
  ref,
@@ -7590,10 +7648,10 @@ var DialogOverlay = React42.forwardRef(({ className, ...props }, ref) => /* @__P
7590
7648
  }
7591
7649
  ));
7592
7650
  DialogOverlay.displayName = DialogPrimitive3.Overlay.displayName;
7593
- var DialogContentPrimitive = React42.forwardRef(({ onInteractOutside, onCloseAutoFocus, ...props }, ref) => {
7651
+ var DialogContentPrimitive = React43.forwardRef(({ onInteractOutside, onCloseAutoFocus, ...props }, ref) => {
7594
7652
  const isModal = useRadixDialogModal();
7595
7653
  useModalLayer(isModal);
7596
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7654
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7597
7655
  DialogPrimitive3.Content,
7598
7656
  {
7599
7657
  ...props,
@@ -7608,7 +7666,7 @@ DialogContentPrimitive.displayName = "DialogContentPrimitive";
7608
7666
  var DIALOG_DESKTOP_CLASSES2 = "matrx-dialog-card fixed inset-0 z-[10000] m-auto grid h-fit min-w-0 w-full max-w-lg gap-4 max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] overflow-x-clip border bg-background p-6 shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full sm:rounded-lg";
7609
7667
  var DIALOG_MOBILE_SHEET_CLASSES2 = "matrx-mobile-sheet matrx-dialog-card fixed inset-x-0 bottom-0 left-0 right-0 top-auto z-[10000] flex min-w-0 flex-col w-full max-w-full max-h-[90dvh] gap-4 [--dialog-pad:1rem] overflow-x-clip border-t bg-background p-4 pb-safe shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full rounded-t-2xl rounded-b-none overflow-y-auto overscroll-contain";
7610
7668
  var DIALOG_MOBILE_SHEET_OVERRIDE2 = "inset-x-0 bottom-0 left-0 right-0 top-auto translate-none w-full max-w-full max-h-[90dvh] rounded-b-none rounded-t-2xl overflow-y-auto";
7611
- var DialogWindowHandleContext = React42.createContext(null);
7669
+ var DialogWindowHandleContext = React43.createContext(null);
7612
7670
  var WINDOW_KEEP_VISIBLE = 80;
7613
7671
  var DIALOG_SIZE_CLASS = {
7614
7672
  sm: "max-w-md",
@@ -7619,7 +7677,7 @@ var DIALOG_SIZE_CLASS = {
7619
7677
  full: "max-w-[calc(100vw-2rem)]",
7620
7678
  screen: "max-w-none w-screen h-dvh max-h-none rounded-none sm:rounded-none"
7621
7679
  };
7622
- var DialogContent = React42.forwardRef(
7680
+ var DialogContent = React43.forwardRef(
7623
7681
  ({
7624
7682
  className,
7625
7683
  children,
@@ -7644,13 +7702,13 @@ var DialogContent = React42.forwardRef(
7644
7702
  const desktopLook = useLook() === "desktop";
7645
7703
  const asSheet = mobileSheet && isMobile && !desktopLook;
7646
7704
  const windowed = !isModal && !asSheet;
7647
- const windowedByDefault = React42.useContext(DialogWindowedByDefaultContext);
7648
- const [containerEl, setContainerEl] = React42.useState(
7705
+ const windowedByDefault = React43.useContext(DialogWindowedByDefaultContext);
7706
+ const [containerEl, setContainerEl] = React43.useState(
7649
7707
  null
7650
7708
  );
7651
7709
  const stacks = windowed && windowedByDefault;
7652
- const [behind, setBehind] = React42.useState(false);
7653
- React42.useEffect(() => {
7710
+ const [behind, setBehind] = React43.useState(false);
7711
+ React43.useEffect(() => {
7654
7712
  if (!stacks || !containerEl) return;
7655
7713
  const onFront = (event) => {
7656
7714
  const element = event.detail?.element ?? null;
@@ -7666,7 +7724,7 @@ var DialogContent = React42.forwardRef(
7666
7724
  setBehind(false);
7667
7725
  announceLayerFront(containerEl);
7668
7726
  };
7669
- const [offset, setOffset] = React42.useState({ x: 0, y: 0 });
7727
+ const [offset, setOffset] = React43.useState({ x: 0, y: 0 });
7670
7728
  const drag = useDragMove({
7671
7729
  element: containerEl,
7672
7730
  enabled: windowed,
@@ -7675,11 +7733,11 @@ var DialogContent = React42.forwardRef(
7675
7733
  constrain: (next) => clampRectToViewport(next, readViewport(), { keepVisible: WINDOW_KEEP_VISIBLE }),
7676
7734
  onCommit: (_rect, commit) => setOffset(commit.offset)
7677
7735
  });
7678
- const handle = React42.useMemo(
7736
+ const handle = React43.useMemo(
7679
7737
  () => windowed ? { onPointerDown: drag.onPointerDown, onDoubleClick: () => setOffset({ x: 0, y: 0 }) } : null,
7680
7738
  [windowed, drag.onPointerDown]
7681
7739
  );
7682
- const mergedRef = React42.useCallback(
7740
+ const mergedRef = React43.useCallback(
7683
7741
  (node) => {
7684
7742
  setContainerEl(node);
7685
7743
  if (typeof ref === "function") ref(node);
@@ -7691,9 +7749,9 @@ var DialogContent = React42.forwardRef(
7691
7749
  const closeSlot = useCloseSlot(showCloseButton && !desktopLook);
7692
7750
  const hasTitle = (0, import_react_tree3.treeContainsComponent)(children, DialogTitle) || (0, import_react_tree3.treeContainsComponent)(children, DialogPrimitive3.Title);
7693
7751
  const hasDescription = (0, import_react_tree3.treeContainsComponent)(children, DialogDescription) || (0, import_react_tree3.treeContainsComponent)(children, DialogPrimitive3.Description);
7694
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(DialogPortal, { container, children: [
7695
- isModal ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogOverlay, {}) : null,
7696
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
7752
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(DialogPortal, { container, children: [
7753
+ isModal ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogOverlay, {}) : null,
7754
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
7697
7755
  DialogContentPrimitive,
7698
7756
  {
7699
7757
  ref: mergedRef,
@@ -7744,9 +7802,9 @@ var DialogContent = React42.forwardRef(
7744
7802
  ...hasDescription ? {} : { "aria-describedby": void 0 },
7745
7803
  ...props,
7746
7804
  children: [
7747
- hasTitle ? null : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(VisuallyHidden2.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogPrimitive3.Title, { children: "Dialog" }) }),
7748
- closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CloseRow, {}) : null,
7749
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CloseSlotProvider, { value: closeSlot.slot, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogContainerContext.Provider, { value: containerEl, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(DialogWindowHandleContext.Provider, { value: handle, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7805
+ hasTitle ? null : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(VisuallyHidden2.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogPrimitive3.Title, { children: "Dialog" }) }),
7806
+ closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseRow, {}) : null,
7807
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseSlotProvider, { value: closeSlot.slot, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogContainerContext.Provider, { value: containerEl, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogWindowHandleContext.Provider, { value: handle, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7750
7808
  PortalContainerProvider,
7751
7809
  {
7752
7810
  container: containerEl ?? injectedContainer ?? null,
@@ -7764,8 +7822,8 @@ var DialogHeader = ({
7764
7822
  className,
7765
7823
  ...props
7766
7824
  }) => {
7767
- const handle = React42.useContext(DialogWindowHandleContext);
7768
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7825
+ const handle = React43.useContext(DialogWindowHandleContext);
7826
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7769
7827
  HeaderWithClose,
7770
7828
  {
7771
7829
  slotName: "dialog-header",
@@ -7785,7 +7843,7 @@ DialogHeader.displayName = "DialogHeader";
7785
7843
  var DialogFooter = ({
7786
7844
  className,
7787
7845
  ...props
7788
- }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7846
+ }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7789
7847
  "div",
7790
7848
  {
7791
7849
  "data-slot": "dialog-footer",
@@ -7819,7 +7877,7 @@ var DialogFooter = ({
7819
7877
  }
7820
7878
  );
7821
7879
  DialogFooter.displayName = "DialogFooter";
7822
- var DialogTitle = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7880
+ var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7823
7881
  DialogPrimitive3.Title,
7824
7882
  {
7825
7883
  ref,
@@ -7829,7 +7887,7 @@ var DialogTitle = React42.forwardRef(({ className, ...props }, ref) => /* @__PUR
7829
7887
  }
7830
7888
  ));
7831
7889
  DialogTitle.displayName = DialogPrimitive3.Title.displayName;
7832
- var DialogDescription = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7890
+ var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7833
7891
  DialogPrimitive3.Description,
7834
7892
  {
7835
7893
  ref,
@@ -7841,7 +7899,7 @@ var DialogDescription = React42.forwardRef(({ className, ...props }, ref) => /*
7841
7899
  DialogDescription.displayName = DialogPrimitive3.Description.displayName;
7842
7900
 
7843
7901
  // src/icon-button.tsx
7844
- var import_jsx_runtime63 = require("react/jsx-runtime");
7902
+ var import_jsx_runtime64 = require("react/jsx-runtime");
7845
7903
  var VARIANT = {
7846
7904
  ghost: "quiet",
7847
7905
  outline: "outline",
@@ -7862,25 +7920,25 @@ function IconButton({
7862
7920
  "aria-label": ariaLabel,
7863
7921
  ...props
7864
7922
  }) {
7865
- const control = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7923
+ const control = /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7866
7924
  Button2,
7867
7925
  {
7868
7926
  variant: VARIANT[variant],
7869
- icon: spinning ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Icon3, { className: MOTION_SPIN }) : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Icon3, {}),
7927
+ icon: spinning ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Icon3, { className: MOTION_SPIN }) : /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Icon3, {}),
7870
7928
  ...glyphTone ? { glyphTone } : {},
7871
7929
  "aria-label": ariaLabel ?? tooltip ?? "Action",
7872
7930
  ...props
7873
7931
  }
7874
7932
  );
7875
7933
  if (!tooltip) return control;
7876
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(Tooltip, { children: [
7877
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(TooltipTrigger, { asChild: true, children: control }),
7878
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(TooltipContent, { side: tooltipSide2, align: tooltipAlign, className: "z-[9999]", sideOffset: tooltipOffset, children: tooltip })
7934
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(Tooltip, { children: [
7935
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(TooltipTrigger, { asChild: true, children: control }),
7936
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(TooltipContent, { side: tooltipSide2, align: tooltipAlign, className: "z-[9999]", sideOffset: tooltipOffset, children: tooltip })
7879
7937
  ] });
7880
7938
  }
7881
7939
 
7882
7940
  // src/controls/advanced-collapsible.tsx
7883
- var import_jsx_runtime64 = require("react/jsx-runtime");
7941
+ var import_jsx_runtime65 = require("react/jsx-runtime");
7884
7942
  function AdvancedCollapsible({
7885
7943
  icon,
7886
7944
  title,
@@ -7899,10 +7957,10 @@ function AdvancedCollapsible({
7899
7957
  fullScreenTitle,
7900
7958
  fullScreenDescription
7901
7959
  }) {
7902
- const [isOpen, setIsOpen] = React43.useState(initialOpen);
7903
- const [isFullScreen, setIsFullScreen] = React43.useState(false);
7904
- const contentRef = React43.useRef(null);
7905
- const fullRef = React43.useRef(null);
7960
+ const [isOpen, setIsOpen] = React44.useState(initialOpen);
7961
+ const [isFullScreen, setIsFullScreen] = React44.useState(false);
7962
+ const contentRef = React44.useRef(null);
7963
+ const fullRef = React44.useRef(null);
7906
7964
  const handleOpenChange = (open) => {
7907
7965
  setIsOpen(open);
7908
7966
  onStateChange?.(open);
@@ -7920,29 +7978,29 @@ function AdvancedCollapsible({
7920
7978
  if (!landed) void (0, import_clipboard_fallback_opener3.openClipboardFallback)(text);
7921
7979
  else onCopy?.();
7922
7980
  };
7923
- const actions = /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex items-center justify-end gap-2", children: [
7924
- onSave && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7981
+ const actions = /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-end gap-2", children: [
7982
+ onSave && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
7925
7983
  ActionFeedbackButton,
7926
7984
  {
7927
- icon: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(SaveIcon, {}),
7985
+ icon: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(SaveIcon, {}),
7928
7986
  glyphTone: "info",
7929
7987
  tooltip: saveTooltip,
7930
7988
  successTooltip: "Saved!",
7931
7989
  onClick: onSave
7932
7990
  }
7933
7991
  ),
7934
- onReset && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7992
+ onReset && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
7935
7993
  ActionFeedbackButton,
7936
7994
  {
7937
- icon: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(RefreshCwIcon, {}),
7995
+ icon: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(RefreshCwIcon, {}),
7938
7996
  glyphTone: "warning",
7939
7997
  tooltip: resetTooltip,
7940
7998
  successTooltip: "Reset!",
7941
7999
  onClick: onReset
7942
8000
  }
7943
8001
  ),
7944
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(IconButton, { icon: CopyIcon, tooltip: copyTooltip, onClick: () => void handleCopy() }),
7945
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
8002
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(IconButton, { icon: CopyIcon, tooltip: copyTooltip, onClick: () => void handleCopy() }),
8003
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
7946
8004
  IconButton,
7947
8005
  {
7948
8006
  icon: isFullScreen ? Minimize2Icon : Maximize2Icon,
@@ -7953,20 +8011,20 @@ function AdvancedCollapsible({
7953
8011
  )
7954
8012
  ] });
7955
8013
  const heading = typeof title === "string" ? title : "Content";
7956
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_jsx_runtime64.Fragment, { children: [
7957
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
8014
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
8015
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
7958
8016
  Collapsible,
7959
8017
  {
7960
8018
  open: isOpen,
7961
8019
  onOpenChange: handleOpenChange,
7962
8020
  className: cn("w-full rounded-xl border border-border shadow-sm", className),
7963
8021
  children: [
7964
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(CollapsibleTrigger2, { className: "relative flex w-full items-center justify-between rounded-t-xl px-4 py-3 font-medium hover:bg-muted", children: [
7965
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex items-center gap-2", children: [
8022
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(CollapsibleTrigger2, { className: "relative flex w-full items-center justify-between rounded-t-xl px-4 py-3 font-medium hover:bg-muted", children: [
8023
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-2", children: [
7966
8024
  icon,
7967
- typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { children: title }) : title
8025
+ typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: title }) : title
7968
8026
  ] }),
7969
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
8027
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
7970
8028
  ChevronDownIcon,
7971
8029
  {
7972
8030
  className: cn(
@@ -7976,27 +8034,27 @@ function AdvancedCollapsible({
7976
8034
  }
7977
8035
  )
7978
8036
  ] }),
7979
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CollapsibleContent2, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "relative", children: [
7980
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "absolute left-8 right-8 top-0 h-px bg-border" }),
7981
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { ref: contentRef, className: "p-4", children }),
7982
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "mb-1 mr-1 mt-2", children: actions })
8037
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CollapsibleContent2, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "relative", children: [
8038
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "absolute left-8 right-8 top-0 h-px bg-border" }),
8039
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { ref: contentRef, className: "p-4", children }),
8040
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "mb-1 mr-1 mt-2", children: actions })
7983
8041
  ] }) })
7984
8042
  ]
7985
8043
  }
7986
8044
  ),
7987
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Dialog, { open: isFullScreen, onOpenChange: setIsFullScreen, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(DialogContent, { size: "full", height: "tall", children: [
7988
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(DialogHeader, { children: [
7989
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogTitle, { children: fullScreenTitle || heading }),
7990
- fullScreenDescription ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogDescription, { children: fullScreenDescription }) : null
8045
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Dialog, { open: isFullScreen, onOpenChange: setIsFullScreen, children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(DialogContent, { size: "full", height: "tall", children: [
8046
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(DialogHeader, { children: [
8047
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(DialogTitle, { children: fullScreenTitle || heading }),
8048
+ fullScreenDescription ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(DialogDescription, { children: fullScreenDescription }) : null
7991
8049
  ] }),
7992
8050
  actions,
7993
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { ref: fullRef, className: "min-h-0 flex-1 overflow-auto p-4", children })
8051
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { ref: fullRef, className: "min-h-0 flex-1 overflow-auto p-4", children })
7994
8052
  ] }) })
7995
8053
  ] });
7996
8054
  }
7997
8055
 
7998
8056
  // src/controls/empty-state-card.tsx
7999
- var import_jsx_runtime65 = require("react/jsx-runtime");
8057
+ var import_jsx_runtime66 = require("react/jsx-runtime");
8000
8058
  var TONE3 = {
8001
8059
  primary: { data: "primary", button: "primary" },
8002
8060
  success: { data: "success", button: "outline" }
@@ -8011,20 +8069,20 @@ function EmptyStateCard({
8011
8069
  tone: tone2 = "primary"
8012
8070
  }) {
8013
8071
  const t = TONE3[tone2];
8014
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { "data-tone": t.data, className: "matrx-hue-card flex flex-col items-center justify-center px-6 py-12 text-center", children: [
8015
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "matrx-hue-icon mb-6 rounded-full p-6", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon3, { className: "h-12 w-12", strokeWidth: 1.5 }) }),
8016
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { className: cn("mb-3 text-xl font-semibold", tone2 === "success" ? "text-success-ink" : "text-foreground"), children: title }),
8017
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "mb-8 max-w-md text-muted-foreground", children: description }),
8018
- buttonText && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
8019
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Button2, { variant: t.button, ...tone2 === "success" ? { tone: "success" } : {}, ...onButtonClick ? { onClick: onButtonClick } : {}, children: buttonText }),
8072
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { "data-tone": t.data, className: "matrx-hue-card flex flex-col items-center justify-center px-6 py-12 text-center", children: [
8073
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "matrx-hue-icon mb-6 rounded-full p-6", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Icon3, { className: "h-12 w-12", strokeWidth: 1.5 }) }),
8074
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { className: cn("mb-3 text-xl font-semibold", tone2 === "success" ? "text-success-ink" : "text-foreground"), children: title }),
8075
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "mb-8 max-w-md text-muted-foreground", children: description }),
8076
+ buttonText && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
8077
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Button2, { variant: t.button, ...tone2 === "success" ? { tone: "success" } : {}, ...onButtonClick ? { onClick: onButtonClick } : {}, children: buttonText }),
8020
8078
  secondaryButton
8021
8079
  ] })
8022
8080
  ] });
8023
8081
  }
8024
8082
 
8025
8083
  // src/controls/hue-cards.tsx
8026
- var React44 = __toESM(require("react"), 1);
8027
- var import_jsx_runtime66 = require("react/jsx-runtime");
8084
+ var React45 = __toESM(require("react"), 1);
8085
+ var import_jsx_runtime67 = require("react/jsx-runtime");
8028
8086
  var HUE_TONE = {
8029
8087
  indigo: "indigo",
8030
8088
  emerald: "emerald",
@@ -8045,7 +8103,7 @@ var HUE_TONE = {
8045
8103
  slate: "slate"
8046
8104
  };
8047
8105
  function sizedIcon(icon, fallback) {
8048
- return React44.isValidElement(icon) ? React44.cloneElement(icon, { size: icon.props.size || fallback }) : icon;
8106
+ return React45.isValidElement(icon) ? React45.cloneElement(icon, { size: icon.props.size || fallback }) : icon;
8049
8107
  }
8050
8108
  function tone(color) {
8051
8109
  return HUE_TONE[color] ?? HUE_TONE.slate;
@@ -8058,7 +8116,7 @@ function Destination({
8058
8116
  children
8059
8117
  }) {
8060
8118
  if (path) {
8061
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
8119
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
8062
8120
  HostLink,
8063
8121
  {
8064
8122
  href: path,
@@ -8069,7 +8127,7 @@ function Destination({
8069
8127
  }
8070
8128
  );
8071
8129
  }
8072
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ...className ? { className } : {}, ...onClick ? { onClick } : {}, children });
8130
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { ...className ? { className } : {}, ...onClick ? { onClick } : {}, children });
8073
8131
  }
8074
8132
  var SIZE_PADDING = {
8075
8133
  xs: "p-3",
@@ -8092,19 +8150,19 @@ function HueCard({
8092
8150
  external = false
8093
8151
  }) {
8094
8152
  if (compact) {
8095
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
8153
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8096
8154
  "div",
8097
8155
  {
8098
8156
  "data-tone": tone(color),
8099
8157
  className: cn("matrx-hue-card flex cursor-pointer select-none flex-col items-center gap-1.5", className),
8100
8158
  children: [
8101
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "matrx-hue-squircle flex aspect-square w-full max-w-[62px] items-center justify-center rounded-[22%] shadow-sm transition-colors", children: sizedIcon(icon, 36) }),
8102
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "type-meta w-full truncate px-0.5 text-center font-medium leading-tight text-foreground", children: title })
8159
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-squircle flex aspect-square w-full max-w-[62px] items-center justify-center rounded-[22%] shadow-sm transition-colors", children: sizedIcon(icon, 36) }),
8160
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "type-meta w-full truncate px-0.5 text-center font-medium leading-tight text-foreground", children: title })
8103
8161
  ]
8104
8162
  }
8105
8163
  ) });
8106
8164
  }
8107
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
8165
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
8108
8166
  "div",
8109
8167
  {
8110
8168
  "data-tone": tone(color),
@@ -8113,10 +8171,10 @@ function HueCard({
8113
8171
  SIZE_PADDING[size],
8114
8172
  className
8115
8173
  ),
8116
- children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex flex-col items-center space-y-3 text-center", children: [
8117
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "matrx-hue-icon rounded-full p-3", children: sizedIcon(icon, 28) }),
8118
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { className: "text-lg font-semibold", children: title }),
8119
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8174
+ children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex flex-col items-center space-y-3 text-center", children: [
8175
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-icon rounded-full p-3", children: sizedIcon(icon, 28) }),
8176
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "text-lg font-semibold", children: title }),
8177
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8120
8178
  descriptionNode && !description && descriptionNode
8121
8179
  ] })
8122
8180
  }
@@ -8143,12 +8201,12 @@ function HueGrid({
8143
8201
  compact = false
8144
8202
  }) {
8145
8203
  const colsClass = compact ? "grid-cols-4" : GRID_COLUMNS[Math.min(6, Math.max(1, columns))];
8146
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className, children: [
8147
- title && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8148
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8149
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: cn("grid", compact ? "gap-2" : "gap-4", colsClass), children: [
8150
- items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(HueCard, { ...item, compact, className: cn(cardClassName, item.className) }, `card-${index}`)),
8151
- showAddButton && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
8204
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className, children: [
8205
+ title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8206
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8207
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: cn("grid", compact ? "gap-2" : "gap-4", colsClass), children: [
8208
+ items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(HueCard, { ...item, compact, className: cn(cardClassName, item.className) }, `card-${index}`)),
8209
+ showAddButton && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8152
8210
  "button",
8153
8211
  {
8154
8212
  type: "button",
@@ -8158,8 +8216,8 @@ function HueGrid({
8158
8216
  cardClassName
8159
8217
  ),
8160
8218
  children: [
8161
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "rounded-full bg-muted p-3 text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PlusIcon, { className: "h-7 w-7" }) }),
8162
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-lg font-semibold", children: addButtonText })
8219
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "rounded-full bg-muted p-3 text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PlusIcon, { className: "h-7 w-7" }) }),
8220
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-lg font-semibold", children: addButtonText })
8163
8221
  ]
8164
8222
  }
8165
8223
  )
@@ -8174,12 +8232,12 @@ function HueRow({
8174
8232
  color,
8175
8233
  path,
8176
8234
  className,
8177
- rightIcon = /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" }),
8235
+ rightIcon = /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" }),
8178
8236
  onClick,
8179
8237
  showBorder = true,
8180
8238
  isLast = false
8181
8239
  }) {
8182
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Destination, { path, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
8240
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8183
8241
  "div",
8184
8242
  {
8185
8243
  "data-tone": tone(color),
@@ -8189,11 +8247,11 @@ function HueRow({
8189
8247
  className
8190
8248
  ),
8191
8249
  children: [
8192
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-center", children: [
8193
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "matrx-hue-icon mr-4 rounded-lg p-2", children: sizedIcon(icon, 20) }),
8194
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { children: [
8195
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { className: "font-medium", children: title }),
8196
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8250
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center", children: [
8251
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-icon mr-4 rounded-lg p-2", children: sizedIcon(icon, 20) }),
8252
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
8253
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "font-medium", children: title }),
8254
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8197
8255
  descriptionNode && !description && descriptionNode
8198
8256
  ] })
8199
8257
  ] }),
@@ -8211,7 +8269,7 @@ function HueList({
8211
8269
  showBorders = true,
8212
8270
  showContainer = true
8213
8271
  }) {
8214
- const rows = items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
8272
+ const rows = items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
8215
8273
  HueRow,
8216
8274
  {
8217
8275
  ...item,
@@ -8221,14 +8279,14 @@ function HueList({
8221
8279
  },
8222
8280
  `row-${index}`
8223
8281
  ));
8224
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className, children: [
8225
- title && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8226
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8227
- showContainer ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "rounded-xl bg-card shadow-md", children: rows }) : rows
8282
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className, children: [
8283
+ title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8284
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8285
+ showContainer ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "rounded-xl bg-card shadow-md", children: rows }) : rows
8228
8286
  ] });
8229
8287
  }
8230
8288
  function IosWidget({ title, description, icon, color, path, badge, className, onClick }) {
8231
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Destination, { path, onClick, className: "contents", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
8289
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, className: "contents", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8232
8290
  "div",
8233
8291
  {
8234
8292
  "data-tone": tone(color),
@@ -8237,13 +8295,13 @@ function IosWidget({ title, description, icon, color, path, badge, className, on
8237
8295
  className
8238
8296
  ),
8239
8297
  children: [
8240
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-start justify-between", children: [
8241
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { children: sizedIcon(icon, 32) }),
8242
- badge && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "type-meta rounded-full bg-black/25 px-2 py-0.5 font-semibold leading-tight", children: badge })
8298
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-start justify-between", children: [
8299
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { children: sizedIcon(icon, 32) }),
8300
+ badge && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "type-meta rounded-full bg-black/25 px-2 py-0.5 font-semibold leading-tight", children: badge })
8243
8301
  ] }),
8244
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { children: [
8245
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-title line-clamp-2 leading-tight", children: title }),
8246
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-meta mt-0.5 line-clamp-2 leading-tight", children: description })
8302
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
8303
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-title line-clamp-2 leading-tight", children: title }),
8304
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-meta mt-0.5 line-clamp-2 leading-tight", children: description })
8247
8305
  ] })
8248
8306
  ]
8249
8307
  }
@@ -8254,21 +8312,21 @@ function TileCard({ icon, title, description, onClick, href, className }) {
8254
8312
  "flex h-64 cursor-pointer flex-col items-center justify-center space-y-6 rounded-xl border-2 border-border bg-muted p-4 text-xl transition-colors hover:border-primary hover:bg-accent",
8255
8313
  className
8256
8314
  );
8257
- const content = /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
8258
- icon && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "h-12 w-12 text-primary-ink", children: icon }),
8259
- title && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "font-medium text-primary-ink", children: title }),
8260
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "type-secondary mt-1 text-center text-muted-foreground", children: description })
8315
+ const content = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
8316
+ icon && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "h-12 w-12 text-primary-ink", children: icon }),
8317
+ title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "font-medium text-primary-ink", children: title }),
8318
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-secondary mt-1 text-center text-muted-foreground", children: description })
8261
8319
  ] });
8262
- return href ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(HostLink, { href, className: face, children: content }) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { onClick, className: face, children: content });
8320
+ return href ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(HostLink, { href, className: face, children: content }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { onClick, className: face, children: content });
8263
8321
  }
8264
8322
  var TILE_COLUMNS = { 1: "md:grid-cols-1", 2: "md:grid-cols-2", 3: "md:grid-cols-3", 4: "md:grid-cols-4" };
8265
8323
  function TileCardGrid({ title, description, cards, columns = 2, className }) {
8266
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: cn("w-full", className), children: [
8267
- (title || description) && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "pb-8 text-center", children: [
8268
- title && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h2", { className: "text-2xl font-bold text-foreground md:text-3xl", children: title }),
8269
- description && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "mt-2 text-muted-foreground", children: description })
8324
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: cn("w-full", className), children: [
8325
+ (title || description) && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "pb-8 text-center", children: [
8326
+ title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "text-2xl font-bold text-foreground md:text-3xl", children: title }),
8327
+ description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "mt-2 text-muted-foreground", children: description })
8270
8328
  ] }),
8271
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: cn("grid grid-cols-1 gap-6", TILE_COLUMNS[columns] ?? TILE_COLUMNS[2]), children: cards.map((card, index) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(TileCard, { ...card }, index)) })
8329
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: cn("grid grid-cols-1 gap-6", TILE_COLUMNS[columns] ?? TILE_COLUMNS[2]), children: cards.map((card, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(TileCard, { ...card }, index)) })
8272
8330
  ] });
8273
8331
  }
8274
8332
  //# sourceMappingURL=controls.cjs.map