@nocoo/basalt 3.2.1 → 3.2.4
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/README.md +25 -19
- package/ai/COMPATIBILITY.md +41 -36
- package/ai/DESIGN.md +53 -47
- package/ai/INTEGRATION.md +814 -820
- package/ai/RECIPES.md +334 -135
- package/ai/USAGE.md +2 -2
- package/ai/registry.json +384 -27
- package/ai/sources.json +2 -2
- package/dist/assets/brand-mark.js +1 -2
- package/dist/charts/area.js +1 -2
- package/dist/charts/bar.js +1 -2
- package/dist/charts/bullet.js +1 -2
- package/dist/charts/chart-colors.js +1 -2
- package/dist/charts/charts.js +1 -2
- package/dist/charts/config.js +1 -2
- package/dist/charts/custom-chart.js +1 -2
- package/dist/charts/date-navigation.js +1 -2
- package/dist/charts/donut.js +1 -2
- package/dist/charts/frame.js +1 -2
- package/dist/charts/frame.js.map +1 -1
- package/dist/charts/funnel.js +1 -2
- package/dist/charts/gauge.js +1 -2
- package/dist/charts/grouped-bar.js +1 -2
- package/dist/charts/heatmap-calendar.js +3 -7
- package/dist/charts/heatmap-calendar.js.map +1 -1
- package/dist/charts/heatmap-matrix.js +1 -2
- package/dist/charts/item-list.js +1 -2
- package/dist/charts/legend.js +1 -2
- package/dist/charts/line.js +1 -2
- package/dist/charts/palette.js +1 -2
- package/dist/charts/radar.js +1 -2
- package/dist/charts/sample.js +1 -2
- package/dist/charts/sankey.js +1 -2
- package/dist/charts/series.js +1 -2
- package/dist/charts/slot-bar.js +1 -2
- package/dist/charts/sparkline.js +1 -2
- package/dist/charts/stacked-bar.js +1 -2
- package/dist/charts/stat-card.js +1 -2
- package/dist/charts/timeline.js +1 -2
- package/dist/charts/timeseries.js +1 -2
- package/dist/charts/tooltip.js +31 -27
- package/dist/charts/tooltip.js.map +1 -1
- package/dist/components/accordion.js +1 -2
- package/dist/components/alert-dialog.js +1 -2
- package/dist/components/app-header.js +1 -2
- package/dist/components/app-shell.js +1 -2
- package/dist/components/approval-card.js +1 -2
- package/dist/components/autocomplete.js +1 -2
- package/dist/components/avatar.js +1 -2
- package/dist/components/badge.js +1 -2
- package/dist/components/banner.js +1 -2
- package/dist/components/basalt-mark.js +1 -2
- package/dist/components/battery-meter.js +1 -2
- package/dist/components/breadcrumbs.js +1 -2
- package/dist/components/button.d.ts +1 -1
- package/dist/components/button.js +3 -3
- package/dist/components/button.js.map +1 -1
- package/dist/components/chat-bubble.js +1 -2
- package/dist/components/chat-composer.js +1 -2
- package/dist/components/chat-header.js +1 -2
- package/dist/components/chat-inbox.js +1 -2
- package/dist/components/chat-markdown.js +1 -2
- package/dist/components/chat-message.js +1 -2
- package/dist/components/checkbox.js +1 -2
- package/dist/components/clipboard-text.js +1 -2
- package/dist/components/code.js +1 -2
- package/dist/components/collapsible.js +1 -2
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/combobox.js +1 -2
- package/dist/components/command-palette.js +1 -2
- package/dist/components/confirm-dialog.js +3 -12
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/context-cards.js +1 -2
- package/dist/components/context-menu.js +1 -2
- package/dist/components/data-table.js +2 -7
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +7 -18
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/delete-resource.js +1 -2
- package/dist/components/description-list.js +1 -2
- package/dist/components/dialog.js +1 -2
- package/dist/components/diff-table.js +1 -2
- package/dist/components/dock.js +1 -2
- package/dist/components/dock.js.map +1 -1
- package/dist/components/dropdown-menu.js +1 -2
- package/dist/components/editable-nav-item.js +1 -2
- package/dist/components/empty.js +1 -2
- package/dist/components/fab.js +1 -2
- package/dist/components/field.js +1 -2
- package/dist/components/file-dropzone.js +1 -2
- package/dist/components/filter-bar.js +1 -2
- package/dist/components/flow.js +1 -2
- package/dist/components/grid.js +1 -2
- package/dist/components/hover-card.js +1 -2
- package/dist/components/icon-picker.js +1 -2
- package/dist/components/inline-editable.js +1 -2
- package/dist/components/input-area.js +1 -2
- package/dist/components/input-group.js +2 -3
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.js +1 -2
- package/dist/components/label.js +1 -2
- package/dist/components/layer-card.js +1 -2
- package/dist/components/link.js +1 -2
- package/dist/components/loader.js +1 -2
- package/dist/components/loading-screen.js +1 -2
- package/dist/components/menu-bar.js +1 -2
- package/dist/components/meter.js +1 -2
- package/dist/components/multi-select.js +1 -2
- package/dist/components/navigation-menu.js +1 -2
- package/dist/components/overlay.js +1 -2
- package/dist/components/page-header.js +1 -2
- package/dist/components/pagination.js +1 -2
- package/dist/components/popover.js +1 -2
- package/dist/components/prompt-bar.js +1 -2
- package/dist/components/radio.js +2 -7
- package/dist/components/radio.js.map +1 -1
- package/dist/components/recommendation-card.js +1 -2
- package/dist/components/resource-list.js +1 -2
- package/dist/components/responsive-master-detail.js +1 -2
- package/dist/components/scroll-area.js +1 -2
- package/dist/components/section-rule.js +1 -2
- package/dist/components/segment-control.js +1 -2
- package/dist/components/select.js +1 -2
- package/dist/components/sensitive-input.js +1 -2
- package/dist/components/separator.js +1 -2
- package/dist/components/sheet.js +1 -2
- package/dist/components/sidebar.d.ts +53 -19
- package/dist/components/sidebar.js +201 -100
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton-line.js +1 -2
- package/dist/components/slider.js +1 -2
- package/dist/components/stat-strip.js +1 -2
- package/dist/components/switch.js +1 -2
- package/dist/components/table-of-contents.js +1 -2
- package/dist/components/table-pager.js +1 -2
- package/dist/components/table.js +1 -2
- package/dist/components/tabs.js +1 -2
- package/dist/components/tag-badge.js +1 -2
- package/dist/components/tag-color-picker.js +1 -2
- package/dist/components/text.js +1 -2
- package/dist/components/theme-toggle.js +1 -2
- package/dist/components/thinking.js +1 -2
- package/dist/components/toast.js +1 -2
- package/dist/components/toggle-group.js +1 -2
- package/dist/components/toggle.js +1 -2
- package/dist/components/tool-chips.js +1 -2
- package/dist/components/toolbar.js +1 -2
- package/dist/components/tooltip.js +1 -2
- package/dist/components/typeahead-field.js +6 -21
- package/dist/components/typeahead-field.js.map +1 -1
- package/dist/components/upload-queue.js +1 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +11 -11
- package/dist/models/agent-feedback.js +1 -2
- package/dist/models/avatar.js +1 -2
- package/dist/models/code.js +1 -2
- package/dist/models/context-cards.js +1 -2
- package/dist/models/diff-table.js +1 -2
- package/dist/models/recommendation.js +1 -2
- package/dist/providers/accent.js +2 -7
- package/dist/providers/accent.js.map +1 -1
- package/dist/providers/link.js +1 -2
- package/dist/providers/theme.js +2 -7
- package/dist/providers/theme.js.map +1 -1
- package/dist/styles/standalone.css +55 -11
- package/dist/styles/tailwind.css +2 -0
- package/dist/styles/tokens.css +51 -6
- package/dist/utils/cn.js +1 -2
- package/dist/utils/control-surface.js +1 -2
- package/dist/utils/navigation.d.ts +1 -1
- package/dist/utils/navigation.js +2 -3
- package/dist/utils/navigation.js.map +1 -1
- package/dist/utils/preference-store.js +1 -2
- package/dist/utils/selection-indicator.js +1 -2
- package/dist/utils/use-checkable-group.js +1 -2
- package/dist/utils/use-hover-highlight.js +2 -3
- package/dist/utils/use-hover-highlight.js.map +1 -1
- package/dist/viewmodels/use-approval-card.js +11 -13
- package/dist/viewmodels/use-approval-card.js.map +1 -1
- package/dist/viewmodels/use-chat-composer.js +1 -2
- package/dist/viewmodels/use-chat-message.js +1 -2
- package/dist/viewmodels/use-code-block.js +1 -2
- package/dist/viewmodels/use-code-block.js.map +1 -1
- package/dist/viewmodels/use-context-cards.js +1 -2
- package/dist/viewmodels/use-diff-table.js +1 -2
- package/dist/viewmodels/use-diff-table.js.map +1 -1
- package/dist/viewmodels/use-loader.js +1 -2
- package/dist/viewmodels/use-recommendation-card.js +1 -2
- package/dist/viewmodels/use-recommendation-card.js.map +1 -1
- package/dist/viewmodels/use-thinking.js +1 -2
- package/dist/viewmodels/use-tool-chips.js +1 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn as e } from "../utils/cn.js";
|
|
3
3
|
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
-
|
|
4
|
+
// src/components/skeleton-line.tsx
|
|
5
5
|
function n({ className: n, minWidth: r = 30, maxWidth: i = 100, height: a, style: o, ...s }) {
|
|
6
6
|
let c = {
|
|
7
7
|
width: `${(r + i) / 2}%`,
|
|
@@ -16,7 +16,6 @@ function n({ className: n, minWidth: r = 30, maxWidth: i = 100, height: a, style
|
|
|
16
16
|
children: /* @__PURE__ */ t("span", { className: "pointer-events-none absolute inset-0 animate-basalt-shimmer bg-gradient-to-r from-transparent via-basalt-foreground/10 to-transparent motion-reduce:animate-none" })
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
|
-
//#endregion
|
|
20
19
|
export { n as SkeletonLine };
|
|
21
20
|
|
|
22
21
|
//# sourceMappingURL=skeleton-line.js.map
|
|
@@ -5,7 +5,7 @@ import { FOCUS_RING as n } from "./overlay.js";
|
|
|
5
5
|
import * as r from "react";
|
|
6
6
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
7
7
|
import * as o from "@radix-ui/react-slider";
|
|
8
|
-
|
|
8
|
+
// src/components/slider.tsx
|
|
9
9
|
var s = r.forwardRef(({ className: s, value: c, defaultValue: l, min: u = 0, max: d = 100, orientation: f = "horizontal", labels: p, "aria-label": m, "aria-labelledby": h, ...g }, _) => {
|
|
10
10
|
let v = f === "vertical", y = c !== void 0, b = r.useRef(l?.length ?? 1), x = y ? c?.length ?? 0 : b.current;
|
|
11
11
|
return /* @__PURE__ */ a(o.Root, {
|
|
@@ -31,7 +31,6 @@ var s = r.forwardRef(({ className: s, value: c, defaultValue: l, min: u = 0, max
|
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
33
|
s.displayName = o.Root.displayName;
|
|
34
|
-
//#endregion
|
|
35
34
|
export { s as Slider };
|
|
36
35
|
|
|
37
36
|
//# sourceMappingURL=slider.js.map
|
|
@@ -4,7 +4,7 @@ import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
|
4
4
|
import { SkeletonLine as n } from "./skeleton-line.js";
|
|
5
5
|
import * as r from "react";
|
|
6
6
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
7
|
-
|
|
7
|
+
// src/components/stat-strip.tsx
|
|
8
8
|
var o = r.forwardRef(({ "aria-busy": r, className: o, items: s, loading: c = !1, ...l }, u) => /* @__PURE__ */ i("dl", {
|
|
9
9
|
ref: u,
|
|
10
10
|
className: e(t, "grid grid-cols-2 gap-basalt-layout md:grid-cols-4", o),
|
|
@@ -23,7 +23,6 @@ var o = r.forwardRef(({ "aria-busy": r, className: o, items: s, loading: c = !1,
|
|
|
23
23
|
}, t))
|
|
24
24
|
}));
|
|
25
25
|
o.displayName = "StatStrip";
|
|
26
|
-
//#endregion
|
|
27
26
|
export { o as StatStrip };
|
|
28
27
|
|
|
29
28
|
//# sourceMappingURL=stat-strip.js.map
|
|
@@ -6,7 +6,7 @@ import { useCheckableGroup as r } from "../utils/use-checkable-group.js";
|
|
|
6
6
|
import * as i from "react";
|
|
7
7
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
8
8
|
import * as s from "@radix-ui/react-switch";
|
|
9
|
-
|
|
9
|
+
// src/components/switch.tsx
|
|
10
10
|
var c = i.createContext(null);
|
|
11
11
|
function l(e, t, n) {
|
|
12
12
|
return n ? e.includes(t) ? e : [...e, t] : e.filter((e) => e !== t);
|
|
@@ -87,7 +87,6 @@ var m = Object.assign(u, {
|
|
|
87
87
|
Legend: f,
|
|
88
88
|
Item: p
|
|
89
89
|
});
|
|
90
|
-
//#endregion
|
|
91
90
|
export { m as Switch };
|
|
92
91
|
|
|
93
92
|
//# sourceMappingURL=switch.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { cn as e } from "../utils/cn.js";
|
|
3
3
|
import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
4
4
|
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
5
|
-
|
|
5
|
+
// src/components/table-of-contents.tsx
|
|
6
6
|
function i({ title: i = "On this page", children: a, className: o }) {
|
|
7
7
|
return /* @__PURE__ */ r("nav", {
|
|
8
8
|
"aria-label": i || "On this page",
|
|
@@ -32,7 +32,6 @@ function a({ active: t, href: r, children: i }) {
|
|
|
32
32
|
})
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
|
-
//#endregion
|
|
36
35
|
export { i as TableOfContents, a as TableOfContentsItem };
|
|
37
36
|
|
|
38
37
|
//# sourceMappingURL=table-of-contents.js.map
|
|
@@ -3,7 +3,7 @@ import { cn as e } from "../utils/cn.js";
|
|
|
3
3
|
import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
4
4
|
import { Pagination as n } from "./pagination.js";
|
|
5
5
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
6
|
-
|
|
6
|
+
// src/components/table-pager.tsx
|
|
7
7
|
function a({ start: e, end: t, totalCount: n }) {
|
|
8
8
|
return n === 0 ? "No results" : `Showing ${e}–${t} of ${n}`;
|
|
9
9
|
}
|
|
@@ -30,7 +30,6 @@ function o({ className: o, disabled: s = !1, formatRange: c, onPageChange: l, pa
|
|
|
30
30
|
})]
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
|
-
//#endregion
|
|
34
33
|
export { o as TablePager };
|
|
35
34
|
|
|
36
35
|
//# sourceMappingURL=table-pager.js.map
|
package/dist/components/table.js
CHANGED
|
@@ -4,7 +4,7 @@ import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
|
4
4
|
import * as n from "react";
|
|
5
5
|
import { ArrowDown as r, ArrowUp as i, ArrowUpDown as a } from "lucide-react";
|
|
6
6
|
import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
7
|
-
|
|
7
|
+
// src/components/table.tsx
|
|
8
8
|
var l = n.forwardRef(({ className: n, striped: r = !1, ...i }, a) => /* @__PURE__ */ s("table", {
|
|
9
9
|
ref: a,
|
|
10
10
|
"data-basalt-table": "",
|
|
@@ -57,7 +57,6 @@ var y = n.forwardRef(({ children: t, textAlign: n = "start", sorted: r, classNam
|
|
|
57
57
|
});
|
|
58
58
|
});
|
|
59
59
|
y.displayName = "TableSortableHeader";
|
|
60
|
-
//#endregion
|
|
61
60
|
export { l as Table, d as TableBody, _ as TableCaption, g as TableCell, f as TableFooter, h as TableHead, u as TableHeader, p as TableRow, y as TableSortableHeader };
|
|
62
61
|
|
|
63
62
|
//# sourceMappingURL=table.js.map
|
package/dist/components/tabs.js
CHANGED
|
@@ -6,7 +6,7 @@ import { useSelectionIndicator as r } from "../utils/selection-indicator.js";
|
|
|
6
6
|
import * as i from "react";
|
|
7
7
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
8
8
|
import * as s from "@radix-ui/react-tabs";
|
|
9
|
-
|
|
9
|
+
// src/components/tabs.tsx
|
|
10
10
|
function c(e) {
|
|
11
11
|
return {
|
|
12
12
|
left: e.offsetLeft,
|
|
@@ -58,7 +58,6 @@ var f = i.forwardRef(({ className: t, ...r }, i) => /* @__PURE__ */ a(s.Content,
|
|
|
58
58
|
...r
|
|
59
59
|
}));
|
|
60
60
|
f.displayName = s.Content.displayName;
|
|
61
|
-
//#endregion
|
|
62
61
|
export { l as Tabs, f as TabsContent, u as TabsList, d as TabsTrigger };
|
|
63
62
|
|
|
64
63
|
//# sourceMappingURL=tabs.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { cn as e } from "../utils/cn.js";
|
|
3
3
|
import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
4
4
|
import { jsx as n } from "react/jsx-runtime";
|
|
5
|
-
|
|
5
|
+
// src/components/tag-badge.tsx
|
|
6
6
|
var r = {
|
|
7
7
|
slate: {
|
|
8
8
|
label: "Slate",
|
|
@@ -66,7 +66,6 @@ function o({ name: i, colorKey: o, color: s, size: c = "md", className: l, ...u
|
|
|
66
66
|
children: i
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
|
-
//#endregion
|
|
70
69
|
export { r as TAG_COLORS, o as TagBadge, a as tagColorFor };
|
|
71
70
|
|
|
72
71
|
//# sourceMappingURL=tag-badge.js.map
|
|
@@ -7,7 +7,7 @@ import { useState as i } from "react";
|
|
|
7
7
|
import { Check as a } from "lucide-react";
|
|
8
8
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
9
9
|
import * as c from "@radix-ui/react-radio-group";
|
|
10
|
-
|
|
10
|
+
// src/components/tag-color-picker.tsx
|
|
11
11
|
var l = Object.keys(r);
|
|
12
12
|
function u({ label: u, value: d, defaultValue: f = "slate", onValueChange: p, colors: m = l, labels: h, disabled: g = !1, id: _, "aria-invalid": v, "aria-describedby": y, className: b }) {
|
|
13
13
|
let [x, S] = i(f), C = d ?? x;
|
|
@@ -44,7 +44,6 @@ function u({ label: u, value: d, defaultValue: f = "slate", onValueChange: p, co
|
|
|
44
44
|
}, t))
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
-
//#endregion
|
|
48
47
|
export { u as TagColorPicker };
|
|
49
48
|
|
|
50
49
|
//# sourceMappingURL=tag-color-picker.js.map
|
package/dist/components/text.js
CHANGED
|
@@ -3,7 +3,7 @@ import { cn as e } from "../utils/cn.js";
|
|
|
3
3
|
import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
4
4
|
import * as n from "react";
|
|
5
5
|
import { cva as r } from "class-variance-authority";
|
|
6
|
-
|
|
6
|
+
// src/components/text.tsx
|
|
7
7
|
var i = r("text-basalt-foreground", {
|
|
8
8
|
variants: {
|
|
9
9
|
size: {
|
|
@@ -41,7 +41,6 @@ var s = n.forwardRef(({ as: r, bold: s = !1, className: c, size: l, tone: u = "d
|
|
|
41
41
|
});
|
|
42
42
|
});
|
|
43
43
|
s.displayName = "Text";
|
|
44
|
-
//#endregion
|
|
45
44
|
export { s as Text };
|
|
46
45
|
|
|
47
46
|
//# sourceMappingURL=text.js.map
|
|
@@ -3,7 +3,7 @@ import { Button as e } from "./button.js";
|
|
|
3
3
|
import { useTheme as t } from "../providers/theme.js";
|
|
4
4
|
import { Monitor as n, Moon as r, Sun as i } from "lucide-react";
|
|
5
5
|
import { jsx as a } from "react/jsx-runtime";
|
|
6
|
-
|
|
6
|
+
// src/components/theme-toggle.tsx
|
|
7
7
|
var o = {
|
|
8
8
|
className: "h-basalt-4 w-basalt-4",
|
|
9
9
|
"aria-hidden": !0,
|
|
@@ -22,7 +22,6 @@ function s({ "aria-label": s }) {
|
|
|
22
22
|
children: a(c === "system" ? n : c === "dark" ? r : i, { ...o })
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
|
-
//#endregion
|
|
26
25
|
export { s as ThemeToggle };
|
|
27
26
|
|
|
28
27
|
//# sourceMappingURL=theme-toggle.js.map
|
|
@@ -5,7 +5,7 @@ import { useThinkingViewModel as i } from "../viewmodels/use-thinking.js";
|
|
|
5
5
|
import { Loader as a } from "./loader.js";
|
|
6
6
|
import { Check as o, Circle as s, CircleAlert as c, Code as l, Search as u, Sparkles as d } from "lucide-react";
|
|
7
7
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
8
|
-
|
|
8
|
+
// src/components/thinking.tsx
|
|
9
9
|
function m({ steps: m, variant: h = "steps", title: g, className: _, ...v }) {
|
|
10
10
|
let y = i({
|
|
11
11
|
steps: m,
|
|
@@ -79,7 +79,6 @@ function m({ steps: m, variant: h = "steps", title: g, className: _, ...v }) {
|
|
|
79
79
|
})]
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
|
-
//#endregion
|
|
83
82
|
export { m as Thinking };
|
|
84
83
|
|
|
85
84
|
//# sourceMappingURL=thinking.js.map
|
package/dist/components/toast.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Check as e, CircleAlert as t, Info as n, TriangleAlert as r, X as i } from "lucide-react";
|
|
3
3
|
import { jsx as a } from "react/jsx-runtime";
|
|
4
4
|
import { Toaster as o, toast as s } from "sonner";
|
|
5
|
-
|
|
5
|
+
// src/components/toast.tsx
|
|
6
6
|
var c = {
|
|
7
7
|
default: "bg-basalt-popover",
|
|
8
8
|
success: "bg-basalt-heatmap-green-1 [&_[data-icon]]:text-basalt-heatmap-green-4 [&_[data-title]]:text-basalt-heatmap-green-4",
|
|
@@ -77,7 +77,6 @@ function p({ closeButton: s = !0, ...l }) {
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
var m = p;
|
|
80
|
-
//#endregion
|
|
81
80
|
export { m as Toast, p as Toaster, f as toast };
|
|
82
81
|
|
|
83
82
|
//# sourceMappingURL=toast.js.map
|
|
@@ -6,7 +6,7 @@ import { useSelectionIndicator as r } from "../utils/selection-indicator.js";
|
|
|
6
6
|
import * as i from "react";
|
|
7
7
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
8
8
|
import * as s from "@radix-ui/react-toggle-group";
|
|
9
|
-
|
|
9
|
+
// src/components/toggle-group.tsx
|
|
10
10
|
var c = i.createContext("single"), l = i.forwardRef(({ className: n, children: i, ...l }, u) => {
|
|
11
11
|
let d = l.type === "single", { ref: f, state: p, motionClassName: m } = r({
|
|
12
12
|
itemSelector: "[aria-checked=\"true\"]",
|
|
@@ -44,7 +44,6 @@ var u = i.forwardRef(({ className: t, ...r }, o) => {
|
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
46
|
u.displayName = s.Item.displayName;
|
|
47
|
-
//#endregion
|
|
48
47
|
export { l as ToggleGroup, u as ToggleGroupItem };
|
|
49
48
|
|
|
50
49
|
//# sourceMappingURL=toggle-group.js.map
|
|
@@ -6,7 +6,7 @@ import * as r from "react";
|
|
|
6
6
|
import { cva as i } from "class-variance-authority";
|
|
7
7
|
import { jsx as a } from "react/jsx-runtime";
|
|
8
8
|
import * as o from "@radix-ui/react-toggle";
|
|
9
|
-
|
|
9
|
+
// src/components/toggle.tsx
|
|
10
10
|
var s = i(`${t} basalt-choice relative inline-flex cursor-pointer items-center justify-center rounded-basalt-md font-medium transition-colors basalt-motion before:absolute before:-inset-basalt-border-width hover:bg-basalt-hover ${n}`, {
|
|
11
11
|
variants: {
|
|
12
12
|
variant: {
|
|
@@ -32,7 +32,6 @@ var s = i(`${t} basalt-choice relative inline-flex cursor-pointer items-center j
|
|
|
32
32
|
...i
|
|
33
33
|
}));
|
|
34
34
|
c.displayName = o.Root.displayName;
|
|
35
|
-
//#endregion
|
|
36
35
|
export { c as Toggle };
|
|
37
36
|
|
|
38
37
|
//# sourceMappingURL=toggle.js.map
|
|
@@ -9,7 +9,7 @@ import { CodeBlock as d } from "./code.js";
|
|
|
9
9
|
import { Loader as f } from "./loader.js";
|
|
10
10
|
import { Check as p, CircleAlert as m, FileText as h, Pencil as g, Sparkles as _, Terminal as v } from "lucide-react";
|
|
11
11
|
import { jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
12
|
-
|
|
12
|
+
// src/components/tool-chips.tsx
|
|
13
13
|
var x = {
|
|
14
14
|
think: _,
|
|
15
15
|
read: h,
|
|
@@ -132,7 +132,6 @@ function S({ steps: h, diffs: g = [], title: _, defaultOpen: v = !0, className:
|
|
|
132
132
|
})]
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
//#endregion
|
|
136
135
|
export { S as ToolChips };
|
|
137
136
|
|
|
138
137
|
//# sourceMappingURL=tool-chips.js.map
|
|
@@ -5,7 +5,7 @@ import { Button as n } from "./button.js";
|
|
|
5
5
|
import { Input as r } from "./input.js";
|
|
6
6
|
import * as i from "react";
|
|
7
7
|
import { jsx as a } from "react/jsx-runtime";
|
|
8
|
-
|
|
8
|
+
// src/components/toolbar.tsx
|
|
9
9
|
var o = e("relative min-w-0 rounded-none border-0 bg-transparent shadow-none", "first:rounded-l-basalt-md last:rounded-r-basalt-md", "focus-within:z-2 focus:z-2 focus-visible:z-2");
|
|
10
10
|
function s(e) {
|
|
11
11
|
return [...e.querySelectorAll("button:not([disabled]), input:not([disabled])")].filter((t) => t.closest("[role=\"toolbar\"]") === e);
|
|
@@ -70,7 +70,6 @@ var f = Object.assign(l, {
|
|
|
70
70
|
Button: u,
|
|
71
71
|
Input: d
|
|
72
72
|
});
|
|
73
|
-
//#endregion
|
|
74
73
|
export { f as Toolbar, u as ToolbarButton, d as ToolbarInput };
|
|
75
74
|
|
|
76
75
|
//# sourceMappingURL=toolbar.js.map
|
|
@@ -5,7 +5,7 @@ import { OVERLAY_LAYER as n, OVERLAY_MOTION as r } from "./overlay.js";
|
|
|
5
5
|
import * as i from "react";
|
|
6
6
|
import { jsx as a } from "react/jsx-runtime";
|
|
7
7
|
import * as o from "@radix-ui/react-tooltip";
|
|
8
|
-
|
|
8
|
+
// src/components/tooltip.tsx
|
|
9
9
|
var s = o.Provider, c = o.Root, l = o.Trigger, u = i.forwardRef(({ className: i, sideOffset: s = 4, ...c }, l) => /* @__PURE__ */ a(o.Portal, {
|
|
10
10
|
forceMount: c.forceMount,
|
|
11
11
|
children: /* @__PURE__ */ a(o.Content, {
|
|
@@ -16,7 +16,6 @@ var s = o.Provider, c = o.Root, l = o.Trigger, u = i.forwardRef(({ className: i,
|
|
|
16
16
|
})
|
|
17
17
|
}));
|
|
18
18
|
u.displayName = o.Content.displayName;
|
|
19
|
-
//#endregion
|
|
20
19
|
export { c as Tooltip, u as TooltipContent, s as TooltipProvider, l as TooltipTrigger };
|
|
21
20
|
|
|
22
21
|
//# sourceMappingURL=tooltip.js.map
|
|
@@ -6,12 +6,12 @@ import { Input as i } from "./input.js";
|
|
|
6
6
|
import { useEffect as a, useId as o, useRef as s, useState as c } from "react";
|
|
7
7
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
8
8
|
import * as d from "@radix-ui/react-popover";
|
|
9
|
-
|
|
9
|
+
// src/components/typeahead-field.tsx
|
|
10
10
|
function f({ items: f, value: h, defaultValue: g = "", onValueChange: _, name: v, placeholder: y = "Select…", disabled: b = !1, loading: x = !1, size: S = "default", className: C, id: w, allowFreeform: T, "aria-label": E, "aria-describedby": ee, "aria-invalid": te, onBlur: ne, ...re }) {
|
|
11
11
|
let [D, O] = c(g), k = h ?? D, [A, j] = c(p(f, k)), [M, N] = c(h), [P, F] = c(!1), [I, L] = c(null), R = o(), z = s(null), ie = r(), B = s(!1), V = s(null);
|
|
12
12
|
h !== M && (N(h), h === void 0 ? M !== void 0 && (O(M), j(p(f, M))) : j(p(f, h)));
|
|
13
13
|
let H = p(f, k), [U, W] = c(H);
|
|
14
|
-
H !== U && (W(H),
|
|
14
|
+
H !== U && (W(H), P && A !== U || j(H));
|
|
15
15
|
let G = s({
|
|
16
16
|
defaultValue: g,
|
|
17
17
|
items: f,
|
|
@@ -67,11 +67,7 @@ function f({ items: f, value: h, defaultValue: g = "", onValueChange: _, name: v
|
|
|
67
67
|
}
|
|
68
68
|
function $(e, t = !0) {
|
|
69
69
|
let n = e.trim(), r = f.find((e) => !e.disabled && (e.label.toLowerCase() === n.toLowerCase() || e.value === n));
|
|
70
|
-
|
|
71
|
-
Q(r, t);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
Z(n, n, t);
|
|
70
|
+
r ? Q(r, t) : Z(n, n, t);
|
|
75
71
|
}
|
|
76
72
|
return a(() => {
|
|
77
73
|
if (!P) return;
|
|
@@ -128,13 +124,7 @@ function f({ items: f, value: h, defaultValue: g = "", onValueChange: _, name: v
|
|
|
128
124
|
j(e.target.value), F(!0), L(null);
|
|
129
125
|
},
|
|
130
126
|
onFocus: () => {
|
|
131
|
-
|
|
132
|
-
if (B.current) {
|
|
133
|
-
B.current = !1;
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
L(null), F(!0);
|
|
137
|
-
}
|
|
127
|
+
X || (B.current ? B.current = !1 : (L(null), F(!0)));
|
|
138
128
|
},
|
|
139
129
|
onClick: () => {
|
|
140
130
|
X || (P || L(null), F(!0));
|
|
@@ -147,17 +137,13 @@ function f({ items: f, value: h, defaultValue: g = "", onValueChange: _, name: v
|
|
|
147
137
|
return;
|
|
148
138
|
}
|
|
149
139
|
L((e) => e === null ? 0 : (e + 1) % K.length);
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
if (e.key === "ArrowUp") {
|
|
140
|
+
} else if (e.key === "ArrowUp") {
|
|
153
141
|
if (e.preventDefault(), F(!0), K.length === 0) {
|
|
154
142
|
L(null);
|
|
155
143
|
return;
|
|
156
144
|
}
|
|
157
145
|
L((e) => e === null ? K.length - 1 : (e - 1 + K.length) % K.length);
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
if (e.key === "Enter") {
|
|
146
|
+
} else if (e.key === "Enter") {
|
|
161
147
|
if (P && J) {
|
|
162
148
|
e.preventDefault(), Q(J);
|
|
163
149
|
return;
|
|
@@ -235,7 +221,6 @@ function m(e, t, n) {
|
|
|
235
221
|
let r = t.trim().toLowerCase();
|
|
236
222
|
return r === "" ? n ? e : [] : e.filter((e) => e.label.toLowerCase().includes(r));
|
|
237
223
|
}
|
|
238
|
-
//#endregion
|
|
239
224
|
export { f as TypeaheadField };
|
|
240
225
|
|
|
241
226
|
//# sourceMappingURL=typeahead-field.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeahead-field.js","names":["PopoverPrimitive","TypeaheadField","ariaLabel","ariaDescribedBy","ariaInvalid","rest","uncontrolled","setUncontrolled","useState","defaultValue","selected","value","query","setQuery","displayOf","items","prevValue","setPrevValue","open","setOpen","active","setActive","listId","useId","inputRef","useRef","highlightRef","useHoverHighlight","skipFocusOpen","lastPointerPos","selectedDisplay","prevDisplay","setPrevDisplay","latestConfigRef","useEffect","form","disposed","timers","onReset","timer","event","cfg","filtered","filterItems","allowFreeform","activeIndex","activeItem","listOpen","busy","disabled","loading","optionElement","nextLen","current","commitValue","next","display","onValueChange","restoreFocus","commitItem","item","commitFreeform","trimmed","text","match","onKey","nextOpen","cn","className","related","listbox","name","Input","id","placeholder","evt","target","overlayPanelClass","index","overlayItemClass","clientX","clientY","needle","showAllWhenEmpty"],"sources":["../../src/components/typeahead-field.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { type ComponentPropsWithoutRef, useEffect, useId, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { useHoverHighlight } from \"../utils/use-hover-highlight\";\nimport { Input, type InputSize } from \"./input\";\nimport { OVERLAY_GAP, overlayItemClass, overlayPanelClass } from \"./overlay\";\n\nexport type TypeaheadItem = {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n};\n\nexport function TypeaheadField({\n\titems,\n\tvalue,\n\tdefaultValue = \"\",\n\tonValueChange,\n\tname,\n\tplaceholder = \"Select…\",\n\tdisabled = false,\n\tloading = false,\n\tsize = \"default\",\n\tclassName,\n\tid,\n\tallowFreeform,\n\t\"aria-label\": ariaLabel,\n\t\"aria-describedby\": ariaDescribedBy,\n\t\"aria-invalid\": ariaInvalid,\n\tonBlur,\n\t...rest\n}: {\n\titems: TypeaheadItem[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\tname?: string;\n\tplaceholder?: string;\n\tdisabled?: boolean;\n\tloading?: boolean;\n\tsize?: InputSize;\n\tclassName?: string;\n\tid?: string;\n\tallowFreeform: boolean;\n\t\"aria-label\"?: string;\n\t\"aria-describedby\"?: string;\n\t\"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\";\n} & Omit<ComponentPropsWithoutRef<\"div\">, \"children\" | \"defaultValue\" | \"onChange\">) {\n\tconst [uncontrolled, setUncontrolled] = useState(defaultValue);\n\tconst selected = value ?? uncontrolled;\n\tconst [query, setQuery] = useState(displayOf(items, selected));\n\tconst [prevValue, setPrevValue] = useState(value);\n\tconst [open, setOpen] = useState(false);\n\tconst [active, setActive] = useState<number | null>(null);\n\tconst listId = useId();\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst highlightRef = useHoverHighlight();\n\tconst skipFocusOpen = useRef(false);\n\tconst lastPointerPos = useRef<{ x: number; y: number } | null>(null);\n\tif (value !== prevValue) {\n\t\tsetPrevValue(value);\n\t\tif (value !== undefined) {\n\t\t\tsetQuery(displayOf(items, value));\n\t\t} else if (prevValue !== undefined) {\n\t\t\tsetUncontrolled(prevValue);\n\t\t\tsetQuery(displayOf(items, prevValue));\n\t\t}\n\t}\n\tconst selectedDisplay = displayOf(items, selected);\n\tconst [prevDisplay, setPrevDisplay] = useState(selectedDisplay);\n\tif (selectedDisplay !== prevDisplay) {\n\t\tsetPrevDisplay(selectedDisplay);\n\t\tif (!open || query === prevDisplay) {\n\t\t\tsetQuery(selectedDisplay);\n\t\t}\n\t}\n\tconst latestConfigRef = useRef({\n\t\tdefaultValue,\n\t\titems,\n\t\tvalue,\n\t});\n\tuseEffect(() => {\n\t\tlatestConfigRef.current = {\n\t\t\tdefaultValue,\n\t\t\titems,\n\t\t\tvalue,\n\t\t};\n\t});\n\n\tuseEffect(() => {\n\t\tconst node = inputRef.current;\n\t\tconst form = node?.form;\n\t\tif (!form) {\n\t\t\treturn;\n\t\t}\n\t\tlet disposed = false;\n\t\tconst timers = new Set<ReturnType<typeof setTimeout>>();\n\t\tconst onReset = (event: Event) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\ttimers.delete(timer);\n\t\t\t\tif (disposed || event.defaultPrevented) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cfg = latestConfigRef.current;\n\t\t\t\tif (cfg.value === undefined) {\n\t\t\t\t\tsetUncontrolled(cfg.defaultValue);\n\t\t\t\t\tsetQuery(displayOf(cfg.items, cfg.defaultValue));\n\t\t\t\t} else {\n\t\t\t\t\tsetQuery(displayOf(cfg.items, cfg.value));\n\t\t\t\t}\n\t\t\t\tsetOpen(false);\n\t\t\t\tsetActive(null);\n\t\t\t}, 0);\n\t\t\ttimers.add(timer);\n\t\t};\n\t\tform.addEventListener(\"reset\", onReset);\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tfor (const timer of timers) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\ttimers.clear();\n\t\t\tform.removeEventListener(\"reset\", onReset);\n\t\t};\n\t}, []);\n\tconst filtered = filterItems(items, query, !allowFreeform);\n\tconst activeIndex =\n\t\tactive === null || filtered.length === 0 ? null : Math.min(active, filtered.length - 1);\n\tconst activeItem = activeIndex === null ? undefined : filtered[activeIndex];\n\tconst listOpen = open && filtered.length > 0;\n\tconst busy = disabled || loading;\n\n\tuseEffect(() => {\n\t\tif (!listOpen || activeIndex === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst optionElement = document.getElementById(`${listId}-opt-${activeIndex}`);\n\t\tif (typeof optionElement?.scrollIntoView === \"function\") {\n\t\t\toptionElement.scrollIntoView({ block: \"nearest\" });\n\t\t}\n\t}, [activeIndex, listId, listOpen]);\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextLen = filterItems(items, query, !allowFreeform).length;\n\t\tsetActive((current) => {\n\t\t\tif (current === null || nextLen === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn Math.min(current, nextLen - 1);\n\t\t});\n\t}, [allowFreeform, items, open, query]);\n\n\tfunction commitValue(next: string, display: string, restoreFocus = true) {\n\t\tif (value === undefined) {\n\t\t\tsetUncontrolled(next);\n\t\t\tsetQuery(display);\n\t\t} else {\n\t\t\tsetQuery(displayOf(items, value));\n\t\t}\n\t\tsetOpen(false);\n\t\tsetActive(null);\n\t\tonValueChange?.(next);\n\t\tif (restoreFocus && inputRef.current && document.activeElement !== inputRef.current) {\n\t\t\tskipFocusOpen.current = true;\n\t\t\tinputRef.current.focus();\n\t\t}\n\t}\n\n\tfunction commitItem(item: TypeaheadItem, restoreFocus = true) {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\t\tcommitValue(item.value, item.label, restoreFocus);\n\t}\n\n\tfunction commitFreeform(text: string, restoreFocus = true) {\n\t\tconst trimmed = text.trim();\n\t\tconst match = items.find(\n\t\t\t(item) =>\n\t\t\t\t!item.disabled &&\n\t\t\t\t(item.label.toLowerCase() === trimmed.toLowerCase() || item.value === trimmed),\n\t\t);\n\t\tif (match) {\n\t\t\tcommitItem(match, restoreFocus);\n\t\t\treturn;\n\t\t}\n\t\tcommitValue(trimmed, trimmed, restoreFocus);\n\t}\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst onKey = (event: KeyboardEvent) => {\n\t\t\tif (event.key !== \"Escape\" || event.isComposing) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tevent.stopImmediatePropagation();\n\t\t\tsetOpen(false);\n\t\t\tsetQuery(displayOf(items, selected));\n\t\t\tsetActive(null);\n\t\t};\n\t\twindow.addEventListener(\"keydown\", onKey, true);\n\t\tdocument.addEventListener(\"keydown\", onKey, true);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"keydown\", onKey, true);\n\t\t\tdocument.removeEventListener(\"keydown\", onKey, true);\n\t\t};\n\t}, [items, open, selected]);\n\n\treturn (\n\t\t<PopoverPrimitive.Root\n\t\t\topen={listOpen}\n\t\t\tonOpenChange={(nextOpen) => {\n\t\t\t\tif (!nextOpen) {\n\t\t\t\t\tsetOpen(false);\n\t\t\t\t\tsetActive(null);\n\t\t\t\t\tif (!allowFreeform) {\n\t\t\t\t\t\tsetQuery(displayOf(items, selected));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\t{...rest}\n\t\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\t\tonBlur={(event) => {\n\t\t\t\t\tonBlur?.(event);\n\t\t\t\t\tconst related = event.relatedTarget as Node | null;\n\t\t\t\t\tconst listbox = document.getElementById(listId);\n\t\t\t\t\tif (!event.currentTarget.contains(related) && !listbox?.contains(related)) {\n\t\t\t\t\t\tif (allowFreeform) {\n\t\t\t\t\t\t\tif (query.trim() !== displayOf(items, selected)) {\n\t\t\t\t\t\t\t\tcommitFreeform(query, false);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetQuery(displayOf(items, selected));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{name ? <input type=\"hidden\" name={name} value={selected} disabled={busy} /> : null}\n\t\t\t\t<PopoverPrimitive.Anchor asChild>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\taria-invalid={ariaInvalid}\n\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\tsetQuery(event.target.value);\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\tif (busy) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (skipFocusOpen.current) {\n\t\t\t\t\t\t\t\tskipFocusOpen.current = false;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (busy) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!open) {\n\t\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\tif (event.nativeEvent.isComposing || event.key === \"Process\") {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\t\tif (filtered.length === 0) {\n\t\t\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetActive((current) => (current === null ? 0 : (current + 1) % filtered.length));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (event.key === \"ArrowUp\") {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\t\tif (filtered.length === 0) {\n\t\t\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetActive((current) =>\n\t\t\t\t\t\t\t\t\tcurrent === null\n\t\t\t\t\t\t\t\t\t\t? filtered.length - 1\n\t\t\t\t\t\t\t\t\t\t: (current - 1 + filtered.length) % filtered.length,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t\tif (open && activeItem) {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tcommitItem(activeItem);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (allowFreeform && query.trim() !== displayOf(items, selected)) {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tcommitFreeform(query);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-label={ariaLabel ?? (id ? undefined : placeholder)}\n\t\t\t\t\t\taria-expanded={listOpen}\n\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\taria-controls={listOpen ? listId : undefined}\n\t\t\t\t\t\taria-activedescendant={\n\t\t\t\t\t\t\tlistOpen && activeItem && activeIndex !== null\n\t\t\t\t\t\t\t\t? `${listId}-opt-${activeIndex}`\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</PopoverPrimitive.Anchor>\n\t\t\t\t<PopoverPrimitive.Portal>\n\t\t\t\t\t<PopoverPrimitive.Content\n\t\t\t\t\t\tref={highlightRef}\n\t\t\t\t\t\tside=\"bottom\"\n\t\t\t\t\t\tsideOffset={OVERLAY_GAP}\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tavoidCollisions\n\t\t\t\t\t\tcollisionPadding={8}\n\t\t\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tlastPointerPos.current &&\n\t\t\t\t\t\t\t\tlastPointerPos.current.x === event.clientX &&\n\t\t\t\t\t\t\t\tlastPointerPos.current.y === event.clientY\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastPointerPos.current = { x: event.clientX, y: event.clientY };\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonEscapeKeyDown={(e) => {\n\t\t\t\t\t\t\tconst evt = e as unknown as {\n\t\t\t\t\t\t\t\tisComposing?: boolean;\n\t\t\t\t\t\t\t\tnativeEvent?: { isComposing?: boolean };\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (evt.isComposing || evt.nativeEvent?.isComposing) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonOpenAutoFocus={(e) => e.preventDefault()}\n\t\t\t\t\t\tonCloseAutoFocus={(e) => e.preventDefault()}\n\t\t\t\t\t\tonInteractOutside={(e) => {\n\t\t\t\t\t\t\tconst target = e.target as Node | null;\n\t\t\t\t\t\t\tif (inputRef.current?.contains(target)) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid={listId}\n\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\tclassName={overlayPanelClass(\n\t\t\t\t\t\t\t\"basalt-hover-list w-[var(--radix-popover-trigger-width)] max-h-[var(--radix-popover-content-available-height)] overflow-y-auto\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{filtered.map((item, index) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tkey={`${listId}-opt-${index}`}\n\t\t\t\t\t\t\t\tid={`${listId}-opt-${index}`}\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\tdata-basalt-hover-item=\"\"\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\taria-disabled={item.disabled || undefined}\n\t\t\t\t\t\t\t\taria-selected={index === activeIndex}\n\t\t\t\t\t\t\t\tclassName={cn(overlayItemClass(), item.disabled && \"opacity-50\")}\n\t\t\t\t\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\t\t\t\t\tif (item.disabled) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst { clientX, clientY } = event;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tlastPointerPos.current &&\n\t\t\t\t\t\t\t\t\t\tlastPointerPos.current.x === clientX &&\n\t\t\t\t\t\t\t\t\t\tlastPointerPos.current.y === clientY\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlastPointerPos.current = { x: clientX, y: clientY };\n\t\t\t\t\t\t\t\t\tsetActive(index);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\t\t\t\tonClick={() => commitItem(item)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</PopoverPrimitive.Content>\n\t\t\t\t</PopoverPrimitive.Portal>\n\t\t\t</div>\n\t\t</PopoverPrimitive.Root>\n\t);\n}\n\nfunction displayOf(items: TypeaheadItem[], value: string) {\n\treturn items.find((item) => item.value === value)?.label ?? value;\n}\n\nfunction filterItems(items: TypeaheadItem[], query: string, showAllWhenEmpty: boolean) {\n\tconst needle = query.trim().toLowerCase();\n\tif (needle === \"\") {\n\t\treturn showAllWhenEmpty ? items : [];\n\t}\n\treturn items.filter((item) => item.label.toLowerCase().includes(needle));\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typeahead-field.js","names":["PopoverPrimitive","TypeaheadField","ariaLabel","ariaDescribedBy","ariaInvalid","rest","uncontrolled","setUncontrolled","useState","defaultValue","selected","value","query","setQuery","displayOf","items","prevValue","setPrevValue","open","setOpen","active","setActive","listId","useId","inputRef","useRef","highlightRef","useHoverHighlight","skipFocusOpen","lastPointerPos","selectedDisplay","prevDisplay","setPrevDisplay","latestConfigRef","useEffect","form","disposed","timers","onReset","timer","event","cfg","filtered","filterItems","allowFreeform","activeIndex","activeItem","listOpen","busy","disabled","loading","optionElement","nextLen","current","commitValue","next","display","onValueChange","restoreFocus","commitItem","item","commitFreeform","trimmed","text","match","onKey","nextOpen","cn","className","related","listbox","name","Input","id","placeholder","evt","target","overlayPanelClass","index","overlayItemClass","clientX","clientY","needle","showAllWhenEmpty"],"sources":["../../src/components/typeahead-field.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { type ComponentPropsWithoutRef, useEffect, useId, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { useHoverHighlight } from \"../utils/use-hover-highlight\";\nimport { Input, type InputSize } from \"./input\";\nimport { OVERLAY_GAP, overlayItemClass, overlayPanelClass } from \"./overlay\";\n\nexport type TypeaheadItem = {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n};\n\nexport function TypeaheadField({\n\titems,\n\tvalue,\n\tdefaultValue = \"\",\n\tonValueChange,\n\tname,\n\tplaceholder = \"Select…\",\n\tdisabled = false,\n\tloading = false,\n\tsize = \"default\",\n\tclassName,\n\tid,\n\tallowFreeform,\n\t\"aria-label\": ariaLabel,\n\t\"aria-describedby\": ariaDescribedBy,\n\t\"aria-invalid\": ariaInvalid,\n\tonBlur,\n\t...rest\n}: {\n\titems: TypeaheadItem[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\tname?: string;\n\tplaceholder?: string;\n\tdisabled?: boolean;\n\tloading?: boolean;\n\tsize?: InputSize;\n\tclassName?: string;\n\tid?: string;\n\tallowFreeform: boolean;\n\t\"aria-label\"?: string;\n\t\"aria-describedby\"?: string;\n\t\"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\";\n} & Omit<ComponentPropsWithoutRef<\"div\">, \"children\" | \"defaultValue\" | \"onChange\">) {\n\tconst [uncontrolled, setUncontrolled] = useState(defaultValue);\n\tconst selected = value ?? uncontrolled;\n\tconst [query, setQuery] = useState(displayOf(items, selected));\n\tconst [prevValue, setPrevValue] = useState(value);\n\tconst [open, setOpen] = useState(false);\n\tconst [active, setActive] = useState<number | null>(null);\n\tconst listId = useId();\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst highlightRef = useHoverHighlight();\n\tconst skipFocusOpen = useRef(false);\n\tconst lastPointerPos = useRef<{ x: number; y: number } | null>(null);\n\tif (value !== prevValue) {\n\t\tsetPrevValue(value);\n\t\tif (value !== undefined) {\n\t\t\tsetQuery(displayOf(items, value));\n\t\t} else if (prevValue !== undefined) {\n\t\t\tsetUncontrolled(prevValue);\n\t\t\tsetQuery(displayOf(items, prevValue));\n\t\t}\n\t}\n\tconst selectedDisplay = displayOf(items, selected);\n\tconst [prevDisplay, setPrevDisplay] = useState(selectedDisplay);\n\tif (selectedDisplay !== prevDisplay) {\n\t\tsetPrevDisplay(selectedDisplay);\n\t\tif (!open || query === prevDisplay) {\n\t\t\tsetQuery(selectedDisplay);\n\t\t}\n\t}\n\tconst latestConfigRef = useRef({\n\t\tdefaultValue,\n\t\titems,\n\t\tvalue,\n\t});\n\tuseEffect(() => {\n\t\tlatestConfigRef.current = {\n\t\t\tdefaultValue,\n\t\t\titems,\n\t\t\tvalue,\n\t\t};\n\t});\n\n\tuseEffect(() => {\n\t\tconst node = inputRef.current;\n\t\tconst form = node?.form;\n\t\tif (!form) {\n\t\t\treturn;\n\t\t}\n\t\tlet disposed = false;\n\t\tconst timers = new Set<ReturnType<typeof setTimeout>>();\n\t\tconst onReset = (event: Event) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\ttimers.delete(timer);\n\t\t\t\tif (disposed || event.defaultPrevented) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cfg = latestConfigRef.current;\n\t\t\t\tif (cfg.value === undefined) {\n\t\t\t\t\tsetUncontrolled(cfg.defaultValue);\n\t\t\t\t\tsetQuery(displayOf(cfg.items, cfg.defaultValue));\n\t\t\t\t} else {\n\t\t\t\t\tsetQuery(displayOf(cfg.items, cfg.value));\n\t\t\t\t}\n\t\t\t\tsetOpen(false);\n\t\t\t\tsetActive(null);\n\t\t\t}, 0);\n\t\t\ttimers.add(timer);\n\t\t};\n\t\tform.addEventListener(\"reset\", onReset);\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tfor (const timer of timers) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\ttimers.clear();\n\t\t\tform.removeEventListener(\"reset\", onReset);\n\t\t};\n\t}, []);\n\tconst filtered = filterItems(items, query, !allowFreeform);\n\tconst activeIndex =\n\t\tactive === null || filtered.length === 0 ? null : Math.min(active, filtered.length - 1);\n\tconst activeItem = activeIndex === null ? undefined : filtered[activeIndex];\n\tconst listOpen = open && filtered.length > 0;\n\tconst busy = disabled || loading;\n\n\tuseEffect(() => {\n\t\tif (!listOpen || activeIndex === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst optionElement = document.getElementById(`${listId}-opt-${activeIndex}`);\n\t\tif (typeof optionElement?.scrollIntoView === \"function\") {\n\t\t\toptionElement.scrollIntoView({ block: \"nearest\" });\n\t\t}\n\t}, [activeIndex, listId, listOpen]);\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextLen = filterItems(items, query, !allowFreeform).length;\n\t\tsetActive((current) => {\n\t\t\tif (current === null || nextLen === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn Math.min(current, nextLen - 1);\n\t\t});\n\t}, [allowFreeform, items, open, query]);\n\n\tfunction commitValue(next: string, display: string, restoreFocus = true) {\n\t\tif (value === undefined) {\n\t\t\tsetUncontrolled(next);\n\t\t\tsetQuery(display);\n\t\t} else {\n\t\t\tsetQuery(displayOf(items, value));\n\t\t}\n\t\tsetOpen(false);\n\t\tsetActive(null);\n\t\tonValueChange?.(next);\n\t\tif (restoreFocus && inputRef.current && document.activeElement !== inputRef.current) {\n\t\t\tskipFocusOpen.current = true;\n\t\t\tinputRef.current.focus();\n\t\t}\n\t}\n\n\tfunction commitItem(item: TypeaheadItem, restoreFocus = true) {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\t\tcommitValue(item.value, item.label, restoreFocus);\n\t}\n\n\tfunction commitFreeform(text: string, restoreFocus = true) {\n\t\tconst trimmed = text.trim();\n\t\tconst match = items.find(\n\t\t\t(item) =>\n\t\t\t\t!item.disabled &&\n\t\t\t\t(item.label.toLowerCase() === trimmed.toLowerCase() || item.value === trimmed),\n\t\t);\n\t\tif (match) {\n\t\t\tcommitItem(match, restoreFocus);\n\t\t\treturn;\n\t\t}\n\t\tcommitValue(trimmed, trimmed, restoreFocus);\n\t}\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst onKey = (event: KeyboardEvent) => {\n\t\t\tif (event.key !== \"Escape\" || event.isComposing) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tevent.stopImmediatePropagation();\n\t\t\tsetOpen(false);\n\t\t\tsetQuery(displayOf(items, selected));\n\t\t\tsetActive(null);\n\t\t};\n\t\twindow.addEventListener(\"keydown\", onKey, true);\n\t\tdocument.addEventListener(\"keydown\", onKey, true);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"keydown\", onKey, true);\n\t\t\tdocument.removeEventListener(\"keydown\", onKey, true);\n\t\t};\n\t}, [items, open, selected]);\n\n\treturn (\n\t\t<PopoverPrimitive.Root\n\t\t\topen={listOpen}\n\t\t\tonOpenChange={(nextOpen) => {\n\t\t\t\tif (!nextOpen) {\n\t\t\t\t\tsetOpen(false);\n\t\t\t\t\tsetActive(null);\n\t\t\t\t\tif (!allowFreeform) {\n\t\t\t\t\t\tsetQuery(displayOf(items, selected));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\t{...rest}\n\t\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\t\tonBlur={(event) => {\n\t\t\t\t\tonBlur?.(event);\n\t\t\t\t\tconst related = event.relatedTarget as Node | null;\n\t\t\t\t\tconst listbox = document.getElementById(listId);\n\t\t\t\t\tif (!event.currentTarget.contains(related) && !listbox?.contains(related)) {\n\t\t\t\t\t\tif (allowFreeform) {\n\t\t\t\t\t\t\tif (query.trim() !== displayOf(items, selected)) {\n\t\t\t\t\t\t\t\tcommitFreeform(query, false);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetQuery(displayOf(items, selected));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{name ? <input type=\"hidden\" name={name} value={selected} disabled={busy} /> : null}\n\t\t\t\t<PopoverPrimitive.Anchor asChild>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\tdisabled={busy}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\taria-invalid={ariaInvalid}\n\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\tsetQuery(event.target.value);\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\tif (busy) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (skipFocusOpen.current) {\n\t\t\t\t\t\t\t\tskipFocusOpen.current = false;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (busy) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!open) {\n\t\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\tif (event.nativeEvent.isComposing || event.key === \"Process\") {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\t\tif (filtered.length === 0) {\n\t\t\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetActive((current) => (current === null ? 0 : (current + 1) % filtered.length));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (event.key === \"ArrowUp\") {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\t\tif (filtered.length === 0) {\n\t\t\t\t\t\t\t\t\tsetActive(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetActive((current) =>\n\t\t\t\t\t\t\t\t\tcurrent === null\n\t\t\t\t\t\t\t\t\t\t? filtered.length - 1\n\t\t\t\t\t\t\t\t\t\t: (current - 1 + filtered.length) % filtered.length,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t\tif (open && activeItem) {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tcommitItem(activeItem);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (allowFreeform && query.trim() !== displayOf(items, selected)) {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tcommitFreeform(query);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-label={ariaLabel ?? (id ? undefined : placeholder)}\n\t\t\t\t\t\taria-expanded={listOpen}\n\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\taria-controls={listOpen ? listId : undefined}\n\t\t\t\t\t\taria-activedescendant={\n\t\t\t\t\t\t\tlistOpen && activeItem && activeIndex !== null\n\t\t\t\t\t\t\t\t? `${listId}-opt-${activeIndex}`\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</PopoverPrimitive.Anchor>\n\t\t\t\t<PopoverPrimitive.Portal>\n\t\t\t\t\t<PopoverPrimitive.Content\n\t\t\t\t\t\tref={highlightRef}\n\t\t\t\t\t\tside=\"bottom\"\n\t\t\t\t\t\tsideOffset={OVERLAY_GAP}\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tavoidCollisions\n\t\t\t\t\t\tcollisionPadding={8}\n\t\t\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tlastPointerPos.current &&\n\t\t\t\t\t\t\t\tlastPointerPos.current.x === event.clientX &&\n\t\t\t\t\t\t\t\tlastPointerPos.current.y === event.clientY\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastPointerPos.current = { x: event.clientX, y: event.clientY };\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonEscapeKeyDown={(e) => {\n\t\t\t\t\t\t\tconst evt = e as unknown as {\n\t\t\t\t\t\t\t\tisComposing?: boolean;\n\t\t\t\t\t\t\t\tnativeEvent?: { isComposing?: boolean };\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (evt.isComposing || evt.nativeEvent?.isComposing) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonOpenAutoFocus={(e) => e.preventDefault()}\n\t\t\t\t\t\tonCloseAutoFocus={(e) => e.preventDefault()}\n\t\t\t\t\t\tonInteractOutside={(e) => {\n\t\t\t\t\t\t\tconst target = e.target as Node | null;\n\t\t\t\t\t\t\tif (inputRef.current?.contains(target)) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid={listId}\n\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\tclassName={overlayPanelClass(\n\t\t\t\t\t\t\t\"basalt-hover-list w-[var(--radix-popover-trigger-width)] max-h-[var(--radix-popover-content-available-height)] overflow-y-auto\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{filtered.map((item, index) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tkey={`${listId}-opt-${index}`}\n\t\t\t\t\t\t\t\tid={`${listId}-opt-${index}`}\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\tdata-basalt-hover-item=\"\"\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\taria-disabled={item.disabled || undefined}\n\t\t\t\t\t\t\t\taria-selected={index === activeIndex}\n\t\t\t\t\t\t\t\tclassName={cn(overlayItemClass(), item.disabled && \"opacity-50\")}\n\t\t\t\t\t\t\t\tonPointerMove={(event) => {\n\t\t\t\t\t\t\t\t\tif (item.disabled) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst { clientX, clientY } = event;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tlastPointerPos.current &&\n\t\t\t\t\t\t\t\t\t\tlastPointerPos.current.x === clientX &&\n\t\t\t\t\t\t\t\t\t\tlastPointerPos.current.y === clientY\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlastPointerPos.current = { x: clientX, y: clientY };\n\t\t\t\t\t\t\t\t\tsetActive(index);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\t\t\t\tonClick={() => commitItem(item)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</PopoverPrimitive.Content>\n\t\t\t\t</PopoverPrimitive.Portal>\n\t\t\t</div>\n\t\t</PopoverPrimitive.Root>\n\t);\n}\n\nfunction displayOf(items: TypeaheadItem[], value: string) {\n\treturn items.find((item) => item.value === value)?.label ?? value;\n}\n\nfunction filterItems(items: TypeaheadItem[], query: string, showAllWhenEmpty: boolean) {\n\tconst needle = query.trim().toLowerCase();\n\tif (needle === \"\") {\n\t\treturn showAllWhenEmpty ? items : [];\n\t}\n\treturn items.filter((item) => item.label.toLowerCase().includes(needle));\n}\n"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { BASALT_UI_CLASS as t } from "../utils/control-surface.js";
|
|
|
4
4
|
import { Button as n } from "./button.js";
|
|
5
5
|
import { Check as r, FileText as i, RotateCcw as a, Trash2 as o, X as s } from "lucide-react";
|
|
6
6
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
-
|
|
7
|
+
// src/components/upload-queue.tsx
|
|
8
8
|
var u = {
|
|
9
9
|
queued: "Queued",
|
|
10
10
|
uploading: "Uploading",
|
|
@@ -111,7 +111,6 @@ function f({ label: n, files: r, emptyLabel: i = "No files selected.", className
|
|
|
111
111
|
})
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
|
-
//#endregion
|
|
115
114
|
export { d as UploadItem, f as UploadQueue };
|
|
116
115
|
|
|
117
116
|
//# sourceMappingURL=upload-queue.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export { ScrollArea } from "./components/scroll-area.js";
|
|
|
20
20
|
export { SegmentControl } from "./components/segment-control.js";
|
|
21
21
|
export { Separator } from "./components/separator.js";
|
|
22
22
|
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from "./components/sheet.js";
|
|
23
|
-
export { ContentIsland, Sidebar, SidebarFooter, SidebarGroup, SidebarHeader, SidebarIconItem, SidebarItem, SidebarNav, SidebarPartition, SidebarProvider, SidebarSearch, SidebarUser, } from "./components/sidebar.js";
|
|
23
|
+
export { ContentIsland, Sidebar, SidebarBrand, SidebarFooter, SidebarGroup, SidebarHeader, SidebarIconItem, SidebarItem, SidebarNav, SidebarPartition, SidebarProvider, SidebarSearch, SidebarToggle, SidebarUser, } from "./components/sidebar.js";
|
|
24
24
|
export { StatStrip } from "./components/stat-strip.js";
|
|
25
25
|
export { Switch } from "./components/switch.js";
|
|
26
26
|
export { TablePager } from "./components/table-pager.js";
|
package/dist/index.js
CHANGED
|
@@ -23,14 +23,14 @@ import { ScrollArea as ae } from "./components/scroll-area.js";
|
|
|
23
23
|
import { SegmentControl as oe } from "./components/segment-control.js";
|
|
24
24
|
import { Separator as se } from "./components/separator.js";
|
|
25
25
|
import { Sheet as ce, SheetClose as le, SheetContent as ue, SheetDescription as de, SheetFooter as fe, SheetHeader as pe, SheetTitle as me, SheetTrigger as he } from "./components/sheet.js";
|
|
26
|
-
import { ContentIsland as ge, Sidebar as _e,
|
|
27
|
-
import { StatStrip as
|
|
28
|
-
import { Switch as
|
|
29
|
-
import { TablePager as
|
|
30
|
-
import { Tabs as
|
|
31
|
-
import { Text as
|
|
32
|
-
import { ThemeProvider as
|
|
33
|
-
import { ThemeToggle as
|
|
34
|
-
import { Toast as
|
|
35
|
-
import { Toolbar as
|
|
36
|
-
export { l as AlertDialog, u as AlertDialogAction, d as AlertDialogCancel, f as AlertDialogContent, p as AlertDialogDescription, m as AlertDialogFooter, h as AlertDialogHeader, g as AlertDialogTitle, _ as AlertDialogTrigger, v as Avatar, y as AvatarFallback, b as AvatarImage, x as Badge, e as Button, S as Checkbox, C as Collapsible, w as CollapsibleContent, T as CollapsibleTrigger, E as CommandEmpty, D as CommandGroup, O as CommandInput, k as CommandItem, A as CommandList, j as CommandPalette, M as CommandPaletteTrigger, N as CommandSeparator, P as CommandShortcut, F as ConfirmDialog, ge as ContentIsland, L as DescriptionList, t as Dialog, n as DialogClose, r as DialogContent, i as DialogDescription, a as DialogFooter, o as DialogHeader, s as DialogTitle, c as DialogTrigger, R as DropdownMenu, z as DropdownMenuContent, B as DropdownMenuItem, V as DropdownMenuTrigger, q as Field, J as Input, K as Label, Y as LayerCard, Z as Link, X as LinkProvider, Q as Meter, $ as Popover, ee as PopoverClose, te as PopoverContent, ne as PopoverDescription, re as PopoverTitle, ie as PopoverTrigger, ae as ScrollArea, oe as SegmentControl, se as Separator, ce as Sheet, le as SheetClose, ue as SheetContent, de as SheetDescription, fe as SheetFooter, pe as SheetHeader, me as SheetTitle, he as SheetTrigger, _e as Sidebar, ve as
|
|
26
|
+
import { ContentIsland as ge, Sidebar as _e, SidebarBrand as ve, SidebarFooter as ye, SidebarGroup as be, SidebarHeader as xe, SidebarIconItem as Se, SidebarItem as Ce, SidebarNav as we, SidebarPartition as Te, SidebarProvider as Ee, SidebarSearch as De, SidebarToggle as Oe, SidebarUser as ke } from "./components/sidebar.js";
|
|
27
|
+
import { StatStrip as Ae } from "./components/stat-strip.js";
|
|
28
|
+
import { Switch as je } from "./components/switch.js";
|
|
29
|
+
import { TablePager as Me } from "./components/table-pager.js";
|
|
30
|
+
import { Tabs as Ne, TabsContent as Pe, TabsList as Fe, TabsTrigger as Ie } from "./components/tabs.js";
|
|
31
|
+
import { Text as Le } from "./components/text.js";
|
|
32
|
+
import { ThemeProvider as Re } from "./providers/theme.js";
|
|
33
|
+
import { ThemeToggle as ze } from "./components/theme-toggle.js";
|
|
34
|
+
import { Toast as Be, Toaster as Ve, toast as He } from "./components/toast.js";
|
|
35
|
+
import { Toolbar as Ue } from "./components/toolbar.js";
|
|
36
|
+
export { l as AlertDialog, u as AlertDialogAction, d as AlertDialogCancel, f as AlertDialogContent, p as AlertDialogDescription, m as AlertDialogFooter, h as AlertDialogHeader, g as AlertDialogTitle, _ as AlertDialogTrigger, v as Avatar, y as AvatarFallback, b as AvatarImage, x as Badge, e as Button, S as Checkbox, C as Collapsible, w as CollapsibleContent, T as CollapsibleTrigger, E as CommandEmpty, D as CommandGroup, O as CommandInput, k as CommandItem, A as CommandList, j as CommandPalette, M as CommandPaletteTrigger, N as CommandSeparator, P as CommandShortcut, F as ConfirmDialog, ge as ContentIsland, L as DescriptionList, t as Dialog, n as DialogClose, r as DialogContent, i as DialogDescription, a as DialogFooter, o as DialogHeader, s as DialogTitle, c as DialogTrigger, R as DropdownMenu, z as DropdownMenuContent, B as DropdownMenuItem, V as DropdownMenuTrigger, q as Field, J as Input, K as Label, Y as LayerCard, Z as Link, X as LinkProvider, Q as Meter, $ as Popover, ee as PopoverClose, te as PopoverContent, ne as PopoverDescription, re as PopoverTitle, ie as PopoverTrigger, ae as ScrollArea, oe as SegmentControl, se as Separator, ce as Sheet, le as SheetClose, ue as SheetContent, de as SheetDescription, fe as SheetFooter, pe as SheetHeader, me as SheetTitle, he as SheetTrigger, _e as Sidebar, ve as SidebarBrand, ye as SidebarFooter, be as SidebarGroup, xe as SidebarHeader, Se as SidebarIconItem, Ce as SidebarItem, we as SidebarNav, Te as SidebarPartition, Ee as SidebarProvider, De as SidebarSearch, Oe as SidebarToggle, ke as SidebarUser, Ae as StatStrip, je as Switch, Me as TablePager, Ne as Tabs, Pe as TabsContent, Fe as TabsList, Ie as TabsTrigger, Le as Text, Re as ThemeProvider, ze as ThemeToggle, Be as Toast, Ve as Toaster, Ue as Toolbar, H as Tooltip, U as TooltipContent, W as TooltipProvider, G as TooltipTrigger, He as toast, I as useConfirm };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
2
|
+
// src/models/agent-feedback.ts
|
|
3
3
|
function e(e) {
|
|
4
4
|
let t = e.filter((e) => e.status === "complete").length, n = e.some((e) => e.status === "error") ? "error" : e.some((e) => e.status === "running") ? "running" : e.length > 0 && t === e.length ? "complete" : "pending";
|
|
5
5
|
return {
|
|
@@ -22,7 +22,6 @@ function n(e, t) {
|
|
|
22
22
|
}];
|
|
23
23
|
}));
|
|
24
24
|
}
|
|
25
|
-
//#endregion
|
|
26
25
|
export { n as approvalSnapshot, e as summarizeSteps, t as validApprovalAnswer };
|
|
27
26
|
|
|
28
27
|
//# sourceMappingURL=agent-feedback.js.map
|
package/dist/models/avatar.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
2
|
+
// src/models/avatar.ts
|
|
3
3
|
function e(e) {
|
|
4
4
|
let t = e.trim().split(/[\s—–-]+/u).filter(Boolean), n = t.length > 1 ? [Array.from(t[0])[0], Array.from(t[1])[0]] : Array.from(t[0] ?? "").slice(0, 2);
|
|
5
5
|
return Array.from(n.join("").toLocaleUpperCase("en-US")).slice(0, 2).join("") || "?";
|
|
@@ -9,7 +9,6 @@ function t(e) {
|
|
|
9
9
|
for (let n of e) t = Math.imul(t ^ (n.codePointAt(0) ?? 0), 16777619);
|
|
10
10
|
return (t >>> 0) % 6;
|
|
11
11
|
}
|
|
12
|
-
//#endregion
|
|
13
12
|
export { t as avatarColorIndex, e as avatarInitials };
|
|
14
13
|
|
|
15
14
|
//# sourceMappingURL=avatar.js.map
|
package/dist/models/code.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
2
|
+
// src/models/code.ts
|
|
3
3
|
var e = /(\/\/[^\n]*)|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`[^`]*`)|\b(import|from|export|default|async|await|function|return|const|let|var|type|interface|as|if|else|throw|new|typeof|null|true|false|undefined)\b|(\b\d+\b)|(<\/?[A-Za-z][\w.-]*)/g;
|
|
4
4
|
function t(t, n) {
|
|
5
5
|
let r = [], i = 0;
|
|
@@ -18,7 +18,6 @@ function t(t, n) {
|
|
|
18
18
|
});
|
|
19
19
|
return a;
|
|
20
20
|
}
|
|
21
|
-
//#endregion
|
|
22
21
|
export { t as codeLines };
|
|
23
22
|
|
|
24
23
|
//# sourceMappingURL=code.js.map
|