cortena-ui 1.3.0 → 1.4.0

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 (280) hide show
  1. package/README.md +74 -3
  2. package/dist/a2ui/catalogue-doc.d.ts +44 -0
  3. package/dist/a2ui/catalogue-doc.js +169 -0
  4. package/dist/a2ui/catalogue-doc.js.map +1 -0
  5. package/dist/a2ui/catalogue.d.ts +44 -0
  6. package/dist/a2ui/catalogue.js +942 -0
  7. package/dist/a2ui/catalogue.js.map +1 -0
  8. package/dist/a2ui/index.d.ts +7 -0
  9. package/dist/a2ui/message.d.ts +232 -0
  10. package/dist/a2ui/message.js +365 -0
  11. package/dist/a2ui/message.js.map +1 -0
  12. package/dist/a2ui/renderer.d.ts +46 -0
  13. package/dist/a2ui/renderer.js +252 -0
  14. package/dist/a2ui/renderer.js.map +1 -0
  15. package/dist/a2ui/views.d.ts +80 -0
  16. package/dist/a2ui/views.js +596 -0
  17. package/dist/a2ui/views.js.map +1 -0
  18. package/dist/a2ui.d.ts +8 -0
  19. package/dist/a2ui.js +7 -0
  20. package/dist/chart.d.ts +9 -0
  21. package/dist/chart.js +9 -0
  22. package/dist/components/accordion.d.ts +22 -0
  23. package/dist/components/accordion.js +63 -0
  24. package/dist/components/accordion.js.map +1 -0
  25. package/dist/components/alert.d.ts +15 -0
  26. package/dist/components/alert.js +64 -0
  27. package/dist/components/alert.js.map +1 -0
  28. package/dist/components/avatar.d.ts +18 -0
  29. package/dist/components/avatar.js +40 -0
  30. package/dist/components/avatar.js.map +1 -0
  31. package/dist/components/badge.d.ts +12 -0
  32. package/dist/components/badge.js +47 -0
  33. package/dist/components/badge.js.map +1 -0
  34. package/dist/components/breadcrumb.d.ts +71 -0
  35. package/dist/components/breadcrumb.js +123 -0
  36. package/dist/components/breadcrumb.js.map +1 -0
  37. package/dist/components/button-link.d.ts +28 -0
  38. package/dist/components/button-link.js +24 -0
  39. package/dist/components/button-link.js.map +1 -0
  40. package/dist/components/button.d.ts +24 -0
  41. package/dist/components/button.js +65 -0
  42. package/dist/components/button.js.map +1 -0
  43. package/dist/components/calendar.d.ts +28 -0
  44. package/dist/components/calendar.js +123 -0
  45. package/dist/components/calendar.js.map +1 -0
  46. package/dist/components/card.d.ts +32 -0
  47. package/dist/components/card.js +57 -0
  48. package/dist/components/card.js.map +1 -0
  49. package/dist/components/chart/chart.d.ts +71 -0
  50. package/dist/components/chart/chart.js +167 -0
  51. package/dist/components/chart/chart.js.map +1 -0
  52. package/dist/components/chart/container.d.ts +88 -0
  53. package/dist/components/chart/container.js +189 -0
  54. package/dist/components/chart/container.js.map +1 -0
  55. package/dist/components/chart/data.js +128 -0
  56. package/dist/components/chart/data.js.map +1 -0
  57. package/dist/components/chart/index.d.ts +9 -0
  58. package/dist/components/chart/index.js +10 -0
  59. package/dist/components/chart/nivo-charts.js +225 -0
  60. package/dist/components/chart/nivo-charts.js.map +1 -0
  61. package/dist/components/chart/nivo-lazy.js +50 -0
  62. package/dist/components/chart/nivo-lazy.js.map +1 -0
  63. package/dist/components/chart/nivo-theme.d.ts +156 -0
  64. package/dist/components/chart/nivo-theme.js +161 -0
  65. package/dist/components/chart/nivo-theme.js.map +1 -0
  66. package/dist/components/chart/recharts-charts.js +276 -0
  67. package/dist/components/chart/recharts-charts.js.map +1 -0
  68. package/dist/components/chart/recharts-lazy.js +58 -0
  69. package/dist/components/chart/recharts-lazy.js.map +1 -0
  70. package/dist/components/chart/recharts-parts.d.ts +10 -0
  71. package/dist/components/chart/recharts-parts.js +25 -0
  72. package/dist/components/chart/recharts-parts.js.map +1 -0
  73. package/dist/components/chart/tokens.d.ts +62 -0
  74. package/dist/components/chart/tokens.js +192 -0
  75. package/dist/components/chart/tokens.js.map +1 -0
  76. package/dist/components/chart/types.d.ts +114 -0
  77. package/dist/components/chart/types.js +27 -0
  78. package/dist/components/chart/types.js.map +1 -0
  79. package/dist/components/checkbox.d.ts +20 -0
  80. package/dist/components/checkbox.js +24 -0
  81. package/dist/components/checkbox.js.map +1 -0
  82. package/dist/components/chip.d.ts +17 -0
  83. package/dist/components/chip.js +47 -0
  84. package/dist/components/chip.js.map +1 -0
  85. package/dist/components/combobox.d.ts +76 -0
  86. package/dist/components/combobox.js +201 -0
  87. package/dist/components/combobox.js.map +1 -0
  88. package/dist/components/command.d.ts +50 -0
  89. package/dist/components/command.js +117 -0
  90. package/dist/components/command.js.map +1 -0
  91. package/dist/components/data-table/data-table.d.ts +65 -0
  92. package/dist/components/data-table/data-table.js +588 -0
  93. package/dist/components/data-table/data-table.js.map +1 -0
  94. package/dist/components/data-table/export.d.ts +23 -0
  95. package/dist/components/data-table/export.js +95 -0
  96. package/dist/components/data-table/export.js.map +1 -0
  97. package/dist/components/data-table/features.d.ts +66 -0
  98. package/dist/components/data-table/features.js +103 -0
  99. package/dist/components/data-table/features.js.map +1 -0
  100. package/dist/components/data-table/index.d.ts +8 -0
  101. package/dist/components/data-table/parts.d.ts +79 -0
  102. package/dist/components/data-table/parts.js +400 -0
  103. package/dist/components/data-table/parts.js.map +1 -0
  104. package/dist/components/data-table/system-columns.js +84 -0
  105. package/dist/components/data-table/system-columns.js.map +1 -0
  106. package/dist/components/data-table/types.d.ts +172 -0
  107. package/dist/components/data-table/use-data-table.d.ts +19 -0
  108. package/dist/components/data-table/use-data-table.js +171 -0
  109. package/dist/components/data-table/use-data-table.js.map +1 -0
  110. package/dist/components/data-table/use-server-source.js +200 -0
  111. package/dist/components/data-table/use-server-source.js.map +1 -0
  112. package/dist/components/date-field.d.ts +54 -0
  113. package/dist/components/date-field.js +235 -0
  114. package/dist/components/date-field.js.map +1 -0
  115. package/dist/components/date-picker.d.ts +42 -0
  116. package/dist/components/date-picker.js +125 -0
  117. package/dist/components/date-picker.js.map +1 -0
  118. package/dist/components/dialog.d.ts +36 -0
  119. package/dist/components/dialog.js +97 -0
  120. package/dist/components/dialog.js.map +1 -0
  121. package/dist/components/dropdown-menu.d.ts +54 -0
  122. package/dist/components/dropdown-menu.js +191 -0
  123. package/dist/components/dropdown-menu.js.map +1 -0
  124. package/dist/components/dropzone.d.ts +48 -0
  125. package/dist/components/dropzone.js +185 -0
  126. package/dist/components/dropzone.js.map +1 -0
  127. package/dist/components/empty-state.d.ts +22 -0
  128. package/dist/components/empty-state.js +46 -0
  129. package/dist/components/empty-state.js.map +1 -0
  130. package/dist/components/error-banner.d.ts +17 -0
  131. package/dist/components/error-banner.js +52 -0
  132. package/dist/components/error-banner.js.map +1 -0
  133. package/dist/components/field.d.ts +64 -0
  134. package/dist/components/field.js +133 -0
  135. package/dist/components/field.js.map +1 -0
  136. package/dist/components/form.d.ts +37 -0
  137. package/dist/components/form.js +103 -0
  138. package/dist/components/form.js.map +1 -0
  139. package/dist/components/input.d.ts +17 -0
  140. package/dist/components/input.js +26 -0
  141. package/dist/components/input.js.map +1 -0
  142. package/dist/components/kbd.d.ts +11 -0
  143. package/dist/components/kbd.js +20 -0
  144. package/dist/components/kbd.js.map +1 -0
  145. package/dist/components/label.d.ts +14 -0
  146. package/dist/components/label.js +28 -0
  147. package/dist/components/label.js.map +1 -0
  148. package/dist/components/loading-skeleton.d.ts +22 -0
  149. package/dist/components/loading-skeleton.js +123 -0
  150. package/dist/components/loading-skeleton.js.map +1 -0
  151. package/dist/components/markdown.d.ts +44 -0
  152. package/dist/components/markdown.js +231 -0
  153. package/dist/components/markdown.js.map +1 -0
  154. package/dist/components/page-header.d.ts +26 -0
  155. package/dist/components/page-header.js +53 -0
  156. package/dist/components/page-header.js.map +1 -0
  157. package/dist/components/popover.d.ts +29 -0
  158. package/dist/components/popover.js +74 -0
  159. package/dist/components/popover.js.map +1 -0
  160. package/dist/components/progress.d.ts +22 -0
  161. package/dist/components/progress.js +49 -0
  162. package/dist/components/progress.js.map +1 -0
  163. package/dist/components/radio-group.d.ts +20 -0
  164. package/dist/components/radio-group.js +29 -0
  165. package/dist/components/radio-group.js.map +1 -0
  166. package/dist/components/scroll-area.d.ts +25 -0
  167. package/dist/components/scroll-area.js +39 -0
  168. package/dist/components/scroll-area.js.map +1 -0
  169. package/dist/components/section-card.d.ts +29 -0
  170. package/dist/components/section-card.js +55 -0
  171. package/dist/components/section-card.js.map +1 -0
  172. package/dist/components/segmented.d.ts +27 -0
  173. package/dist/components/segmented.js +32 -0
  174. package/dist/components/segmented.js.map +1 -0
  175. package/dist/components/select.d.ts +62 -0
  176. package/dist/components/select.js +97 -0
  177. package/dist/components/select.js.map +1 -0
  178. package/dist/components/separator.d.ts +19 -0
  179. package/dist/components/separator.js +23 -0
  180. package/dist/components/separator.js.map +1 -0
  181. package/dist/components/sheet.d.ts +35 -0
  182. package/dist/components/sheet.js +131 -0
  183. package/dist/components/sheet.js.map +1 -0
  184. package/dist/components/skeleton.d.ts +12 -0
  185. package/dist/components/skeleton.js +22 -0
  186. package/dist/components/skeleton.js.map +1 -0
  187. package/dist/components/sortable-list.d.ts +67 -0
  188. package/dist/components/sortable-list.js +206 -0
  189. package/dist/components/sortable-list.js.map +1 -0
  190. package/dist/components/spinner.d.ts +29 -0
  191. package/dist/components/spinner.js +34 -0
  192. package/dist/components/spinner.js.map +1 -0
  193. package/dist/components/status-dot.d.ts +26 -0
  194. package/dist/components/status-dot.js +47 -0
  195. package/dist/components/status-dot.js.map +1 -0
  196. package/dist/components/switch.d.ts +21 -0
  197. package/dist/components/switch.js +21 -0
  198. package/dist/components/switch.js.map +1 -0
  199. package/dist/components/tabs.d.ts +24 -0
  200. package/dist/components/tabs.js +60 -0
  201. package/dist/components/tabs.js.map +1 -0
  202. package/dist/components/textarea.d.ts +19 -0
  203. package/dist/components/textarea.js +47 -0
  204. package/dist/components/textarea.js.map +1 -0
  205. package/dist/components/toast.d.ts +47 -0
  206. package/dist/components/toast.js +106 -0
  207. package/dist/components/toast.js.map +1 -0
  208. package/dist/components/toolbar.d.ts +19 -0
  209. package/dist/components/toolbar.js +45 -0
  210. package/dist/components/toolbar.js.map +1 -0
  211. package/dist/components/tooltip.d.ts +28 -0
  212. package/dist/components/tooltip.js +59 -0
  213. package/dist/components/tooltip.js.map +1 -0
  214. package/dist/core.d.ts +44 -0
  215. package/dist/core.js +44 -0
  216. package/dist/data-table.d.ts +9 -0
  217. package/dist/data-table.js +7 -0
  218. package/dist/form.d.ts +7 -0
  219. package/dist/form.js +7 -0
  220. package/dist/hooks/use-cortena-theme.d.ts +98 -0
  221. package/dist/hooks/use-cortena-theme.js +145 -0
  222. package/dist/hooks/use-cortena-theme.js.map +1 -0
  223. package/dist/index.d.ts +75 -2678
  224. package/dist/index.js +66 -8598
  225. package/dist/lib/cn.d.ts +10 -0
  226. package/dist/lib/cn.js +15 -0
  227. package/dist/lib/cn.js.map +1 -0
  228. package/dist/lib/render.d.ts +23 -0
  229. package/dist/lib/render.js +20 -0
  230. package/dist/lib/render.js.map +1 -0
  231. package/dist/lib/shakeable.js +39 -0
  232. package/dist/lib/shakeable.js.map +1 -0
  233. package/dist/markdown.d.ts +3 -0
  234. package/dist/markdown.js +3 -0
  235. package/dist/sortable-list.d.ts +3 -0
  236. package/dist/sortable-list.js +3 -0
  237. package/package.json +37 -14
  238. package/src/a2ui/catalogue.ts +140 -103
  239. package/src/a2ui/views.tsx +5 -2
  240. package/src/components/alert.tsx +1 -1
  241. package/src/components/badge.tsx +1 -1
  242. package/src/components/button.tsx +1 -1
  243. package/src/components/chart/chart.tsx +72 -25
  244. package/src/components/chart/container.tsx +24 -39
  245. package/src/components/chart/index.tsx +4 -2
  246. package/src/components/chart/nivo-charts.tsx +41 -13
  247. package/src/components/chart/nivo-lazy.tsx +52 -0
  248. package/src/components/chart/recharts-charts.tsx +98 -3
  249. package/src/components/chart/recharts-lazy.tsx +72 -0
  250. package/src/components/chart/recharts-parts.tsx +34 -0
  251. package/src/components/chart/tokens.ts +1 -1
  252. package/src/components/chart/types.ts +14 -0
  253. package/src/components/chip.tsx +1 -1
  254. package/src/components/combobox.tsx +2 -2
  255. package/src/components/data-table/export.ts +18 -2
  256. package/src/components/data-table/features.ts +77 -45
  257. package/src/components/data-table/parts.tsx +15 -0
  258. package/src/components/data-table/use-data-table.ts +7 -2
  259. package/src/components/data-table/use-server-source.ts +17 -4
  260. package/src/components/date-field.tsx +1 -1
  261. package/src/components/error-banner.tsx +1 -1
  262. package/src/components/field.tsx +2 -2
  263. package/src/components/form.tsx +2 -2
  264. package/src/components/input.tsx +1 -1
  265. package/src/components/label.tsx +1 -1
  266. package/src/components/markdown.tsx +5 -4
  267. package/src/components/sheet.tsx +2 -2
  268. package/src/components/sortable-list.tsx +2 -2
  269. package/src/components/textarea.tsx +1 -1
  270. package/src/components/toast.tsx +1 -1
  271. package/src/entries/a2ui.ts +11 -0
  272. package/src/entries/chart.ts +10 -0
  273. package/src/entries/core.ts +91 -0
  274. package/src/entries/data-table.ts +9 -0
  275. package/src/entries/form.ts +24 -0
  276. package/src/entries/markdown.ts +9 -0
  277. package/src/entries/sortable-list.ts +13 -0
  278. package/src/index.ts +32 -98
  279. package/src/lib/shakeable.ts +33 -0
  280. package/dist/index.js.map +0 -1
@@ -0,0 +1,97 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { Check, ChevronDown } from "lucide-react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { Select } from "@base-ui/react/select";
7
+ //#region src/components/select.tsx
8
+ function Select$1(props) {
9
+ return /* @__PURE__ */ jsx(Select.Root, { ...props });
10
+ }
11
+ function SelectGroup({ className, ...props }) {
12
+ return /* @__PURE__ */ jsx(Select.Group, {
13
+ "data-slot": "select-group",
14
+ className: cn("flex flex-col", className),
15
+ ...props
16
+ });
17
+ }
18
+ function SelectValue({ className, ...props }) {
19
+ return /* @__PURE__ */ jsx(Select.Value, {
20
+ "data-slot": "select-value",
21
+ className: cn("flex-1 truncate text-left data-[placeholder]:text-[color:var(--ds-muted-foreground)]", className),
22
+ ...props
23
+ });
24
+ }
25
+ function SelectTrigger({ className, size = "md", children, ...props }) {
26
+ return /* @__PURE__ */ jsxs(Select.Trigger, {
27
+ "data-slot": "select-trigger",
28
+ "data-size": size,
29
+ className: cn("flex w-fit min-w-40 items-center justify-between gap-2 whitespace-nowrap px-3", size === "sm" ? "h-8 text-[length:var(--ds-text-caption)]" : "h-9 text-[length:var(--ds-text-caption-lg)]", "rounded-[var(--ds-radius-md)] border border-[var(--ds-input)]", "bg-[var(--ds-background)] text-[color:var(--ds-foreground)] shadow-[var(--ds-shadow-sm)]", "transition-[border-color,box-shadow,background-color] duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]", "outline-none hover:border-[var(--ds-border-strong)]", "focus-visible:border-[var(--ds-ring)] focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40", "data-[popup-open]:border-[var(--ds-ring)]", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "data-[invalid]:border-[var(--ds-destructive)] data-[invalid]:ring-[var(--ds-destructive)]/30", "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
30
+ ...props,
31
+ children: [children, /* @__PURE__ */ jsx(Select.Icon, {
32
+ "data-slot": "select-icon",
33
+ className: "flex text-[color:var(--ds-muted-foreground)] transition-transform duration-[var(--ds-duration-fast)] data-[popup-open]:rotate-180",
34
+ children: /* @__PURE__ */ jsx(ChevronDown, {})
35
+ })]
36
+ });
37
+ }
38
+ function SelectContent({ className, children, side = "bottom", align = "start", sideOffset = 4, alignOffset, anchor, collisionBoundary, collisionPadding, collisionAvoidance, sticky, positionMethod, alignItemWithTrigger = false, container, ...props }) {
39
+ return /* @__PURE__ */ jsx(Select.Portal, {
40
+ container,
41
+ children: /* @__PURE__ */ jsx(Select.Positioner, {
42
+ "data-slot": "select-positioner",
43
+ side,
44
+ align,
45
+ sideOffset,
46
+ alignOffset,
47
+ anchor,
48
+ collisionBoundary,
49
+ collisionPadding,
50
+ collisionAvoidance,
51
+ sticky,
52
+ positionMethod,
53
+ alignItemWithTrigger,
54
+ className: "isolate z-50 outline-none",
55
+ children: /* @__PURE__ */ jsx(Select.Popup, {
56
+ "data-slot": "select-content",
57
+ className: cn("relative max-h-[var(--available-height,none)] min-w-[var(--anchor-width,auto)] overflow-y-auto overflow-x-hidden p-1", "rounded-[var(--ds-radius-md)] border border-[var(--ds-border)]", "bg-[var(--ds-popover)] text-[color:var(--ds-popover-foreground)] shadow-[var(--ds-shadow-lg)]", "outline-none", "open:animate-in open:fade-in-0 open:zoom-in-95", "closed:animate-out closed:fade-out-0 closed:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]", className),
58
+ ...props,
59
+ children
60
+ })
61
+ })
62
+ });
63
+ }
64
+ function SelectLabel({ className, ...props }) {
65
+ return /* @__PURE__ */ jsx(Select.GroupLabel, {
66
+ "data-slot": "select-label",
67
+ className: cn("px-2 py-1.5 text-[length:var(--ds-text-caption)] font-medium text-[color:var(--ds-muted-foreground)]", className),
68
+ ...props
69
+ });
70
+ }
71
+ function SelectItem({ className, children, ...props }) {
72
+ return /* @__PURE__ */ jsxs(Select.Item, {
73
+ "data-slot": "select-item",
74
+ className: cn("relative flex w-full cursor-default select-none items-center gap-2 py-1.5 pr-8 pl-2", "rounded-[var(--ds-radius-sm)] text-[length:var(--ds-text-caption-lg)] text-[color:var(--ds-foreground)] outline-none", "data-[highlighted]:bg-[var(--ds-hover)] data-[highlighted]:text-[color:var(--ds-foreground)]", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
75
+ ...props,
76
+ children: [/* @__PURE__ */ jsx(Select.ItemText, {
77
+ "data-slot": "select-item-text",
78
+ className: "flex-1 truncate",
79
+ children
80
+ }), /* @__PURE__ */ jsx(Select.ItemIndicator, {
81
+ "data-slot": "select-item-indicator",
82
+ className: "absolute right-2 flex size-4 items-center justify-center text-[color:var(--ds-primary)]",
83
+ children: /* @__PURE__ */ jsx(Check, { className: "size-4" })
84
+ })]
85
+ });
86
+ }
87
+ function SelectSeparator({ className, ...props }) {
88
+ return /* @__PURE__ */ jsx(Select.Separator, {
89
+ "data-slot": "select-separator",
90
+ className: cn("-mx-1 my-1 h-px bg-[var(--ds-border)]", className),
91
+ ...props
92
+ });
93
+ }
94
+ //#endregion
95
+ export { Select$1 as Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue };
96
+
97
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","names":["Select","SelectPrimitive"],"sources":["../../src/components/select.tsx"],"sourcesContent":["\"use client\";\n\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Select.\n *\n * `SelectContent` composes Base UI's Portal + Positioner + Popup so consumers\n * keep writing `<SelectContent side=\"bottom\" align=\"start\">`; positioning\n * props are forwarded to the Positioner, which is where Base UI reads them.\n *\n * Radix users:\n * - `SelectValue` shows the raw value unless the Root is given `items`\n * (`{ [value]: label }` or `[{ value, label }]`) or `itemToStringLabel`;\n * Base UI does not read the label out of an unmounted `SelectItem`.\n * - `onValueChange` receives `(value, eventDetails)`.\n * - `SelectContent` defaults to the dropdown layout; pass\n * `alignItemWithTrigger` for Base UI's native-like overlay of the selected item.\n *\n * ## Typing the value\n *\n * `null` is the cleared / placeholder state, so `onValueChange` always hands\n * back `Value | null`, never bare `Value`. Name the value type on the element\n * to keep that union at `string | null` instead of letting inference widen it:\n *\n * ```tsx\n * const [status, setStatus] = useState(\"\");\n *\n * <Select<string>\n * // \"\" is not a value any item carries; `|| null` is the placeholder state,\n * // which is what makes SelectValue fall back to its `placeholder`.\n * value={status || null}\n * onValueChange={(next) => setStatus(next ?? \"\")} // next: string | null\n * >\n * ```\n *\n * Without the explicit `<string>` the type argument is inferred from `value`,\n * so a `string | null` value widens `Value` and the handler's parameter turns\n * into `string | null | null`. Multi-select narrows too:\n * `<Select<string, true> multiple>` hands back `string[]`, never `null`.\n *\n * `SelectProps` is the same props type, for a wrapper that forwards them.\n */\nexport type SelectProps<\n Value = string,\n Multiple extends boolean | undefined = false,\n> = SelectPrimitive.Root.Props<Value, Multiple>;\n\nfunction Select<Value, Multiple extends boolean | undefined = false>(\n props: SelectProps<Value, Multiple>,\n) {\n return <SelectPrimitive.Root {...props} />;\n}\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"flex flex-col\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\n \"flex-1 truncate text-left data-[placeholder]:text-[color:var(--ds-muted-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport interface SelectTriggerProps extends SelectPrimitive.Trigger.Props {\n size?: \"sm\" | \"md\";\n}\n\nfunction SelectTrigger({ className, size = \"md\", children, ...props }: SelectTriggerProps) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit min-w-40 items-center justify-between gap-2 whitespace-nowrap px-3\",\n size === \"sm\" ? \"h-8 text-[length:var(--ds-text-caption)]\" : \"h-9 text-[length:var(--ds-text-caption-lg)]\",\n \"rounded-[var(--ds-radius-md)] border border-[var(--ds-input)]\",\n \"bg-[var(--ds-background)] text-[color:var(--ds-foreground)] shadow-[var(--ds-shadow-sm)]\",\n \"transition-[border-color,box-shadow,background-color] duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]\",\n \"outline-none hover:border-[var(--ds-border-strong)]\",\n \"focus-visible:border-[var(--ds-ring)] focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40\",\n \"data-[popup-open]:border-[var(--ds-ring)]\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"data-[invalid]:border-[var(--ds-destructive)] data-[invalid]:ring-[var(--ds-destructive)]/30\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n data-slot=\"select-icon\"\n className=\"flex text-[color:var(--ds-muted-foreground)] transition-transform duration-[var(--ds-duration-fast)] data-[popup-open]:rotate-180\"\n >\n <ChevronDown />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\ntype PositionerProps = Pick<\n SelectPrimitive.Positioner.Props,\n | \"side\"\n | \"align\"\n | \"sideOffset\"\n | \"alignOffset\"\n | \"anchor\"\n | \"collisionBoundary\"\n | \"collisionPadding\"\n | \"collisionAvoidance\"\n | \"sticky\"\n | \"positionMethod\"\n | \"alignItemWithTrigger\"\n>;\n\nexport interface SelectContentProps extends SelectPrimitive.Popup.Props, PositionerProps {\n /** Where to portal the popup; defaults to `<body>`. */\n container?: SelectPrimitive.Portal.Props[\"container\"];\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n alignOffset,\n anchor,\n collisionBoundary,\n collisionPadding,\n collisionAvoidance,\n sticky,\n positionMethod,\n alignItemWithTrigger = false,\n container,\n ...props\n}: SelectContentProps) {\n return (\n <SelectPrimitive.Portal container={container}>\n <SelectPrimitive.Positioner\n data-slot=\"select-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n anchor={anchor}\n collisionBoundary={collisionBoundary}\n collisionPadding={collisionPadding}\n collisionAvoidance={collisionAvoidance}\n sticky={sticky}\n positionMethod={positionMethod}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50 outline-none\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\n \"relative max-h-[var(--available-height,none)] min-w-[var(--anchor-width,auto)] overflow-y-auto overflow-x-hidden p-1\",\n \"rounded-[var(--ds-radius-md)] border border-[var(--ds-border)]\",\n \"bg-[var(--ds-popover)] text-[color:var(--ds-popover-foreground)] shadow-[var(--ds-shadow-lg)]\",\n \"outline-none\",\n \"open:animate-in open:fade-in-0 open:zoom-in-95\",\n \"closed:animate-out closed:fade-out-0 closed:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n \"duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]\",\n className,\n )}\n {...props}\n >\n {children}\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\n \"px-2 py-1.5 text-[length:var(--ds-text-caption)] font-medium text-[color:var(--ds-muted-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SelectItem({ className, children, ...props }: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 py-1.5 pr-8 pl-2\",\n \"rounded-[var(--ds-radius-sm)] text-[length:var(--ds-text-caption-lg)] text-[color:var(--ds-foreground)] outline-none\",\n \"data-[highlighted]:bg-[var(--ds-hover)] data-[highlighted]:text-[color:var(--ds-foreground)]\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText data-slot=\"select-item-text\" className=\"flex-1 truncate\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-4 items-center justify-center text-[color:var(--ds-primary)]\"\n >\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-[var(--ds-border)]\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectLabel,\n SelectSeparator,\n};\n"],"mappings":";;;;;;;AAkDA,SAASA,SACP,OACA;CACA,OAAO,oBAACC,OAAgB,MAAjB,EAAsB,GAAI,MAAQ,CAAA;AAC3C;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAACA,OAAgB,OAAjB;EACE,aAAU;EACV,WAAW,GAAG,iBAAiB,SAAS;EACxC,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAACA,OAAgB,OAAjB;EACE,aAAU;EACV,WAAW,GACT,wFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,cAAc,EAAE,WAAW,OAAO,MAAM,UAAU,GAAG,SAA6B;CACzF,OACE,qBAACA,OAAgB,SAAjB;EACE,aAAU;EACV,aAAW;EACX,WAAW,GACT,iFACA,SAAS,OAAO,6CAA6C,+CAC7D,iEACA,4FACA,sHACA,uDACA,yGACA,6CACA,kEACA,gGACA,qFACA,SACF;EACA,GAAI;EAjBN,UAAA,CAmBG,UACD,oBAACA,OAAgB,MAAjB;GACE,aAAU;GACV,WAAU;GAEV,UAAA,oBAAC,aAAD,CAAc,CAAA;EACM,CAAA,CACC;;AAE7B;AAsBA,SAAS,cAAc,EACrB,WACA,UACA,OAAO,UACP,QAAQ,SACR,aAAa,GACb,aACA,QACA,mBACA,kBACA,oBACA,QACA,gBACA,uBAAuB,OACvB,WACA,GAAG,SACkB;CACrB,OACE,oBAACA,OAAgB,QAAjB;EAAmC;EACjC,UAAA,oBAACA,OAAgB,YAAjB;GACE,aAAU;GACJ;GACC;GACK;GACC;GACL;GACW;GACD;GACE;GACZ;GACQ;GACM;GACtB,WAAU;GAEV,UAAA,oBAACA,OAAgB,OAAjB;IACE,aAAU;IACV,WAAW,GACT,wHACA,kEACA,iGACA,gBACA,kDACA,2DACA,+JACA,gEACA,SACF;IACA,GAAI;IAEH;GACoB,CAAA;EACG,CAAA;CACN,CAAA;AAE5B;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2C;CAC9E,OACE,oBAACA,OAAgB,YAAjB;EACE,aAAU;EACV,WAAW,GACT,wGACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,UAAU,GAAG,SAAqC;CACjF,OACE,qBAACA,OAAgB,MAAjB;EACE,aAAU;EACV,WAAW,GACT,uFACA,wHACA,gGACA,kEACA,qFACA,SACF;EACA,GAAI;EAVN,UAAA,CAYE,oBAACA,OAAgB,UAAjB;GAA0B,aAAU;GAAmB,WAAU;GAC9D;EACuB,CAAA,GAC1B,oBAACA,OAAgB,eAAjB;GACE,aAAU;GACV,WAAU;GAEV,UAAA,oBAAC,OAAD,EAAO,WAAU,SAAU,CAAA;EACE,CAAA,CACX;;AAE1B;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAA0C;CACjF,OACE,oBAACA,OAAgB,WAAjB;EACE,aAAU;EACV,WAAW,GAAG,yCAAyC,SAAS;EAChE,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { Separator } from "@base-ui/react/separator";
4
+ //#region src/components/separator.d.ts
5
+ export interface SeparatorProps extends React.ComponentProps<typeof Separator> {
6
+ /**
7
+ * Purely visual: renders with `role="none"` so screen readers skip it.
8
+ * Defaults to true, matching the Radix component this replaces.
9
+ */
10
+ decorative?: boolean;
11
+ }
12
+ /**
13
+ * Separator — a one-pixel rule on the border token. Base UI supplies the
14
+ * `role="separator"` and `aria-orientation` semantics when not decorative.
15
+ */
16
+ declare function Separator$1({ className, orientation, decorative, ...props }: SeparatorProps): React.JSX.Element;
17
+ //#endregion
18
+ export { Separator$1 as Separator };
19
+ //# sourceMappingURL=separator.d.ts.map
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Separator } from "@base-ui/react/separator";
6
+ //#region src/components/separator.tsx
7
+ /**
8
+ * Separator — a one-pixel rule on the border token. Base UI supplies the
9
+ * `role="separator"` and `aria-orientation` semantics when not decorative.
10
+ */
11
+ function Separator$1({ className, orientation = "horizontal", decorative = true, ...props }) {
12
+ return /* @__PURE__ */ jsx(Separator, {
13
+ "data-slot": "separator",
14
+ orientation,
15
+ ...decorative ? { role: "none" } : {},
16
+ className: cn("shrink-0 bg-[var(--ds-border)]", orientation === "horizontal" ? "h-px w-full" : "h-full min-h-4 w-px self-stretch", className),
17
+ ...props
18
+ });
19
+ }
20
+ //#endregion
21
+ export { Separator$1 as Separator };
22
+
23
+ //# sourceMappingURL=separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator.js","names":["Separator","BaseSeparator"],"sources":["../../src/components/separator.tsx"],"sourcesContent":["\"use client\";\n\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/cn\";\n\nexport interface SeparatorProps extends React.ComponentProps<typeof BaseSeparator> {\n /**\n * Purely visual: renders with `role=\"none\"` so screen readers skip it.\n * Defaults to true, matching the Radix component this replaces.\n */\n decorative?: boolean;\n}\n\n/**\n * Separator — a one-pixel rule on the border token. Base UI supplies the\n * `role=\"separator\"` and `aria-orientation` semantics when not decorative.\n */\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: SeparatorProps) {\n return (\n <BaseSeparator\n data-slot=\"separator\"\n orientation={orientation}\n // An explicit undefined would still override Base UI's own role.\n {...(decorative ? { role: \"none\" } : {})}\n className={cn(\n \"shrink-0 bg-[var(--ds-border)]\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full min-h-4 w-px self-stretch\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n"],"mappings":";;;;;;;;;;AAkBA,SAASA,YAAU,EACjB,WACA,cAAc,cACd,aAAa,MACb,GAAG,SACc;CACjB,OACE,oBAACC,WAAD;EACE,aAAU;EACG;EAEb,GAAK,aAAa,EAAE,MAAM,OAAO,IAAI,CAAC;EACtC,WAAW,GACT,kCACA,gBAAgB,eAAe,gBAAgB,oCAC/C,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { VariantProps } from "class-variance-authority";
3
+ import * as React from "react";
4
+ import { Dialog } from "@base-ui/react/dialog";
5
+ //#region src/components/sheet.d.ts
6
+ export interface SheetProps extends Dialog.Root.Props {
7
+ /**
8
+ * `true` (default) traps focus, locks page scroll and draws a backdrop.
9
+ * `false` draws no backdrop and traps nothing, for a panel read alongside
10
+ * the app. `"trap-focus"` keeps focus in but leaves the page scrollable.
11
+ */
12
+ modal?: boolean | "trap-focus";
13
+ }
14
+ declare function Sheet({ modal, ...props }: SheetProps): React.JSX.Element;
15
+ declare function SheetTrigger(props: Dialog.Trigger.Props): React.JSX.Element;
16
+ declare function SheetClose(props: Dialog.Close.Props): React.JSX.Element;
17
+ declare function SheetPortal(props: Dialog.Portal.Props): React.JSX.Element;
18
+ declare function SheetOverlay({ className, ...props }: Dialog.Backdrop.Props): React.JSX.Element;
19
+ declare const sheetVariants: (props?: ({
20
+ side?: "top" | "bottom" | "left" | "right" | null | undefined;
21
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
22
+ export interface SheetContentProps extends Dialog.Popup.Props, VariantProps<typeof sheetVariants> {
23
+ /** Keep the sheet mounted in the DOM while hidden. */
24
+ keepMounted?: boolean;
25
+ /** Where to portal the sheet; defaults to `<body>`. */
26
+ container?: Dialog.Portal.Props["container"];
27
+ }
28
+ declare function SheetContent({ side, className, children, keepMounted, container, ...props }: SheetContentProps): React.JSX.Element;
29
+ declare function SheetHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
30
+ declare function SheetFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
31
+ declare function SheetTitle({ className, ...props }: Dialog.Title.Props): React.JSX.Element;
32
+ declare function SheetDescription({ className, ...props }: Dialog.Description.Props): React.JSX.Element;
33
+ //#endregion
34
+ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, sheetVariants };
35
+ //# sourceMappingURL=sheet.d.ts.map
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { cva } from "class-variance-authority";
6
+ import * as React from "react";
7
+ import { Dialog } from "@base-ui/react/dialog";
8
+ //#region src/components/sheet.tsx
9
+ /**
10
+ * Sheet: a Dialog whose Popup is anchored to one edge of the viewport.
11
+ *
12
+ * Same Base UI parts as Dialog (Root, Trigger, Portal, Backdrop, Popup, Title,
13
+ * Description, Close); only the Popup's placement differs, chosen by `side`.
14
+ * `SheetContent` composes Portal + Backdrop + Popup so consumers keep writing
15
+ * `<SheetContent side="right">…</SheetContent>`.
16
+ *
17
+ * ## Non-modal side panels
18
+ *
19
+ * `modal={false}` is the help-panel / inspector case: a sheet read *alongside*
20
+ * the app rather than instead of it. No backdrop is rendered, focus is not
21
+ * trapped, page scroll is not locked, and the rest of the page stays clickable,
22
+ * so a user can keep working with the panel open. `modal="trap-focus"` is the
23
+ * middle setting Base UI offers: focus stays inside, the page still scrolls.
24
+ *
25
+ * ```tsx
26
+ * <Sheet modal={false} open={helpOpen} onOpenChange={setHelpOpen}>
27
+ * <SheetContent side="right" disablePointerDismissal>…</SheetContent>
28
+ * </Sheet>
29
+ * ```
30
+ *
31
+ * A non-modal sheet closes when focus or a press leaves it; pass
32
+ * `disablePointerDismissal` (a Base UI Root prop, forwarded) to keep it open
33
+ * until the user closes it. `modal` is on the Root because that is where Base
34
+ * UI reads it; `SheetContent` picks the backdrop up from there through context.
35
+ */
36
+ const SheetModalContext = /* @__PURE__ */ React.createContext(true);
37
+ function Sheet({ modal = true, ...props }) {
38
+ return /* @__PURE__ */ jsx(SheetModalContext.Provider, {
39
+ value: modal,
40
+ children: /* @__PURE__ */ jsx(Dialog.Root, {
41
+ modal,
42
+ ...props
43
+ })
44
+ });
45
+ }
46
+ function SheetTrigger(props) {
47
+ return /* @__PURE__ */ jsx(Dialog.Trigger, {
48
+ "data-slot": "sheet-trigger",
49
+ ...props
50
+ });
51
+ }
52
+ function SheetClose(props) {
53
+ return /* @__PURE__ */ jsx(Dialog.Close, {
54
+ "data-slot": "sheet-close",
55
+ ...props
56
+ });
57
+ }
58
+ function SheetPortal(props) {
59
+ return /* @__PURE__ */ jsx(Dialog.Portal, {
60
+ "data-slot": "sheet-portal",
61
+ ...props
62
+ });
63
+ }
64
+ function SheetOverlay({ className, ...props }) {
65
+ return /* @__PURE__ */ jsx(Dialog.Backdrop, {
66
+ "data-slot": "sheet-overlay",
67
+ className: cn("fixed inset-0 z-50", "bg-[color-mix(in_oklab,var(--ds-ink-950)_70%,transparent)]", "open:animate-in open:fade-in-0 closed:animate-out closed:fade-out-0", "duration-[var(--ds-duration-base)] ease-[var(--ds-ease-out)]", className),
68
+ ...props
69
+ });
70
+ }
71
+ const sheetVariants = /* @__PURE__ */ cva([
72
+ "fixed z-50 flex flex-col gap-4 p-6 outline-none",
73
+ "bg-[var(--ds-popover)] text-[color:var(--ds-popover-foreground)] shadow-[var(--ds-shadow-lg)]",
74
+ "open:animate-in closed:animate-out",
75
+ "open:duration-[var(--ds-duration-slow)] closed:duration-[var(--ds-duration-base)] ease-[var(--ds-ease-out)]"
76
+ ], {
77
+ variants: { side: {
78
+ top: "inset-x-0 top-0 border-b border-[var(--ds-border)] open:slide-in-from-top closed:slide-out-to-top",
79
+ bottom: "inset-x-0 bottom-0 border-t border-[var(--ds-border)] open:slide-in-from-bottom closed:slide-out-to-bottom",
80
+ left: "inset-y-0 left-0 h-full w-3/4 border-r border-[var(--ds-border)] open:slide-in-from-left closed:slide-out-to-left sm:max-w-sm",
81
+ right: "inset-y-0 right-0 h-full w-3/4 border-l border-[var(--ds-border)] open:slide-in-from-right closed:slide-out-to-right sm:max-w-sm"
82
+ } },
83
+ defaultVariants: { side: "right" }
84
+ });
85
+ function SheetContent({ side = "right", className, children, keepMounted, container, ...props }) {
86
+ const modal = React.useContext(SheetModalContext);
87
+ return /* @__PURE__ */ jsxs(SheetPortal, {
88
+ keepMounted,
89
+ container,
90
+ children: [modal === false ? null : /* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsx(Dialog.Popup, {
91
+ "data-slot": "sheet-content",
92
+ "data-side": side,
93
+ "data-modal": modal === false ? void 0 : modal === true ? "" : modal,
94
+ className: cn(sheetVariants({ side }), className),
95
+ ...props,
96
+ children
97
+ })]
98
+ });
99
+ }
100
+ function SheetHeader({ className, ...props }) {
101
+ return /* @__PURE__ */ jsx("div", {
102
+ "data-slot": "sheet-header",
103
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
104
+ ...props
105
+ });
106
+ }
107
+ function SheetFooter({ className, ...props }) {
108
+ return /* @__PURE__ */ jsx("div", {
109
+ "data-slot": "sheet-footer",
110
+ className: cn("mt-auto flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
111
+ ...props
112
+ });
113
+ }
114
+ function SheetTitle({ className, ...props }) {
115
+ return /* @__PURE__ */ jsx(Dialog.Title, {
116
+ "data-slot": "sheet-title",
117
+ className: cn("text-[length:var(--ds-text-body-md)] font-semibold text-[color:var(--ds-foreground)]", className),
118
+ ...props
119
+ });
120
+ }
121
+ function SheetDescription({ className, ...props }) {
122
+ return /* @__PURE__ */ jsx(Dialog.Description, {
123
+ "data-slot": "sheet-description",
124
+ className: cn("text-[length:var(--ds-text-body-sm)] text-[color:var(--ds-muted-foreground)]", className),
125
+ ...props
126
+ });
127
+ }
128
+ //#endregion
129
+ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, sheetVariants };
130
+
131
+ //# sourceMappingURL=sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.js","names":["SheetPrimitive"],"sources":["../../src/components/sheet.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Sheet: a Dialog whose Popup is anchored to one edge of the viewport.\n *\n * Same Base UI parts as Dialog (Root, Trigger, Portal, Backdrop, Popup, Title,\n * Description, Close); only the Popup's placement differs, chosen by `side`.\n * `SheetContent` composes Portal + Backdrop + Popup so consumers keep writing\n * `<SheetContent side=\"right\">…</SheetContent>`.\n *\n * ## Non-modal side panels\n *\n * `modal={false}` is the help-panel / inspector case: a sheet read *alongside*\n * the app rather than instead of it. No backdrop is rendered, focus is not\n * trapped, page scroll is not locked, and the rest of the page stays clickable,\n * so a user can keep working with the panel open. `modal=\"trap-focus\"` is the\n * middle setting Base UI offers: focus stays inside, the page still scrolls.\n *\n * ```tsx\n * <Sheet modal={false} open={helpOpen} onOpenChange={setHelpOpen}>\n * <SheetContent side=\"right\" disablePointerDismissal>…</SheetContent>\n * </Sheet>\n * ```\n *\n * A non-modal sheet closes when focus or a press leaves it; pass\n * `disablePointerDismissal` (a Base UI Root prop, forwarded) to keep it open\n * until the user closes it. `modal` is on the Root because that is where Base\n * UI reads it; `SheetContent` picks the backdrop up from there through context.\n */\nconst SheetModalContext = /* @__PURE__ */ React.createContext<boolean | \"trap-focus\">(true);\n\nexport interface SheetProps extends SheetPrimitive.Root.Props {\n /**\n * `true` (default) traps focus, locks page scroll and draws a backdrop.\n * `false` draws no backdrop and traps nothing, for a panel read alongside\n * the app. `\"trap-focus\"` keeps focus in but leaves the page scrollable.\n */\n modal?: boolean | \"trap-focus\";\n}\n\nfunction Sheet({ modal = true, ...props }: SheetProps) {\n return (\n <SheetModalContext.Provider value={modal}>\n <SheetPrimitive.Root modal={modal} {...props} />\n </SheetModalContext.Provider>\n );\n}\n\nfunction SheetTrigger(props: SheetPrimitive.Trigger.Props) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose(props: SheetPrimitive.Close.Props) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal(props: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50\",\n \"bg-[color-mix(in_oklab,var(--ds-ink-950)_70%,transparent)]\",\n \"open:animate-in open:fade-in-0 closed:animate-out closed:fade-out-0\",\n \"duration-[var(--ds-duration-base)] ease-[var(--ds-ease-out)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst sheetVariants = /* @__PURE__ */ cva(\n [\n \"fixed z-50 flex flex-col gap-4 p-6 outline-none\",\n \"bg-[var(--ds-popover)] text-[color:var(--ds-popover-foreground)] shadow-[var(--ds-shadow-lg)]\",\n \"open:animate-in closed:animate-out\",\n \"open:duration-[var(--ds-duration-slow)] closed:duration-[var(--ds-duration-base)] ease-[var(--ds-ease-out)]\",\n ],\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b border-[var(--ds-border)] open:slide-in-from-top closed:slide-out-to-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t border-[var(--ds-border)] open:slide-in-from-bottom closed:slide-out-to-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r border-[var(--ds-border)] open:slide-in-from-left closed:slide-out-to-left sm:max-w-sm\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 border-l border-[var(--ds-border)] open:slide-in-from-right closed:slide-out-to-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n },\n);\n\nexport interface SheetContentProps\n extends SheetPrimitive.Popup.Props, VariantProps<typeof sheetVariants> {\n /** Keep the sheet mounted in the DOM while hidden. */\n keepMounted?: boolean;\n /** Where to portal the sheet; defaults to `<body>`. */\n container?: SheetPrimitive.Portal.Props[\"container\"];\n}\n\nfunction SheetContent({\n side = \"right\",\n className,\n children,\n keepMounted,\n container,\n ...props\n}: SheetContentProps) {\n const modal = React.useContext(SheetModalContext);\n return (\n <SheetPortal keepMounted={keepMounted} container={container}>\n {modal === false ? null : <SheetOverlay />}\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n data-modal={modal === false ? undefined : modal === true ? \"\" : modal}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n </SheetPrimitive.Popup>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\n \"text-[length:var(--ds-text-body-md)] font-semibold text-[color:var(--ds-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: SheetPrimitive.Description.Props) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\n \"text-[length:var(--ds-text-body-sm)] text-[color:var(--ds-muted-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n sheetVariants,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAM,oBAAoC,sBAAM,cAAsC,IAAI;AAW1F,SAAS,MAAM,EAAE,QAAQ,MAAM,GAAG,SAAqB;CACrD,OACE,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO;EACjC,UAAA,oBAACA,OAAe,MAAhB;GAA4B;GAAO,GAAI;EAAQ,CAAA;CACrB,CAAA;AAEhC;AAEA,SAAS,aAAa,OAAqC;CACzD,OAAO,oBAACA,OAAe,SAAhB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;AAEA,SAAS,WAAW,OAAmC;CACrD,OAAO,oBAACA,OAAe,OAAhB;EAAsB,aAAU;EAAc,GAAI;CAAQ,CAAA;AACnE;AAEA,SAAS,YAAY,OAAoC;CACvD,OAAO,oBAACA,OAAe,QAAhB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,SAAwC;CAC5E,OACE,oBAACA,OAAe,UAAhB;EACE,aAAU;EACV,WAAW,GACT,sBACA,8DACA,uEACA,gEACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,gBAAgC,oBACpC;CACE;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,MAAM;EACJ,KAAK;EACL,QACE;EACF,MAAM;EACN,OACE;CACJ,EACF;CACA,iBAAiB,EACf,MAAM,QACR;AACF,CACF;AAUA,SAAS,aAAa,EACpB,OAAO,SACP,WACA,UACA,aACA,WACA,GAAG,SACiB;CACpB,MAAM,QAAQ,MAAM,WAAW,iBAAiB;CAChD,OACE,qBAAC,aAAD;EAA0B;EAAwB;EAAlD,UAAA,CACG,UAAU,QAAQ,OAAO,oBAAC,cAAD,CAAe,CAAA,GACzC,oBAACA,OAAe,OAAhB;GACE,aAAU;GACV,aAAW;GACX,cAAY,UAAU,QAAQ,KAAA,IAAY,UAAU,OAAO,KAAK;GAChE,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,GAAG,SAAS;GAChD,GAAI;GAEH;EACmB,CAAA,CACX;;AAEjB;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,gDAAgD,SAAS;EACvE,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,kEAAkE,SAAS;EACzF,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAqC;CACvE,OACE,oBAACA,OAAe,OAAhB;EACE,aAAU;EACV,WAAW,GACT,wFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAA2C;CACnF,OACE,oBAACA,OAAe,aAAhB;EACE,aAAU;EACV,WAAW,GACT,gFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ //#region src/components/skeleton.d.ts
4
+ /**
5
+ * Skeleton — a pulsing placeholder block. Sized by the consumer (`h-4 w-40`);
6
+ * the fill is the border token, which reads on the canvas, a card and a
7
+ * popover in both themes.
8
+ */
9
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ //#endregion
11
+ export { Skeleton };
12
+ //# sourceMappingURL=skeleton.d.ts.map
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/components/skeleton.tsx
6
+ /**
7
+ * Skeleton — a pulsing placeholder block. Sized by the consumer (`h-4 w-40`);
8
+ * the fill is the border token, which reads on the canvas, a card and a
9
+ * popover in both themes.
10
+ */
11
+ function Skeleton({ className, ...props }) {
12
+ return /* @__PURE__ */ jsx("div", {
13
+ "data-slot": "skeleton",
14
+ "aria-hidden": true,
15
+ className: cn("animate-pulse rounded-[var(--ds-radius-sm)] bg-[var(--ds-border)]", className),
16
+ ...props
17
+ });
18
+ }
19
+ //#endregion
20
+ export { Skeleton };
21
+
22
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","names":[],"sources":["../../src/components/skeleton.tsx"],"sourcesContent":["\"use client\";\n\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Skeleton — a pulsing placeholder block. Sized by the consumer (`h-4 w-40`);\n * the fill is the border token, which reads on the canvas, a card and a\n * popover in both themes.\n */\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n aria-hidden\n className={cn(\"animate-pulse rounded-[var(--ds-radius-sm)] bg-[var(--ds-border)]\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"],"mappings":";;;;;;;;;;AAUA,SAAS,SAAS,EAAE,WAAW,GAAG,SAAsC;CACtE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,eAAA;EACA,WAAW,GAAG,qEAAqE,SAAS;EAC5F,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { DraggableAttributes, UniqueIdentifier } from "@dnd-kit/core";
4
+ import { arrayMove } from "@dnd-kit/sortable";
5
+ //#region src/components/sortable-list.d.ts
6
+ /** Spread onto the element that should start a drag. */
7
+ export interface SortableHandleProps extends Partial<DraggableAttributes> {
8
+ ref: (element: HTMLElement | null) => void;
9
+ onKeyDown?: React.KeyboardEventHandler<HTMLElement>;
10
+ onPointerDown?: React.PointerEventHandler<HTMLElement>;
11
+ onMouseDown?: React.MouseEventHandler<HTMLElement>;
12
+ onTouchStart?: React.TouchEventHandler<HTMLElement>;
13
+ }
14
+ export interface SortableRenderState {
15
+ /** Attributes, listeners and ref for a custom drag handle. */
16
+ handleProps: SortableHandleProps;
17
+ /** True for the item being dragged (and for the overlay copy). */
18
+ isDragging: boolean;
19
+ }
20
+ /** What moved where, passed to `onReorder` alongside the reordered array. */
21
+ export interface SortableReorderDetails {
22
+ /** Index the item came from, in the array as it was passed in. */
23
+ from: number;
24
+ /** Index it landed on. */
25
+ to: number;
26
+ /** Id of the item that moved (`getId` of the dragged item). */
27
+ activeId: UniqueIdentifier;
28
+ /** Id of the item it was dropped onto. */
29
+ overId: UniqueIdentifier;
30
+ }
31
+ export interface SortableListProps<T> extends Omit<React.ComponentProps<"ul">, "children"> {
32
+ items: readonly T[];
33
+ /** Stable id per item; must be unique within the list. */
34
+ getId: (item: T) => UniqueIdentifier;
35
+ /**
36
+ * Called with the reordered array after a successful drop, and with the move
37
+ * itself — `{ from, to, activeId, overId }` — for a server that persists a
38
+ * position rather than the whole list.
39
+ */
40
+ onReorder: (next: T[], details: SortableReorderDetails) => void;
41
+ renderItem: (item: T, state: SortableRenderState) => React.ReactNode;
42
+ /** Layout axis; also selects the sorting strategy. */
43
+ orientation?: "vertical" | "horizontal";
44
+ /** Only a `<SortableHandle>` (or an element given `handleProps`) starts a drag. */
45
+ handle?: boolean;
46
+ /**
47
+ * Let a finger scroll the page over the rows. Defaults to `handle`: `true`
48
+ * in handle mode, `false` in whole-row mode, which is what each already did.
49
+ * `true` on a whole-row list drops `touch-none` and uses a TouchSensor with
50
+ * delay activation, so a swipe scrolls and a held press drags.
51
+ */
52
+ touchScroll?: boolean;
53
+ /** Disables every sensor and hides the handles. */
54
+ disabled?: boolean;
55
+ /** Class name for each item wrapper. */
56
+ itemClassName?: string;
57
+ }
58
+ /**
59
+ * A grip button that starts the drag for its row. Reads the row's activator
60
+ * props from context, so it needs no wiring beyond being rendered inside
61
+ * `renderItem`. Hidden (kept in layout) when the list is disabled.
62
+ */
63
+ declare function SortableHandle({ className, children, ...props }: React.ComponentProps<"button">): React.JSX.Element;
64
+ declare function SortableList<T>({ items, getId, onReorder, renderItem, orientation, handle, disabled, touchScroll, itemClassName: itemClass, className, ...props }: SortableListProps<T>): React.JSX.Element;
65
+ //#endregion
66
+ export { SortableHandle, SortableList, arrayMove };
67
+ //# sourceMappingURL=sortable-list.d.ts.map