@nocoo/basalt 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/dist/charts/area.d.ts +8 -0
  4. package/dist/charts/area.js +55 -0
  5. package/dist/charts/area.js.map +1 -0
  6. package/dist/charts/bar.d.ts +9 -0
  7. package/dist/charts/bar.js +42 -0
  8. package/dist/charts/bar.js.map +1 -0
  9. package/dist/charts/bullet.d.ts +8 -0
  10. package/dist/charts/bullet.js +50 -0
  11. package/dist/charts/bullet.js.map +1 -0
  12. package/dist/charts/chart-colors.d.ts +1 -0
  13. package/dist/charts/chart-colors.js +3 -0
  14. package/dist/charts/charts.d.ts +6 -0
  15. package/dist/charts/charts.js +15 -0
  16. package/dist/charts/charts.js.map +1 -0
  17. package/dist/charts/config.d.ts +117 -0
  18. package/dist/charts/config.js +117 -0
  19. package/dist/charts/config.js.map +1 -0
  20. package/dist/charts/custom-chart.d.ts +6 -0
  21. package/dist/charts/custom-chart.js +15 -0
  22. package/dist/charts/custom-chart.js.map +1 -0
  23. package/dist/charts/date-navigation.d.ts +22 -0
  24. package/dist/charts/date-navigation.js +122 -0
  25. package/dist/charts/date-navigation.js.map +1 -0
  26. package/dist/charts/donut.d.ts +8 -0
  27. package/dist/charts/donut.js +36 -0
  28. package/dist/charts/donut.js.map +1 -0
  29. package/dist/charts/frame.d.ts +9 -0
  30. package/dist/charts/frame.js +22 -0
  31. package/dist/charts/frame.js.map +1 -0
  32. package/dist/charts/funnel.d.ts +7 -0
  33. package/dist/charts/funnel.js +35 -0
  34. package/dist/charts/funnel.js.map +1 -0
  35. package/dist/charts/gauge.d.ts +8 -0
  36. package/dist/charts/gauge.js +46 -0
  37. package/dist/charts/gauge.js.map +1 -0
  38. package/dist/charts/grouped-bar.d.ts +7 -0
  39. package/dist/charts/grouped-bar.js +42 -0
  40. package/dist/charts/grouped-bar.js.map +1 -0
  41. package/dist/charts/heatmap-calendar.d.ts +27 -0
  42. package/dist/charts/heatmap-calendar.js +200 -0
  43. package/dist/charts/heatmap-calendar.js.map +1 -0
  44. package/dist/charts/item-list.d.ts +9 -0
  45. package/dist/charts/item-list.js +22 -0
  46. package/dist/charts/item-list.js.map +1 -0
  47. package/dist/charts/line.d.ts +9 -0
  48. package/dist/charts/line.js +58 -0
  49. package/dist/charts/line.js.map +1 -0
  50. package/dist/charts/palette.d.ts +33 -0
  51. package/dist/charts/palette.js +44 -0
  52. package/dist/charts/palette.js.map +1 -0
  53. package/dist/charts/radar.d.ts +6 -0
  54. package/dist/charts/radar.js +37 -0
  55. package/dist/charts/radar.js.map +1 -0
  56. package/dist/charts/sample.d.ts +42 -0
  57. package/dist/charts/sample.js +124 -0
  58. package/dist/charts/sample.js.map +1 -0
  59. package/dist/charts/sankey.d.ts +6 -0
  60. package/dist/charts/sankey.js +51 -0
  61. package/dist/charts/sankey.js.map +1 -0
  62. package/dist/charts/slot-bar.d.ts +15 -0
  63. package/dist/charts/slot-bar.js +80 -0
  64. package/dist/charts/slot-bar.js.map +1 -0
  65. package/dist/charts/sparkline.d.ts +6 -0
  66. package/dist/charts/sparkline.js +29 -0
  67. package/dist/charts/sparkline.js.map +1 -0
  68. package/dist/charts/stacked-bar.d.ts +7 -0
  69. package/dist/charts/stacked-bar.js +51 -0
  70. package/dist/charts/stacked-bar.js.map +1 -0
  71. package/dist/charts/stat-card.d.ts +21 -0
  72. package/dist/charts/stat-card.js +66 -0
  73. package/dist/charts/stat-card.js.map +1 -0
  74. package/dist/charts/timeline.d.ts +17 -0
  75. package/dist/charts/timeline.js +79 -0
  76. package/dist/charts/timeline.js.map +1 -0
  77. package/dist/charts/timeseries.d.ts +6 -0
  78. package/dist/charts/timeseries.js +15 -0
  79. package/dist/charts/timeseries.js.map +1 -0
  80. package/dist/components/accordion.d.ts +6 -0
  81. package/dist/components/accordion.js +21 -0
  82. package/dist/components/accordion.js.map +1 -0
  83. package/dist/components/alert-dialog.d.ts +25 -0
  84. package/dist/components/alert-dialog.js +61 -0
  85. package/dist/components/alert-dialog.js.map +1 -0
  86. package/dist/components/app-header.d.ts +10 -0
  87. package/dist/components/app-header.js +35 -0
  88. package/dist/components/app-header.js.map +1 -0
  89. package/dist/components/app-shell.d.ts +4 -0
  90. package/dist/components/app-shell.js +29 -0
  91. package/dist/components/app-shell.js.map +1 -0
  92. package/dist/components/autocomplete.d.ts +47 -0
  93. package/dist/components/autocomplete.js +28 -0
  94. package/dist/components/autocomplete.js.map +1 -0
  95. package/dist/components/avatar.d.ts +5 -0
  96. package/dist/components/avatar.js +28 -0
  97. package/dist/components/avatar.js.map +1 -0
  98. package/dist/components/badge.d.ts +10 -0
  99. package/dist/components/badge.js +37 -0
  100. package/dist/components/badge.js.map +1 -0
  101. package/dist/components/banner.d.ts +22 -0
  102. package/dist/components/banner.js +88 -0
  103. package/dist/components/banner.js.map +1 -0
  104. package/dist/components/basalt-mark.d.ts +8 -0
  105. package/dist/components/basalt-mark.js +17 -0
  106. package/dist/components/basalt-mark.js.map +1 -0
  107. package/dist/components/breadcrumbs.d.ts +9 -0
  108. package/dist/components/breadcrumbs.js +38 -0
  109. package/dist/components/breadcrumbs.js.map +1 -0
  110. package/dist/components/button.d.ts +17 -0
  111. package/dist/components/button.js +73 -0
  112. package/dist/components/button.js.map +1 -0
  113. package/dist/components/checkbox.d.ts +86 -0
  114. package/dist/components/checkbox.js +107 -0
  115. package/dist/components/checkbox.js.map +1 -0
  116. package/dist/components/clipboard-text.d.ts +5 -0
  117. package/dist/components/clipboard-text.js +33 -0
  118. package/dist/components/clipboard-text.js.map +1 -0
  119. package/dist/components/code.d.ts +26 -0
  120. package/dist/components/code.js +45 -0
  121. package/dist/components/code.js.map +1 -0
  122. package/dist/components/collapsible.d.ts +33 -0
  123. package/dist/components/collapsible.js +38 -0
  124. package/dist/components/collapsible.js.map +1 -0
  125. package/dist/components/combobox.d.ts +47 -0
  126. package/dist/components/combobox.js +28 -0
  127. package/dist/components/combobox.js.map +1 -0
  128. package/dist/components/command-palette.d.ts +83 -0
  129. package/dist/components/command-palette.js +90 -0
  130. package/dist/components/command-palette.js.map +1 -0
  131. package/dist/components/confirm-dialog.d.ts +52 -0
  132. package/dist/components/confirm-dialog.js +61 -0
  133. package/dist/components/confirm-dialog.js.map +1 -0
  134. package/dist/components/context-menu.d.ts +7 -0
  135. package/dist/components/context-menu.js +23 -0
  136. package/dist/components/context-menu.js.map +1 -0
  137. package/dist/components/data-table.d.ts +76 -0
  138. package/dist/components/data-table.js +230 -0
  139. package/dist/components/data-table.js.map +1 -0
  140. package/dist/components/date-picker.d.ts +90 -0
  141. package/dist/components/date-picker.js +452 -0
  142. package/dist/components/date-picker.js.map +1 -0
  143. package/dist/components/dialog.d.ts +37 -0
  144. package/dist/components/dialog.js +67 -0
  145. package/dist/components/dialog.js.map +1 -0
  146. package/dist/components/dropdown-menu.d.ts +38 -0
  147. package/dist/components/dropdown-menu.js +24 -0
  148. package/dist/components/dropdown-menu.js.map +1 -0
  149. package/dist/components/empty.d.ts +6 -0
  150. package/dist/components/empty.js +28 -0
  151. package/dist/components/empty.js.map +1 -0
  152. package/dist/components/field.d.ts +39 -0
  153. package/dist/components/field.js +52 -0
  154. package/dist/components/field.js.map +1 -0
  155. package/dist/components/flow.d.ts +24 -0
  156. package/dist/components/flow.js +56 -0
  157. package/dist/components/flow.js.map +1 -0
  158. package/dist/components/grid.d.ts +15 -0
  159. package/dist/components/grid.js +24 -0
  160. package/dist/components/grid.js.map +1 -0
  161. package/dist/components/hover-card.d.ts +5 -0
  162. package/dist/components/hover-card.js +18 -0
  163. package/dist/components/hover-card.js.map +1 -0
  164. package/dist/components/input-area.d.ts +19 -0
  165. package/dist/components/input-area.js +27 -0
  166. package/dist/components/input-area.js.map +1 -0
  167. package/dist/components/input-group.d.ts +70 -0
  168. package/dist/components/input-group.js +78 -0
  169. package/dist/components/input-group.js.map +1 -0
  170. package/dist/components/input.d.ts +19 -0
  171. package/dist/components/input.js +28 -0
  172. package/dist/components/input.js.map +1 -0
  173. package/dist/components/label.d.ts +20 -0
  174. package/dist/components/label.js +34 -0
  175. package/dist/components/label.js.map +1 -0
  176. package/dist/components/layer-card.d.ts +69 -0
  177. package/dist/components/layer-card.js +104 -0
  178. package/dist/components/layer-card.js.map +1 -0
  179. package/dist/components/link.d.ts +8 -0
  180. package/dist/components/link.js +18 -0
  181. package/dist/components/link.js.map +1 -0
  182. package/dist/components/loader.d.ts +4 -0
  183. package/dist/components/loader.js +66 -0
  184. package/dist/components/loader.js.map +1 -0
  185. package/dist/components/loading-screen.d.ts +5 -0
  186. package/dist/components/loading-screen.js +24 -0
  187. package/dist/components/loading-screen.js.map +1 -0
  188. package/dist/components/menu-bar.d.ts +8 -0
  189. package/dist/components/menu-bar.js +42 -0
  190. package/dist/components/menu-bar.js.map +1 -0
  191. package/dist/components/meter.d.ts +8 -0
  192. package/dist/components/meter.js +26 -0
  193. package/dist/components/meter.js.map +1 -0
  194. package/dist/components/navigation-menu.d.ts +6 -0
  195. package/dist/components/navigation-menu.js +16 -0
  196. package/dist/components/navigation-menu.js.map +1 -0
  197. package/dist/components/overlay.d.ts +16 -0
  198. package/dist/components/overlay.js +14 -0
  199. package/dist/components/overlay.js.map +1 -0
  200. package/dist/components/page-header.d.ts +19 -0
  201. package/dist/components/page-header.js +43 -0
  202. package/dist/components/page-header.js.map +1 -0
  203. package/dist/components/pagination.d.ts +35 -0
  204. package/dist/components/pagination.js +68 -0
  205. package/dist/components/pagination.js.map +1 -0
  206. package/dist/components/popover.d.ts +38 -0
  207. package/dist/components/popover.js +65 -0
  208. package/dist/components/popover.js.map +1 -0
  209. package/dist/components/radio.d.ts +108 -0
  210. package/dist/components/radio.js +80 -0
  211. package/dist/components/radio.js.map +1 -0
  212. package/dist/components/scroll-area.d.ts +15 -0
  213. package/dist/components/scroll-area.js +49 -0
  214. package/dist/components/scroll-area.js.map +1 -0
  215. package/dist/components/segment-control.d.ts +35 -0
  216. package/dist/components/segment-control.js +46 -0
  217. package/dist/components/segment-control.js.map +1 -0
  218. package/dist/components/select.d.ts +99 -0
  219. package/dist/components/select.js +51 -0
  220. package/dist/components/select.js.map +1 -0
  221. package/dist/components/sensitive-input.d.ts +23 -0
  222. package/dist/components/sensitive-input.js +43 -0
  223. package/dist/components/sensitive-input.js.map +1 -0
  224. package/dist/components/separator.d.ts +26 -0
  225. package/dist/components/separator.js +18 -0
  226. package/dist/components/separator.js.map +1 -0
  227. package/dist/components/sheet.d.ts +26 -0
  228. package/dist/components/sheet.js +49 -0
  229. package/dist/components/sheet.js.map +1 -0
  230. package/dist/components/sidebar.d.ts +101 -0
  231. package/dist/components/sidebar.js +260 -0
  232. package/dist/components/sidebar.js.map +1 -0
  233. package/dist/components/skeleton-line.d.ts +6 -0
  234. package/dist/components/skeleton-line.js +22 -0
  235. package/dist/components/skeleton-line.js.map +1 -0
  236. package/dist/components/slider.d.ts +3 -0
  237. package/dist/components/slider.js +21 -0
  238. package/dist/components/slider.js.map +1 -0
  239. package/dist/components/stat-strip.d.ts +19 -0
  240. package/dist/components/stat-strip.js +27 -0
  241. package/dist/components/stat-strip.js.map +1 -0
  242. package/dist/components/switch.d.ts +85 -0
  243. package/dist/components/switch.js +94 -0
  244. package/dist/components/switch.js.map +1 -0
  245. package/dist/components/table-of-contents.d.ts +33 -0
  246. package/dist/components/table-of-contents.js +37 -0
  247. package/dist/components/table-of-contents.js.map +1 -0
  248. package/dist/components/table-pager.d.ts +26 -0
  249. package/dist/components/table-pager.js +35 -0
  250. package/dist/components/table-pager.js.map +1 -0
  251. package/dist/components/table.d.ts +45 -0
  252. package/dist/components/table.js +32 -0
  253. package/dist/components/table.js.map +1 -0
  254. package/dist/components/tabs.d.ts +65 -0
  255. package/dist/components/tabs.js +56 -0
  256. package/dist/components/tabs.js.map +1 -0
  257. package/dist/components/text.d.ts +32 -0
  258. package/dist/components/text.js +46 -0
  259. package/dist/components/text.js.map +1 -0
  260. package/dist/components/theme-toggle.d.ts +7 -0
  261. package/dist/components/theme-toggle.js +28 -0
  262. package/dist/components/theme-toggle.js.map +1 -0
  263. package/dist/components/toast.d.ts +27 -0
  264. package/dist/components/toast.js +78 -0
  265. package/dist/components/toast.js.map +1 -0
  266. package/dist/components/toggle-group.d.ts +4 -0
  267. package/dist/components/toggle-group.js +48 -0
  268. package/dist/components/toggle-group.js.map +1 -0
  269. package/dist/components/toggle.d.ts +7 -0
  270. package/dist/components/toggle.js +37 -0
  271. package/dist/components/toggle.js.map +1 -0
  272. package/dist/components/toolbar.d.ts +58 -0
  273. package/dist/components/toolbar.js +76 -0
  274. package/dist/components/toolbar.js.map +1 -0
  275. package/dist/components/tooltip.d.ts +13 -0
  276. package/dist/components/tooltip.js +18 -0
  277. package/dist/components/tooltip.js.map +1 -0
  278. package/dist/components/typeahead-field.d.ts +24 -0
  279. package/dist/components/typeahead-field.js +177 -0
  280. package/dist/components/typeahead-field.js.map +1 -0
  281. package/dist/index.d.ts +33 -0
  282. package/dist/index.js +35 -0
  283. package/dist/providers/link.d.ts +12 -0
  284. package/dist/providers/link.js +18 -0
  285. package/dist/providers/link.js.map +1 -0
  286. package/dist/providers/theme.d.ts +11 -0
  287. package/dist/providers/theme.js +43 -0
  288. package/dist/providers/theme.js.map +1 -0
  289. package/dist/styles/standalone.css +2233 -0
  290. package/dist/styles/tailwind.css +103 -0
  291. package/dist/styles/tokens.css +277 -0
  292. package/dist/utils/cn.d.ts +2 -0
  293. package/dist/utils/cn.js +11 -0
  294. package/dist/utils/cn.js.map +1 -0
  295. package/dist/utils/control-surface.d.ts +2 -0
  296. package/dist/utils/control-surface.js +11 -0
  297. package/dist/utils/control-surface.js.map +1 -0
  298. package/dist/utils/selection-indicator.d.ts +24 -0
  299. package/dist/utils/selection-indicator.js +108 -0
  300. package/dist/utils/selection-indicator.js.map +1 -0
  301. package/package.json +107 -0
@@ -0,0 +1,38 @@
1
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
2
+ import * as React from "react";
3
+ export type DropdownMenuProps = Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>, "open" | "defaultOpen" | "onOpenChange"> & {
4
+ /**
5
+ * The controlled open state.
6
+ */
7
+ open?: boolean;
8
+ /**
9
+ * The uncontrolled initial open state.
10
+ * @default false
11
+ */
12
+ defaultOpen?: boolean;
13
+ /**
14
+ * Called when the open state changes.
15
+ */
16
+ onOpenChange?: (open: boolean) => void;
17
+ };
18
+ export declare const DropdownMenu: React.FC<DropdownMenuProps>;
19
+ export declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
20
+ export declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
21
+ export declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
22
+ export declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
23
+ export declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
24
+ export declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
25
+ export type DropdownMenuItemProps = Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>, "disabled"> & {
26
+ /**
27
+ * Disable the menu item.
28
+ * @default false
29
+ */
30
+ disabled?: boolean;
31
+ };
32
+ export declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref">, "disabled"> & {
33
+ /**
34
+ * Disable the menu item.
35
+ * @default false
36
+ */
37
+ disabled?: boolean;
38
+ } & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { overlayItemClass as t, overlayPanelClass as n } from "./overlay.js";
4
+ import * as r from "react";
5
+ import { jsx as i } from "react/jsx-runtime";
6
+ import * as a from "@radix-ui/react-dropdown-menu";
7
+ //#region src/components/dropdown-menu.tsx
8
+ var o = a.Root, s = a.Trigger, c = a.Group, l = a.Portal, u = a.Sub, d = a.RadioGroup, f = r.forwardRef(({ className: t, sideOffset: r = 8, ...o }, s) => /* @__PURE__ */ i(a.Portal, { children: /* @__PURE__ */ i(a.Content, {
9
+ ref: s,
10
+ sideOffset: r,
11
+ className: n(e("min-w-40", t)),
12
+ ...o
13
+ }) }));
14
+ f.displayName = a.Content.displayName;
15
+ var p = r.forwardRef(({ className: n, ...r }, o) => /* @__PURE__ */ i(a.Item, {
16
+ ref: o,
17
+ className: t(e("relative outline-hidden focus:bg-basalt-accent data-disabled:pointer-events-none data-disabled:opacity-50", n)),
18
+ ...r
19
+ }));
20
+ p.displayName = a.Item.displayName;
21
+ //#endregion
22
+ export { o as DropdownMenu, f as DropdownMenuContent, c as DropdownMenuGroup, p as DropdownMenuItem, l as DropdownMenuPortal, d as DropdownMenuRadioGroup, u as DropdownMenuSub, s as DropdownMenuTrigger };
23
+
24
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../src/components/dropdown-menu.tsx"],"sourcesContent":["import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { MENU_GAP, overlayItemClass, overlayPanelClass } from \"./overlay\";\n\nexport type DropdownMenuProps = Omit<\n\tReact.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>,\n\t\"open\" | \"defaultOpen\" | \"onOpenChange\"\n> & {\n\t/**\n\t * The controlled open state.\n\t */\n\topen?: boolean;\n\t/**\n\t * The uncontrolled initial open state.\n\t * @default false\n\t */\n\tdefaultOpen?: boolean;\n\t/**\n\t * Called when the open state changes.\n\t */\n\tonOpenChange?: (open: boolean) => void;\n};\nexport const DropdownMenu: React.FC<DropdownMenuProps> = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nexport const DropdownMenuContent = React.forwardRef<\n\tReact.ElementRef<typeof DropdownMenuPrimitive.Content>,\n\tReact.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = MENU_GAP, ...props }, ref) => (\n\t<DropdownMenuPrimitive.Portal>\n\t\t<DropdownMenuPrimitive.Content\n\t\t\tref={ref}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={overlayPanelClass(cn(\"min-w-40\", className))}\n\t\t\t{...props}\n\t\t/>\n\t</DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nexport type DropdownMenuItemProps = Omit<\n\tReact.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>,\n\t\"disabled\"\n> & {\n\t/**\n\t * Disable the menu item.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n};\n\nexport const DropdownMenuItem = React.forwardRef<\n\tReact.ElementRef<typeof DropdownMenuPrimitive.Item>,\n\tDropdownMenuItemProps\n>(({ className, ...props }, ref) => (\n\t<DropdownMenuPrimitive.Item\n\t\tref={ref}\n\t\tclassName={overlayItemClass(\n\t\t\tcn(\n\t\t\t\t\"relative outline-hidden focus:bg-basalt-accent data-disabled:pointer-events-none data-disabled:opacity-50\",\n\t\t\t\tclassName,\n\t\t\t),\n\t\t)}\n\t\t{...props}\n\t/>\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n"],"mappings":";;;;;;;AAuBA,IAAa,IAA4C,EAAsB,MAClE,IAAsB,EAAsB,SAC5C,IAAoB,EAAsB,OAC1C,IAAqB,EAAsB,QAC3C,IAAkB,EAAsB,KACxC,IAAyB,EAAsB,YAE/C,IAAsB,EAAM,YAGtC,EAAE,cAAW,gBAAA,GAAuB,GAAG,KAAS,MAClD,kBAAC,EAAsB,QAAvB,EAAA,UACC,kBAAC,EAAsB,SAAvB;CACM;CACO;CACZ,WAAW,EAAkB,EAAG,YAAY,CAAS,CAAC;CACtD,GAAI;AACJ,CAAA,EAC4B,CAAA,CAC9B;AACD,EAAoB,cAAc,EAAsB,QAAQ;AAahE,IAAa,IAAmB,EAAM,YAGnC,EAAE,cAAW,GAAG,KAAS,MAC3B,kBAAC,EAAsB,MAAvB;CACM;CACL,WAAW,EACV,EACC,6GACA,CACD,CACD;CACA,GAAI;AACJ,CAAA,CACD;AACD,EAAiB,cAAc,EAAsB,KAAK"}
@@ -0,0 +1,6 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export declare function Empty({ title, description, icon, className, ...props }: HTMLAttributes<HTMLDivElement> & {
3
+ title?: string;
4
+ description?: string;
5
+ icon?: ReactNode;
6
+ }): import("react").JSX.Element;
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
4
+ //#region src/components/empty.tsx
5
+ function r({ title: r = "No results", description: i, icon: a, className: o, ...s }) {
6
+ return /* @__PURE__ */ n("div", {
7
+ className: e("flex flex-col items-center gap-2 text-center", o),
8
+ ...s,
9
+ children: [
10
+ a ? /* @__PURE__ */ t("div", {
11
+ className: "text-basalt-muted-foreground [&_svg]:size-8",
12
+ children: a
13
+ }) : null,
14
+ /* @__PURE__ */ t("p", {
15
+ className: "text-sm font-medium text-basalt-foreground",
16
+ children: r
17
+ }),
18
+ i ? /* @__PURE__ */ t("p", {
19
+ className: "text-xs text-basalt-muted-foreground",
20
+ children: i
21
+ }) : null
22
+ ]
23
+ });
24
+ }
25
+ //#endregion
26
+ export { r as Empty };
27
+
28
+ //# sourceMappingURL=empty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty.js","names":[],"sources":["../../src/components/empty.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport function Empty({\n\ttitle = \"No results\",\n\tdescription,\n\ticon,\n\tclassName,\n\t...props\n}: HTMLAttributes<HTMLDivElement> & { title?: string; description?: string; icon?: ReactNode }) {\n\treturn (\n\t\t<div className={cn(\"flex flex-col items-center gap-2 text-center\", className)} {...props}>\n\t\t\t{icon ? <div className=\"text-basalt-muted-foreground [&_svg]:size-8\">{icon}</div> : null}\n\t\t\t<p className=\"text-sm font-medium text-basalt-foreground\">{title}</p>\n\t\t\t{description ? <p className=\"text-xs text-basalt-muted-foreground\">{description}</p> : null}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;AAGA,SAAgB,EAAM,EACrB,WAAQ,cACR,gBACA,SACA,cACA,GAAG,KAC4F;CAC/F,OACC,kBAAC,OAAD;EAAK,WAAW,EAAG,gDAAgD,CAAS;EAAG,GAAI;EAAnF,UAAA;GACE,IAAO,kBAAC,OAAD;IAAK,WAAU;IAA+C,UAAA;GAAU,CAAA,IAAI;GACpF,kBAAC,KAAD;IAAG,WAAU;IAA8C,UAAA;GAAS,CAAA;GACnE,IAAc,kBAAC,KAAD;IAAG,WAAU;IAAwC,UAAA;GAAe,CAAA,IAAI;EACnF;;AAEP"}
@@ -0,0 +1,39 @@
1
+ import * as React from "react";
2
+ export type FieldError = Exclude<React.ReactNode, undefined> | {
3
+ message: React.ReactNode;
4
+ };
5
+ export interface FieldProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children" | "className"> {
6
+ /**
7
+ * Visible label.
8
+ */
9
+ label: React.ReactNode;
10
+ /**
11
+ * Associates the label and described-by ids.
12
+ */
13
+ htmlFor?: string;
14
+ /**
15
+ * Supporting text when there is no error.
16
+ */
17
+ hint?: React.ReactNode;
18
+ /**
19
+ * Replaces the hint and marks the control invalid.
20
+ */
21
+ error?: FieldError;
22
+ /**
23
+ * When false, show (optional) after the label.
24
+ */
25
+ required?: boolean;
26
+ /**
27
+ * Info icon with hover text on the label.
28
+ */
29
+ labelTooltip?: React.ReactNode;
30
+ /**
31
+ * Additional classes for the field root.
32
+ */
33
+ className?: string;
34
+ /**
35
+ * The control or content to render.
36
+ */
37
+ children: React.ReactNode;
38
+ }
39
+ export declare const Field: React.ForwardRefExoticComponent<FieldProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { Label as t } from "./label.js";
4
+ import * as n from "react";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
+ //#region src/components/field.tsx
7
+ function a(e) {
8
+ return typeof e == "object" && !!e && !Array.isArray(e) && !n.isValidElement(e) && "message" in e;
9
+ }
10
+ function o(e) {
11
+ if (e != null) return a(e) ? e.message : e;
12
+ }
13
+ function s(e) {
14
+ return !!e;
15
+ }
16
+ var c = n.forwardRef(({ label: a, htmlFor: c, hint: l, error: u, required: d, labelTooltip: f, className: p, children: m, ...h }, g) => {
17
+ let _ = n.useId(), v = n.isValidElement(m) ? m : null, y = v ? c ?? v.props.id ?? _ : c, b = y ? `${y}-hint` : void 0, x = y ? `${y}-error` : void 0, S = o(u), C = s(S), w = [[C ? x : null, !C && l ? b : null].filter(Boolean).join(" "), v?.props["aria-describedby"]].filter(Boolean).join(" ");
18
+ return /* @__PURE__ */ i("div", {
19
+ ref: g,
20
+ ...h,
21
+ className: e("flex flex-col gap-1.5", p),
22
+ children: [
23
+ /* @__PURE__ */ r(t, {
24
+ htmlFor: y,
25
+ showOptional: d === !1,
26
+ tooltip: f,
27
+ children: a
28
+ }),
29
+ v ? n.cloneElement(v, {
30
+ id: y,
31
+ "aria-invalid": C ? !0 : v.props["aria-invalid"],
32
+ "aria-describedby": w || void 0
33
+ }) : m,
34
+ l && !C ? /* @__PURE__ */ r("p", {
35
+ id: b,
36
+ className: "text-xs text-basalt-muted-foreground",
37
+ children: l
38
+ }) : null,
39
+ C ? /* @__PURE__ */ r("p", {
40
+ id: x,
41
+ className: "text-xs text-basalt-destructive",
42
+ role: "alert",
43
+ children: S
44
+ }) : null
45
+ ]
46
+ });
47
+ });
48
+ c.displayName = "Field";
49
+ //#endregion
50
+ export { c as Field };
51
+
52
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","names":[],"sources":["../../src/components/field.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Label } from \"./label\";\n\nexport type FieldError = Exclude<React.ReactNode, undefined> | { message: React.ReactNode };\n\ntype FieldControlProps = {\n\tid?: string;\n\t\"aria-describedby\"?: string;\n\t\"aria-invalid\"?: boolean | \"true\" | \"false\";\n};\n\nexport interface FieldProps\n\textends Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\" | \"className\"> {\n\t/**\n\t * Visible label.\n\t */\n\tlabel: React.ReactNode;\n\t/**\n\t * Associates the label and described-by ids.\n\t */\n\thtmlFor?: string;\n\t/**\n\t * Supporting text when there is no error.\n\t */\n\thint?: React.ReactNode;\n\t/**\n\t * Replaces the hint and marks the control invalid.\n\t */\n\terror?: FieldError;\n\t/**\n\t * When false, show (optional) after the label.\n\t */\n\trequired?: boolean;\n\t/**\n\t * Info icon with hover text on the label.\n\t */\n\tlabelTooltip?: React.ReactNode;\n\t/**\n\t * Additional classes for the field root.\n\t */\n\tclassName?: string;\n\t/**\n\t * The control or content to render.\n\t */\n\tchildren: React.ReactNode;\n}\n\nfunction isStructuredError(error: FieldError): error is { message: React.ReactNode } {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t!Array.isArray(error) &&\n\t\t!React.isValidElement(error) &&\n\t\t\"message\" in error\n\t);\n}\n\nfunction fieldErrorMessage(error: FieldError | undefined): React.ReactNode | undefined {\n\tif (error == null) {\n\t\treturn undefined;\n\t}\n\treturn isStructuredError(error) ? error.message : error;\n}\n\nfunction hasFieldError(message: React.ReactNode | undefined): boolean {\n\treturn Boolean(message);\n}\n\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n\t({ label, htmlFor, hint, error, required, labelTooltip, className, children, ...props }, ref) => {\n\t\tconst generatedId = React.useId();\n\t\tconst child = React.isValidElement(children)\n\t\t\t? (children as React.ReactElement<FieldControlProps>)\n\t\t\t: null;\n\t\tconst controlId = child ? (htmlFor ?? child.props.id ?? generatedId) : htmlFor;\n\t\tconst hintId = controlId ? `${controlId}-hint` : undefined;\n\t\tconst errorId = controlId ? `${controlId}-error` : undefined;\n\t\tconst errorMessage = fieldErrorMessage(error);\n\t\tconst hasError = hasFieldError(errorMessage);\n\t\tconst describedBy = [hasError ? errorId : null, !hasError && hint ? hintId : null]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst mergedDescribedBy = [describedBy, child?.props[\"aria-describedby\"]]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\treturn (\n\t\t\t<div ref={ref} {...props} className={cn(\"flex flex-col gap-1.5\", className)}>\n\t\t\t\t<Label htmlFor={controlId} showOptional={required === false} tooltip={labelTooltip}>\n\t\t\t\t\t{label}\n\t\t\t\t</Label>\n\t\t\t\t{child\n\t\t\t\t\t? React.cloneElement(child, {\n\t\t\t\t\t\t\tid: controlId,\n\t\t\t\t\t\t\t\"aria-invalid\": hasError ? true : child.props[\"aria-invalid\"],\n\t\t\t\t\t\t\t\"aria-describedby\": mergedDescribedBy || undefined,\n\t\t\t\t\t\t})\n\t\t\t\t\t: children}\n\t\t\t\t{hint && !hasError ? (\n\t\t\t\t\t<p id={hintId} className=\"text-xs text-basalt-muted-foreground\">\n\t\t\t\t\t\t{hint}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t\t{hasError ? (\n\t\t\t\t\t<p id={errorId} className=\"text-xs text-basalt-destructive\" role=\"alert\">\n\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t);\n\t},\n);\nField.displayName = \"Field\";\n"],"mappings":";;;;;;AAgDA,SAAS,EAAkB,GAA0D;CACpF,OACC,OAAO,KAAU,cACjB,KACA,CAAC,MAAM,QAAQ,CAAK,KACpB,CAAC,EAAM,eAAe,CAAK,KAC3B,aAAa;AAEf;AAEA,SAAS,EAAkB,GAA4D;CAClF,SAAS,MAGb,OAAO,EAAkB,CAAK,IAAI,EAAM,UAAU;AACnD;AAEA,SAAS,EAAc,GAA+C;CACrE,OAAO,EAAQ;AAChB;AAEA,IAAa,IAAQ,EAAM,YACzB,EAAE,UAAO,YAAS,SAAM,UAAO,aAAU,iBAAc,cAAW,aAAU,GAAG,KAAS,MAAQ;CAChG,IAAM,IAAc,EAAM,MAAM,GAC1B,IAAQ,EAAM,eAAe,CAAQ,IACvC,IACD,MACG,IAAY,IAAS,KAAW,EAAM,MAAM,MAAM,IAAe,GACjE,IAAS,IAAY,GAAG,EAAU,SAAS,KAAA,GAC3C,IAAU,IAAY,GAAG,EAAU,UAAU,KAAA,GAC7C,IAAe,EAAkB,CAAK,GACtC,IAAW,EAAc,CAAY,GAIrC,IAAoB,CAHN,CAAC,IAAW,IAAU,MAAM,CAAC,KAAY,IAAO,IAAS,IAAI,CAAC,CAChF,OAAO,OAAO,CAAC,CACf,KAAK,GACoB,GAAa,GAAO,MAAM,mBAAmB,CAAC,CACvE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CACV,OACC,kBAAC,OAAD;EAAU;EAAK,GAAI;EAAO,WAAW,EAAG,yBAAyB,CAAS;EAA1E,UAAA;GACC,kBAAC,GAAD;IAAO,SAAS;IAAW,cAAc,MAAa;IAAO,SAAS;IACpE,UAAA;GACK,CAAA;GACN,IACE,EAAM,aAAa,GAAO;IAC1B,IAAI;IACJ,gBAAgB,IAAW,KAAO,EAAM,MAAM;IAC9C,oBAAoB,KAAqB,KAAA;GAC1C,CAAC,IACA;GACF,KAAQ,CAAC,IACT,kBAAC,KAAD;IAAG,IAAI;IAAQ,WAAU;IACvB,UAAA;GACC,CAAA,IACA;GACH,IACA,kBAAC,KAAD;IAAG,IAAI;IAAS,WAAU;IAAkC,MAAK;IAC/D,UAAA;GACC,CAAA,IACA;EACA;;AAEP,CACD;AACA,EAAM,cAAc"}
@@ -0,0 +1,24 @@
1
+ import { type ReactNode } from "react";
2
+ export type FlowProps = {
3
+ /**
4
+ * Accessible name for the step list.
5
+ * @default "Flow"
6
+ */
7
+ "aria-label"?: string;
8
+ /**
9
+ * Additional classes for the list.
10
+ */
11
+ className?: string;
12
+ /**
13
+ * Step nodes.
14
+ */
15
+ children: ReactNode;
16
+ };
17
+ export declare function Flow({ className, children, "aria-label": ariaLabel }: FlowProps): import("react").JSX.Element;
18
+ export type FlowNodeProps = {
19
+ /**
20
+ * Label for the step.
21
+ */
22
+ children: ReactNode;
23
+ };
24
+ export declare function FlowNode({ children }: FlowNodeProps): import("react").JSX.Element;
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { Children as t, Fragment as n, useId as r } from "react";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ //#region src/components/flow.tsx
6
+ function o() {
7
+ let e = `flow-arrow-${r().replace(/:/g, "")}`;
8
+ return /* @__PURE__ */ i("li", {
9
+ "aria-hidden": "true",
10
+ className: "flex w-10 shrink-0 items-center text-basalt-muted-foreground",
11
+ children: /* @__PURE__ */ a("svg", {
12
+ viewBox: "0 0 40 16",
13
+ className: "h-4 w-10 overflow-visible",
14
+ overflow: "visible",
15
+ "aria-hidden": "true",
16
+ children: [/* @__PURE__ */ i("defs", { children: /* @__PURE__ */ i("marker", {
17
+ id: e,
18
+ markerWidth: "8",
19
+ markerHeight: "8",
20
+ refX: "0",
21
+ refY: "4",
22
+ orient: "auto",
23
+ markerUnits: "userSpaceOnUse",
24
+ children: /* @__PURE__ */ i("path", {
25
+ d: "M 0,1.5 Q 0,0 1.5,0 Q 3.5,1 5.8,3.2 Q 6.5,4 5.8,4.8 Q 3.5,7 1.5,8 Q 0,8 0,6.5 Z",
26
+ fill: "currentColor",
27
+ stroke: "none"
28
+ })
29
+ }) }), /* @__PURE__ */ i("path", {
30
+ d: "M 0 8 L 32 8",
31
+ fill: "none",
32
+ stroke: "currentColor",
33
+ strokeWidth: "2",
34
+ markerEnd: `url(#${e})`
35
+ })]
36
+ })
37
+ });
38
+ }
39
+ function s({ className: r, children: s, "aria-label": c = "Flow" }) {
40
+ let l = t.toArray(s);
41
+ return /* @__PURE__ */ i("ol", {
42
+ "aria-label": c,
43
+ className: e("flex items-center", r),
44
+ children: l.map((e, t) => /* @__PURE__ */ a(n, { children: [e, t < l.length - 1 ? /* @__PURE__ */ i(o, {}) : null] }, t))
45
+ });
46
+ }
47
+ function c({ children: e }) {
48
+ return /* @__PURE__ */ i("li", {
49
+ className: "rounded-basalt-md border border-basalt-border bg-basalt-secondary px-3 py-2 text-sm",
50
+ children: e
51
+ });
52
+ }
53
+ //#endregion
54
+ export { s as Flow, c as FlowNode };
55
+
56
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","names":[],"sources":["../../src/components/flow.tsx"],"sourcesContent":["import { Children, Fragment, type ReactNode, useId } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nfunction FlowArrow() {\n\tconst id = `flow-arrow-${useId().replace(/:/g, \"\")}`;\n\treturn (\n\t\t<li aria-hidden=\"true\" className=\"flex w-10 shrink-0 items-center text-basalt-muted-foreground\">\n\t\t\t<svg\n\t\t\t\tviewBox=\"0 0 40 16\"\n\t\t\t\tclassName=\"h-4 w-10 overflow-visible\"\n\t\t\t\toverflow=\"visible\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<marker\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\tmarkerWidth=\"8\"\n\t\t\t\t\t\tmarkerHeight=\"8\"\n\t\t\t\t\t\trefX=\"0\"\n\t\t\t\t\t\trefY=\"4\"\n\t\t\t\t\t\torient=\"auto\"\n\t\t\t\t\t\tmarkerUnits=\"userSpaceOnUse\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M 0,1.5 Q 0,0 1.5,0 Q 3.5,1 5.8,3.2 Q 6.5,4 5.8,4.8 Q 3.5,7 1.5,8 Q 0,8 0,6.5 Z\"\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</marker>\n\t\t\t\t</defs>\n\t\t\t\t<path\n\t\t\t\t\td=\"M 0 8 L 32 8\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\tmarkerEnd={`url(#${id})`}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</li>\n\t);\n}\n\nexport type FlowProps = {\n\t/**\n\t * Accessible name for the step list.\n\t * @default \"Flow\"\n\t */\n\t\"aria-label\"?: string;\n\t/**\n\t * Additional classes for the list.\n\t */\n\tclassName?: string;\n\t/**\n\t * Step nodes.\n\t */\n\tchildren: ReactNode;\n};\n\nexport function Flow({ className, children, \"aria-label\": ariaLabel = \"Flow\" }: FlowProps) {\n\tconst nodes = Children.toArray(children);\n\treturn (\n\t\t<ol aria-label={ariaLabel} className={cn(\"flex items-center\", className)}>\n\t\t\t{nodes.map((child, index) => (\n\t\t\t\t<Fragment key={index}>\n\t\t\t\t\t{child}\n\t\t\t\t\t{index < nodes.length - 1 ? <FlowArrow /> : null}\n\t\t\t\t</Fragment>\n\t\t\t))}\n\t\t</ol>\n\t);\n}\n\nexport type FlowNodeProps = {\n\t/**\n\t * Label for the step.\n\t */\n\tchildren: ReactNode;\n};\n\nexport function FlowNode({ children }: FlowNodeProps) {\n\treturn (\n\t\t<li className=\"rounded-basalt-md border border-basalt-border bg-basalt-secondary px-3 py-2 text-sm\">\n\t\t\t{children}\n\t\t</li>\n\t);\n}\n"],"mappings":";;;;;AAGA,SAAS,IAAY;CACpB,IAAM,IAAK,cAAc,EAAM,CAAC,CAAC,QAAQ,MAAM,EAAE;CACjD,OACC,kBAAC,MAAD;EAAI,eAAY;EAAO,WAAU;EAChC,UAAA,kBAAC,OAAD;GACC,SAAQ;GACR,WAAU;GACV,UAAS;GACT,eAAY;GAJb,UAAA,CAMC,kBAAC,QAAD,EAAA,UACC,kBAAC,UAAD;IACK;IACJ,aAAY;IACZ,cAAa;IACb,MAAK;IACL,MAAK;IACL,QAAO;IACP,aAAY;IAEZ,UAAA,kBAAC,QAAD;KACC,GAAE;KACF,MAAK;KACL,QAAO;IACP,CAAA;GACM,CAAA,EACH,CAAA,GACN,kBAAC,QAAD;IACC,GAAE;IACF,MAAK;IACL,QAAO;IACP,aAAY;IACZ,WAAW,QAAQ,EAAG;GACtB,CAAA,CACG;;CACF,CAAA;AAEN;AAkBA,SAAgB,EAAK,EAAE,cAAW,aAAU,cAAc,IAAY,UAAqB;CAC1F,IAAM,IAAQ,EAAS,QAAQ,CAAQ;CACvC,OACC,kBAAC,MAAD;EAAI,cAAY;EAAW,WAAW,EAAG,qBAAqB,CAAS;EACrE,UAAA,EAAM,KAAK,GAAO,MAClB,kBAAC,GAAD,EAAA,UAAA,CACE,GACA,IAAQ,EAAM,SAAS,IAAI,kBAAC,GAAD,CAAY,CAAA,IAAI,IACnC,EAAA,GAHK,CAGL,CACV;CACE,CAAA;AAEN;AASA,SAAgB,EAAS,EAAE,eAA2B;CACrD,OACC,kBAAC,MAAD;EAAI,WAAU;EACZ;CACE,CAAA;AAEN"}
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type GridProps = {
3
+ /**
4
+ * Number of equal columns.
5
+ * @default 2
6
+ */
7
+ columns?: number;
8
+ /**
9
+ * Additional classes for the grid.
10
+ */
11
+ className?: string;
12
+ children?: ReactNode;
13
+ };
14
+ export declare function Grid({ className, columns, style, ...props }: GridProps & HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
15
+ export declare function GridItem({ className, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { jsx as t } from "react/jsx-runtime";
4
+ //#region src/components/grid.tsx
5
+ function n({ className: n, columns: r = 2, style: i, ...a }) {
6
+ return /* @__PURE__ */ t("div", {
7
+ className: e("grid gap-3", n),
8
+ ...a,
9
+ style: {
10
+ gridTemplateColumns: `repeat(${r}, minmax(0, 1fr))`,
11
+ ...i
12
+ }
13
+ });
14
+ }
15
+ function r({ className: n, ...r }) {
16
+ return /* @__PURE__ */ t("div", {
17
+ className: e("flex items-center justify-center rounded-basalt-lg bg-basalt-secondary px-6 py-8 text-sm", n),
18
+ ...r
19
+ });
20
+ }
21
+ //#endregion
22
+ export { n as Grid, r as GridItem };
23
+
24
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","names":[],"sources":["../../src/components/grid.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type GridProps = {\n\t/**\n\t * Number of equal columns.\n\t * @default 2\n\t */\n\tcolumns?: number;\n\t/**\n\t * Additional classes for the grid.\n\t */\n\tclassName?: string;\n\tchildren?: ReactNode;\n};\n\nexport function Grid({\n\tclassName,\n\tcolumns = 2,\n\tstyle,\n\t...props\n}: GridProps & HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"grid gap-3\", className)}\n\t\t\t{...props}\n\t\t\tstyle={{\n\t\t\t\tgridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nexport function GridItem({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center rounded-basalt-lg bg-basalt-secondary px-6 py-8 text-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;AAgBA,SAAgB,EAAK,EACpB,cACA,aAAU,GACV,UACA,GAAG,KAC2C;CAC9C,OACC,kBAAC,OAAD;EACC,WAAW,EAAG,cAAc,CAAS;EACrC,GAAI;EACJ,OAAO;GACN,qBAAqB,UAAU,EAAQ;GACvC,GAAG;EACJ;CACA,CAAA;AAEH;AAEA,SAAgB,EAAS,EAAE,cAAW,GAAG,KAAyC;CACjF,OACC,kBAAC,OAAD;EACC,WAAW,EACV,4FACA,CACD;EACA,GAAI;CACJ,CAAA;AAEH"}
@@ -0,0 +1,5 @@
1
+ import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
2
+ import * as React from "react";
3
+ export declare const HoverCard: React.FC<HoverCardPrimitive.HoverCardProps>;
4
+ export declare const HoverCardTrigger: React.ForwardRefExoticComponent<HoverCardPrimitive.HoverCardTriggerProps & React.RefAttributes<HTMLAnchorElement>>;
5
+ export declare const HoverCardContent: React.ForwardRefExoticComponent<Omit<HoverCardPrimitive.HoverCardContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { OVERLAY_LAYER as t, OVERLAY_MOTION as n } from "./overlay.js";
4
+ import * as r from "react";
5
+ import { jsx as i } from "react/jsx-runtime";
6
+ import * as a from "@radix-ui/react-hover-card";
7
+ //#region src/components/hover-card.tsx
8
+ var o = a.Root, s = a.Trigger, c = r.forwardRef(({ className: r, sideOffset: o = 8, ...s }, c) => /* @__PURE__ */ i(a.Portal, { children: /* @__PURE__ */ i(a.Content, {
9
+ ref: c,
10
+ sideOffset: o,
11
+ className: e(t, n, "w-64 rounded-basalt-md border border-basalt-border bg-basalt-popover p-4 text-basalt-popover-foreground shadow-md", r),
12
+ ...s
13
+ }) }));
14
+ c.displayName = a.Content.displayName;
15
+ //#endregion
16
+ export { o as HoverCard, c as HoverCardContent, s as HoverCardTrigger };
17
+
18
+ //# sourceMappingURL=hover-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-card.js","names":[],"sources":["../../src/components/hover-card.tsx"],"sourcesContent":["import * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { MENU_GAP, OVERLAY_LAYER, OVERLAY_MOTION } from \"./overlay\";\n\nexport const HoverCard = HoverCardPrimitive.Root;\nexport const HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nexport const HoverCardContent = React.forwardRef<\n\tReact.ElementRef<typeof HoverCardPrimitive.Content>,\n\tReact.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, sideOffset = MENU_GAP, ...props }, ref) => (\n\t<HoverCardPrimitive.Portal>\n\t\t<HoverCardPrimitive.Content\n\t\t\tref={ref}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={cn(\n\t\t\t\tOVERLAY_LAYER,\n\t\t\t\tOVERLAY_MOTION,\n\t\t\t\t\"w-64 rounded-basalt-md border border-basalt-border bg-basalt-popover p-4 text-basalt-popover-foreground shadow-md\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t</HoverCardPrimitive.Portal>\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n"],"mappings":";;;;;;;AAKA,IAAa,IAAY,EAAmB,MAC/B,IAAmB,EAAmB,SAEtC,IAAmB,EAAM,YAGnC,EAAE,cAAW,gBAAA,GAAuB,GAAG,KAAS,MAClD,kBAAC,EAAmB,QAApB,EAAA,UACC,kBAAC,EAAmB,SAApB;CACM;CACO;CACZ,WAAW,EACV,GACA,GACA,qHACA,CACD;CACA,GAAI;AACJ,CAAA,EACyB,CAAA,CAC3B;AACD,EAAiB,cAAc,EAAmB,QAAQ"}
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ export type InputAreaSize = "sm" | "default" | "lg";
3
+ export type InputAreaProps = Omit<React.ComponentProps<"textarea">, "rows"> & {
4
+ /**
5
+ * The visible text row count.
6
+ */
7
+ rows?: number;
8
+ /**
9
+ * The visual size of the text area.
10
+ * @default default
11
+ */
12
+ size?: InputAreaSize;
13
+ /**
14
+ * Ignore password managers on this field.
15
+ * @default false
16
+ */
17
+ passwordManagerIgnore?: boolean;
18
+ };
19
+ export declare const InputArea: React.ForwardRefExoticComponent<Omit<InputAreaProps, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { FOCUS_BORDER as t } from "./overlay.js";
4
+ import { controlSurfaceClass as n } from "../utils/control-surface.js";
5
+ import * as r from "react";
6
+ import { jsx as i } from "react/jsx-runtime";
7
+ //#region src/components/input-area.tsx
8
+ var a = {
9
+ sm: "min-h-[64px] px-2.5 py-1.5 text-xs",
10
+ default: "min-h-[80px] px-3 py-2 text-sm",
11
+ lg: "min-h-[96px] px-4 py-2 text-base"
12
+ }, o = {
13
+ "data-1p-ignore": "true",
14
+ "data-bwignore": "true",
15
+ "data-form-type": "other",
16
+ "data-lpignore": "true"
17
+ }, s = r.forwardRef(({ className: r, size: s = "default", passwordManagerIgnore: c = !1, ...l }, u) => /* @__PURE__ */ i("textarea", {
18
+ ref: u,
19
+ className: n(e("flex w-full text-basalt-foreground shadow-xs placeholder:text-basalt-muted-foreground disabled:cursor-not-allowed disabled:border-transparent disabled:text-basalt-muted-foreground/40", a[s], t, "aria-invalid:border-basalt-destructive aria-invalid:focus-visible:border-basalt-destructive", c && "keeper-ignore", r)),
20
+ ...l,
21
+ ...c ? o : {}
22
+ }));
23
+ s.displayName = "InputArea";
24
+ //#endregion
25
+ export { s as InputArea };
26
+
27
+ //# sourceMappingURL=input-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-area.js","names":[],"sources":["../../src/components/input-area.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { controlSurfaceClass } from \"../utils/control-surface\";\nimport { FOCUS_BORDER } from \"./overlay\";\n\nexport type InputAreaSize = \"sm\" | \"default\" | \"lg\";\n\nconst INPUT_AREA_SIZE_CLASS: Record<InputAreaSize, string> = {\n\tsm: \"min-h-[64px] px-2.5 py-1.5 text-xs\",\n\tdefault: \"min-h-[80px] px-3 py-2 text-sm\",\n\tlg: \"min-h-[96px] px-4 py-2 text-base\",\n};\n\nconst PASSWORD_MANAGER_MARKERS = {\n\t\"data-1p-ignore\": \"true\",\n\t\"data-bwignore\": \"true\",\n\t\"data-form-type\": \"other\",\n\t\"data-lpignore\": \"true\",\n} as const;\n\nexport type InputAreaProps = Omit<React.ComponentProps<\"textarea\">, \"rows\"> & {\n\t/**\n\t * The visible text row count.\n\t */\n\trows?: number;\n\t/**\n\t * The visual size of the text area.\n\t * @default default\n\t */\n\tsize?: InputAreaSize;\n\t/**\n\t * Ignore password managers on this field.\n\t * @default false\n\t */\n\tpasswordManagerIgnore?: boolean;\n};\n\nexport const InputArea = React.forwardRef<HTMLTextAreaElement, InputAreaProps>(\n\t({ className, size = \"default\", passwordManagerIgnore = false, ...props }, ref) => (\n\t\t<textarea\n\t\t\tref={ref}\n\t\t\tclassName={controlSurfaceClass(\n\t\t\t\tcn(\n\t\t\t\t\t\"flex w-full text-basalt-foreground shadow-xs placeholder:text-basalt-muted-foreground disabled:cursor-not-allowed disabled:border-transparent disabled:text-basalt-muted-foreground/40\",\n\t\t\t\t\tINPUT_AREA_SIZE_CLASS[size],\n\t\t\t\t\tFOCUS_BORDER,\n\t\t\t\t\t\"aria-invalid:border-basalt-destructive aria-invalid:focus-visible:border-basalt-destructive\",\n\t\t\t\t\tpasswordManagerIgnore && \"keeper-ignore\",\n\t\t\t\t\tclassName,\n\t\t\t\t),\n\t\t\t)}\n\t\t\t{...props}\n\t\t\t{...(passwordManagerIgnore ? PASSWORD_MANAGER_MARKERS : {})}\n\t\t/>\n\t),\n);\nInputArea.displayName = \"InputArea\";\n"],"mappings":";;;;;;;AAOA,IAAM,IAAuD;CAC5D,IAAI;CACJ,SAAS;CACT,IAAI;AACL,GAEM,IAA2B;CAChC,kBAAkB;CAClB,iBAAiB;CACjB,kBAAkB;CAClB,iBAAiB;AAClB,GAmBa,IAAY,EAAM,YAC7B,EAAE,cAAW,UAAO,WAAW,2BAAwB,IAAO,GAAG,KAAS,MAC1E,kBAAC,YAAD;CACM;CACL,WAAW,EACV,EACC,0LACA,EAAsB,IACtB,GACA,+FACA,KAAyB,iBACzB,CACD,CACD;CACA,GAAI;CACJ,GAAK,IAAwB,IAA2B,CAAC;AACzD,CAAA,CAEH;AACA,EAAU,cAAc"}
@@ -0,0 +1,70 @@
1
+ import * as React from "react";
2
+ import { type ButtonProps } from "./button.js";
3
+ import { Input } from "./input.js";
4
+ export type InputGroupProps = React.HTMLAttributes<HTMLDivElement> & {
5
+ /**
6
+ * Disable the input and nested actions.
7
+ * @default false
8
+ */
9
+ disabled?: boolean;
10
+ };
11
+ export type InputGroupInputProps = Omit<React.ComponentPropsWithoutRef<typeof Input>, "type" | "size" | "passwordManagerIgnore"> & {
12
+ /**
13
+ * The type of input control to render.
14
+ */
15
+ type?: React.HTMLInputTypeAttribute;
16
+ };
17
+ export type InputGroupAddonProps = React.HTMLAttributes<HTMLDivElement> & {
18
+ /**
19
+ * Place the addon at the start or end of the group.
20
+ * @default start
21
+ */
22
+ align?: "start" | "end";
23
+ };
24
+ declare function InputGroupAddon({ align, className, children, ...props }: InputGroupAddonProps): React.JSX.Element;
25
+ export type InputGroupSuffixProps = React.HTMLAttributes<HTMLDivElement>;
26
+ declare function InputGroupSuffix({ className, children, ...props }: InputGroupSuffixProps): React.JSX.Element;
27
+ export interface InputGroupButtonProps extends Omit<ButtonProps, "variant" | "size" | "asChild" | "loading" | "icon"> {
28
+ /**
29
+ * Visual style for the nested action.
30
+ * @default ghost
31
+ */
32
+ variant?: ButtonProps["variant"];
33
+ /**
34
+ * Size for the nested action.
35
+ * @default icon
36
+ */
37
+ size?: ButtonProps["size"];
38
+ /**
39
+ * Render the nested action through its child element.
40
+ * @default false
41
+ */
42
+ asChild?: boolean;
43
+ /**
44
+ * Show a spinner and disable the nested action.
45
+ * @default false
46
+ */
47
+ loading?: boolean;
48
+ /**
49
+ * Icon rendered before the nested action label.
50
+ */
51
+ icon?: React.ReactNode;
52
+ }
53
+ export declare const InputGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
54
+ /**
55
+ * Disable the input and nested actions.
56
+ * @default false
57
+ */
58
+ disabled?: boolean;
59
+ } & React.RefAttributes<HTMLDivElement>> & {
60
+ Input: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("./input.js").InputProps, "ref"> & React.RefAttributes<HTMLInputElement>, "ref">, "passwordManagerIgnore" | "size" | "type"> & {
61
+ /**
62
+ * The type of input control to render.
63
+ */
64
+ type?: React.HTMLInputTypeAttribute;
65
+ } & React.RefAttributes<HTMLInputElement>>;
66
+ Addon: typeof InputGroupAddon;
67
+ Suffix: typeof InputGroupSuffix;
68
+ Button: React.ForwardRefExoticComponent<InputGroupButtonProps & React.RefAttributes<HTMLButtonElement>>;
69
+ };
70
+ export {};
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { cn as e } from "../utils/cn.js";
3
+ import { Button as t } from "./button.js";
4
+ import { controlSurfaceClass as n } from "../utils/control-surface.js";
5
+ import { Input as r } from "./input.js";
6
+ import * as i from "react";
7
+ import { jsx as a } from "react/jsx-runtime";
8
+ //#region src/components/input-group.tsx
9
+ var o = i.createContext(!1), s = i.forwardRef(({ className: t, disabled: r, onClick: i, children: s, ...c }, l) => /* @__PURE__ */ a(o.Provider, {
10
+ value: !!r,
11
+ children: /* @__PURE__ */ a("div", {
12
+ ref: l,
13
+ "data-slot": "input-group",
14
+ "data-disabled": r ? "" : void 0,
15
+ "aria-disabled": r || void 0,
16
+ inert: r || void 0,
17
+ className: n(e("flex h-9 w-full items-center shadow-xs", "[&>:first-child]:rounded-l-basalt-md [&>:last-child]:rounded-r-basalt-md", "outline-hidden focus-within:border-basalt-ring", "has-[[data-slot=input-group-addon-start]]:[&_input]:pl-2", "has-[[data-slot=input-group-addon-end]]:[&_input]:pr-2", "has-[[data-slot=input-group-suffix]]:[&_input]:flex-none", "has-[[data-slot=input-group-suffix]]:[&_input]:[field-sizing:content]", "has-[[data-slot=input-group-suffix]]:[&_input]:pr-0", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", t)),
18
+ onClick: (e) => {
19
+ i?.(e), !(e.defaultPrevented || r) && (e.target.closest("input, textarea, button, a") || e.currentTarget.querySelector("input")?.focus());
20
+ },
21
+ ...c,
22
+ children: s
23
+ })
24
+ }));
25
+ s.displayName = "InputGroup";
26
+ var c = i.forwardRef(({ className: t, disabled: n, ...s }, c) => {
27
+ let l = i.useContext(o);
28
+ return /* @__PURE__ */ a(r, {
29
+ ref: c,
30
+ disabled: n || l,
31
+ className: e("h-full min-w-0 w-auto! flex-1 rounded-none border-0 bg-transparent px-3 py-0 shadow-none", "outline-hidden focus-visible:border-transparent focus-visible:ring-0", t),
32
+ ...s
33
+ });
34
+ });
35
+ c.displayName = "InputGroup.Input";
36
+ function l({ align: t = "start", className: n, children: r, ...i }) {
37
+ return /* @__PURE__ */ a("div", {
38
+ "data-slot": t === "end" ? "input-group-addon-end" : "input-group-addon-start",
39
+ className: e("pointer-events-none flex shrink-0 items-center text-basalt-muted-foreground *:pointer-events-auto [&_svg]:size-4", t === "start" ? "-order-1 pl-3" : "order-1 pr-3", n),
40
+ ...i,
41
+ children: r
42
+ });
43
+ }
44
+ l.displayName = "InputGroup.Addon";
45
+ function u({ className: t, children: n, ...r }) {
46
+ return /* @__PURE__ */ a("div", {
47
+ "data-slot": "input-group-suffix",
48
+ className: e("pointer-events-none flex min-w-0 flex-1 items-center pr-3 text-basalt-muted-foreground select-none", t),
49
+ ...r,
50
+ children: /* @__PURE__ */ a("span", {
51
+ className: "truncate",
52
+ children: n
53
+ })
54
+ });
55
+ }
56
+ u.displayName = "InputGroup.Suffix";
57
+ var d = i.forwardRef(({ className: n, variant: r = "ghost", size: s = "icon", disabled: c, ...l }, u) => {
58
+ let d = i.useContext(o);
59
+ return /* @__PURE__ */ a(t, {
60
+ ref: u,
61
+ variant: r,
62
+ size: s,
63
+ disabled: c || d,
64
+ className: e("h-7 w-7 shrink-0 rounded-basalt-sm", n),
65
+ ...l
66
+ });
67
+ });
68
+ d.displayName = "InputGroup.Button";
69
+ var f = Object.assign(s, {
70
+ Input: c,
71
+ Addon: l,
72
+ Suffix: u,
73
+ Button: d
74
+ });
75
+ //#endregion
76
+ export { f as InputGroup };
77
+
78
+ //# sourceMappingURL=input-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-group.js","names":[],"sources":["../../src/components/input-group.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { controlSurfaceClass } from \"../utils/control-surface\";\nimport { Button, type ButtonProps } from \"./button\";\nimport { Input } from \"./input\";\n\nexport type InputGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n\t/**\n\t * Disable the input and nested actions.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n};\n\nconst InputGroupDisabled = React.createContext(false);\n\nconst InputGroupRoot = React.forwardRef<HTMLDivElement, InputGroupProps>(\n\t({ className, disabled, onClick, children, ...props }, ref) => (\n\t\t<InputGroupDisabled.Provider value={Boolean(disabled)}>\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"input-group\"\n\t\t\t\tdata-disabled={disabled ? \"\" : undefined}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\tinert={disabled || undefined}\n\t\t\t\tclassName={controlSurfaceClass(\n\t\t\t\t\tcn(\n\t\t\t\t\t\t\"flex h-9 w-full items-center shadow-xs\",\n\t\t\t\t\t\t\"[&>:first-child]:rounded-l-basalt-md [&>:last-child]:rounded-r-basalt-md\",\n\t\t\t\t\t\t\"outline-hidden focus-within:border-basalt-ring\",\n\t\t\t\t\t\t\"has-[[data-slot=input-group-addon-start]]:[&_input]:pl-2\",\n\t\t\t\t\t\t\"has-[[data-slot=input-group-addon-end]]:[&_input]:pr-2\",\n\t\t\t\t\t\t\"has-[[data-slot=input-group-suffix]]:[&_input]:flex-none\",\n\t\t\t\t\t\t\"has-[[data-slot=input-group-suffix]]:[&_input]:[field-sizing:content]\",\n\t\t\t\t\t\t\"has-[[data-slot=input-group-suffix]]:[&_input]:pr-0\",\n\t\t\t\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t),\n\t\t\t\t)}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tonClick?.(event);\n\t\t\t\t\tif (event.defaultPrevented || disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst target = event.target as HTMLElement;\n\t\t\t\t\tif (target.closest(\"input, textarea, button, a\")) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.currentTarget.querySelector(\"input\")?.focus();\n\t\t\t\t}}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</InputGroupDisabled.Provider>\n\t),\n);\nInputGroupRoot.displayName = \"InputGroup\";\n\nexport type InputGroupInputProps = Omit<\n\tReact.ComponentPropsWithoutRef<typeof Input>,\n\t\"type\" | \"size\" | \"passwordManagerIgnore\"\n> & {\n\t/**\n\t * The type of input control to render.\n\t */\n\ttype?: React.HTMLInputTypeAttribute;\n};\n\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\n\t({ className, disabled, ...props }, ref) => {\n\t\tconst groupDisabled = React.useContext(InputGroupDisabled);\n\t\treturn (\n\t\t\t<Input\n\t\t\t\tref={ref}\n\t\t\t\tdisabled={disabled || groupDisabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"h-full min-w-0 w-auto! flex-1 rounded-none border-0 bg-transparent px-3 py-0 shadow-none\",\n\t\t\t\t\t\"outline-hidden focus-visible:border-transparent focus-visible:ring-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nInputGroupInput.displayName = \"InputGroup.Input\";\n\nexport type InputGroupAddonProps = React.HTMLAttributes<HTMLDivElement> & {\n\t/**\n\t * Place the addon at the start or end of the group.\n\t * @default start\n\t */\n\talign?: \"start\" | \"end\";\n};\n\nfunction InputGroupAddon({ align = \"start\", className, children, ...props }: InputGroupAddonProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot={align === \"end\" ? \"input-group-addon-end\" : \"input-group-addon-start\"}\n\t\t\tclassName={cn(\n\t\t\t\t\"pointer-events-none flex shrink-0 items-center text-basalt-muted-foreground *:pointer-events-auto [&_svg]:size-4\",\n\t\t\t\talign === \"start\" ? \"-order-1 pl-3\" : \"order-1 pr-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\nInputGroupAddon.displayName = \"InputGroup.Addon\";\n\nexport type InputGroupSuffixProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction InputGroupSuffix({ className, children, ...props }: InputGroupSuffixProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"input-group-suffix\"\n\t\t\tclassName={cn(\n\t\t\t\t\"pointer-events-none flex min-w-0 flex-1 items-center pr-3 text-basalt-muted-foreground select-none\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"truncate\">{children}</span>\n\t\t</div>\n\t);\n}\nInputGroupSuffix.displayName = \"InputGroup.Suffix\";\n\nexport interface InputGroupButtonProps\n\textends Omit<ButtonProps, \"variant\" | \"size\" | \"asChild\" | \"loading\" | \"icon\"> {\n\t/**\n\t * Visual style for the nested action.\n\t * @default ghost\n\t */\n\tvariant?: ButtonProps[\"variant\"];\n\t/**\n\t * Size for the nested action.\n\t * @default icon\n\t */\n\tsize?: ButtonProps[\"size\"];\n\t/**\n\t * Render the nested action through its child element.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\t/**\n\t * Show a spinner and disable the nested action.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Icon rendered before the nested action label.\n\t */\n\ticon?: React.ReactNode;\n}\n\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\n\t({ className, variant = \"ghost\", size = \"icon\", disabled, ...props }, ref) => {\n\t\tconst groupDisabled = React.useContext(InputGroupDisabled);\n\t\treturn (\n\t\t\t<Button\n\t\t\t\tref={ref}\n\t\t\t\tvariant={variant}\n\t\t\t\tsize={size}\n\t\t\t\tdisabled={disabled || groupDisabled}\n\t\t\t\tclassName={cn(\"h-7 w-7 shrink-0 rounded-basalt-sm\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nInputGroupButton.displayName = \"InputGroup.Button\";\n\nexport const InputGroup = Object.assign(InputGroupRoot, {\n\tInput: InputGroupInput,\n\tAddon: InputGroupAddon,\n\tSuffix: InputGroupSuffix,\n\tButton: InputGroupButton,\n});\n"],"mappings":";;;;;;;;AAcA,IAAM,IAAqB,EAAM,cAAc,EAAK,GAE9C,IAAiB,EAAM,YAC3B,EAAE,cAAW,aAAU,YAAS,aAAU,GAAG,KAAS,MACtD,kBAAC,EAAmB,UAApB;CAA6B,OAAO,EAAQ;CAC3C,UAAA,kBAAC,OAAD;EACM;EACL,aAAU;EACV,iBAAe,IAAW,KAAK,KAAA;EAC/B,iBAAe,KAAY,KAAA;EAC3B,OAAO,KAAY,KAAA;EACnB,WAAW,EACV,EACC,0CACA,4EACA,kDACA,4DACA,0DACA,4DACA,yEACA,uDACA,kEACA,CACD,CACD;EACA,UAAU,MAAU;GACnB,IAAU,CAAK,GACX,IAAM,oBAAoB,OAGf,EAAM,OACV,QAAQ,4BAA4B,KAG/C,EAAM,cAAc,cAAc,OAAO,CAAC,EAAE,MAAM;EACnD;EACA,GAAI;EAEH;CACG,CAAA;AACuB,CAAA,CAE/B;AACA,EAAe,cAAc;AAY7B,IAAM,IAAkB,EAAM,YAC5B,EAAE,cAAW,aAAU,GAAG,KAAS,MAAQ;CAC3C,IAAM,IAAgB,EAAM,WAAW,CAAkB;CACzD,OACC,kBAAC,GAAD;EACM;EACL,UAAU,KAAY;EACtB,WAAW,EACV,4FACA,wEACA,CACD;EACA,GAAI;CACJ,CAAA;AAEH,CACD;AACA,EAAgB,cAAc;AAU9B,SAAS,EAAgB,EAAE,WAAQ,SAAS,cAAW,aAAU,GAAG,KAA+B;CAClG,OACC,kBAAC,OAAD;EACC,aAAW,MAAU,QAAQ,0BAA0B;EACvD,WAAW,EACV,oHACA,MAAU,UAAU,kBAAkB,gBACtC,CACD;EACA,GAAI;EAEH;CACG,CAAA;AAEP;AACA,EAAgB,cAAc;AAI9B,SAAS,EAAiB,EAAE,cAAW,aAAU,GAAG,KAAgC;CACnF,OACC,kBAAC,OAAD;EACC,aAAU;EACV,WAAW,EACV,sGACA,CACD;EACA,GAAI;EAEJ,UAAA,kBAAC,QAAD;GAAM,WAAU;GAAY;EAAe,CAAA;CACvC,CAAA;AAEP;AACA,EAAiB,cAAc;AA8B/B,IAAM,IAAmB,EAAM,YAC7B,EAAE,cAAW,aAAU,SAAS,UAAO,QAAQ,aAAU,GAAG,KAAS,MAAQ;CAC7E,IAAM,IAAgB,EAAM,WAAW,CAAkB;CACzD,OACC,kBAAC,GAAD;EACM;EACI;EACH;EACN,UAAU,KAAY;EACtB,WAAW,EAAG,sCAAsC,CAAS;EAC7D,GAAI;CACJ,CAAA;AAEH,CACD;AACA,EAAiB,cAAc;AAE/B,IAAa,IAAa,OAAO,OAAO,GAAgB;CACvD,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;AACT,CAAC"}
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ export type InputSize = "sm" | "default" | "lg";
3
+ export type InputProps = Omit<React.ComponentProps<"input">, "type" | "size"> & {
4
+ /**
5
+ * The type of input control to render.
6
+ */
7
+ type?: React.HTMLInputTypeAttribute;
8
+ /**
9
+ * The visual size of the input.
10
+ * @default default
11
+ */
12
+ size?: InputSize;
13
+ /**
14
+ * Ignore password managers on this field.
15
+ * @default false
16
+ */
17
+ passwordManagerIgnore?: boolean;
18
+ };
19
+ export declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;