@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.
Files changed (192) hide show
  1. package/README.md +25 -19
  2. package/ai/COMPATIBILITY.md +41 -36
  3. package/ai/DESIGN.md +53 -47
  4. package/ai/INTEGRATION.md +814 -820
  5. package/ai/RECIPES.md +334 -135
  6. package/ai/USAGE.md +2 -2
  7. package/ai/registry.json +384 -27
  8. package/ai/sources.json +2 -2
  9. package/dist/assets/brand-mark.js +1 -2
  10. package/dist/charts/area.js +1 -2
  11. package/dist/charts/bar.js +1 -2
  12. package/dist/charts/bullet.js +1 -2
  13. package/dist/charts/chart-colors.js +1 -2
  14. package/dist/charts/charts.js +1 -2
  15. package/dist/charts/config.js +1 -2
  16. package/dist/charts/custom-chart.js +1 -2
  17. package/dist/charts/date-navigation.js +1 -2
  18. package/dist/charts/donut.js +1 -2
  19. package/dist/charts/frame.js +1 -2
  20. package/dist/charts/frame.js.map +1 -1
  21. package/dist/charts/funnel.js +1 -2
  22. package/dist/charts/gauge.js +1 -2
  23. package/dist/charts/grouped-bar.js +1 -2
  24. package/dist/charts/heatmap-calendar.js +3 -7
  25. package/dist/charts/heatmap-calendar.js.map +1 -1
  26. package/dist/charts/heatmap-matrix.js +1 -2
  27. package/dist/charts/item-list.js +1 -2
  28. package/dist/charts/legend.js +1 -2
  29. package/dist/charts/line.js +1 -2
  30. package/dist/charts/palette.js +1 -2
  31. package/dist/charts/radar.js +1 -2
  32. package/dist/charts/sample.js +1 -2
  33. package/dist/charts/sankey.js +1 -2
  34. package/dist/charts/series.js +1 -2
  35. package/dist/charts/slot-bar.js +1 -2
  36. package/dist/charts/sparkline.js +1 -2
  37. package/dist/charts/stacked-bar.js +1 -2
  38. package/dist/charts/stat-card.js +1 -2
  39. package/dist/charts/timeline.js +1 -2
  40. package/dist/charts/timeseries.js +1 -2
  41. package/dist/charts/tooltip.js +31 -27
  42. package/dist/charts/tooltip.js.map +1 -1
  43. package/dist/components/accordion.js +1 -2
  44. package/dist/components/alert-dialog.js +1 -2
  45. package/dist/components/app-header.js +1 -2
  46. package/dist/components/app-shell.js +1 -2
  47. package/dist/components/approval-card.js +1 -2
  48. package/dist/components/autocomplete.js +1 -2
  49. package/dist/components/avatar.js +1 -2
  50. package/dist/components/badge.js +1 -2
  51. package/dist/components/banner.js +1 -2
  52. package/dist/components/basalt-mark.js +1 -2
  53. package/dist/components/battery-meter.js +1 -2
  54. package/dist/components/breadcrumbs.js +1 -2
  55. package/dist/components/button.d.ts +1 -1
  56. package/dist/components/button.js +3 -3
  57. package/dist/components/button.js.map +1 -1
  58. package/dist/components/chat-bubble.js +1 -2
  59. package/dist/components/chat-composer.js +1 -2
  60. package/dist/components/chat-header.js +1 -2
  61. package/dist/components/chat-inbox.js +1 -2
  62. package/dist/components/chat-markdown.js +1 -2
  63. package/dist/components/chat-message.js +1 -2
  64. package/dist/components/checkbox.js +1 -2
  65. package/dist/components/clipboard-text.js +1 -2
  66. package/dist/components/code.js +1 -2
  67. package/dist/components/collapsible.js +1 -2
  68. package/dist/components/collapsible.js.map +1 -1
  69. package/dist/components/combobox.js +1 -2
  70. package/dist/components/command-palette.js +1 -2
  71. package/dist/components/confirm-dialog.js +3 -12
  72. package/dist/components/confirm-dialog.js.map +1 -1
  73. package/dist/components/context-cards.js +1 -2
  74. package/dist/components/context-menu.js +1 -2
  75. package/dist/components/data-table.js +2 -7
  76. package/dist/components/data-table.js.map +1 -1
  77. package/dist/components/date-picker.js +7 -18
  78. package/dist/components/date-picker.js.map +1 -1
  79. package/dist/components/delete-resource.js +1 -2
  80. package/dist/components/description-list.js +1 -2
  81. package/dist/components/dialog.js +1 -2
  82. package/dist/components/diff-table.js +1 -2
  83. package/dist/components/dock.js +1 -2
  84. package/dist/components/dock.js.map +1 -1
  85. package/dist/components/dropdown-menu.js +1 -2
  86. package/dist/components/editable-nav-item.js +1 -2
  87. package/dist/components/empty.js +1 -2
  88. package/dist/components/fab.js +1 -2
  89. package/dist/components/field.js +1 -2
  90. package/dist/components/file-dropzone.js +1 -2
  91. package/dist/components/filter-bar.js +1 -2
  92. package/dist/components/flow.js +1 -2
  93. package/dist/components/grid.js +1 -2
  94. package/dist/components/hover-card.js +1 -2
  95. package/dist/components/icon-picker.js +1 -2
  96. package/dist/components/inline-editable.js +1 -2
  97. package/dist/components/input-area.js +1 -2
  98. package/dist/components/input-group.js +2 -3
  99. package/dist/components/input-group.js.map +1 -1
  100. package/dist/components/input.js +1 -2
  101. package/dist/components/label.js +1 -2
  102. package/dist/components/layer-card.js +1 -2
  103. package/dist/components/link.js +1 -2
  104. package/dist/components/loader.js +1 -2
  105. package/dist/components/loading-screen.js +1 -2
  106. package/dist/components/menu-bar.js +1 -2
  107. package/dist/components/meter.js +1 -2
  108. package/dist/components/multi-select.js +1 -2
  109. package/dist/components/navigation-menu.js +1 -2
  110. package/dist/components/overlay.js +1 -2
  111. package/dist/components/page-header.js +1 -2
  112. package/dist/components/pagination.js +1 -2
  113. package/dist/components/popover.js +1 -2
  114. package/dist/components/prompt-bar.js +1 -2
  115. package/dist/components/radio.js +2 -7
  116. package/dist/components/radio.js.map +1 -1
  117. package/dist/components/recommendation-card.js +1 -2
  118. package/dist/components/resource-list.js +1 -2
  119. package/dist/components/responsive-master-detail.js +1 -2
  120. package/dist/components/scroll-area.js +1 -2
  121. package/dist/components/section-rule.js +1 -2
  122. package/dist/components/segment-control.js +1 -2
  123. package/dist/components/select.js +1 -2
  124. package/dist/components/sensitive-input.js +1 -2
  125. package/dist/components/separator.js +1 -2
  126. package/dist/components/sheet.js +1 -2
  127. package/dist/components/sidebar.d.ts +53 -19
  128. package/dist/components/sidebar.js +201 -100
  129. package/dist/components/sidebar.js.map +1 -1
  130. package/dist/components/skeleton-line.js +1 -2
  131. package/dist/components/slider.js +1 -2
  132. package/dist/components/stat-strip.js +1 -2
  133. package/dist/components/switch.js +1 -2
  134. package/dist/components/table-of-contents.js +1 -2
  135. package/dist/components/table-pager.js +1 -2
  136. package/dist/components/table.js +1 -2
  137. package/dist/components/tabs.js +1 -2
  138. package/dist/components/tag-badge.js +1 -2
  139. package/dist/components/tag-color-picker.js +1 -2
  140. package/dist/components/text.js +1 -2
  141. package/dist/components/theme-toggle.js +1 -2
  142. package/dist/components/thinking.js +1 -2
  143. package/dist/components/toast.js +1 -2
  144. package/dist/components/toggle-group.js +1 -2
  145. package/dist/components/toggle.js +1 -2
  146. package/dist/components/tool-chips.js +1 -2
  147. package/dist/components/toolbar.js +1 -2
  148. package/dist/components/tooltip.js +1 -2
  149. package/dist/components/typeahead-field.js +6 -21
  150. package/dist/components/typeahead-field.js.map +1 -1
  151. package/dist/components/upload-queue.js +1 -2
  152. package/dist/index.d.ts +1 -1
  153. package/dist/index.js +11 -11
  154. package/dist/models/agent-feedback.js +1 -2
  155. package/dist/models/avatar.js +1 -2
  156. package/dist/models/code.js +1 -2
  157. package/dist/models/context-cards.js +1 -2
  158. package/dist/models/diff-table.js +1 -2
  159. package/dist/models/recommendation.js +1 -2
  160. package/dist/providers/accent.js +2 -7
  161. package/dist/providers/accent.js.map +1 -1
  162. package/dist/providers/link.js +1 -2
  163. package/dist/providers/theme.js +2 -7
  164. package/dist/providers/theme.js.map +1 -1
  165. package/dist/styles/standalone.css +55 -11
  166. package/dist/styles/tailwind.css +2 -0
  167. package/dist/styles/tokens.css +51 -6
  168. package/dist/utils/cn.js +1 -2
  169. package/dist/utils/control-surface.js +1 -2
  170. package/dist/utils/navigation.d.ts +1 -1
  171. package/dist/utils/navigation.js +2 -3
  172. package/dist/utils/navigation.js.map +1 -1
  173. package/dist/utils/preference-store.js +1 -2
  174. package/dist/utils/selection-indicator.js +1 -2
  175. package/dist/utils/use-checkable-group.js +1 -2
  176. package/dist/utils/use-hover-highlight.js +2 -3
  177. package/dist/utils/use-hover-highlight.js.map +1 -1
  178. package/dist/viewmodels/use-approval-card.js +11 -13
  179. package/dist/viewmodels/use-approval-card.js.map +1 -1
  180. package/dist/viewmodels/use-chat-composer.js +1 -2
  181. package/dist/viewmodels/use-chat-message.js +1 -2
  182. package/dist/viewmodels/use-code-block.js +1 -2
  183. package/dist/viewmodels/use-code-block.js.map +1 -1
  184. package/dist/viewmodels/use-context-cards.js +1 -2
  185. package/dist/viewmodels/use-diff-table.js +1 -2
  186. package/dist/viewmodels/use-diff-table.js.map +1 -1
  187. package/dist/viewmodels/use-loader.js +1 -2
  188. package/dist/viewmodels/use-recommendation-card.js +1 -2
  189. package/dist/viewmodels/use-recommendation-card.js.map +1 -1
  190. package/dist/viewmodels/use-thinking.js +1 -2
  191. package/dist/viewmodels/use-tool-chips.js +1 -2
  192. 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
- //#region src/components/skeleton-line.tsx
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
- //#region src/components/slider.tsx
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
- //#region src/components/stat-strip.tsx
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
- //#region src/components/switch.tsx
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
- //#region src/components/table-of-contents.tsx
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
- //#region src/components/table-pager.tsx
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
@@ -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
- //#region src/components/table.tsx
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
@@ -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
- //#region src/components/tabs.tsx
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
- //#region src/components/tag-badge.tsx
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
- //#region src/components/tag-color-picker.tsx
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
@@ -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
- //#region src/components/text.tsx
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
- //#region src/components/theme-toggle.tsx
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
- //#region src/components/thinking.tsx
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
@@ -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
- //#region src/components/toast.tsx
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
- //#region src/components/toggle-group.tsx
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
- //#region src/components/toggle.tsx
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
- //#region src/components/tool-chips.tsx
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
- //#region src/components/toolbar.tsx
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
- //#region src/components/tooltip.tsx
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
- //#region src/components/typeahead-field.tsx
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), (!P || A === U) && j(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
- if (r) {
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
- if (!X) {
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
- return;
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
- return;
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
- //#region src/components/upload-queue.tsx
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, SidebarFooter as ve, SidebarGroup as ye, SidebarHeader as be, SidebarIconItem as xe, SidebarItem as Se, SidebarNav as Ce, SidebarPartition as we, SidebarProvider as Te, SidebarSearch as Ee, SidebarUser as De } from "./components/sidebar.js";
27
- import { StatStrip as Oe } from "./components/stat-strip.js";
28
- import { Switch as ke } from "./components/switch.js";
29
- import { TablePager as Ae } from "./components/table-pager.js";
30
- import { Tabs as je, TabsContent as Me, TabsList as Ne, TabsTrigger as Pe } from "./components/tabs.js";
31
- import { Text as Fe } from "./components/text.js";
32
- import { ThemeProvider as Ie } from "./providers/theme.js";
33
- import { ThemeToggle as Le } from "./components/theme-toggle.js";
34
- import { Toast as Re, Toaster as ze, toast as Be } from "./components/toast.js";
35
- import { Toolbar as Ve } 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 SidebarFooter, ye as SidebarGroup, be as SidebarHeader, xe as SidebarIconItem, Se as SidebarItem, Ce as SidebarNav, we as SidebarPartition, Te as SidebarProvider, Ee as SidebarSearch, De as SidebarUser, Oe as StatStrip, ke as Switch, Ae as TablePager, je as Tabs, Me as TabsContent, Ne as TabsList, Pe as TabsTrigger, Fe as Text, Ie as ThemeProvider, Le as ThemeToggle, Re as Toast, ze as Toaster, Ve as Toolbar, H as Tooltip, U as TooltipContent, W as TooltipProvider, G as TooltipTrigger, Be as toast, I as useConfirm };
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
- //#region src/models/agent-feedback.ts
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
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- //#region src/models/avatar.ts
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
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- //#region src/models/code.ts
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