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,74 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Popover } from "@base-ui/react/popover";
6
+ //#region src/components/popover.tsx
7
+ /**
8
+ * Popover.
9
+ *
10
+ * `PopoverContent` composes Base UI's Portal + Positioner + Popup so consumers
11
+ * keep writing `<PopoverContent side="bottom" align="start">`; the positioning
12
+ * props are forwarded to the Positioner, which is where Base UI reads them.
13
+ *
14
+ * Radix users: `asChild` on the trigger becomes `render={<Button />}`;
15
+ * `PopoverAnchor` is gone — pass `anchor={ref}` to `PopoverContent` instead.
16
+ */
17
+ function Popover$1(props) {
18
+ return /* @__PURE__ */ jsx(Popover.Root, { ...props });
19
+ }
20
+ function PopoverTrigger(props) {
21
+ return /* @__PURE__ */ jsx(Popover.Trigger, {
22
+ "data-slot": "popover-trigger",
23
+ ...props
24
+ });
25
+ }
26
+ function PopoverClose(props) {
27
+ return /* @__PURE__ */ jsx(Popover.Close, {
28
+ "data-slot": "popover-close",
29
+ ...props
30
+ });
31
+ }
32
+ function PopoverTitle({ className, ...props }) {
33
+ return /* @__PURE__ */ jsx(Popover.Title, {
34
+ "data-slot": "popover-title",
35
+ className: cn("text-[length:var(--ds-text-body-sm)] font-semibold text-[color:var(--ds-foreground)]", className),
36
+ ...props
37
+ });
38
+ }
39
+ function PopoverDescription({ className, ...props }) {
40
+ return /* @__PURE__ */ jsx(Popover.Description, {
41
+ "data-slot": "popover-description",
42
+ className: cn("text-[length:var(--ds-text-caption-lg)] text-[color:var(--ds-muted-foreground)]", className),
43
+ ...props
44
+ });
45
+ }
46
+ function PopoverContent({ className, side = "bottom", align = "center", sideOffset = 4, alignOffset, anchor, collisionBoundary, collisionPadding, collisionAvoidance, sticky, positionMethod, keepMounted, container, ...props }) {
47
+ return /* @__PURE__ */ jsx(Popover.Portal, {
48
+ keepMounted,
49
+ container,
50
+ children: /* @__PURE__ */ jsx(Popover.Positioner, {
51
+ "data-slot": "popover-positioner",
52
+ side,
53
+ align,
54
+ sideOffset,
55
+ alignOffset,
56
+ anchor,
57
+ collisionBoundary,
58
+ collisionPadding,
59
+ collisionAvoidance,
60
+ sticky,
61
+ positionMethod,
62
+ className: "isolate z-50",
63
+ children: /* @__PURE__ */ jsx(Popover.Popup, {
64
+ "data-slot": "popover-content",
65
+ className: cn("w-72 p-4 outline-none", "rounded-[var(--ds-radius-lg)] border border-[var(--ds-border)]", "bg-[var(--ds-popover)] text-[color:var(--ds-popover-foreground)] shadow-[var(--ds-shadow-lg)]", "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),
66
+ ...props
67
+ })
68
+ })
69
+ });
70
+ }
71
+ //#endregion
72
+ export { Popover$1 as Popover, PopoverClose, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger };
73
+
74
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","names":["Popover","PopoverPrimitive"],"sources":["../../src/components/popover.tsx"],"sourcesContent":["\"use client\";\n\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Popover.\n *\n * `PopoverContent` composes Base UI's Portal + Positioner + Popup so consumers\n * keep writing `<PopoverContent side=\"bottom\" align=\"start\">`; the positioning\n * props are forwarded to the Positioner, which is where Base UI reads them.\n *\n * Radix users: `asChild` on the trigger becomes `render={<Button />}`;\n * `PopoverAnchor` is gone — pass `anchor={ref}` to `PopoverContent` instead.\n */\nfunction Popover(props: PopoverPrimitive.Root.Props) {\n return <PopoverPrimitive.Root {...props} />;\n}\n\nfunction PopoverTrigger(props: PopoverPrimitive.Trigger.Props) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverClose(props: PopoverPrimitive.Close.Props) {\n return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />;\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n return (\n <PopoverPrimitive.Title\n data-slot=\"popover-title\"\n className={cn(\n \"text-[length:var(--ds-text-body-sm)] font-semibold text-[color:var(--ds-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }: PopoverPrimitive.Description.Props) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn(\n \"text-[length:var(--ds-text-caption-lg)] text-[color:var(--ds-muted-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype PositionerProps = Pick<\n PopoverPrimitive.Positioner.Props,\n | \"side\"\n | \"align\"\n | \"sideOffset\"\n | \"alignOffset\"\n | \"anchor\"\n | \"collisionBoundary\"\n | \"collisionPadding\"\n | \"collisionAvoidance\"\n | \"sticky\"\n | \"positionMethod\"\n>;\n\nexport interface PopoverContentProps extends PopoverPrimitive.Popup.Props, PositionerProps {\n /** Keep the popup mounted in the DOM while hidden. */\n keepMounted?: boolean;\n /** Where to portal the popup; defaults to `<body>`. */\n container?: PopoverPrimitive.Portal.Props[\"container\"];\n}\n\nfunction PopoverContent({\n className,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n alignOffset,\n anchor,\n collisionBoundary,\n collisionPadding,\n collisionAvoidance,\n sticky,\n positionMethod,\n keepMounted,\n container,\n ...props\n}: PopoverContentProps) {\n return (\n <PopoverPrimitive.Portal keepMounted={keepMounted} container={container}>\n <PopoverPrimitive.Positioner\n data-slot=\"popover-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 className=\"isolate z-50\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n \"w-72 p-4 outline-none\",\n \"rounded-[var(--ds-radius-lg)] border border-[var(--ds-border)]\",\n \"bg-[var(--ds-popover)] text-[color:var(--ds-popover-foreground)] shadow-[var(--ds-shadow-lg)]\",\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 </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverClose,\n PopoverTitle,\n PopoverDescription,\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,SAASA,UAAQ,OAAoC;CACnD,OAAO,oBAACC,QAAiB,MAAlB,EAAuB,GAAI,MAAQ,CAAA;AAC5C;AAEA,SAAS,eAAe,OAAuC;CAC7D,OAAO,oBAACA,QAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAEA,SAAS,aAAa,OAAqC;CACzD,OAAO,oBAACA,QAAiB,OAAlB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,SAAuC;CAC3E,OACE,oBAACA,QAAiB,OAAlB;EACE,aAAU;EACV,WAAW,GACT,wFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAA6C;CACvF,OACE,oBAACA,QAAiB,aAAlB;EACE,aAAU;EACV,WAAW,GACT,mFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAuBA,SAAS,eAAe,EACtB,WACA,OAAO,UACP,QAAQ,UACR,aAAa,GACb,aACA,QACA,mBACA,kBACA,oBACA,QACA,gBACA,aACA,WACA,GAAG,SACmB;CACtB,OACE,oBAACA,QAAiB,QAAlB;EAAsC;EAAwB;EAC5D,UAAA,oBAACA,QAAiB,YAAlB;GACE,aAAU;GACJ;GACC;GACK;GACC;GACL;GACW;GACD;GACE;GACZ;GACQ;GAChB,WAAU;GAEV,UAAA,oBAACA,QAAiB,OAAlB;IACE,aAAU;IACV,WAAW,GACT,yBACA,kEACA,iGACA,kDACA,2DACA,+JACA,gEACA,SACF;IACA,GAAI;GACL,CAAA;EAC0B,CAAA;CACN,CAAA;AAE7B"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { Progress } from "@base-ui/react/progress";
4
+ //#region src/components/progress.d.ts
5
+ /**
6
+ * Progress.
7
+ *
8
+ * `Progress` renders the Base UI root (a `<div role="progressbar">` carrying
9
+ * `aria-valuenow`) with the track and indicator already inside; Base UI sizes
10
+ * the indicator to `value` as a percentage of `min`..`max`. Put a
11
+ * `ProgressLabel` and `ProgressValue` in `children` for a captioned bar; they
12
+ * render in a row above the track. `value={null}` gives an indeterminate bar.
13
+ */
14
+ export interface ProgressProps extends React.ComponentProps<typeof Progress.Root> {}
15
+ declare function Progress$1({ className, children, ...props }: ProgressProps): React.JSX.Element;
16
+ declare function ProgressTrack({ className, ...props }: React.ComponentProps<typeof Progress.Track>): React.JSX.Element;
17
+ declare function ProgressIndicator({ className, ...props }: React.ComponentProps<typeof Progress.Indicator>): React.JSX.Element;
18
+ declare function ProgressLabel({ className, ...props }: React.ComponentProps<typeof Progress.Label>): React.JSX.Element;
19
+ declare function ProgressValue({ className, ...props }: React.ComponentProps<typeof Progress.Value>): React.JSX.Element;
20
+ //#endregion
21
+ export { Progress$1 as Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue };
22
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Progress } from "@base-ui/react/progress";
6
+ //#region src/components/progress.tsx
7
+ function Progress$1({ className, children, ...props }) {
8
+ return /* @__PURE__ */ jsxs(Progress.Root, {
9
+ "data-slot": "progress",
10
+ className: cn("flex w-full flex-col gap-2", className),
11
+ ...props,
12
+ children: [children ? /* @__PURE__ */ jsx("div", {
13
+ className: "flex items-center justify-between gap-2",
14
+ children
15
+ }) : null, /* @__PURE__ */ jsx(ProgressTrack, { children: /* @__PURE__ */ jsx(ProgressIndicator, {}) })]
16
+ });
17
+ }
18
+ function ProgressTrack({ className, ...props }) {
19
+ return /* @__PURE__ */ jsx(Progress.Track, {
20
+ "data-slot": "progress-track",
21
+ className: cn("relative h-2 w-full overflow-hidden rounded-[var(--ds-radius-full)] bg-[var(--ds-border)]", className),
22
+ ...props
23
+ });
24
+ }
25
+ function ProgressIndicator({ className, ...props }) {
26
+ return /* @__PURE__ */ jsx(Progress.Indicator, {
27
+ "data-slot": "progress-indicator",
28
+ className: cn("h-full rounded-[var(--ds-radius-full)] bg-[var(--ds-primary)]", "transition-[width] duration-[var(--ds-duration-base)] ease-[var(--ds-ease-out)]", "data-[indeterminate]:w-1/3 data-[indeterminate]:animate-pulse", className),
29
+ ...props
30
+ });
31
+ }
32
+ function ProgressLabel({ className, ...props }) {
33
+ return /* @__PURE__ */ jsx(Progress.Label, {
34
+ "data-slot": "progress-label",
35
+ className: cn("text-[length:var(--ds-text-caption-lg)] font-medium text-[color:var(--ds-foreground)]", className),
36
+ ...props
37
+ });
38
+ }
39
+ function ProgressValue({ className, ...props }) {
40
+ return /* @__PURE__ */ jsx(Progress.Value, {
41
+ "data-slot": "progress-value",
42
+ className: cn("text-[length:var(--ds-text-caption-lg)] tabular-nums text-[color:var(--ds-muted-foreground)]", className),
43
+ ...props
44
+ });
45
+ }
46
+ //#endregion
47
+ export { Progress$1 as Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue };
48
+
49
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","names":["Progress","BaseProgress"],"sources":["../../src/components/progress.tsx"],"sourcesContent":["\"use client\";\n\nimport { Progress as BaseProgress } from \"@base-ui/react/progress\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Progress.\n *\n * `Progress` renders the Base UI root (a `<div role=\"progressbar\">` carrying\n * `aria-valuenow`) with the track and indicator already inside; Base UI sizes\n * the indicator to `value` as a percentage of `min`..`max`. Put a\n * `ProgressLabel` and `ProgressValue` in `children` for a captioned bar; they\n * render in a row above the track. `value={null}` gives an indeterminate bar.\n */\nexport interface ProgressProps extends React.ComponentProps<typeof BaseProgress.Root> {}\n\nfunction Progress({ className, children, ...props }: ProgressProps) {\n return (\n <BaseProgress.Root data-slot=\"progress\" className={cn(\"flex w-full flex-col gap-2\", className)} {...props}>\n {children ? <div className=\"flex items-center justify-between gap-2\">{children}</div> : null}\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </BaseProgress.Root>\n );\n}\n\nfunction ProgressTrack({ className, ...props }: React.ComponentProps<typeof BaseProgress.Track>) {\n return (\n <BaseProgress.Track\n data-slot=\"progress-track\"\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-[var(--ds-radius-full)] bg-[var(--ds-border)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ProgressIndicator({ className, ...props }: React.ComponentProps<typeof BaseProgress.Indicator>) {\n return (\n <BaseProgress.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\n \"h-full rounded-[var(--ds-radius-full)] bg-[var(--ds-primary)]\",\n \"transition-[width] duration-[var(--ds-duration-base)] ease-[var(--ds-ease-out)]\",\n \"data-[indeterminate]:w-1/3 data-[indeterminate]:animate-pulse\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ProgressLabel({ className, ...props }: React.ComponentProps<typeof BaseProgress.Label>) {\n return (\n <BaseProgress.Label\n data-slot=\"progress-label\"\n className={cn(\n \"text-[length:var(--ds-text-caption-lg)] font-medium text-[color:var(--ds-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ProgressValue({ className, ...props }: React.ComponentProps<typeof BaseProgress.Value>) {\n return (\n <BaseProgress.Value\n data-slot=\"progress-value\"\n className={cn(\n \"text-[length:var(--ds-text-caption-lg)] tabular-nums text-[color:var(--ds-muted-foreground)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue };\n"],"mappings":";;;;;;AAiBA,SAASA,WAAS,EAAE,WAAW,UAAU,GAAG,SAAwB;CAClE,OACE,qBAACC,SAAa,MAAd;EAAmB,aAAU;EAAW,WAAW,GAAG,8BAA8B,SAAS;EAAG,GAAI;EAApG,UAAA,CACG,WAAW,oBAAC,OAAD;GAAK,WAAU;GAA2C;EAAc,CAAA,IAAI,MACxF,oBAAC,eAAD,EAAA,UACE,oBAAC,mBAAD,CAAoB,CAAA,EACP,CAAA,CACE;;AAEvB;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA0D;CAC/F,OACE,oBAACA,SAAa,OAAd;EACE,aAAU;EACV,WAAW,GACT,6FACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAA8D;CACvG,OACE,oBAACA,SAAa,WAAd;EACE,aAAU;EACV,WAAW,GACT,iEACA,mFACA,iEACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA0D;CAC/F,OACE,oBAACA,SAAa,OAAd;EACE,aAAU;EACV,WAAW,GACT,yFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA0D;CAC/F,OACE,oBAACA,SAAa,OAAd;EACE,aAAU;EACV,WAAW,GACT,gGACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { Radio } from "@base-ui/react/radio";
4
+ import { RadioGroup } from "@base-ui/react/radio-group";
5
+ //#region src/components/radio-group.d.ts
6
+ /**
7
+ * Radio group.
8
+ *
9
+ * `RadioGroup` owns the value (`value` / `defaultValue` / `onValueChange`) and
10
+ * renders a `<div role="radiogroup">`; each `RadioGroupItem` is a Base UI
11
+ * `Radio.Root` (`<span role="radio">`) with a dot indicator that only mounts
12
+ * while checked. Arrow keys move the selection, as the ARIA pattern requires.
13
+ */
14
+ export interface RadioGroupProps extends React.ComponentProps<typeof RadioGroup> {}
15
+ declare function RadioGroup$1({ className, ...props }: RadioGroupProps): React.JSX.Element;
16
+ export interface RadioGroupItemProps extends React.ComponentProps<typeof Radio.Root> {}
17
+ declare function RadioGroupItem({ className, ...props }: RadioGroupItemProps): React.JSX.Element;
18
+ //#endregion
19
+ export { RadioGroup$1 as RadioGroup, RadioGroupItem };
20
+ //# sourceMappingURL=radio-group.d.ts.map
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Radio } from "@base-ui/react/radio";
6
+ import { RadioGroup } from "@base-ui/react/radio-group";
7
+ //#region src/components/radio-group.tsx
8
+ function RadioGroup$1({ className, ...props }) {
9
+ return /* @__PURE__ */ jsx(RadioGroup, {
10
+ "data-slot": "radio-group",
11
+ className: cn("grid gap-3", className),
12
+ ...props
13
+ });
14
+ }
15
+ function RadioGroupItem({ className, ...props }) {
16
+ return /* @__PURE__ */ jsx(Radio.Root, {
17
+ "data-slot": "radio-group-item",
18
+ className: cn("peer inline-flex aspect-square size-4 shrink-0 items-center justify-center rounded-[var(--ds-radius-full)] border", "border-[var(--ds-input)] bg-[var(--ds-background)] text-[color:var(--ds-primary)]", "transition-[border-color,box-shadow] duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]", "outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40", "data-[checked]:border-[var(--ds-primary)]", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "aria-invalid:border-[var(--ds-destructive)] aria-invalid:ring-[3px] aria-invalid:ring-[var(--ds-destructive)]/20", className),
19
+ ...props,
20
+ children: /* @__PURE__ */ jsx(Radio.Indicator, {
21
+ "data-slot": "radio-group-indicator",
22
+ className: "block size-2 rounded-[var(--ds-radius-full)] bg-current"
23
+ })
24
+ });
25
+ }
26
+ //#endregion
27
+ export { RadioGroup$1 as RadioGroup, RadioGroupItem };
28
+
29
+ //# sourceMappingURL=radio-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.js","names":["RadioGroup","BaseRadioGroup"],"sources":["../../src/components/radio-group.tsx"],"sourcesContent":["\"use client\";\n\nimport { Radio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Radio group.\n *\n * `RadioGroup` owns the value (`value` / `defaultValue` / `onValueChange`) and\n * renders a `<div role=\"radiogroup\">`; each `RadioGroupItem` is a Base UI\n * `Radio.Root` (`<span role=\"radio\">`) with a dot indicator that only mounts\n * while checked. Arrow keys move the selection, as the ARIA pattern requires.\n */\nexport interface RadioGroupProps extends React.ComponentProps<typeof BaseRadioGroup> {}\n\nfunction RadioGroup({ className, ...props }: RadioGroupProps) {\n return <BaseRadioGroup data-slot=\"radio-group\" className={cn(\"grid gap-3\", className)} {...props} />;\n}\n\nexport interface RadioGroupItemProps extends React.ComponentProps<typeof Radio.Root> {}\n\nfunction RadioGroupItem({ className, ...props }: RadioGroupItemProps) {\n return (\n <Radio.Root\n data-slot=\"radio-group-item\"\n className={cn(\n \"peer inline-flex aspect-square size-4 shrink-0 items-center justify-center rounded-[var(--ds-radius-full)] border\",\n \"border-[var(--ds-input)] bg-[var(--ds-background)] text-[color:var(--ds-primary)]\",\n \"transition-[border-color,box-shadow] duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]\",\n \"outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40\",\n \"data-[checked]:border-[var(--ds-primary)]\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"aria-invalid:border-[var(--ds-destructive)] aria-invalid:ring-[3px] aria-invalid:ring-[var(--ds-destructive)]/20\",\n className,\n )}\n {...props}\n >\n <Radio.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"block size-2 rounded-[var(--ds-radius-full)] bg-current\"\n />\n </Radio.Root>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n"],"mappings":";;;;;;;AAiBA,SAASA,aAAW,EAAE,WAAW,GAAG,SAA0B;CAC5D,OAAO,oBAACC,YAAD;EAAgB,aAAU;EAAc,WAAW,GAAG,cAAc,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrG;AAIA,SAAS,eAAe,EAAE,WAAW,GAAG,SAA8B;CACpE,OACE,oBAAC,MAAM,MAAP;EACE,aAAU;EACV,WAAW,GACT,qHACA,qFACA,qGACA,gFACA,6CACA,kEACA,oHACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAAC,MAAM,WAAP;GACE,aAAU;GACV,WAAU;EACX,CAAA;CACS,CAAA;AAEhB"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { ScrollArea } from "@base-ui/react/scroll-area";
3
+ //#region src/components/scroll-area.d.ts
4
+ /**
5
+ * ScrollArea.
6
+ *
7
+ * Base UI positions the scrollbar and thumb itself (absolute inside the root,
8
+ * thumb size in `--scroll-area-thumb-*`); this file only sets the track width,
9
+ * the thumb colour and the hover/scroll reveal. Base UI also unmounts the
10
+ * scrollbar when there is nothing to scroll, so an empty list shows no track.
11
+ *
12
+ * Radix users: the `display: table` wrapper is gone, so `truncate` works
13
+ * inside the viewport without the `[&>div]:!block` override cortenaweb needed.
14
+ * `type="always" | "hover"` is gone too; the scrollbar shows on hover and while
15
+ * scrolling, and `keepMounted` on `ScrollBar` keeps it in the DOM otherwise.
16
+ */
17
+ export interface ScrollAreaProps extends ScrollArea.Root.Props {
18
+ /** Which scrollbars to render. Defaults to vertical only. */
19
+ orientation?: "vertical" | "horizontal" | "both";
20
+ }
21
+ declare function ScrollArea$1({ className, children, orientation, ...props }: ScrollAreaProps): import("react").JSX.Element;
22
+ declare function ScrollBar({ className, orientation, ...props }: ScrollArea.Scrollbar.Props): import("react").JSX.Element;
23
+ //#endregion
24
+ export { ScrollArea$1 as ScrollArea, ScrollBar };
25
+ //# sourceMappingURL=scroll-area.d.ts.map
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ScrollArea } from "@base-ui/react/scroll-area";
6
+ //#region src/components/scroll-area.tsx
7
+ function ScrollArea$1({ className, children, orientation = "vertical", ...props }) {
8
+ return /* @__PURE__ */ jsxs(ScrollArea.Root, {
9
+ "data-slot": "scroll-area",
10
+ className: cn("relative overflow-hidden", className),
11
+ ...props,
12
+ children: [
13
+ /* @__PURE__ */ jsx(ScrollArea.Viewport, {
14
+ "data-slot": "scroll-area-viewport",
15
+ className: "size-full overscroll-contain rounded-[inherit] outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40",
16
+ children
17
+ }),
18
+ orientation !== "horizontal" && /* @__PURE__ */ jsx(ScrollBar, { orientation: "vertical" }),
19
+ orientation !== "vertical" && /* @__PURE__ */ jsx(ScrollBar, { orientation: "horizontal" }),
20
+ /* @__PURE__ */ jsx(ScrollArea.Corner, { "data-slot": "scroll-area-corner" })
21
+ ]
22
+ });
23
+ }
24
+ function ScrollBar({ className, orientation = "vertical", ...props }) {
25
+ return /* @__PURE__ */ jsx(ScrollArea.Scrollbar, {
26
+ "data-slot": "scroll-area-scrollbar",
27
+ orientation,
28
+ className: cn("flex touch-none select-none p-px", "opacity-0 transition-opacity duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]", "data-[hovering]:opacity-100 data-[scrolling]:opacity-100", orientation === "vertical" && "w-2.5 flex-col", orientation === "horizontal" && "h-2.5 flex-row", className),
29
+ ...props,
30
+ children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {
31
+ "data-slot": "scroll-area-thumb",
32
+ className: cn("relative flex-1 rounded-[var(--ds-radius-full)] bg-[var(--ds-border-strong)]", orientation === "vertical" ? "w-full" : "h-full")
33
+ })
34
+ });
35
+ }
36
+ //#endregion
37
+ export { ScrollArea$1 as ScrollArea, ScrollBar };
38
+
39
+ //# sourceMappingURL=scroll-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area.js","names":["ScrollArea","ScrollAreaPrimitive"],"sources":["../../src/components/scroll-area.tsx"],"sourcesContent":["\"use client\";\n\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * ScrollArea.\n *\n * Base UI positions the scrollbar and thumb itself (absolute inside the root,\n * thumb size in `--scroll-area-thumb-*`); this file only sets the track width,\n * the thumb colour and the hover/scroll reveal. Base UI also unmounts the\n * scrollbar when there is nothing to scroll, so an empty list shows no track.\n *\n * Radix users: the `display: table` wrapper is gone, so `truncate` works\n * inside the viewport without the `[&>div]:!block` override cortenaweb needed.\n * `type=\"always\" | \"hover\"` is gone too; the scrollbar shows on hover and while\n * scrolling, and `keepMounted` on `ScrollBar` keeps it in the DOM otherwise.\n */\nexport interface ScrollAreaProps extends ScrollAreaPrimitive.Root.Props {\n /** Which scrollbars to render. Defaults to vertical only. */\n orientation?: \"vertical\" | \"horizontal\" | \"both\";\n}\n\nfunction ScrollArea({ className, children, orientation = \"vertical\", ...props }: ScrollAreaProps) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full overscroll-contain rounded-[inherit] outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n {orientation !== \"horizontal\" && <ScrollBar orientation=\"vertical\" />}\n {orientation !== \"vertical\" && <ScrollBar orientation=\"horizontal\" />}\n <ScrollAreaPrimitive.Corner data-slot=\"scroll-area-corner\" />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollAreaPrimitive.Scrollbar.Props) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none p-px\",\n \"opacity-0 transition-opacity duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]\",\n \"data-[hovering]:opacity-100 data-[scrolling]:opacity-100\",\n orientation === \"vertical\" && \"w-2.5 flex-col\",\n orientation === \"horizontal\" && \"h-2.5 flex-row\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className={cn(\n \"relative flex-1 rounded-[var(--ds-radius-full)] bg-[var(--ds-border-strong)]\",\n orientation === \"vertical\" ? \"w-full\" : \"h-full\",\n )}\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n"],"mappings":";;;;;;AAuBA,SAASA,aAAW,EAAE,WAAW,UAAU,cAAc,YAAY,GAAG,SAA0B;CAChG,OACE,qBAACC,WAAoB,MAArB;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;EAHN,UAAA;GAKE,oBAACA,WAAoB,UAArB;IACE,aAAU;IACV,WAAU;IAET;GAC2B,CAAA;GAC7B,gBAAgB,gBAAgB,oBAAC,WAAD,EAAW,aAAY,WAAY,CAAA;GACnE,gBAAgB,cAAc,oBAAC,WAAD,EAAW,aAAY,aAAc,CAAA;GACpE,oBAACA,WAAoB,QAArB,EAA4B,aAAU,qBAAsB,CAAA;EACpC;;AAE9B;AAEA,SAAS,UAAU,EACjB,WACA,cAAc,YACd,GAAG,SACmC;CACtC,OACE,oBAACA,WAAoB,WAArB;EACE,aAAU;EACG;EACb,WAAW,GACT,oCACA,6FACA,4DACA,gBAAgB,cAAc,kBAC9B,gBAAgB,gBAAgB,kBAChC,SACF;EACA,GAAI;EAEJ,UAAA,oBAACA,WAAoB,OAArB;GACE,aAAU;GACV,WAAW,GACT,gFACA,gBAAgB,aAAa,WAAW,QAC1C;EACD,CAAA;CAC4B,CAAA;AAEnC"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { CardProps } from "./card.js";
3
+ import * as React from "react";
4
+ //#region src/components/section-card.d.ts
5
+ export interface SectionCardProps extends Omit<CardProps, "title"> {
6
+ title: React.ReactNode;
7
+ description?: React.ReactNode;
8
+ /** Controls for the section, right-aligned in the header row. */
9
+ actions?: React.ReactNode;
10
+ /** Rendered in a CardFooter under the body. */
11
+ footer?: React.ReactNode;
12
+ /** Remove the body padding, for a table or list that fills the card. */
13
+ flush?: boolean;
14
+ /** Class on the body wrapper. */
15
+ bodyClassName?: string;
16
+ }
17
+ /**
18
+ * SectionCard — a Card with a header row (title, description, actions), a
19
+ * body and an optional footer. It composes the Card parts rather than
20
+ * restyling them, so a SectionCard and a hand-built Card look identical.
21
+ *
22
+ * `render` is Card's and reaches the outer element, so a section card can be
23
+ * the landmark it is named after: `render={<section aria-labelledby={id} />}`
24
+ * with the same `id` on the title, or `render={<aside />}` for a side panel.
25
+ */
26
+ declare function SectionCard({ title, description, actions, footer, flush, bodyClassName, children, ...props }: SectionCardProps): React.JSX.Element;
27
+ //#endregion
28
+ export { SectionCard };
29
+ //# sourceMappingURL=section-card.d.ts.map
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./card.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/components/section-card.tsx
7
+ /**
8
+ * SectionCard — a Card with a header row (title, description, actions), a
9
+ * body and an optional footer. It composes the Card parts rather than
10
+ * restyling them, so a SectionCard and a hand-built Card look identical.
11
+ *
12
+ * `render` is Card's and reaches the outer element, so a section card can be
13
+ * the landmark it is named after: `render={<section aria-labelledby={id} />}`
14
+ * with the same `id` on the title, or `render={<aside />}` for a side panel.
15
+ */
16
+ function SectionCard({ title, description, actions, footer, flush, bodyClassName, children, ...props }) {
17
+ return /* @__PURE__ */ jsxs(Card, {
18
+ "data-slot": "section-card",
19
+ ...props,
20
+ children: [
21
+ /* @__PURE__ */ jsxs(CardHeader, {
22
+ "data-slot": "section-card-header",
23
+ className: "flex-row items-start justify-between gap-4 border-b border-[var(--ds-border-subtle)] pb-4",
24
+ children: [/* @__PURE__ */ jsxs("div", {
25
+ "data-slot": "section-card-heading",
26
+ className: "flex min-w-0 flex-col gap-1",
27
+ children: [/* @__PURE__ */ jsx(CardTitle, {
28
+ "data-slot": "section-card-title",
29
+ children: title
30
+ }), description ? /* @__PURE__ */ jsx(CardDescription, {
31
+ "data-slot": "section-card-description",
32
+ children: description
33
+ }) : null]
34
+ }), actions ? /* @__PURE__ */ jsx("div", {
35
+ "data-slot": "section-card-actions",
36
+ className: "flex shrink-0 flex-wrap items-center justify-end gap-2",
37
+ children: actions
38
+ }) : null]
39
+ }),
40
+ /* @__PURE__ */ jsx(CardContent, {
41
+ "data-slot": "section-card-body",
42
+ className: cn(flush ? "p-0" : "p-5", bodyClassName),
43
+ children
44
+ }),
45
+ footer ? /* @__PURE__ */ jsx(CardFooter, {
46
+ "data-slot": "section-card-footer",
47
+ children: footer
48
+ }) : null
49
+ ]
50
+ });
51
+ }
52
+ //#endregion
53
+ export { SectionCard };
54
+
55
+ //# sourceMappingURL=section-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-card.js","names":[],"sources":["../../src/components/section-card.tsx"],"sourcesContent":["\"use client\";\n\nimport type * as React from \"react\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n type CardProps,\n} from \"@/components/card\";\nimport { cn } from \"@/lib/cn\";\n\nexport interface SectionCardProps extends Omit<CardProps, \"title\"> {\n title: React.ReactNode;\n description?: React.ReactNode;\n /** Controls for the section, right-aligned in the header row. */\n actions?: React.ReactNode;\n /** Rendered in a CardFooter under the body. */\n footer?: React.ReactNode;\n /** Remove the body padding, for a table or list that fills the card. */\n flush?: boolean;\n /** Class on the body wrapper. */\n bodyClassName?: string;\n}\n\n/**\n * SectionCard — a Card with a header row (title, description, actions), a\n * body and an optional footer. It composes the Card parts rather than\n * restyling them, so a SectionCard and a hand-built Card look identical.\n *\n * `render` is Card's and reaches the outer element, so a section card can be\n * the landmark it is named after: `render={<section aria-labelledby={id} />}`\n * with the same `id` on the title, or `render={<aside />}` for a side panel.\n */\nfunction SectionCard({\n title,\n description,\n actions,\n footer,\n flush,\n bodyClassName,\n children,\n ...props\n}: SectionCardProps) {\n return (\n <Card data-slot=\"section-card\" {...props}>\n <CardHeader\n data-slot=\"section-card-header\"\n className=\"flex-row items-start justify-between gap-4 border-b border-[var(--ds-border-subtle)] pb-4\"\n >\n <div data-slot=\"section-card-heading\" className=\"flex min-w-0 flex-col gap-1\">\n <CardTitle data-slot=\"section-card-title\">{title}</CardTitle>\n {description ? (\n <CardDescription data-slot=\"section-card-description\">{description}</CardDescription>\n ) : null}\n </div>\n {actions ? (\n <div\n data-slot=\"section-card-actions\"\n className=\"flex shrink-0 flex-wrap items-center justify-end gap-2\"\n >\n {actions}\n </div>\n ) : null}\n </CardHeader>\n <CardContent\n data-slot=\"section-card-body\"\n className={cn(flush ? \"p-0\" : \"p-5\", bodyClassName)}\n >\n {children}\n </CardContent>\n {footer ? <CardFooter data-slot=\"section-card-footer\">{footer}</CardFooter> : null}\n </Card>\n );\n}\n\nexport { SectionCard };\n"],"mappings":";;;;;;;;;;;;;;;AAoCA,SAAS,YAAY,EACnB,OACA,aACA,SACA,QACA,OACA,eACA,UACA,GAAG,SACgB;CACnB,OACE,qBAAC,MAAD;EAAM,aAAU;EAAe,GAAI;EAAnC,UAAA;GACE,qBAAC,YAAD;IACE,aAAU;IACV,WAAU;IAFZ,UAAA,CAIE,qBAAC,OAAD;KAAK,aAAU;KAAuB,WAAU;KAAhD,UAAA,CACE,oBAAC,WAAD;MAAW,aAAU;MAAsB,UAAA;KAAiB,CAAA,GAC3D,cACC,oBAAC,iBAAD;MAAiB,aAAU;MAA4B,UAAA;KAA6B,CAAA,IAClF,IACD;IACJ,CAAA,GAAA,UACC,oBAAC,OAAD;KACE,aAAU;KACV,WAAU;KAET,UAAA;IACE,CAAA,IACH,IACM;;GACZ,oBAAC,aAAD;IACE,aAAU;IACV,WAAW,GAAG,QAAQ,QAAQ,OAAO,aAAa;IAEjD;GACU,CAAA;GACZ,SAAS,oBAAC,YAAD;IAAY,aAAU;IAAuB,UAAA;GAAmB,CAAA,IAAI;EAC1E;;AAEV"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ //#region src/components/segmented.d.ts
4
+ /**
5
+ * Segmented control.
6
+ *
7
+ * A single-select row of options exposed as a radiogroup: the same semantics
8
+ * cortenaweb shipped, which screen readers announce as "1 of 3, selected".
9
+ * The active segment lifts onto the raised surface with the small shadow; the
10
+ * others read as muted text until hovered.
11
+ */
12
+ export interface SegmentedOption<T extends string = string> {
13
+ value: T;
14
+ label: React.ReactNode;
15
+ icon?: React.ReactNode;
16
+ disabled?: boolean;
17
+ }
18
+ export interface SegmentedProps<T extends string = string> extends Omit<React.ComponentProps<"div">, "onChange"> {
19
+ value: T;
20
+ onValueChange: (value: T) => void;
21
+ options: readonly SegmentedOption<T>[];
22
+ "aria-label"?: string;
23
+ }
24
+ declare function Segmented<T extends string = string>({ className, value, onValueChange, options, "aria-label": ariaLabel, ...props }: SegmentedProps<T>): React.JSX.Element;
25
+ //#endregion
26
+ export { Segmented };
27
+ //# sourceMappingURL=segmented.d.ts.map
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn } from "../lib/cn.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/components/segmented.tsx
6
+ function Segmented({ className, value, onValueChange, options, "aria-label": ariaLabel, ...props }) {
7
+ return /* @__PURE__ */ jsx("div", {
8
+ role: "radiogroup",
9
+ "aria-label": ariaLabel,
10
+ "data-slot": "segmented",
11
+ className: cn("inline-flex gap-0.5 rounded-[var(--ds-radius-md)] border border-[var(--ds-border-subtle)] bg-[var(--ds-muted)] p-1", className),
12
+ ...props,
13
+ children: options.map((opt) => {
14
+ const active = opt.value === value;
15
+ return /* @__PURE__ */ jsxs("button", {
16
+ type: "button",
17
+ role: "radio",
18
+ "aria-checked": active,
19
+ disabled: opt.disabled,
20
+ "data-slot": "segmented-item",
21
+ "data-state": active ? "on" : "off",
22
+ onClick: () => onValueChange(opt.value),
23
+ className: cn("inline-flex items-center gap-1.5 rounded-[var(--ds-radius-sm)] px-3 py-1 font-medium", "text-[length:var(--ds-text-caption)]", "transition-[background-color,color,box-shadow] duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]", active ? "bg-[var(--ds-popover)] text-[color:var(--ds-foreground)] shadow-[var(--ds-shadow-sm)]" : "text-[color:var(--ds-muted-foreground)] hover:text-[color:var(--ds-foreground)]", "outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40", "disabled:pointer-events-none disabled:opacity-50", "[&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0"),
24
+ children: [opt.icon, opt.label]
25
+ }, opt.value);
26
+ })
27
+ });
28
+ }
29
+ //#endregion
30
+ export { Segmented };
31
+
32
+ //# sourceMappingURL=segmented.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented.js","names":[],"sources":["../../src/components/segmented.tsx"],"sourcesContent":["\"use client\";\n\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/cn\";\n\n/**\n * Segmented control.\n *\n * A single-select row of options exposed as a radiogroup: the same semantics\n * cortenaweb shipped, which screen readers announce as \"1 of 3, selected\".\n * The active segment lifts onto the raised surface with the small shadow; the\n * others read as muted text until hovered.\n */\nexport interface SegmentedOption<T extends string = string> {\n value: T;\n label: React.ReactNode;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedProps<T extends string = string>\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value: T;\n onValueChange: (value: T) => void;\n options: readonly SegmentedOption<T>[];\n \"aria-label\"?: string;\n}\n\nfunction Segmented<T extends string = string>({\n className,\n value,\n onValueChange,\n options,\n \"aria-label\": ariaLabel,\n ...props\n}: SegmentedProps<T>) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n data-slot=\"segmented\"\n className={cn(\n \"inline-flex gap-0.5 rounded-[var(--ds-radius-md)] border border-[var(--ds-border-subtle)] bg-[var(--ds-muted)] p-1\",\n className,\n )}\n {...props}\n >\n {options.map((opt) => {\n const active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n disabled={opt.disabled}\n data-slot=\"segmented-item\"\n data-state={active ? \"on\" : \"off\"}\n onClick={() => onValueChange(opt.value)}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-[var(--ds-radius-sm)] px-3 py-1 font-medium\",\n \"text-[length:var(--ds-text-caption)]\",\n \"transition-[background-color,color,box-shadow] duration-[var(--ds-duration-fast)] ease-[var(--ds-ease-out)]\",\n active\n ? \"bg-[var(--ds-popover)] text-[color:var(--ds-foreground)] shadow-[var(--ds-shadow-sm)]\"\n : \"text-[color:var(--ds-muted-foreground)] hover:text-[color:var(--ds-foreground)]\",\n \"outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--ds-ring)]/40\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0\",\n )}\n >\n {opt.icon}\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n\nexport { Segmented };\n"],"mappings":";;;;;AA4BA,SAAS,UAAqC,EAC5C,WACA,OACA,eACA,SACA,cAAc,WACd,GAAG,SACiB;CACpB,OACE,oBAAC,OAAD;EACE,MAAK;EACL,cAAY;EACZ,aAAU;EACV,WAAW,GACT,sHACA,SACF;EACA,GAAI;EAEH,UAAA,QAAQ,KAAK,QAAQ;GACpB,MAAM,SAAS,IAAI,UAAU;GAC7B,OACE,qBAAC,UAAD;IAEE,MAAK;IACL,MAAK;IACL,gBAAc;IACd,UAAU,IAAI;IACd,aAAU;IACV,cAAY,SAAS,OAAO;IAC5B,eAAe,cAAc,IAAI,KAAK;IACtC,WAAW,GACT,wFACA,wCACA,+GACA,SACI,0FACA,mFACJ,gFACA,oDACA,+DACF;IAnBF,UAAA,CAqBG,IAAI,MACJ,IAAI,KACC;GAtBD,GAAA,IAAI,KAsBH;EAEZ,CAAC;CACE,CAAA;AAET"}
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import { Select } from "@base-ui/react/select";
3
+ //#region src/components/select.d.ts
4
+ /**
5
+ * Select.
6
+ *
7
+ * `SelectContent` composes Base UI's Portal + Positioner + Popup so consumers
8
+ * keep writing `<SelectContent side="bottom" align="start">`; positioning
9
+ * props are forwarded to the Positioner, which is where Base UI reads them.
10
+ *
11
+ * Radix users:
12
+ * - `SelectValue` shows the raw value unless the Root is given `items`
13
+ * (`{ [value]: label }` or `[{ value, label }]`) or `itemToStringLabel`;
14
+ * Base UI does not read the label out of an unmounted `SelectItem`.
15
+ * - `onValueChange` receives `(value, eventDetails)`.
16
+ * - `SelectContent` defaults to the dropdown layout; pass
17
+ * `alignItemWithTrigger` for Base UI's native-like overlay of the selected item.
18
+ *
19
+ * ## Typing the value
20
+ *
21
+ * `null` is the cleared / placeholder state, so `onValueChange` always hands
22
+ * back `Value | null`, never bare `Value`. Name the value type on the element
23
+ * to keep that union at `string | null` instead of letting inference widen it:
24
+ *
25
+ * ```tsx
26
+ * const [status, setStatus] = useState("");
27
+ *
28
+ * <Select<string>
29
+ * // "" is not a value any item carries; `|| null` is the placeholder state,
30
+ * // which is what makes SelectValue fall back to its `placeholder`.
31
+ * value={status || null}
32
+ * onValueChange={(next) => setStatus(next ?? "")} // next: string | null
33
+ * >
34
+ * ```
35
+ *
36
+ * Without the explicit `<string>` the type argument is inferred from `value`,
37
+ * so a `string | null` value widens `Value` and the handler's parameter turns
38
+ * into `string | null | null`. Multi-select narrows too:
39
+ * `<Select<string, true> multiple>` hands back `string[]`, never `null`.
40
+ *
41
+ * `SelectProps` is the same props type, for a wrapper that forwards them.
42
+ */
43
+ export type SelectProps<Value = string, Multiple extends boolean | undefined = false> = Select.Root.Props<Value, Multiple>;
44
+ declare function Select$1<Value, Multiple extends boolean | undefined = false>(props: SelectProps<Value, Multiple>): import("react").JSX.Element;
45
+ declare function SelectGroup({ className, ...props }: Select.Group.Props): import("react").JSX.Element;
46
+ declare function SelectValue({ className, ...props }: Select.Value.Props): import("react").JSX.Element;
47
+ export interface SelectTriggerProps extends Select.Trigger.Props {
48
+ size?: "sm" | "md";
49
+ }
50
+ declare function SelectTrigger({ className, size, children, ...props }: SelectTriggerProps): import("react").JSX.Element;
51
+ type PositionerProps = Pick<Select.Positioner.Props, "side" | "align" | "sideOffset" | "alignOffset" | "anchor" | "collisionBoundary" | "collisionPadding" | "collisionAvoidance" | "sticky" | "positionMethod" | "alignItemWithTrigger">;
52
+ export interface SelectContentProps extends Select.Popup.Props, PositionerProps {
53
+ /** Where to portal the popup; defaults to `<body>`. */
54
+ container?: Select.Portal.Props["container"];
55
+ }
56
+ declare function SelectContent({ className, children, side, align, sideOffset, alignOffset, anchor, collisionBoundary, collisionPadding, collisionAvoidance, sticky, positionMethod, alignItemWithTrigger, container, ...props }: SelectContentProps): import("react").JSX.Element;
57
+ declare function SelectLabel({ className, ...props }: Select.GroupLabel.Props): import("react").JSX.Element;
58
+ declare function SelectItem({ className, children, ...props }: Select.Item.Props): import("react").JSX.Element;
59
+ declare function SelectSeparator({ className, ...props }: Select.Separator.Props): import("react").JSX.Element;
60
+ //#endregion
61
+ export { Select$1 as Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue };
62
+ //# sourceMappingURL=select.d.ts.map