@nocoo/basalt 2.0.0-rc.1
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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/charts/area.d.ts +8 -0
- package/dist/charts/area.js +55 -0
- package/dist/charts/area.js.map +1 -0
- package/dist/charts/bar.d.ts +9 -0
- package/dist/charts/bar.js +42 -0
- package/dist/charts/bar.js.map +1 -0
- package/dist/charts/bullet.d.ts +8 -0
- package/dist/charts/bullet.js +50 -0
- package/dist/charts/bullet.js.map +1 -0
- package/dist/charts/chart-colors.d.ts +1 -0
- package/dist/charts/chart-colors.js +3 -0
- package/dist/charts/charts.d.ts +6 -0
- package/dist/charts/charts.js +15 -0
- package/dist/charts/charts.js.map +1 -0
- package/dist/charts/config.d.ts +117 -0
- package/dist/charts/config.js +117 -0
- package/dist/charts/config.js.map +1 -0
- package/dist/charts/custom-chart.d.ts +6 -0
- package/dist/charts/custom-chart.js +15 -0
- package/dist/charts/custom-chart.js.map +1 -0
- package/dist/charts/date-navigation.d.ts +22 -0
- package/dist/charts/date-navigation.js +122 -0
- package/dist/charts/date-navigation.js.map +1 -0
- package/dist/charts/donut.d.ts +8 -0
- package/dist/charts/donut.js +36 -0
- package/dist/charts/donut.js.map +1 -0
- package/dist/charts/frame.d.ts +9 -0
- package/dist/charts/frame.js +22 -0
- package/dist/charts/frame.js.map +1 -0
- package/dist/charts/funnel.d.ts +7 -0
- package/dist/charts/funnel.js +35 -0
- package/dist/charts/funnel.js.map +1 -0
- package/dist/charts/gauge.d.ts +8 -0
- package/dist/charts/gauge.js +46 -0
- package/dist/charts/gauge.js.map +1 -0
- package/dist/charts/grouped-bar.d.ts +7 -0
- package/dist/charts/grouped-bar.js +42 -0
- package/dist/charts/grouped-bar.js.map +1 -0
- package/dist/charts/heatmap-calendar.d.ts +27 -0
- package/dist/charts/heatmap-calendar.js +200 -0
- package/dist/charts/heatmap-calendar.js.map +1 -0
- package/dist/charts/item-list.d.ts +9 -0
- package/dist/charts/item-list.js +22 -0
- package/dist/charts/item-list.js.map +1 -0
- package/dist/charts/line.d.ts +9 -0
- package/dist/charts/line.js +58 -0
- package/dist/charts/line.js.map +1 -0
- package/dist/charts/palette.d.ts +33 -0
- package/dist/charts/palette.js +44 -0
- package/dist/charts/palette.js.map +1 -0
- package/dist/charts/radar.d.ts +6 -0
- package/dist/charts/radar.js +37 -0
- package/dist/charts/radar.js.map +1 -0
- package/dist/charts/sample.d.ts +42 -0
- package/dist/charts/sample.js +124 -0
- package/dist/charts/sample.js.map +1 -0
- package/dist/charts/sankey.d.ts +6 -0
- package/dist/charts/sankey.js +51 -0
- package/dist/charts/sankey.js.map +1 -0
- package/dist/charts/slot-bar.d.ts +15 -0
- package/dist/charts/slot-bar.js +80 -0
- package/dist/charts/slot-bar.js.map +1 -0
- package/dist/charts/sparkline.d.ts +6 -0
- package/dist/charts/sparkline.js +29 -0
- package/dist/charts/sparkline.js.map +1 -0
- package/dist/charts/stacked-bar.d.ts +7 -0
- package/dist/charts/stacked-bar.js +51 -0
- package/dist/charts/stacked-bar.js.map +1 -0
- package/dist/charts/stat-card.d.ts +21 -0
- package/dist/charts/stat-card.js +66 -0
- package/dist/charts/stat-card.js.map +1 -0
- package/dist/charts/timeline.d.ts +17 -0
- package/dist/charts/timeline.js +79 -0
- package/dist/charts/timeline.js.map +1 -0
- package/dist/charts/timeseries.d.ts +6 -0
- package/dist/charts/timeseries.js +15 -0
- package/dist/charts/timeseries.js.map +1 -0
- package/dist/components/accordion.d.ts +6 -0
- package/dist/components/accordion.js +21 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +25 -0
- package/dist/components/alert-dialog.js +61 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/app-header.d.ts +10 -0
- package/dist/components/app-header.js +35 -0
- package/dist/components/app-header.js.map +1 -0
- package/dist/components/app-shell.d.ts +4 -0
- package/dist/components/app-shell.js +29 -0
- package/dist/components/app-shell.js.map +1 -0
- package/dist/components/autocomplete.d.ts +47 -0
- package/dist/components/autocomplete.js +28 -0
- package/dist/components/autocomplete.js.map +1 -0
- package/dist/components/avatar.d.ts +5 -0
- package/dist/components/avatar.js +28 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +10 -0
- package/dist/components/badge.js +37 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/banner.d.ts +22 -0
- package/dist/components/banner.js +88 -0
- package/dist/components/banner.js.map +1 -0
- package/dist/components/basalt-mark.d.ts +8 -0
- package/dist/components/basalt-mark.js +17 -0
- package/dist/components/basalt-mark.js.map +1 -0
- package/dist/components/breadcrumbs.d.ts +9 -0
- package/dist/components/breadcrumbs.js +38 -0
- package/dist/components/breadcrumbs.js.map +1 -0
- package/dist/components/button.d.ts +17 -0
- package/dist/components/button.js +73 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/checkbox.d.ts +86 -0
- package/dist/components/checkbox.js +107 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/clipboard-text.d.ts +5 -0
- package/dist/components/clipboard-text.js +33 -0
- package/dist/components/clipboard-text.js.map +1 -0
- package/dist/components/code.d.ts +26 -0
- package/dist/components/code.js +45 -0
- package/dist/components/code.js.map +1 -0
- package/dist/components/collapsible.d.ts +33 -0
- package/dist/components/collapsible.js +38 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/combobox.d.ts +47 -0
- package/dist/components/combobox.js +28 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command-palette.d.ts +83 -0
- package/dist/components/command-palette.js +90 -0
- package/dist/components/command-palette.js.map +1 -0
- package/dist/components/confirm-dialog.d.ts +52 -0
- package/dist/components/confirm-dialog.js +61 -0
- package/dist/components/confirm-dialog.js.map +1 -0
- package/dist/components/context-menu.d.ts +7 -0
- package/dist/components/context-menu.js +23 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/data-table.d.ts +76 -0
- package/dist/components/data-table.js +230 -0
- package/dist/components/data-table.js.map +1 -0
- package/dist/components/date-picker.d.ts +90 -0
- package/dist/components/date-picker.js +452 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +37 -0
- package/dist/components/dialog.js +67 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +38 -0
- package/dist/components/dropdown-menu.js +24 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.d.ts +6 -0
- package/dist/components/empty.js +28 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/field.d.ts +39 -0
- package/dist/components/field.js +52 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/flow.d.ts +24 -0
- package/dist/components/flow.js +56 -0
- package/dist/components/flow.js.map +1 -0
- package/dist/components/grid.d.ts +15 -0
- package/dist/components/grid.js +24 -0
- package/dist/components/grid.js.map +1 -0
- package/dist/components/hover-card.d.ts +5 -0
- package/dist/components/hover-card.js +18 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-area.d.ts +19 -0
- package/dist/components/input-area.js +27 -0
- package/dist/components/input-area.js.map +1 -0
- package/dist/components/input-group.d.ts +70 -0
- package/dist/components/input-group.js +78 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input.d.ts +19 -0
- package/dist/components/input.js +28 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/label.d.ts +20 -0
- package/dist/components/label.js +34 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/layer-card.d.ts +69 -0
- package/dist/components/layer-card.js +104 -0
- package/dist/components/layer-card.js.map +1 -0
- package/dist/components/link.d.ts +8 -0
- package/dist/components/link.js +18 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/loader.d.ts +4 -0
- package/dist/components/loader.js +66 -0
- package/dist/components/loader.js.map +1 -0
- package/dist/components/loading-screen.d.ts +5 -0
- package/dist/components/loading-screen.js +24 -0
- package/dist/components/loading-screen.js.map +1 -0
- package/dist/components/menu-bar.d.ts +8 -0
- package/dist/components/menu-bar.js +42 -0
- package/dist/components/menu-bar.js.map +1 -0
- package/dist/components/meter.d.ts +8 -0
- package/dist/components/meter.js +26 -0
- package/dist/components/meter.js.map +1 -0
- package/dist/components/navigation-menu.d.ts +6 -0
- package/dist/components/navigation-menu.js +16 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/overlay.d.ts +16 -0
- package/dist/components/overlay.js +14 -0
- package/dist/components/overlay.js.map +1 -0
- package/dist/components/page-header.d.ts +19 -0
- package/dist/components/page-header.js +43 -0
- package/dist/components/page-header.js.map +1 -0
- package/dist/components/pagination.d.ts +35 -0
- package/dist/components/pagination.js +68 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +38 -0
- package/dist/components/popover.js +65 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/radio.d.ts +108 -0
- package/dist/components/radio.js +80 -0
- package/dist/components/radio.js.map +1 -0
- package/dist/components/scroll-area.d.ts +15 -0
- package/dist/components/scroll-area.js +49 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/segment-control.d.ts +35 -0
- package/dist/components/segment-control.js +46 -0
- package/dist/components/segment-control.js.map +1 -0
- package/dist/components/select.d.ts +99 -0
- package/dist/components/select.js +51 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/sensitive-input.d.ts +23 -0
- package/dist/components/sensitive-input.js +43 -0
- package/dist/components/sensitive-input.js.map +1 -0
- package/dist/components/separator.d.ts +26 -0
- package/dist/components/separator.js +18 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +26 -0
- package/dist/components/sheet.js +49 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.d.ts +101 -0
- package/dist/components/sidebar.js +260 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton-line.d.ts +6 -0
- package/dist/components/skeleton-line.js +22 -0
- package/dist/components/skeleton-line.js.map +1 -0
- package/dist/components/slider.d.ts +3 -0
- package/dist/components/slider.js +21 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/stat-strip.d.ts +19 -0
- package/dist/components/stat-strip.js +27 -0
- package/dist/components/stat-strip.js.map +1 -0
- package/dist/components/switch.d.ts +85 -0
- package/dist/components/switch.js +94 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table-of-contents.d.ts +33 -0
- package/dist/components/table-of-contents.js +37 -0
- package/dist/components/table-of-contents.js.map +1 -0
- package/dist/components/table-pager.d.ts +26 -0
- package/dist/components/table-pager.js +35 -0
- package/dist/components/table-pager.js.map +1 -0
- package/dist/components/table.d.ts +45 -0
- package/dist/components/table.js +32 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +65 -0
- package/dist/components/tabs.js +56 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/text.d.ts +32 -0
- package/dist/components/text.js +46 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/theme-toggle.d.ts +7 -0
- package/dist/components/theme-toggle.js +28 -0
- package/dist/components/theme-toggle.js.map +1 -0
- package/dist/components/toast.d.ts +27 -0
- package/dist/components/toast.js +78 -0
- package/dist/components/toast.js.map +1 -0
- package/dist/components/toggle-group.d.ts +4 -0
- package/dist/components/toggle-group.js +48 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +7 -0
- package/dist/components/toggle.js +37 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/toolbar.d.ts +58 -0
- package/dist/components/toolbar.js +76 -0
- package/dist/components/toolbar.js.map +1 -0
- package/dist/components/tooltip.d.ts +13 -0
- package/dist/components/tooltip.js +18 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/typeahead-field.d.ts +24 -0
- package/dist/components/typeahead-field.js +177 -0
- package/dist/components/typeahead-field.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +35 -0
- package/dist/providers/link.d.ts +12 -0
- package/dist/providers/link.js +18 -0
- package/dist/providers/link.js.map +1 -0
- package/dist/providers/theme.d.ts +11 -0
- package/dist/providers/theme.js +43 -0
- package/dist/providers/theme.js.map +1 -0
- package/dist/styles/standalone.css +2233 -0
- package/dist/styles/tailwind.css +103 -0
- package/dist/styles/tokens.css +277 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.js +11 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/control-surface.d.ts +2 -0
- package/dist/utils/control-surface.js +11 -0
- package/dist/utils/control-surface.js.map +1 -0
- package/dist/utils/selection-indicator.d.ts +24 -0
- package/dist/utils/selection-indicator.js +108 -0
- package/dist/utils/selection-indicator.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../utils/cn.js";
|
|
3
|
+
import { FOCUS_RING as t } from "./overlay.js";
|
|
4
|
+
import * as n from "react";
|
|
5
|
+
import { Check as r, Minus as i } from "lucide-react";
|
|
6
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
7
|
+
import * as s from "@radix-ui/react-checkbox";
|
|
8
|
+
//#region src/components/checkbox.tsx
|
|
9
|
+
var c = {
|
|
10
|
+
sm: "h-3 w-3",
|
|
11
|
+
default: "h-4 w-4"
|
|
12
|
+
}, l = {
|
|
13
|
+
sm: "hidden h-3 w-3 group-data-[state=checked]:block",
|
|
14
|
+
default: "hidden h-4 w-4 group-data-[state=checked]:block"
|
|
15
|
+
}, u = {
|
|
16
|
+
sm: "hidden h-2.5 w-2.5 group-data-[state=indeterminate]:block",
|
|
17
|
+
default: "hidden h-3 w-3 group-data-[state=indeterminate]:block"
|
|
18
|
+
}, d = n.createContext(null);
|
|
19
|
+
function f(e, t, n) {
|
|
20
|
+
return n ? e.includes(t) ? e : [...e, t] : e.filter((e) => e !== t);
|
|
21
|
+
}
|
|
22
|
+
var p = n.forwardRef(({ className: n, size: d = "default", ...f }, p) => /* @__PURE__ */ a(s.Root, {
|
|
23
|
+
ref: p,
|
|
24
|
+
className: e("group peer shrink-0 rounded-[4px] border border-basalt-primary data-[state=checked]:bg-basalt-primary data-[state=checked]:text-basalt-primary-foreground data-[state=indeterminate]:bg-basalt-primary data-[state=indeterminate]:text-basalt-primary-foreground disabled:cursor-not-allowed disabled:opacity-50", c[d], t, n),
|
|
25
|
+
...f,
|
|
26
|
+
children: /* @__PURE__ */ o(s.Indicator, {
|
|
27
|
+
className: "flex items-center justify-center text-current",
|
|
28
|
+
children: [/* @__PURE__ */ a(r, { className: l[d] }), /* @__PURE__ */ a(i, { className: u[d] })]
|
|
29
|
+
})
|
|
30
|
+
}));
|
|
31
|
+
p.displayName = s.Root.displayName;
|
|
32
|
+
var m = n.forwardRef(({ className: t, value: r, defaultValue: i, onValueChange: s, error: c, disabled: l = !1, children: u, "aria-describedby": f, "aria-invalid": p, ...m }, h) => {
|
|
33
|
+
let g = n.useId(), _ = n.useRef(null), [v, y] = n.useState(i ?? []), b = r ?? v, x = !!c, S = `${g}-error`, C = [x ? S : null, f].filter(Boolean).join(" ") || void 0, w = n.useCallback((e) => {
|
|
34
|
+
r === void 0 && y(e), s?.(e);
|
|
35
|
+
}, [s, r]), T = n.useCallback((e) => {
|
|
36
|
+
_.current = e, typeof h == "function" ? h(e) : h && (h.current = e);
|
|
37
|
+
}, [h]);
|
|
38
|
+
return n.useEffect(() => {
|
|
39
|
+
let e = _.current?.form;
|
|
40
|
+
if (!e || r !== void 0) return;
|
|
41
|
+
let t = (e) => {
|
|
42
|
+
queueMicrotask(() => {
|
|
43
|
+
e.defaultPrevented || y(i ?? []);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
return e.addEventListener("reset", t), () => e.removeEventListener("reset", t);
|
|
47
|
+
}, [i, r]), /* @__PURE__ */ a(d.Provider, {
|
|
48
|
+
value: {
|
|
49
|
+
value: b,
|
|
50
|
+
setValue: w,
|
|
51
|
+
disabled: l,
|
|
52
|
+
invalid: x
|
|
53
|
+
},
|
|
54
|
+
children: /* @__PURE__ */ o("fieldset", {
|
|
55
|
+
ref: T,
|
|
56
|
+
...m,
|
|
57
|
+
disabled: l,
|
|
58
|
+
"aria-invalid": x ? !0 : p,
|
|
59
|
+
"aria-describedby": C,
|
|
60
|
+
className: e("flex flex-col gap-2", t),
|
|
61
|
+
children: [u, x ? /* @__PURE__ */ a("p", {
|
|
62
|
+
id: S,
|
|
63
|
+
className: "text-xs text-basalt-destructive",
|
|
64
|
+
role: "alert",
|
|
65
|
+
children: c
|
|
66
|
+
}) : null]
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
m.displayName = "Checkbox.Group";
|
|
71
|
+
var h = n.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ a("legend", {
|
|
72
|
+
ref: r,
|
|
73
|
+
className: e("text-sm font-medium text-basalt-foreground", t),
|
|
74
|
+
...n
|
|
75
|
+
}));
|
|
76
|
+
h.displayName = "Checkbox.Legend";
|
|
77
|
+
var g = n.forwardRef(({ className: e, value: t, children: r, disabled: i, size: s, id: c, ...l }, u) => {
|
|
78
|
+
let m = n.useContext(d), h = m != null, g = n.useId(), _ = c ?? g, v = /* @__PURE__ */ a(p, {
|
|
79
|
+
ref: u,
|
|
80
|
+
...l,
|
|
81
|
+
id: _,
|
|
82
|
+
value: t,
|
|
83
|
+
size: s,
|
|
84
|
+
checked: h ? m.value.includes(t) : void 0,
|
|
85
|
+
disabled: i || m?.disabled,
|
|
86
|
+
"aria-invalid": m?.invalid || void 0,
|
|
87
|
+
className: e,
|
|
88
|
+
onCheckedChange: (e) => {
|
|
89
|
+
h && typeof e == "boolean" && m.setValue(f(m.value, t, e));
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return r == null ? v : /* @__PURE__ */ o("label", {
|
|
93
|
+
htmlFor: _,
|
|
94
|
+
className: "flex items-center gap-2 text-sm text-basalt-foreground",
|
|
95
|
+
children: [v, r]
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
g.displayName = "Checkbox.Item";
|
|
99
|
+
var _ = Object.assign(p, {
|
|
100
|
+
Group: m,
|
|
101
|
+
Legend: h,
|
|
102
|
+
Item: g
|
|
103
|
+
});
|
|
104
|
+
//#endregion
|
|
105
|
+
export { _ as Checkbox };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":[],"sources":["../../src/components/checkbox.tsx"],"sourcesContent":["import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { FOCUS_RING } from \"./overlay\";\n\nexport type CheckboxSize = \"sm\" | \"default\";\n\nconst CHECKBOX_SIZE_CLASS: Record<CheckboxSize, string> = {\n\tsm: \"h-3 w-3\",\n\tdefault: \"h-4 w-4\",\n};\n\nconst CHECK_ICON_CLASS: Record<CheckboxSize, string> = {\n\tsm: \"hidden h-3 w-3 group-data-[state=checked]:block\",\n\tdefault: \"hidden h-4 w-4 group-data-[state=checked]:block\",\n};\n\nconst MINUS_ICON_CLASS: Record<CheckboxSize, string> = {\n\tsm: \"hidden h-2.5 w-2.5 group-data-[state=indeterminate]:block\",\n\tdefault: \"hidden h-3 w-3 group-data-[state=indeterminate]:block\",\n};\n\ntype CheckboxGroupContextValue = {\n\tvalue: string[];\n\tsetValue: (next: string[]) => void;\n\tdisabled: boolean;\n\tinvalid: boolean;\n};\n\nconst CheckboxGroupContext = React.createContext<CheckboxGroupContextValue | null>(null);\n\nfunction nextCheckboxGroupValue(current: string[], itemValue: string, checked: boolean): string[] {\n\tif (checked) {\n\t\treturn current.includes(itemValue) ? current : [...current, itemValue];\n\t}\n\treturn current.filter((entry) => entry !== itemValue);\n}\n\nexport type CheckboxProps = Omit<\n\tReact.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n\t\"checked\"\n> & {\n\t/**\n\t * The controlled checked state of the checkbox.\n\t */\n\tchecked?: boolean | \"indeterminate\";\n\t/**\n\t * The visual size of the checkbox.\n\t * @default default\n\t */\n\tsize?: CheckboxSize;\n};\n\nexport type CheckboxGroupProps = Omit<\n\tReact.ComponentPropsWithoutRef<\"fieldset\">,\n\t\"onChange\" | \"defaultValue\" | \"disabled\"\n> & {\n\t/**\n\t * The controlled selected values.\n\t */\n\tvalue?: string[];\n\t/**\n\t * The initially selected values.\n\t */\n\tdefaultValue?: string[];\n\t/**\n\t * Called when the selected values change.\n\t */\n\tonValueChange?: (value: string[]) => void;\n\t/**\n\t * Marks the group invalid and shows alert copy.\n\t */\n\terror?: React.ReactNode;\n\t/**\n\t * Disable every item in the group.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n};\n\nexport type CheckboxLegendProps = React.ComponentPropsWithoutRef<\"legend\">;\n\nexport type CheckboxItemProps = Omit<\n\tCheckboxProps,\n\t\"checked\" | \"defaultChecked\" | \"onCheckedChange\" | \"value\"\n> & {\n\t/**\n\t * The value stored in the group when this item is checked.\n\t */\n\tvalue: string;\n};\n\nconst CheckboxRoot = React.forwardRef<\n\tReact.ElementRef<typeof CheckboxPrimitive.Root>,\n\tCheckboxProps\n>(({ className, size = \"default\", ...props }, ref) => (\n\t<CheckboxPrimitive.Root\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"group peer shrink-0 rounded-[4px] border border-basalt-primary data-[state=checked]:bg-basalt-primary data-[state=checked]:text-basalt-primary-foreground data-[state=indeterminate]:bg-basalt-primary data-[state=indeterminate]:text-basalt-primary-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\tCHECKBOX_SIZE_CLASS[size],\n\t\t\tFOCUS_RING,\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n\t\t\t<Check className={CHECK_ICON_CLASS[size]} />\n\t\t\t<Minus className={MINUS_ICON_CLASS[size]} />\n\t\t</CheckboxPrimitive.Indicator>\n\t</CheckboxPrimitive.Root>\n));\nCheckboxRoot.displayName = CheckboxPrimitive.Root.displayName;\n\nconst CheckboxGroup = React.forwardRef<HTMLFieldSetElement, CheckboxGroupProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\terror,\n\t\t\tdisabled = false,\n\t\t\tchildren,\n\t\t\t\"aria-describedby\": describedBy,\n\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst generatedId = React.useId();\n\t\tconst nodeRef = React.useRef<HTMLFieldSetElement | null>(null);\n\t\tconst [uncontrolled, setUncontrolled] = React.useState(defaultValue ?? []);\n\t\tconst current = value ?? uncontrolled;\n\t\tconst invalid = Boolean(error);\n\t\tconst errorId = `${generatedId}-error`;\n\t\tconst mergedDescribedBy =\n\t\t\t[invalid ? errorId : null, describedBy].filter(Boolean).join(\" \") || undefined;\n\t\tconst setValue = React.useCallback(\n\t\t\t(next: string[]) => {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tsetUncontrolled(next);\n\t\t\t\t}\n\t\t\t\tonValueChange?.(next);\n\t\t\t},\n\t\t\t[onValueChange, value],\n\t\t);\n\t\tconst setRefs = React.useCallback(\n\t\t\t(node: HTMLFieldSetElement | null) => {\n\t\t\t\tnodeRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\tref.current = node;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\t\tReact.useEffect(() => {\n\t\t\tconst form = nodeRef.current?.form;\n\t\t\tif (!form || value !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst onReset = (event: Event) => {\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetUncontrolled(defaultValue ?? []);\n\t\t\t\t});\n\t\t\t};\n\t\t\tform.addEventListener(\"reset\", onReset);\n\t\t\treturn () => form.removeEventListener(\"reset\", onReset);\n\t\t}, [defaultValue, value]);\n\t\treturn (\n\t\t\t<CheckboxGroupContext.Provider value={{ value: current, setValue, disabled, invalid }}>\n\t\t\t\t<fieldset\n\t\t\t\t\tref={setRefs}\n\t\t\t\t\t{...props}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-invalid={invalid ? true : ariaInvalid}\n\t\t\t\t\taria-describedby={mergedDescribedBy}\n\t\t\t\t\tclassName={cn(\"flex flex-col gap-2\", className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t{invalid ? (\n\t\t\t\t\t\t<p id={errorId} className=\"text-xs text-basalt-destructive\" role=\"alert\">\n\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t</fieldset>\n\t\t\t</CheckboxGroupContext.Provider>\n\t\t);\n\t},\n);\nCheckboxGroup.displayName = \"Checkbox.Group\";\n\nconst CheckboxLegend = React.forwardRef<HTMLLegendElement, CheckboxLegendProps>(\n\t({ className, ...props }, ref) => (\n\t\t<legend\n\t\t\tref={ref}\n\t\t\tclassName={cn(\"text-sm font-medium text-basalt-foreground\", className)}\n\t\t\t{...props}\n\t\t/>\n\t),\n);\nCheckboxLegend.displayName = \"Checkbox.Legend\";\n\nconst CheckboxItem = React.forwardRef<\n\tReact.ElementRef<typeof CheckboxPrimitive.Root>,\n\tCheckboxItemProps\n>(({ className, value, children, disabled, size, id, ...props }, ref) => {\n\tconst group = React.useContext(CheckboxGroupContext);\n\tconst grouped = group != null;\n\tconst generatedId = React.useId();\n\tconst controlId = id ?? generatedId;\n\tconst box = (\n\t\t<CheckboxRoot\n\t\t\tref={ref}\n\t\t\t{...props}\n\t\t\tid={controlId}\n\t\t\tvalue={value}\n\t\t\tsize={size}\n\t\t\tchecked={grouped ? group.value.includes(value) : undefined}\n\t\t\tdisabled={disabled || group?.disabled}\n\t\t\taria-invalid={group?.invalid || undefined}\n\t\t\tclassName={className}\n\t\t\tonCheckedChange={(next) => {\n\t\t\t\tif (grouped && typeof next === \"boolean\") {\n\t\t\t\t\tgroup.setValue(nextCheckboxGroupValue(group.value, value, next));\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t);\n\tif (children == null) {\n\t\treturn box;\n\t}\n\treturn (\n\t\t<label htmlFor={controlId} className=\"flex items-center gap-2 text-sm text-basalt-foreground\">\n\t\t\t{box}\n\t\t\t{children}\n\t\t</label>\n\t);\n});\nCheckboxItem.displayName = \"Checkbox.Item\";\n\nexport const Checkbox = Object.assign(CheckboxRoot, {\n\tGroup: CheckboxGroup,\n\tLegend: CheckboxLegend,\n\tItem: CheckboxItem,\n});\n"],"mappings":";;;;;;;;AAQA,IAAM,IAAoD;CACzD,IAAI;CACJ,SAAS;AACV,GAEM,IAAiD;CACtD,IAAI;CACJ,SAAS;AACV,GAEM,IAAiD;CACtD,IAAI;CACJ,SAAS;AACV,GASM,IAAuB,EAAM,cAAgD,IAAI;AAEvF,SAAS,EAAuB,GAAmB,GAAmB,GAA4B;CAIjG,OAHI,IACI,EAAQ,SAAS,CAAS,IAAI,IAAU,CAAC,GAAG,GAAS,CAAS,IAE/D,EAAQ,QAAQ,MAAU,MAAU,CAAS;AACrD;AAwDA,IAAM,IAAe,EAAM,YAGxB,EAAE,cAAW,UAAO,WAAW,GAAG,KAAS,MAC7C,kBAAC,EAAkB,MAAnB;CACM;CACL,WAAW,EACV,oTACA,EAAoB,IACpB,GACA,CACD;CACA,GAAI;CAEJ,UAAA,kBAAC,EAAkB,WAAnB;EAA6B,WAAU;EAAvC,UAAA,CACC,kBAAC,GAAD,EAAO,WAAW,EAAiB,GAAQ,CAAA,GAC3C,kBAAC,GAAD,EAAO,WAAW,EAAiB,GAAQ,CAAA,CACf;;AACN,CAAA,CACxB;AACD,EAAa,cAAc,EAAkB,KAAK;AAElD,IAAM,IAAgB,EAAM,YAE1B,EACC,cACA,UACA,iBACA,kBACA,UACA,cAAW,IACX,aACA,oBAAoB,GACpB,gBAAgB,GAChB,GAAG,KAEJ,MACI;CACJ,IAAM,IAAc,EAAM,MAAM,GAC1B,IAAU,EAAM,OAAmC,IAAI,GACvD,CAAC,GAAc,KAAmB,EAAM,SAAS,KAAgB,CAAC,CAAC,GACnE,IAAU,KAAS,GACnB,IAAU,EAAQ,GAClB,IAAU,GAAG,EAAY,SACzB,IACL,CAAC,IAAU,IAAU,MAAM,CAAW,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA,GAChE,IAAW,EAAM,aACrB,MAAmB;EAInB,AAHI,MAAU,KAAA,KACb,EAAgB,CAAI,GAErB,IAAgB,CAAI;CACrB,GACA,CAAC,GAAe,CAAK,CACtB,GACM,IAAU,EAAM,aACpB,MAAqC;EAErC,AADA,EAAQ,UAAU,GACd,OAAO,KAAQ,aAClB,EAAI,CAAI,IACE,MACV,EAAI,UAAU;CAEhB,GACA,CAAC,CAAG,CACL;CAiBA,OAhBA,EAAM,gBAAgB;EACrB,IAAM,IAAO,EAAQ,SAAS;EAC9B,IAAI,CAAC,KAAQ,MAAU,KAAA,GACtB;EAED,IAAM,KAAW,MAAiB;GACjC,qBAAqB;IAChB,EAAM,oBAGV,EAAgB,KAAgB,CAAC,CAAC;GACnC,CAAC;EACF;EAEA,OADA,EAAK,iBAAiB,SAAS,CAAO,SACzB,EAAK,oBAAoB,SAAS,CAAO;CACvD,GAAG,CAAC,GAAc,CAAK,CAAC,GAEvB,kBAAC,EAAqB,UAAtB;EAA+B,OAAO;GAAE,OAAO;GAAS;GAAU;GAAU;EAAQ;EACnF,UAAA,kBAAC,YAAD;GACC,KAAK;GACL,GAAI;GACM;GACV,gBAAc,IAAU,KAAO;GAC/B,oBAAkB;GAClB,WAAW,EAAG,uBAAuB,CAAS;GAN/C,UAAA,CAQE,GACA,IACA,kBAAC,KAAD;IAAG,IAAI;IAAS,WAAU;IAAkC,MAAK;IAC/D,UAAA;GACC,CAAA,IACA,IACK;;CACoB,CAAA;AAEjC,CACD;AACA,EAAc,cAAc;AAE5B,IAAM,IAAiB,EAAM,YAC3B,EAAE,cAAW,GAAG,KAAS,MACzB,kBAAC,UAAD;CACM;CACL,WAAW,EAAG,8CAA8C,CAAS;CACrE,GAAI;AACJ,CAAA,CAEH;AACA,EAAe,cAAc;AAE7B,IAAM,IAAe,EAAM,YAGxB,EAAE,cAAW,UAAO,aAAU,aAAU,SAAM,OAAI,GAAG,KAAS,MAAQ;CACxE,IAAM,IAAQ,EAAM,WAAW,CAAoB,GAC7C,IAAU,KAAS,MACnB,IAAc,EAAM,MAAM,GAC1B,IAAY,KAAM,GAClB,IACL,kBAAC,GAAD;EACM;EACL,GAAI;EACJ,IAAI;EACG;EACD;EACN,SAAS,IAAU,EAAM,MAAM,SAAS,CAAK,IAAI,KAAA;EACjD,UAAU,KAAY,GAAO;EAC7B,gBAAc,GAAO,WAAW,KAAA;EACrB;EACX,kBAAkB,MAAS;GAC1B,AAAI,KAAW,OAAO,KAAS,aAC9B,EAAM,SAAS,EAAuB,EAAM,OAAO,GAAO,CAAI,CAAC;EAEjE;CACA,CAAA;CAKF,OAHI,KAAY,OACR,IAGP,kBAAC,SAAD;EAAO,SAAS;EAAW,WAAU;EAArC,UAAA,CACE,GACA,CACK;;AAET,CAAC;AACD,EAAa,cAAc;AAE3B,IAAa,IAAW,OAAO,OAAO,GAAc;CACnD,OAAO;CACP,QAAQ;CACR,MAAM;AACP,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../utils/cn.js";
|
|
3
|
+
import { Button as t } from "./button.js";
|
|
4
|
+
import { controlSurfaceClass as n } from "../utils/control-surface.js";
|
|
5
|
+
import { useState as r } from "react";
|
|
6
|
+
import { Check as i, Copy as a } from "lucide-react";
|
|
7
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
8
|
+
//#region src/components/clipboard-text.tsx
|
|
9
|
+
function c({ text: c, copyText: l, className: u }) {
|
|
10
|
+
let [d, f] = r(!1);
|
|
11
|
+
return /* @__PURE__ */ s("div", {
|
|
12
|
+
"data-slot": "clipboard-text",
|
|
13
|
+
className: n(e("inline-flex h-9 max-w-full items-stretch shadow-xs", u)),
|
|
14
|
+
children: [/* @__PURE__ */ o("code", {
|
|
15
|
+
className: "flex h-full min-w-0 items-center truncate rounded-l-basalt-md bg-transparent px-4 font-mono text-sm text-basalt-foreground",
|
|
16
|
+
children: c
|
|
17
|
+
}), /* @__PURE__ */ o(t, {
|
|
18
|
+
type: "button",
|
|
19
|
+
size: "icon",
|
|
20
|
+
variant: "ghost",
|
|
21
|
+
"aria-label": "Copy",
|
|
22
|
+
className: "h-full min-h-0 w-9 shrink-0 rounded-none rounded-r-basalt-md border-0 border-l border-basalt-border shadow-none",
|
|
23
|
+
onClick: async () => {
|
|
24
|
+
await navigator.clipboard.writeText(l ?? c), f(!0);
|
|
25
|
+
},
|
|
26
|
+
children: o(d ? i : a, {})
|
|
27
|
+
})]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { c as ClipboardText };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=clipboard-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard-text.js","names":[],"sources":["../../src/components/clipboard-text.tsx"],"sourcesContent":["import { Check, Copy } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { controlSurfaceClass } from \"../utils/control-surface\";\nimport { Button } from \"./button\";\n\nexport function ClipboardText({\n\ttext,\n\tcopyText,\n\tclassName,\n}: {\n\ttext: string;\n\tcopyText?: string;\n\tclassName?: string;\n}) {\n\tconst [copied, setCopied] = useState(false);\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"clipboard-text\"\n\t\t\tclassName={controlSurfaceClass(\n\t\t\t\tcn(\"inline-flex h-9 max-w-full items-stretch shadow-xs\", className),\n\t\t\t)}\n\t\t>\n\t\t\t<code className=\"flex h-full min-w-0 items-center truncate rounded-l-basalt-md bg-transparent px-4 font-mono text-sm text-basalt-foreground\">\n\t\t\t\t{text}\n\t\t\t</code>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label=\"Copy\"\n\t\t\t\tclassName=\"h-full min-h-0 w-9 shrink-0 rounded-none rounded-r-basalt-md border-0 border-l border-basalt-border shadow-none\"\n\t\t\t\tonClick={async () => {\n\t\t\t\t\tawait navigator.clipboard.writeText(copyText ?? text);\n\t\t\t\t\tsetCopied(true);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{copied ? <Check /> : <Copy />}\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,EAAc,EAC7B,SACA,aACA,gBAKE;CACF,IAAM,CAAC,GAAQ,KAAa,EAAS,EAAK;CAC1C,OACC,kBAAC,OAAD;EACC,aAAU;EACV,WAAW,EACV,EAAG,sDAAsD,CAAS,CACnE;EAJD,UAAA,CAMC,kBAAC,QAAD;GAAM,WAAU;GACd,UAAA;EACI,CAAA,GACN,kBAAC,GAAD;GACC,MAAK;GACL,MAAK;GACL,SAAQ;GACR,cAAW;GACX,WAAU;GACV,SAAS,YAAY;IAEpB,AADA,MAAM,UAAU,UAAU,UAAU,KAAY,CAAI,GACpD,EAAU,EAAI;GACf;GAEC,UAAS,EAAT,IAAU,IAAY,GAAb,CAAQ,CAAW;EACtB,CAAA,CACJ;;AAEP"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "react";
|
|
2
|
+
export type CodeProps = {
|
|
3
|
+
/**
|
|
4
|
+
* Additional classes for the inline code.
|
|
5
|
+
*/
|
|
6
|
+
className?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function Code({ className, ...props }: CodeProps & HTMLAttributes<HTMLElement>): import("react").JSX.Element;
|
|
9
|
+
export type CodeBlockProps = {
|
|
10
|
+
/**
|
|
11
|
+
* Additional classes for the block.
|
|
12
|
+
*/
|
|
13
|
+
className?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function CodeBlock({ className, ...props }: CodeBlockProps & HTMLAttributes<HTMLPreElement>): import("react").JSX.Element;
|
|
16
|
+
export type CodeHighlightedProps = {
|
|
17
|
+
/**
|
|
18
|
+
* Source text to highlight.
|
|
19
|
+
*/
|
|
20
|
+
code: string;
|
|
21
|
+
/**
|
|
22
|
+
* Additional classes for the block.
|
|
23
|
+
*/
|
|
24
|
+
className?: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function CodeHighlighted({ code, className, ...props }: CodeHighlightedProps & HTMLAttributes<HTMLPreElement>): import("react").JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../utils/cn.js";
|
|
3
|
+
import { controlSurfaceClass as t } from "../utils/control-surface.js";
|
|
4
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/code.tsx
|
|
6
|
+
var r = /(\/\/[^\n]*)|("[^"]*"|'[^']*'|`[^`]*`)|\b(import|from|export|default|async|await|function|return|const|let|var|type|interface|as|if|else|throw|new|typeof)\b|(\b\d+\b)|(<\/?[A-Za-z][\w.-]*)/g;
|
|
7
|
+
function i(e) {
|
|
8
|
+
let t = [], i = 0, a = 0;
|
|
9
|
+
for (let o of e.matchAll(r)) {
|
|
10
|
+
let r = o.index ?? 0;
|
|
11
|
+
r > i && t.push(e.slice(i, r));
|
|
12
|
+
let s = o[1] ? "text-basalt-muted-foreground" : o[2] ? "text-basalt-chart-5" : o[3] ? "text-basalt-primary" : o[4] ? "text-basalt-chart-4" : "text-basalt-primary";
|
|
13
|
+
t.push(/* @__PURE__ */ n("span", {
|
|
14
|
+
className: s,
|
|
15
|
+
children: o[0]
|
|
16
|
+
}, a)), a += 1, i = r + o[0].length;
|
|
17
|
+
}
|
|
18
|
+
return i < e.length && t.push(e.slice(i)), t;
|
|
19
|
+
}
|
|
20
|
+
function a({ className: t, ...r }) {
|
|
21
|
+
return /* @__PURE__ */ n("code", {
|
|
22
|
+
className: e("rounded-basalt-sm bg-basalt-secondary px-1.5 py-0.5 font-mono text-[13px] text-basalt-foreground", t),
|
|
23
|
+
...r
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function o({ className: r, ...i }) {
|
|
27
|
+
return /* @__PURE__ */ n("pre", {
|
|
28
|
+
className: t(e("overflow-x-auto p-4 font-mono text-basalt-foreground", r)),
|
|
29
|
+
...i
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function s({ code: r, className: a, ...o }) {
|
|
33
|
+
return /* @__PURE__ */ n("pre", {
|
|
34
|
+
className: t(e("overflow-x-auto p-4 text-basalt-foreground", a)),
|
|
35
|
+
...o,
|
|
36
|
+
children: /* @__PURE__ */ n("code", {
|
|
37
|
+
className: "font-mono leading-6",
|
|
38
|
+
children: i(r)
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { a as Code, o as CodeBlock, s as CodeHighlighted };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","names":[],"sources":["../../src/components/code.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { controlSurfaceClass } from \"../utils/control-surface\";\n\nconst TOKEN =\n\t/(\\/\\/[^\\n]*)|(\"[^\"]*\"|'[^']*'|`[^`]*`)|\\b(import|from|export|default|async|await|function|return|const|let|var|type|interface|as|if|else|throw|new|typeof)\\b|(\\b\\d+\\b)|(<\\/?[A-Za-z][\\w.-]*)/g;\n\nfunction highlight(code: string): ReactNode[] {\n\tconst nodes: ReactNode[] = [];\n\tlet last = 0;\n\tlet key = 0;\n\tfor (const match of code.matchAll(TOKEN)) {\n\t\tconst index = match.index ?? 0;\n\t\tif (index > last) {\n\t\t\tnodes.push(code.slice(last, index));\n\t\t}\n\t\tconst className = match[1]\n\t\t\t? \"text-basalt-muted-foreground\"\n\t\t\t: match[2]\n\t\t\t\t? \"text-basalt-chart-5\"\n\t\t\t\t: match[3]\n\t\t\t\t\t? \"text-basalt-primary\"\n\t\t\t\t\t: match[4]\n\t\t\t\t\t\t? \"text-basalt-chart-4\"\n\t\t\t\t\t\t: \"text-basalt-primary\";\n\t\tnodes.push(\n\t\t\t<span key={key} className={className}>\n\t\t\t\t{match[0]}\n\t\t\t</span>,\n\t\t);\n\t\tkey += 1;\n\t\tlast = index + match[0].length;\n\t}\n\tif (last < code.length) {\n\t\tnodes.push(code.slice(last));\n\t}\n\treturn nodes;\n}\n\nexport type CodeProps = {\n\t/**\n\t * Additional classes for the inline code.\n\t */\n\tclassName?: string;\n};\n\nexport function Code({ className, ...props }: CodeProps & HTMLAttributes<HTMLElement>) {\n\treturn (\n\t\t<code\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-basalt-sm bg-basalt-secondary px-1.5 py-0.5 font-mono text-[13px] text-basalt-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport type CodeBlockProps = {\n\t/**\n\t * Additional classes for the block.\n\t */\n\tclassName?: string;\n};\n\nexport function CodeBlock({\n\tclassName,\n\t...props\n}: CodeBlockProps & HTMLAttributes<HTMLPreElement>) {\n\treturn (\n\t\t<pre\n\t\t\tclassName={controlSurfaceClass(\n\t\t\t\tcn(\"overflow-x-auto p-4 font-mono text-basalt-foreground\", className),\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport type CodeHighlightedProps = {\n\t/**\n\t * Source text to highlight.\n\t */\n\tcode: string;\n\t/**\n\t * Additional classes for the block.\n\t */\n\tclassName?: string;\n};\n\nexport function CodeHighlighted({\n\tcode,\n\tclassName,\n\t...props\n}: CodeHighlightedProps & HTMLAttributes<HTMLPreElement>) {\n\treturn (\n\t\t<pre\n\t\t\tclassName={controlSurfaceClass(cn(\"overflow-x-auto p-4 text-basalt-foreground\", className))}\n\t\t\t{...props}\n\t\t>\n\t\t\t<code className=\"font-mono leading-6\">{highlight(code)}</code>\n\t\t</pre>\n\t);\n}\n"],"mappings":";;;;;AAIA,IAAM,IACL;AAED,SAAS,EAAU,GAA2B;CAC7C,IAAM,IAAqB,CAAC,GACxB,IAAO,GACP,IAAM;CACV,KAAK,IAAM,KAAS,EAAK,SAAS,CAAK,GAAG;EACzC,IAAM,IAAQ,EAAM,SAAS;EAC7B,AAAI,IAAQ,KACX,EAAM,KAAK,EAAK,MAAM,GAAM,CAAK,CAAC;EAEnC,IAAM,IAAY,EAAM,KACrB,iCACA,EAAM,KACL,wBACA,EAAM,KACL,wBACA,EAAM,KACL,wBACA;EAON,AANA,EAAM,KACL,kBAAC,QAAD;GAA2B;GACzB,UAAA,EAAM;EACF,GAFK,CAEL,CACP,GACA,KAAO,GACP,IAAO,IAAQ,EAAM,EAAE,CAAC;CACzB;CAIA,OAHI,IAAO,EAAK,UACf,EAAM,KAAK,EAAK,MAAM,CAAI,CAAC,GAErB;AACR;AASA,SAAgB,EAAK,EAAE,cAAW,GAAG,KAAkD;CACtF,OACC,kBAAC,QAAD;EACC,WAAW,EACV,oGACA,CACD;EACA,GAAI;CACJ,CAAA;AAEH;AASA,SAAgB,EAAU,EACzB,cACA,GAAG,KACgD;CACnD,OACC,kBAAC,OAAD;EACC,WAAW,EACV,EAAG,wDAAwD,CAAS,CACrE;EACA,GAAI;CACJ,CAAA;AAEH;AAaA,SAAgB,EAAgB,EAC/B,SACA,cACA,GAAG,KACsD;CACzD,OACC,kBAAC,OAAD;EACC,WAAW,EAAoB,EAAG,8CAA8C,CAAS,CAAC;EAC1F,GAAI;EAEJ,UAAA,kBAAC,QAAD;GAAM,WAAU;GAAuB,UAAA,EAAU,CAAI;EAAQ,CAAA;CACzD,CAAA;AAEP"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export type CollapsibleProps = Omit<React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>, "open" | "defaultOpen" | "onOpenChange"> & {
|
|
4
|
+
/**
|
|
5
|
+
* The controlled open state.
|
|
6
|
+
*/
|
|
7
|
+
open?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The uncontrolled initial open state.
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
defaultOpen?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Called when the open state changes.
|
|
15
|
+
*/
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
};
|
|
18
|
+
export declare const Collapsible: React.FC<CollapsibleProps>;
|
|
19
|
+
export declare const CollapsibleTrigger: React.ForwardRefExoticComponent<Omit<CollapsiblePrimitive.CollapsibleTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
export type CollapsibleContentProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.CollapsibleContent> & {
|
|
21
|
+
/**
|
|
22
|
+
* Render children without the default inset border.
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
unstyled?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export declare const CollapsibleContent: React.ForwardRefExoticComponent<Omit<CollapsiblePrimitive.CollapsibleContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
28
|
+
/**
|
|
29
|
+
* Render children without the default inset border.
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
unstyled?: boolean;
|
|
33
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../utils/cn.js";
|
|
3
|
+
import { FOCUS_INSET as t, OVERLAY_MOTION as n } from "./overlay.js";
|
|
4
|
+
import * as r from "react";
|
|
5
|
+
import { ChevronDown as i } from "lucide-react";
|
|
6
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
7
|
+
import * as s from "@radix-ui/react-collapsible";
|
|
8
|
+
//#region src/components/collapsible.tsx
|
|
9
|
+
var c = s.Root, l = r.forwardRef(({ className: r, children: c, asChild: l = !1, ...u }, d) => l ? /* @__PURE__ */ a(s.CollapsibleTrigger, {
|
|
10
|
+
ref: d,
|
|
11
|
+
asChild: !0,
|
|
12
|
+
className: r,
|
|
13
|
+
...u,
|
|
14
|
+
children: c
|
|
15
|
+
}) : /* @__PURE__ */ o(s.CollapsibleTrigger, {
|
|
16
|
+
ref: d,
|
|
17
|
+
className: e("m-0 inline-flex cursor-pointer items-center gap-1 border-none bg-transparent p-0 text-sm font-medium text-basalt-foreground shadow-none select-none", t, "[&_svg]:size-3 [&_svg]:shrink-0 [&_svg]:origin-center [&_svg]:transition-transform [&_svg]:duration-100 [&_svg]:ease-out", "data-[state=open]:[&_svg]:rotate-180", n, r),
|
|
18
|
+
...u,
|
|
19
|
+
children: [/* @__PURE__ */ a("span", { children: c }), /* @__PURE__ */ a(i, {
|
|
20
|
+
"aria-hidden": "true",
|
|
21
|
+
className: n
|
|
22
|
+
})]
|
|
23
|
+
}));
|
|
24
|
+
l.displayName = s.CollapsibleTrigger.displayName;
|
|
25
|
+
var u = r.forwardRef(({ className: t, children: r, unstyled: i = !1, ...o }, c) => /* @__PURE__ */ a(s.CollapsibleContent, {
|
|
26
|
+
ref: c,
|
|
27
|
+
className: e("overflow-hidden data-[state=closed]:animate-basalt-collapsible-up data-[state=open]:animate-basalt-collapsible-down", n, t),
|
|
28
|
+
...o,
|
|
29
|
+
children: i ? r : /* @__PURE__ */ a("div", {
|
|
30
|
+
className: "my-2 border-l-2 border-basalt-border py-1 pr-1 pl-4 text-sm text-basalt-foreground",
|
|
31
|
+
children: r
|
|
32
|
+
})
|
|
33
|
+
}));
|
|
34
|
+
u.displayName = s.CollapsibleContent.displayName;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { c as Collapsible, u as CollapsibleContent, l as CollapsibleTrigger };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=collapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.js","names":[],"sources":["../../src/components/collapsible.tsx"],"sourcesContent":["import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { ChevronDown } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { FOCUS_INSET, OVERLAY_MOTION } from \"./overlay\";\n\nexport type CollapsibleProps = Omit<\n\tReact.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>,\n\t\"open\" | \"defaultOpen\" | \"onOpenChange\"\n> & {\n\t/**\n\t * The controlled open state.\n\t */\n\topen?: boolean;\n\t/**\n\t * The uncontrolled initial open state.\n\t * @default false\n\t */\n\tdefaultOpen?: boolean;\n\t/**\n\t * Called when the open state changes.\n\t */\n\tonOpenChange?: (open: boolean) => void;\n};\nexport const Collapsible: React.FC<CollapsibleProps> = CollapsiblePrimitive.Root;\n\nexport const CollapsibleTrigger = React.forwardRef<\n\tReact.ElementRef<typeof CollapsiblePrimitive.CollapsibleTrigger>,\n\tReact.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.CollapsibleTrigger>\n>(({ className, children, asChild = false, ...props }, ref) => {\n\tif (asChild) {\n\t\treturn (\n\t\t\t<CollapsiblePrimitive.CollapsibleTrigger ref={ref} asChild className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</CollapsiblePrimitive.CollapsibleTrigger>\n\t\t);\n\t}\n\treturn (\n\t\t<CollapsiblePrimitive.CollapsibleTrigger\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"m-0 inline-flex cursor-pointer items-center gap-1 border-none bg-transparent p-0 text-sm font-medium text-basalt-foreground shadow-none select-none\",\n\t\t\t\tFOCUS_INSET,\n\t\t\t\t\"[&_svg]:size-3 [&_svg]:shrink-0 [&_svg]:origin-center [&_svg]:transition-transform [&_svg]:duration-100 [&_svg]:ease-out\",\n\t\t\t\t\"data-[state=open]:[&_svg]:rotate-180\",\n\t\t\t\tOVERLAY_MOTION,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span>{children}</span>\n\t\t\t<ChevronDown aria-hidden=\"true\" className={OVERLAY_MOTION} />\n\t\t</CollapsiblePrimitive.CollapsibleTrigger>\n\t);\n});\nCollapsibleTrigger.displayName = CollapsiblePrimitive.CollapsibleTrigger.displayName;\n\nexport type CollapsibleContentProps = React.ComponentPropsWithoutRef<\n\ttypeof CollapsiblePrimitive.CollapsibleContent\n> & {\n\t/**\n\t * Render children without the default inset border.\n\t * @default false\n\t */\n\tunstyled?: boolean;\n};\n\nexport const CollapsibleContent = React.forwardRef<\n\tReact.ElementRef<typeof CollapsiblePrimitive.CollapsibleContent>,\n\tCollapsibleContentProps\n>(({ className, children, unstyled = false, ...props }, ref) => (\n\t<CollapsiblePrimitive.CollapsibleContent\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"overflow-hidden data-[state=closed]:animate-basalt-collapsible-up data-[state=open]:animate-basalt-collapsible-down\",\n\t\t\tOVERLAY_MOTION,\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{unstyled ? (\n\t\t\tchildren\n\t\t) : (\n\t\t\t<div className=\"my-2 border-l-2 border-basalt-border py-1 pr-1 pl-4 text-sm text-basalt-foreground\">\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t)}\n\t</CollapsiblePrimitive.CollapsibleContent>\n));\nCollapsibleContent.displayName = CollapsiblePrimitive.CollapsibleContent.displayName;\n"],"mappings":";;;;;;;;AAwBA,IAAa,IAA0C,EAAqB,MAE/D,IAAqB,EAAM,YAGrC,EAAE,cAAW,aAAU,aAAU,IAAO,GAAG,KAAS,MAClD,IAEF,kBAAC,EAAqB,oBAAtB;CAA8C;CAAK,SAAA;CAAmB;CAAW,GAAI;CACnF;AACuC,CAAA,IAI1C,kBAAC,EAAqB,oBAAtB;CACM;CACL,WAAW,EACV,uJACA,GACA,4HACA,wCACA,GACA,CACD;CACA,GAAI;CAVL,UAAA,CAYC,kBAAC,QAAD,EAAO,YAAe,CAAA,GACtB,kBAAC,GAAD;EAAa,eAAY;EAAO,WAAW;CAAiB,CAAA,CACpB;EAE1C;AACD,EAAmB,cAAc,EAAqB,mBAAmB;AAYzE,IAAa,IAAqB,EAAM,YAGrC,EAAE,cAAW,aAAU,cAAW,IAAO,GAAG,KAAS,MACvD,kBAAC,EAAqB,oBAAtB;CACM;CACL,WAAW,EACV,uHACA,GACA,CACD;CACA,GAAI;CAEH,UAAA,IACA,IAEA,kBAAC,OAAD;EAAK,WAAU;EACb;CACG,CAAA;AAEkC,CAAA,CACzC;AACD,EAAmB,cAAc,EAAqB,mBAAmB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ComponentPropsWithoutRef } from "react";
|
|
2
|
+
import type { InputSize } from "./input.js";
|
|
3
|
+
import { type TypeaheadItem } from "./typeahead-field.js";
|
|
4
|
+
export type ComboboxItem = TypeaheadItem;
|
|
5
|
+
export type ComboboxProps = Omit<ComponentPropsWithoutRef<"div">, "children" | "defaultValue" | "onChange"> & {
|
|
6
|
+
/**
|
|
7
|
+
* Options shown in the list. Selection must match one of these values.
|
|
8
|
+
*/
|
|
9
|
+
items: ComboboxItem[];
|
|
10
|
+
/**
|
|
11
|
+
* The controlled selected value.
|
|
12
|
+
*/
|
|
13
|
+
value?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The uncontrolled initial value.
|
|
16
|
+
*/
|
|
17
|
+
defaultValue?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Called when the selected value changes.
|
|
20
|
+
*/
|
|
21
|
+
onValueChange?: (value: string) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Native form field name.
|
|
24
|
+
*/
|
|
25
|
+
name?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Placeholder shown when the field is empty.
|
|
28
|
+
* @default Select…
|
|
29
|
+
*/
|
|
30
|
+
placeholder?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Disable the field.
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Disable the field and mark it busy.
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
loading?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The visual size of the field.
|
|
43
|
+
* @default default
|
|
44
|
+
*/
|
|
45
|
+
size?: InputSize;
|
|
46
|
+
};
|
|
47
|
+
export declare function Combobox({ items, value, defaultValue, onValueChange, name, placeholder, disabled, loading, size, className, id, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, ...rest }: ComboboxProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { TypeaheadField as e } from "./typeahead-field.js";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/combobox.tsx
|
|
5
|
+
function n({ items: n, value: r, defaultValue: i, onValueChange: a, name: o, placeholder: s = "Select…", disabled: c, loading: l, size: u, className: d, id: f, "aria-label": p, "aria-describedby": m, "aria-invalid": h, ...g }) {
|
|
6
|
+
return /* @__PURE__ */ t(e, {
|
|
7
|
+
items: n,
|
|
8
|
+
value: r,
|
|
9
|
+
defaultValue: i,
|
|
10
|
+
onValueChange: a,
|
|
11
|
+
name: o,
|
|
12
|
+
placeholder: s,
|
|
13
|
+
disabled: c,
|
|
14
|
+
loading: l,
|
|
15
|
+
size: u,
|
|
16
|
+
className: d,
|
|
17
|
+
id: f,
|
|
18
|
+
allowFreeform: !1,
|
|
19
|
+
"aria-label": p,
|
|
20
|
+
"aria-describedby": m,
|
|
21
|
+
"aria-invalid": h,
|
|
22
|
+
...g
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { n as Combobox };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","names":[],"sources":["../../src/components/combobox.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\";\nimport type { InputSize } from \"./input\";\nimport { TypeaheadField, type TypeaheadItem } from \"./typeahead-field\";\n\nexport type ComboboxItem = TypeaheadItem;\n\nexport type ComboboxProps = Omit<\n\tComponentPropsWithoutRef<\"div\">,\n\t\"children\" | \"defaultValue\" | \"onChange\"\n> & {\n\t/**\n\t * Options shown in the list. Selection must match one of these values.\n\t */\n\titems: ComboboxItem[];\n\t/**\n\t * The controlled selected value.\n\t */\n\tvalue?: string;\n\t/**\n\t * The uncontrolled initial value.\n\t */\n\tdefaultValue?: string;\n\t/**\n\t * Called when the selected value changes.\n\t */\n\tonValueChange?: (value: string) => void;\n\t/**\n\t * Native form field name.\n\t */\n\tname?: string;\n\t/**\n\t * Placeholder shown when the field is empty.\n\t * @default Select…\n\t */\n\tplaceholder?: string;\n\t/**\n\t * Disable the field.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * Disable the field and mark it busy.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * The visual size of the field.\n\t * @default default\n\t */\n\tsize?: InputSize;\n};\n\nexport function Combobox({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tname,\n\tplaceholder = \"Select…\",\n\tdisabled,\n\tloading,\n\tsize,\n\tclassName,\n\tid,\n\t\"aria-label\": ariaLabel,\n\t\"aria-describedby\": ariaDescribedBy,\n\t\"aria-invalid\": ariaInvalid,\n\t...rest\n}: ComboboxProps) {\n\treturn (\n\t\t<TypeaheadField\n\t\t\titems={items}\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tonValueChange={onValueChange}\n\t\t\tname={name}\n\t\t\tplaceholder={placeholder}\n\t\t\tdisabled={disabled}\n\t\t\tloading={loading}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\tid={id}\n\t\t\tallowFreeform={false}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-describedby={ariaDescribedBy}\n\t\t\taria-invalid={ariaInvalid}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;AAoDA,SAAgB,EAAS,EACxB,UACA,UACA,iBACA,kBACA,SACA,iBAAc,WACd,aACA,YACA,SACA,cACA,OACA,cAAc,GACd,oBAAoB,GACpB,gBAAgB,GAChB,GAAG,KACc;CACjB,OACC,kBAAC,GAAD;EACQ;EACA;EACO;EACC;EACT;EACO;EACH;EACD;EACH;EACK;EACP;EACJ,eAAe;EACf,cAAY;EACZ,oBAAkB;EAClB,gBAAc;EACd,GAAI;CACJ,CAAA;AAEH"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { DialogProps } from "@radix-ui/react-dialog";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export type CommandPaletteProps = Omit<DialogProps, "open" | "defaultOpen" | "onOpenChange"> & {
|
|
4
|
+
/**
|
|
5
|
+
* The controlled open state.
|
|
6
|
+
*/
|
|
7
|
+
open?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The uncontrolled initial open state.
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
defaultOpen?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Called when the open state changes.
|
|
15
|
+
*/
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Filter items as the query changes.
|
|
19
|
+
* @default true
|
|
20
|
+
*/
|
|
21
|
+
shouldFilter?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare const CommandPaletteTrigger: React.ForwardRefExoticComponent<import("@radix-ui/react-dialog").DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
24
|
+
export declare function CommandPalette({ children, shouldFilter, ...props }: CommandPaletteProps): React.JSX.Element;
|
|
25
|
+
export declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "key" | keyof React.InputHTMLAttributes<HTMLInputElement>> & {
|
|
26
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
27
|
+
} & {
|
|
28
|
+
asChild?: boolean;
|
|
29
|
+
}, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
|
|
30
|
+
value?: string;
|
|
31
|
+
onValueChange?: (search: string) => void;
|
|
32
|
+
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
33
|
+
export declare const CommandList: React.ForwardRefExoticComponent<Omit<{
|
|
34
|
+
children?: React.ReactNode;
|
|
35
|
+
} & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
36
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
37
|
+
} & {
|
|
38
|
+
asChild?: boolean;
|
|
39
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
40
|
+
label?: string;
|
|
41
|
+
} & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
42
|
+
export declare const CommandEmpty: React.ForwardRefExoticComponent<Omit<{
|
|
43
|
+
children?: React.ReactNode;
|
|
44
|
+
} & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
45
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
46
|
+
} & {
|
|
47
|
+
asChild?: boolean;
|
|
48
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
49
|
+
export declare const CommandGroup: React.ForwardRefExoticComponent<Omit<{
|
|
50
|
+
children?: React.ReactNode;
|
|
51
|
+
} & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
52
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
53
|
+
} & {
|
|
54
|
+
asChild?: boolean;
|
|
55
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "heading" | "value"> & {
|
|
56
|
+
heading?: React.ReactNode;
|
|
57
|
+
value?: string;
|
|
58
|
+
forceMount?: boolean;
|
|
59
|
+
} & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
60
|
+
export declare const CommandSeparator: React.ForwardRefExoticComponent<Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
61
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
62
|
+
} & {
|
|
63
|
+
asChild?: boolean;
|
|
64
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
65
|
+
alwaysRender?: boolean;
|
|
66
|
+
} & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
67
|
+
export declare const CommandItem: React.ForwardRefExoticComponent<Omit<{
|
|
68
|
+
children?: React.ReactNode;
|
|
69
|
+
} & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
|
|
70
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
71
|
+
} & {
|
|
72
|
+
asChild?: boolean;
|
|
73
|
+
}, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "disabled" | "onSelect" | "value"> & {
|
|
74
|
+
disabled?: boolean;
|
|
75
|
+
onSelect?: (value: string) => void;
|
|
76
|
+
value?: string;
|
|
77
|
+
keywords?: string[];
|
|
78
|
+
forceMount?: boolean;
|
|
79
|
+
} & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
80
|
+
export declare function CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
|
|
81
|
+
export declare namespace CommandShortcut {
|
|
82
|
+
var displayName: string;
|
|
83
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn as e } from "../utils/cn.js";
|
|
3
|
+
import { Dialog as t, DialogContent as n, DialogTitle as r, DialogTrigger as i } from "./dialog.js";
|
|
4
|
+
import * as a from "react";
|
|
5
|
+
import { Search as o } from "lucide-react";
|
|
6
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
7
|
+
import { Command as l } from "cmdk";
|
|
8
|
+
//#region src/components/command-palette.tsx
|
|
9
|
+
var u = a.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ s(l, {
|
|
10
|
+
ref: r,
|
|
11
|
+
className: e("flex h-full w-full flex-col overflow-hidden rounded-basalt-md bg-basalt-popover text-basalt-popover-foreground", t),
|
|
12
|
+
...n
|
|
13
|
+
}));
|
|
14
|
+
u.displayName = l.displayName;
|
|
15
|
+
var d = i;
|
|
16
|
+
function f({ children: e, shouldFilter: i, ...o }) {
|
|
17
|
+
let l = a.Children.toArray(e), f = l.filter((e) => a.isValidElement(e) && e.type === d), p = l.filter((e) => !(a.isValidElement(e) && e.type === d));
|
|
18
|
+
return /* @__PURE__ */ c(t, {
|
|
19
|
+
...o,
|
|
20
|
+
children: [f, /* @__PURE__ */ c(n, {
|
|
21
|
+
size: "lg",
|
|
22
|
+
"aria-describedby": void 0,
|
|
23
|
+
className: "overflow-hidden bg-basalt-popover p-0 shadow-lg",
|
|
24
|
+
children: [/* @__PURE__ */ s(r, {
|
|
25
|
+
className: "sr-only",
|
|
26
|
+
children: "Command Palette"
|
|
27
|
+
}), /* @__PURE__ */ s(u, {
|
|
28
|
+
label: "Command Palette",
|
|
29
|
+
...i !== void 0 && { shouldFilter: i },
|
|
30
|
+
className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-basalt-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",
|
|
31
|
+
children: p
|
|
32
|
+
})]
|
|
33
|
+
})]
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
var p = a.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ c("div", {
|
|
37
|
+
className: "flex items-center border-b border-basalt-border px-3",
|
|
38
|
+
"cmdk-input-wrapper": "",
|
|
39
|
+
children: [/* @__PURE__ */ s(o, {
|
|
40
|
+
className: "mr-2 size-4 shrink-0 opacity-50",
|
|
41
|
+
"aria-hidden": "true"
|
|
42
|
+
}), /* @__PURE__ */ s(l.Input, {
|
|
43
|
+
ref: r,
|
|
44
|
+
className: e("flex h-11 w-full rounded-basalt-md bg-transparent py-3 text-sm outline-hidden ring-0 shadow-none placeholder:text-basalt-muted-foreground disabled:cursor-not-allowed disabled:opacity-50", t),
|
|
45
|
+
...n,
|
|
46
|
+
"aria-label": n["aria-label"] ?? (typeof n.placeholder == "string" ? n.placeholder : "Command Palette")
|
|
47
|
+
})]
|
|
48
|
+
}));
|
|
49
|
+
p.displayName = l.Input.displayName;
|
|
50
|
+
var m = a.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ s(l.List, {
|
|
51
|
+
ref: r,
|
|
52
|
+
className: e("max-h-[300px] overflow-y-auto overflow-x-hidden", t),
|
|
53
|
+
...n
|
|
54
|
+
}));
|
|
55
|
+
m.displayName = l.List.displayName;
|
|
56
|
+
var h = a.forwardRef((e, t) => /* @__PURE__ */ s(l.Empty, {
|
|
57
|
+
ref: t,
|
|
58
|
+
className: "py-6 text-center text-sm text-basalt-muted-foreground",
|
|
59
|
+
...e
|
|
60
|
+
}));
|
|
61
|
+
h.displayName = l.Empty.displayName;
|
|
62
|
+
var g = a.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ s(l.Group, {
|
|
63
|
+
ref: r,
|
|
64
|
+
className: e("overflow-hidden p-1 text-basalt-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-basalt-muted-foreground", t),
|
|
65
|
+
...n
|
|
66
|
+
}));
|
|
67
|
+
g.displayName = l.Group.displayName;
|
|
68
|
+
var _ = a.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ s(l.Separator, {
|
|
69
|
+
ref: r,
|
|
70
|
+
className: e("-mx-1 h-px bg-basalt-border", t),
|
|
71
|
+
...n
|
|
72
|
+
}));
|
|
73
|
+
_.displayName = l.Separator.displayName;
|
|
74
|
+
var v = a.forwardRef(({ className: t, ...n }, r) => /* @__PURE__ */ s(l.Item, {
|
|
75
|
+
ref: r,
|
|
76
|
+
className: e("relative flex cursor-default items-center rounded-basalt-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-basalt-accent data-[selected=true]:text-basalt-accent-foreground data-[disabled=true]:opacity-50", t),
|
|
77
|
+
...n
|
|
78
|
+
}));
|
|
79
|
+
v.displayName = l.Item.displayName;
|
|
80
|
+
function y({ className: t, ...n }) {
|
|
81
|
+
return /* @__PURE__ */ s("span", {
|
|
82
|
+
className: e("ml-auto text-xs tracking-widest text-basalt-muted-foreground", t),
|
|
83
|
+
...n
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
y.displayName = "CommandShortcut";
|
|
87
|
+
//#endregion
|
|
88
|
+
export { h as CommandEmpty, g as CommandGroup, p as CommandInput, v as CommandItem, m as CommandList, f as CommandPalette, d as CommandPaletteTrigger, _ as CommandSeparator, y as CommandShortcut };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=command-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.js","names":[],"sources":["../../src/components/command-palette.tsx"],"sourcesContent":["import type { DialogProps } from \"@radix-ui/react-dialog\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { Search } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Dialog, DialogContent, DialogTitle, DialogTrigger } from \"./dialog\";\n\nconst Command = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n\t<CommandPrimitive\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"flex h-full w-full flex-col overflow-hidden rounded-basalt-md bg-basalt-popover text-basalt-popover-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n));\nCommand.displayName = CommandPrimitive.displayName;\n\nexport type CommandPaletteProps = Omit<DialogProps, \"open\" | \"defaultOpen\" | \"onOpenChange\"> & {\n\t/**\n\t * The controlled open state.\n\t */\n\topen?: boolean;\n\t/**\n\t * The uncontrolled initial open state.\n\t * @default false\n\t */\n\tdefaultOpen?: boolean;\n\t/**\n\t * Called when the open state changes.\n\t */\n\tonOpenChange?: (open: boolean) => void;\n\t/**\n\t * Filter items as the query changes.\n\t * @default true\n\t */\n\tshouldFilter?: boolean;\n};\n\nexport const CommandPaletteTrigger = DialogTrigger;\n\nexport function CommandPalette({ children, shouldFilter, ...props }: CommandPaletteProps) {\n\tconst kids = React.Children.toArray(children);\n\tconst triggers = kids.filter(\n\t\t(child) => React.isValidElement(child) && child.type === CommandPaletteTrigger,\n\t);\n\tconst content = kids.filter(\n\t\t(child) => !(React.isValidElement(child) && child.type === CommandPaletteTrigger),\n\t);\n\treturn (\n\t\t<Dialog {...props}>\n\t\t\t{triggers}\n\t\t\t<DialogContent\n\t\t\t\tsize=\"lg\"\n\t\t\t\taria-describedby={undefined}\n\t\t\t\tclassName=\"overflow-hidden bg-basalt-popover p-0 shadow-lg\"\n\t\t\t>\n\t\t\t\t<DialogTitle className=\"sr-only\">Command Palette</DialogTitle>\n\t\t\t\t<Command\n\t\t\t\t\tlabel=\"Command Palette\"\n\t\t\t\t\t{...(shouldFilter !== undefined && { shouldFilter })}\n\t\t\t\t\tclassName=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-basalt-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\"\n\t\t\t\t>\n\t\t\t\t\t{content}\n\t\t\t\t</Command>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n}\n\nexport const CommandInput = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive.Input>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n\t<div className=\"flex items-center border-b border-basalt-border px-3\" cmdk-input-wrapper=\"\">\n\t\t<Search className=\"mr-2 size-4 shrink-0 opacity-50\" aria-hidden=\"true\" />\n\t\t<CommandPrimitive.Input\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex h-11 w-full rounded-basalt-md bg-transparent py-3 text-sm outline-hidden ring-0 shadow-none placeholder:text-basalt-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t\taria-label={\n\t\t\t\tprops[\"aria-label\"] ??\n\t\t\t\t(typeof props.placeholder === \"string\" ? props.placeholder : \"Command Palette\")\n\t\t\t}\n\t\t/>\n\t</div>\n));\nCommandInput.displayName = CommandPrimitive.Input.displayName;\n\nexport const CommandList = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive.List>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n\t<CommandPrimitive.List\n\t\tref={ref}\n\t\tclassName={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n\t\t{...props}\n\t/>\n));\nCommandList.displayName = CommandPrimitive.List.displayName;\n\nexport const CommandEmpty = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive.Empty>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n\t<CommandPrimitive.Empty\n\t\tref={ref}\n\t\tclassName=\"py-6 text-center text-sm text-basalt-muted-foreground\"\n\t\t{...props}\n\t/>\n));\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName;\n\nexport const CommandGroup = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive.Group>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n\t<CommandPrimitive.Group\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"overflow-hidden p-1 text-basalt-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-basalt-muted-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n));\nCommandGroup.displayName = CommandPrimitive.Group.displayName;\n\nexport const CommandSeparator = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive.Separator>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n\t<CommandPrimitive.Separator\n\t\tref={ref}\n\t\tclassName={cn(\"-mx-1 h-px bg-basalt-border\", className)}\n\t\t{...props}\n\t/>\n));\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName;\n\nexport const CommandItem = React.forwardRef<\n\tReact.ElementRef<typeof CommandPrimitive.Item>,\n\tReact.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n\t<CommandPrimitive.Item\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"relative flex cursor-default items-center rounded-basalt-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-basalt-accent data-[selected=true]:text-basalt-accent-foreground data-[disabled=true]:opacity-50\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n));\nCommandItem.displayName = CommandPrimitive.Item.displayName;\n\nexport function CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\"ml-auto text-xs tracking-widest text-basalt-muted-foreground\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\nCommandShortcut.displayName = \"CommandShortcut\";\n"],"mappings":";;;;;;;;AAOA,IAAM,IAAU,EAAM,YAGnB,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,GAAD;CACM;CACL,WAAW,EACV,kHACA,CACD;CACA,GAAI;AACJ,CAAA,CACD;AACD,EAAQ,cAAc,EAAiB;AAuBvC,IAAa,IAAwB;AAErC,SAAgB,EAAe,EAAE,aAAU,iBAAc,GAAG,KAA8B;CACzF,IAAM,IAAO,EAAM,SAAS,QAAQ,CAAQ,GACtC,IAAW,EAAK,QACpB,MAAU,EAAM,eAAe,CAAK,KAAK,EAAM,SAAS,CAC1D,GACM,IAAU,EAAK,QACnB,MAAU,EAAE,EAAM,eAAe,CAAK,KAAK,EAAM,SAAS,EAC5D;CACA,OACC,kBAAC,GAAD;EAAQ,GAAI;EAAZ,UAAA,CACE,GACD,kBAAC,GAAD;GACC,MAAK;GACL,oBAAkB,KAAA;GAClB,WAAU;GAHX,UAAA,CAKC,kBAAC,GAAD;IAAa,WAAU;IAAU,UAAA;GAA4B,CAAA,GAC7D,kBAAC,GAAD;IACC,OAAM;IACN,GAAK,MAAiB,KAAA,KAAa,EAAE,gBAAa;IAClD,WAAU;IAET,UAAA;GACO,CAAA,CACK;EACR,CAAA,CAAA;;AAEV;AAEA,IAAa,IAAe,EAAM,YAG/B,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,OAAD;CAAK,WAAU;CAAuD,sBAAmB;CAAzF,UAAA,CACC,kBAAC,GAAD;EAAQ,WAAU;EAAkC,eAAY;CAAQ,CAAA,GACxE,kBAAC,EAAiB,OAAlB;EACM;EACL,WAAW,EACV,6LACA,CACD;EACA,GAAI;EACJ,cACC,EAAM,kBACL,OAAO,EAAM,eAAgB,WAAW,EAAM,cAAc;CAE9D,CAAA,CACG;AACL,CAAA,CAAA;AACD,EAAa,cAAc,EAAiB,MAAM;AAElD,IAAa,IAAc,EAAM,YAG9B,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,EAAiB,MAAlB;CACM;CACL,WAAW,EAAG,mDAAmD,CAAS;CAC1E,GAAI;AACJ,CAAA,CACD;AACD,EAAY,cAAc,EAAiB,KAAK;AAEhD,IAAa,IAAe,EAAM,YAG/B,GAAO,MACT,kBAAC,EAAiB,OAAlB;CACM;CACL,WAAU;CACV,GAAI;AACJ,CAAA,CACD;AACD,EAAa,cAAc,EAAiB,MAAM;AAElD,IAAa,IAAe,EAAM,YAG/B,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,EAAiB,OAAlB;CACM;CACL,WAAW,EACV,wOACA,CACD;CACA,GAAI;AACJ,CAAA,CACD;AACD,EAAa,cAAc,EAAiB,MAAM;AAElD,IAAa,IAAmB,EAAM,YAGnC,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,EAAiB,WAAlB;CACM;CACL,WAAW,EAAG,+BAA+B,CAAS;CACtD,GAAI;AACJ,CAAA,CACD;AACD,EAAiB,cAAc,EAAiB,UAAU;AAE1D,IAAa,IAAc,EAAM,YAG9B,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,EAAiB,MAAlB;CACM;CACL,WAAW,EACV,gRACA,CACD;CACA,GAAI;AACJ,CAAA,CACD;AACD,EAAY,cAAc,EAAiB,KAAK;AAEhD,SAAgB,EAAgB,EAAE,cAAW,GAAG,KAAgD;CAC/F,OACC,kBAAC,QAAD;EACC,WAAW,EAAG,gEAAgE,CAAS;EACvF,GAAI;CACJ,CAAA;AAEH;AACA,EAAgB,cAAc"}
|