@ai-matrx/design-system 0.86.339 → 0.86.340
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/CHANGELOG.md +7 -0
- package/dist/carousel.js +1 -1
- package/dist/{chunk-T4IJELSS.js → chunk-KYH42WEX.js} +428 -370
- package/dist/chunk-KYH42WEX.js.map +1 -0
- package/dist/controls.cjs +855 -797
- package/dist/controls.cjs.map +1 -1
- package/dist/controls.css +166 -0
- package/dist/controls.d.cts +49 -1
- package/dist/controls.d.ts +49 -1
- package/dist/controls.js +7 -1
- package/dist/index.cjs +135 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +46 -4
- package/dist/index.d.ts +46 -4
- package/dist/index.js +142 -13
- package/dist/index.js.map +1 -1
- package/dist/tokens.css +17 -0
- package/package.json +2 -2
- package/dist/chunk-T4IJELSS.js.map +0 -1
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/
|
|
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,
|
|
1698
|
-
item.group ? /* @__PURE__ */ (0,
|
|
1699
|
-
index > 0 ? /* @__PURE__ */ (0,
|
|
1700
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1703
|
-
/* @__PURE__ */ (0,
|
|
1704
|
-
/* @__PURE__ */ (0,
|
|
1705
|
-
find(item.items, chosen) ? /* @__PURE__ */ (0,
|
|
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,
|
|
1708
|
-
] }) : /* @__PURE__ */ (0,
|
|
1709
|
-
/* @__PURE__ */ (0,
|
|
1710
|
-
item.meta ? /* @__PURE__ */ (0,
|
|
1711
|
-
chosen === item.value ? /* @__PURE__ */ (0,
|
|
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] =
|
|
1740
|
-
const [chipOpen, setChipOpen] =
|
|
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,
|
|
1749
|
-
wayOut?.length ? /* @__PURE__ */ (0,
|
|
1750
|
-
/* @__PURE__ */ (0,
|
|
1751
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1754
|
-
/* @__PURE__ */ (0,
|
|
1755
|
-
skipped ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1815
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1882
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { type: "button", disabled })
|
|
1825
1883
|
}
|
|
1826
1884
|
) }),
|
|
1827
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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 =
|
|
2291
|
-
const [opener] =
|
|
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,
|
|
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,
|
|
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
|
|
2326
|
-
var
|
|
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] ??=
|
|
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,
|
|
2392
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RadixDialogModalContext.Provider, { value: modal, children });
|
|
2335
2393
|
}
|
|
2336
2394
|
function useRadixDialogModal() {
|
|
2337
|
-
return
|
|
2395
|
+
return React14.useContext(RadixDialogModalContext);
|
|
2338
2396
|
}
|
|
2339
2397
|
|
|
2340
2398
|
// src/drawer.tsx
|
|
2341
|
-
var
|
|
2342
|
-
var DrawerDirectionContext =
|
|
2343
|
-
var useDrawerDirection = () =>
|
|
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,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
2454
|
+
var DrawerContentPrimitive = React15.forwardRef(({ onInteractOutside, ...props }, ref) => {
|
|
2397
2455
|
useModalLayer(true);
|
|
2398
|
-
return /* @__PURE__ */ (0,
|
|
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 =
|
|
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,
|
|
2427
|
-
/* @__PURE__ */ (0,
|
|
2428
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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 =
|
|
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
|
|
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,
|
|
2531
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
2558
|
-
/* @__PURE__ */ (0,
|
|
2559
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
2572
|
-
var
|
|
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 =
|
|
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,
|
|
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
|
|
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 =
|
|
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] =
|
|
2821
|
-
const [timeDraft, setTimeDraft] =
|
|
2822
|
-
const [dayInvalid, setDayInvalid] =
|
|
2823
|
-
const [timeInvalid, setTimeInvalid] =
|
|
2824
|
-
const [open, setOpen] =
|
|
2825
|
-
const dayRef =
|
|
2826
|
-
const timeRef =
|
|
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
|
-
|
|
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,
|
|
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,
|
|
2932
|
-
/* @__PURE__ */ (0,
|
|
2933
|
-
!empty && clearable ? /* @__PURE__ */ (0,
|
|
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,
|
|
2937
|
-
const glyph = /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
3087
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
|
|
3030
3088
|
capsule,
|
|
3031
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3035
|
-
/* @__PURE__ */ (0,
|
|
3036
|
-
/* @__PURE__ */ (0,
|
|
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 =
|
|
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 =
|
|
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] =
|
|
3069
|
-
const gridRef =
|
|
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
|
-
|
|
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,
|
|
3111
|
-
/* @__PURE__ */ (0,
|
|
3112
|
-
/* @__PURE__ */ (0,
|
|
3113
|
-
/* @__PURE__ */ (0,
|
|
3114
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3117
|
-
/* @__PURE__ */ (0,
|
|
3118
|
-
[0, 1, 2, 3, 4, 5].map((w) => /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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 =
|
|
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] =
|
|
3153
|
-
|
|
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,
|
|
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
|
|
3194
|
-
var
|
|
3195
|
-
var Input =
|
|
3196
|
-
({ className, variant = "field", mono, adornment, align, numeric, mark, width, ...props }, ref) => /* @__PURE__ */ (0,
|
|
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 =
|
|
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,
|
|
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 =
|
|
3232
|
-
var TabsList =
|
|
3233
|
-
({ className, variant = "capsule", fill, rule = true, overflow, ...props }, ref) => /* @__PURE__ */ (0,
|
|
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 =
|
|
3249
|
-
const variant =
|
|
3250
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
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
|
|
3270
|
-
var
|
|
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,
|
|
3335
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogPrimitive.Portal, { container: resolved ?? null, ...props });
|
|
3278
3336
|
};
|
|
3279
3337
|
AlertDialogPortal.displayName = "AlertDialogPortal";
|
|
3280
|
-
var AlertDialogOverlay =
|
|
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 =
|
|
3352
|
+
var AlertDialogContentPrimitive = React19.forwardRef(({ onCloseAutoFocus, ...props }, ref) => {
|
|
3295
3353
|
useModalLayer(true);
|
|
3296
|
-
return /* @__PURE__ */ (0,
|
|
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 =
|
|
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 =
|
|
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,
|
|
3312
|
-
/* @__PURE__ */ (0,
|
|
3313
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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,
|
|
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,
|
|
3448
|
-
/* @__PURE__ */ (0,
|
|
3449
|
-
description ? /* @__PURE__ */ (0,
|
|
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,
|
|
3453
|
-
cancelLabel === null ? null : /* @__PURE__ */ (0,
|
|
3454
|
-
confirmHeld ? null : /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
3598
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
3541
3599
|
function RowGroup({ title, danger, className, children, ...props }) {
|
|
3542
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
3551
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3558
|
-
/* @__PURE__ */ (0,
|
|
3559
|
-
htmlFor ? /* @__PURE__ */ (0,
|
|
3560
|
-
line ? /* @__PURE__ */ (0,
|
|
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,
|
|
3620
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ControlRow, { nowrap: true, "data-matrx-row-actions": "", children }) : null
|
|
3563
3621
|
] });
|
|
3564
3622
|
}
|
|
3565
|
-
var Tile =
|
|
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,
|
|
3571
|
-
icon ? /* @__PURE__ */ (0,
|
|
3572
|
-
/* @__PURE__ */ (0,
|
|
3573
|
-
/* @__PURE__ */ (0,
|
|
3574
|
-
line ? /* @__PURE__ */ (0,
|
|
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,
|
|
3634
|
+
end ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-end", children: end }) : null
|
|
3577
3635
|
] });
|
|
3578
|
-
return /* @__PURE__ */ (0,
|
|
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 &&
|
|
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 =
|
|
3613
|
-
({ open, variant = "row", icon, glyphTone, title, meta, end, line, chevron = "start", className, type, ...props }, ref) => /* @__PURE__ */ (0,
|
|
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,
|
|
3627
|
-
icon ? /* @__PURE__ */ (0,
|
|
3628
|
-
line ? /* @__PURE__ */ (0,
|
|
3629
|
-
/* @__PURE__ */ (0,
|
|
3630
|
-
/* @__PURE__ */ (0,
|
|
3631
|
-
] }) : /* @__PURE__ */ (0,
|
|
3632
|
-
meta === void 0 || meta === null || meta === false ? null : /* @__PURE__ */ (0,
|
|
3633
|
-
end ? /* @__PURE__ */ (0,
|
|
3634
|
-
chevron === "end" ? /* @__PURE__ */ (0,
|
|
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,
|
|
3642
|
-
/* @__PURE__ */ (0,
|
|
3643
|
-
/* @__PURE__ */ (0,
|
|
3644
|
-
/* @__PURE__ */ (0,
|
|
3645
|
-
line ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3660
|
-
/* @__PURE__ */ (0,
|
|
3661
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3666
|
-
/* @__PURE__ */ (0,
|
|
3667
|
-
/* @__PURE__ */ (0,
|
|
3668
|
-
/* @__PURE__ */ (0,
|
|
3669
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3674
|
-
/* @__PURE__ */ (0,
|
|
3675
|
-
/* @__PURE__ */ (0,
|
|
3676
|
-
/* @__PURE__ */ (0,
|
|
3677
|
-
twoLine ? /* @__PURE__ */ (0,
|
|
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,
|
|
3680
|
-
/* @__PURE__ */ (0,
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
3729
|
-
/* @__PURE__ */ (0,
|
|
3730
|
-
/* @__PURE__ */ (0,
|
|
3731
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
3732
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
3733
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3793
|
+
line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "matrx-control-promo-line", children: line }) : null
|
|
3736
3794
|
] }),
|
|
3737
|
-
chips ? /* @__PURE__ */ (0,
|
|
3738
|
-
action ? /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
3852
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(MinusIcon, { width: 12, height: 12, strokeWidth: 2.25 })
|
|
3795
3853
|
}
|
|
3796
3854
|
),
|
|
3797
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
3850
|
-
var
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
3959
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3981
|
-
/* @__PURE__ */ (0,
|
|
3982
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
4148
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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
|
|
4167
|
-
var
|
|
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,
|
|
4171
|
-
/* @__PURE__ */ (0,
|
|
4172
|
-
/* @__PURE__ */ (0,
|
|
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 =
|
|
4176
|
-
var SearchRowCloseSlotContext =
|
|
4233
|
+
var CloseSlotContext = React22.createContext(null);
|
|
4234
|
+
var SearchRowCloseSlotContext = React22.createContext(null);
|
|
4177
4235
|
function useCloseSlot(enabled) {
|
|
4178
|
-
const [claims, setClaims] =
|
|
4236
|
+
const [claims, setClaims] = React22.useState([]);
|
|
4179
4237
|
const owner = claims[0] ?? null;
|
|
4180
|
-
const claim =
|
|
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 =
|
|
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 =
|
|
4191
|
-
const id =
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
4232
|
-
/* @__PURE__ */ (0,
|
|
4233
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
4239
|
-
var Command =
|
|
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 =
|
|
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,
|
|
4261
|
-
isModal ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
4287
|
-
/* @__PURE__ */ (0,
|
|
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 =
|
|
4352
|
+
var CommandInput = React23.forwardRef(({ className, ...props }, ref) => {
|
|
4295
4353
|
const ownsClose = useSearchRowCloseSlotClaim();
|
|
4296
|
-
return /* @__PURE__ */ (0,
|
|
4297
|
-
/* @__PURE__ */ (0,
|
|
4298
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
4473
|
-
searchable && /* @__PURE__ */ (0,
|
|
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,
|
|
4482
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
4557
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
|
|
4500
4558
|
group.heading ?? "More",
|
|
4501
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
4575
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "min-w-0 flex-1 truncate", children: [
|
|
4518
4576
|
getLabel(o),
|
|
4519
|
-
h && /* @__PURE__ */ (0,
|
|
4577
|
+
h && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: h })
|
|
4520
4578
|
] }),
|
|
4521
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
4707
|
-
var
|
|
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 =
|
|
4770
|
+
var TableSizeContext = React24.createContext("md");
|
|
4713
4771
|
function useTableSize() {
|
|
4714
|
-
return
|
|
4772
|
+
return React24.useContext(TableSizeContext);
|
|
4715
4773
|
}
|
|
4716
|
-
var Table =
|
|
4774
|
+
var Table = React24.forwardRef(
|
|
4717
4775
|
({ className, size = "md", wrap = true, wrapperClassName, ...props }, ref) => {
|
|
4718
|
-
const table = /* @__PURE__ */ (0,
|
|
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,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
4847
|
+
var TableHead = React24.forwardRef(({ className, ...props }, ref) => {
|
|
4790
4848
|
const size = useTableSize();
|
|
4791
|
-
return /* @__PURE__ */ (0,
|
|
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 =
|
|
4864
|
+
var TableCell = React24.forwardRef(({ className, ...props }, ref) => {
|
|
4807
4865
|
const size = useTableSize();
|
|
4808
|
-
return /* @__PURE__ */ (0,
|
|
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 =
|
|
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
|
|
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,
|
|
4932
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5026
|
+
children: triggerIcon ?? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CircleHelpIcon, { className: "size-3.5", "aria-hidden": "true" })
|
|
4969
5027
|
}
|
|
4970
5028
|
) }),
|
|
4971
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5007
|
-
/* @__PURE__ */ (0,
|
|
5008
|
-
/* @__PURE__ */ (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,
|
|
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,
|
|
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,
|
|
5046
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
5117
|
-
/* @__PURE__ */ (0,
|
|
5118
|
-
help != null ? /* @__PURE__ */ (0,
|
|
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,
|
|
5121
|
-
/* @__PURE__ */ (0,
|
|
5122
|
-
source != null || state != null ? /* @__PURE__ */ (0,
|
|
5123
|
-
source != null ? /* @__PURE__ */ (0,
|
|
5124
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5129
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
5164
|
-
/* @__PURE__ */ (0,
|
|
5165
|
-
help != null ? /* @__PURE__ */ (0,
|
|
5166
|
-
meta != null ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
5197
|
-
/* @__PURE__ */ (0,
|
|
5198
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
5277
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "matrx-config-heading", children: [
|
|
5220
5278
|
column.label,
|
|
5221
|
-
column.help ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
5328
|
-
/* @__PURE__ */ (0,
|
|
5329
|
-
/* @__PURE__ */ (0,
|
|
5330
|
-
end ? /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
5364
|
-
Icon3 && /* @__PURE__ */ (0,
|
|
5365
|
-
/* @__PURE__ */ (0,
|
|
5366
|
-
/* @__PURE__ */ (0,
|
|
5367
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
5381
|
-
var
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
5502
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
5593
|
+
showSubmitButton ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
5536
5594
|
Button2,
|
|
5537
5595
|
{
|
|
5538
|
-
icon: loading ? /* @__PURE__ */ (0,
|
|
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
|
|
5557
|
-
var
|
|
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
|
-
|
|
5617
|
+
React27.useEffect(() => {
|
|
5560
5618
|
if (!titleTooltips) return;
|
|
5561
5619
|
return acquireTitleTooltips();
|
|
5562
5620
|
}, [titleTooltips]);
|
|
5563
|
-
return /* @__PURE__ */ (0,
|
|
5621
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Provider, { ...props, disableHoverableContent });
|
|
5564
5622
|
}
|
|
5565
|
-
var TriggerContext =
|
|
5623
|
+
var TriggerContext = React27.createContext(null);
|
|
5566
5624
|
var Tooltip = ({ onOpenChange, ...props }) => {
|
|
5567
|
-
const ref =
|
|
5568
|
-
const [open, setOpen] =
|
|
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 =
|
|
5571
|
-
return /* @__PURE__ */ (0,
|
|
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 =
|
|
5584
|
-
const trigger =
|
|
5585
|
-
const setRef =
|
|
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,
|
|
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 =
|
|
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 =
|
|
5656
|
+
const trigger = React27.useContext(TriggerContext);
|
|
5599
5657
|
const placed = side ?? (trigger?.open ? tooltipSide(trigger.ref.current, fallbackSide) : fallbackSide ?? "top");
|
|
5600
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
5658
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
5690
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
5741
|
-
/* @__PURE__ */ (0,
|
|
5742
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
5811
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipContent, { side: "top", children: "Expand all" })
|
|
5754
5812
|
] }),
|
|
5755
|
-
/* @__PURE__ */ (0,
|
|
5756
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
5801
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
5833
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
5897
|
-
var
|
|
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,
|
|
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,
|
|
5921
|
-
/* @__PURE__ */ (0,
|
|
5922
|
-
/* @__PURE__ */ (0,
|
|
5923
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
5928
|
-
hasFooter && /* @__PURE__ */ (0,
|
|
5929
|
-
/* @__PURE__ */ (0,
|
|
5930
|
-
/* @__PURE__ */ (0,
|
|
5931
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
5955
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5959
|
-
iconEnd: /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
5979
|
-
/* @__PURE__ */ (0,
|
|
5980
|
-
isSelected && /* @__PURE__ */ (0,
|
|
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
|
|
5991
|
-
var
|
|
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] =
|
|
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] =
|
|
6055
|
+
var ErrorCardMenusContext = menusRegistry[MENUS_KEY] ?? (menusRegistry[MENUS_KEY] = React29.createContext(null));
|
|
5998
6056
|
function useErrorActions() {
|
|
5999
|
-
return
|
|
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,
|
|
6062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: render(props) });
|
|
6005
6063
|
}
|
|
6006
|
-
var ErrorBox =
|
|
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,
|
|
6086
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Tag, { ref, role: "alert", "data-error-box": "", ...rest, children: [
|
|
6029
6087
|
children ?? message,
|
|
6030
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
6037
|
-
var
|
|
6038
|
-
var Label3 =
|
|
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
|
|
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,
|
|
6072
|
-
/* @__PURE__ */ (0,
|
|
6073
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6084
|
-
!required && optional && /* @__PURE__ */ (0,
|
|
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,
|
|
6089
|
-
help && typeof help !== "string" && /* @__PURE__ */ (0,
|
|
6090
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6154
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleHelpIcon, { className: "h-3.5 w-3.5" })
|
|
6097
6155
|
}
|
|
6098
6156
|
) }),
|
|
6099
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6103
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6127
|
-
/* @__PURE__ */ (0,
|
|
6128
|
-
/* @__PURE__ */ (0,
|
|
6129
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6144
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6148
|
-
hasCounter && /* @__PURE__ */ (0,
|
|
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
|
|
6227
|
+
var React31 = __toESM(require("react"), 1);
|
|
6170
6228
|
var import_react_dom = require("react-dom");
|
|
6171
|
-
var
|
|
6172
|
-
var { useState: useState17, useLayoutEffect: useLayoutEffect4, useRef: useRef12 } =
|
|
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,
|
|
6271
|
-
index > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
6300
|
-
/* @__PURE__ */ (0,
|
|
6301
|
-
/* @__PURE__ */ (0,
|
|
6302
|
-
title && /* @__PURE__ */ (0,
|
|
6303
|
-
text && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6315
|
-
required && /* @__PURE__ */ (0,
|
|
6316
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
6337
|
-
var
|
|
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] =
|
|
6363
|
-
const [inputValue, setInputValue] =
|
|
6364
|
-
const [copied, setCopied] =
|
|
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,
|
|
6394
|
-
/* @__PURE__ */ (0,
|
|
6395
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
6469
|
-
var HostLink =
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
6532
|
-
max === min ? null : /* @__PURE__ */ (0,
|
|
6533
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6556
|
-
/* @__PURE__ */ (0,
|
|
6557
|
-
dot ? /* @__PURE__ */ (0,
|
|
6558
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6618
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
|
|
6561
6619
|
" ",
|
|
6562
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6567
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6637
|
+
trend && shown !== null ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(KpiSparkline, { trend, label }) : null
|
|
6580
6638
|
] }),
|
|
6581
|
-
hint ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
6621
|
-
var
|
|
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] =
|
|
6636
|
-
const timer =
|
|
6637
|
-
|
|
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,
|
|
6705
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
6648
6706
|
Button2,
|
|
6649
6707
|
{
|
|
6650
6708
|
variant,
|
|
6651
|
-
icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0,
|
|
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,
|
|
6660
|
-
/* @__PURE__ */ (0,
|
|
6661
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
6678
|
-
/* @__PURE__ */ (0,
|
|
6679
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6687
|
-
/* @__PURE__ */ (0,
|
|
6688
|
-
locator && /* @__PURE__ */ (0,
|
|
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,
|
|
6692
|
-
/* @__PURE__ */ (0,
|
|
6693
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
6723
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6734
|
-
/* @__PURE__ */ (0,
|
|
6735
|
-
/* @__PURE__ */ (0,
|
|
6736
|
-
chipSuffix && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
6746
|
-
var
|
|
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 =
|
|
6757
|
-
const refs =
|
|
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] =
|
|
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,
|
|
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,
|
|
6796
|
-
gi > 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
6809
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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 =
|
|
6978
|
+
const autoId = React36.useId();
|
|
6921
6979
|
const hintId = `${id ?? autoId}-hint`;
|
|
6922
|
-
const parsed =
|
|
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,
|
|
6926
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
6960
|
-
var
|
|
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] =
|
|
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,
|
|
6981
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6995
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
7021
|
-
var
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
7099
|
-
var
|
|
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 =
|
|
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,
|
|
7133
|
-
/* @__PURE__ */ (0,
|
|
7134
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
7215
|
+
var React40 = __toESM(require("react"), 1);
|
|
7158
7216
|
var import_outbound = require("@ai-matrx/kit/outbound");
|
|
7159
|
-
var
|
|
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 =
|
|
7169
|
-
return /* @__PURE__ */ (0,
|
|
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] =
|
|
7195
|
-
const skipSelectRef =
|
|
7252
|
+
const [open, setOpen] = React40.useState(false);
|
|
7253
|
+
const skipSelectRef = React40.useRef(false);
|
|
7196
7254
|
if (searchable) {
|
|
7197
|
-
return /* @__PURE__ */ (0,
|
|
7198
|
-
/* @__PURE__ */ (0,
|
|
7199
|
-
/* @__PURE__ */ (0,
|
|
7200
|
-
/* @__PURE__ */ (0,
|
|
7201
|
-
/* @__PURE__ */ (0,
|
|
7202
|
-
/* @__PURE__ */ (0,
|
|
7203
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7224
|
-
item.icon && /* @__PURE__ */ (0,
|
|
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,
|
|
7235
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7255
|
-
item.icon && /* @__PURE__ */ (0,
|
|
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
|
|
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
|
|
7273
|
-
var
|
|
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 =
|
|
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
|
|
7352
|
+
var React43 = __toESM(require("react"), 1);
|
|
7295
7353
|
|
|
7296
7354
|
// src/look.tsx
|
|
7297
|
-
var
|
|
7298
|
-
var
|
|
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] ??=
|
|
7359
|
+
var LookContext = registry3[CONTEXT_SLOT3] ??= React42.createContext("web");
|
|
7302
7360
|
function useLook() {
|
|
7303
|
-
return
|
|
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
|
|
7555
|
-
var DialogWindowedByDefaultContext =
|
|
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,
|
|
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,
|
|
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] ??=
|
|
7577
|
-
var DialogOverlay =
|
|
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 =
|
|
7651
|
+
var DialogContentPrimitive = React43.forwardRef(({ onInteractOutside, onCloseAutoFocus, ...props }, ref) => {
|
|
7594
7652
|
const isModal = useRadixDialogModal();
|
|
7595
7653
|
useModalLayer(isModal);
|
|
7596
|
-
return /* @__PURE__ */ (0,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
7648
|
-
const [containerEl, setContainerEl] =
|
|
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] =
|
|
7653
|
-
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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,
|
|
7695
|
-
isModal ? /* @__PURE__ */ (0,
|
|
7696
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7748
|
-
closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0,
|
|
7749
|
-
/* @__PURE__ */ (0,
|
|
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 =
|
|
7768
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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 =
|
|
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 =
|
|
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
|
|
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,
|
|
7923
|
+
const control = /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7866
7924
|
Button2,
|
|
7867
7925
|
{
|
|
7868
7926
|
variant: VARIANT[variant],
|
|
7869
|
-
icon: spinning ? /* @__PURE__ */ (0,
|
|
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,
|
|
7877
|
-
/* @__PURE__ */ (0,
|
|
7878
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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] =
|
|
7903
|
-
const [isFullScreen, setIsFullScreen] =
|
|
7904
|
-
const contentRef =
|
|
7905
|
-
const fullRef =
|
|
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,
|
|
7924
|
-
onSave && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7992
|
+
onReset && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
7935
7993
|
ActionFeedbackButton,
|
|
7936
7994
|
{
|
|
7937
|
-
icon: /* @__PURE__ */ (0,
|
|
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,
|
|
7945
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7957
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7965
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8025
|
+
typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: title }) : title
|
|
7968
8026
|
] }),
|
|
7969
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7980
|
-
/* @__PURE__ */ (0,
|
|
7981
|
-
/* @__PURE__ */ (0,
|
|
7982
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7988
|
-
/* @__PURE__ */ (0,
|
|
7989
|
-
/* @__PURE__ */ (0,
|
|
7990
|
-
fullScreenDescription ? /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
8015
|
-
/* @__PURE__ */ (0,
|
|
8016
|
-
/* @__PURE__ */ (0,
|
|
8017
|
-
/* @__PURE__ */ (0,
|
|
8018
|
-
buttonText && /* @__PURE__ */ (0,
|
|
8019
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
8027
|
-
var
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
8102
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8117
|
-
/* @__PURE__ */ (0,
|
|
8118
|
-
/* @__PURE__ */ (0,
|
|
8119
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
8147
|
-
title && /* @__PURE__ */ (0,
|
|
8148
|
-
description && /* @__PURE__ */ (0,
|
|
8149
|
-
/* @__PURE__ */ (0,
|
|
8150
|
-
items.map((item, index) => /* @__PURE__ */ (0,
|
|
8151
|
-
showAddButton && /* @__PURE__ */ (0,
|
|
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,
|
|
8162
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8193
|
-
/* @__PURE__ */ (0,
|
|
8194
|
-
/* @__PURE__ */ (0,
|
|
8195
|
-
/* @__PURE__ */ (0,
|
|
8196
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8225
|
-
title && /* @__PURE__ */ (0,
|
|
8226
|
-
description && /* @__PURE__ */ (0,
|
|
8227
|
-
showContainer ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8241
|
-
/* @__PURE__ */ (0,
|
|
8242
|
-
badge && /* @__PURE__ */ (0,
|
|
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,
|
|
8245
|
-
/* @__PURE__ */ (0,
|
|
8246
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
8258
|
-
icon && /* @__PURE__ */ (0,
|
|
8259
|
-
title && /* @__PURE__ */ (0,
|
|
8260
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8267
|
-
(title || description) && /* @__PURE__ */ (0,
|
|
8268
|
-
title && /* @__PURE__ */ (0,
|
|
8269
|
-
description && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|