@invergent/ui-sdk 0.0.0-stage → 2.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +70 -2
  2. package/dist/accordion.cjs +97 -0
  3. package/dist/accordion.cjs.map +1 -0
  4. package/dist/accordion.d.cts +10 -0
  5. package/dist/accordion.d.ts +10 -0
  6. package/dist/accordion.js +92 -0
  7. package/dist/accordion.js.map +1 -0
  8. package/dist/alert.cjs +82 -0
  9. package/dist/alert.cjs.map +1 -0
  10. package/dist/alert.d.cts +14 -0
  11. package/dist/alert.d.ts +14 -0
  12. package/dist/alert.js +77 -0
  13. package/dist/alert.js.map +1 -0
  14. package/dist/avatar.cjs +110 -0
  15. package/dist/avatar.cjs.map +1 -0
  16. package/dist/avatar.d.cts +14 -0
  17. package/dist/avatar.d.ts +14 -0
  18. package/dist/avatar.js +103 -0
  19. package/dist/avatar.js.map +1 -0
  20. package/dist/badge.cjs +47 -0
  21. package/dist/badge.cjs.map +1 -0
  22. package/dist/badge.d.cts +13 -0
  23. package/dist/badge.d.ts +13 -0
  24. package/dist/badge.js +44 -0
  25. package/dist/badge.js.map +1 -0
  26. package/dist/brand-beam.cjs +2303 -0
  27. package/dist/brand-beam.cjs.map +1 -0
  28. package/dist/brand-beam.d.cts +36 -0
  29. package/dist/brand-beam.d.ts +36 -0
  30. package/dist/brand-beam.js +2301 -0
  31. package/dist/brand-beam.js.map +1 -0
  32. package/dist/button-group.cjs +80 -0
  33. package/dist/button-group.cjs.map +1 -0
  34. package/dist/button-group.d.cts +17 -0
  35. package/dist/button-group.d.ts +17 -0
  36. package/dist/button-group.js +75 -0
  37. package/dist/button-group.js.map +1 -0
  38. package/dist/button.cjs +17 -0
  39. package/dist/button.cjs.map +1 -0
  40. package/dist/button.d.cts +14 -0
  41. package/dist/button.d.ts +14 -0
  42. package/dist/button.js +4 -0
  43. package/dist/button.js.map +1 -0
  44. package/dist/card.cjs +109 -0
  45. package/dist/card.cjs.map +1 -0
  46. package/dist/card.d.cts +14 -0
  47. package/dist/card.d.ts +14 -0
  48. package/dist/card.js +101 -0
  49. package/dist/card.js.map +1 -0
  50. package/dist/chart.cjs +275 -0
  51. package/dist/chart.cjs.map +1 -0
  52. package/dist/chart.d.cts +47 -0
  53. package/dist/chart.d.ts +47 -0
  54. package/dist/chart.js +247 -0
  55. package/dist/chart.js.map +1 -0
  56. package/dist/checkbox.cjs +41 -0
  57. package/dist/checkbox.cjs.map +1 -0
  58. package/dist/checkbox.d.cts +7 -0
  59. package/dist/checkbox.d.ts +7 -0
  60. package/dist/checkbox.js +39 -0
  61. package/dist/checkbox.js.map +1 -0
  62. package/dist/chip.cjs +92 -0
  63. package/dist/chip.cjs.map +1 -0
  64. package/dist/chip.d.cts +33 -0
  65. package/dist/chip.d.ts +33 -0
  66. package/dist/chip.js +86 -0
  67. package/dist/chip.js.map +1 -0
  68. package/dist/choice-card.cjs +127 -0
  69. package/dist/choice-card.cjs.map +1 -0
  70. package/dist/choice-card.d.cts +20 -0
  71. package/dist/choice-card.d.ts +20 -0
  72. package/dist/choice-card.js +124 -0
  73. package/dist/choice-card.js.map +1 -0
  74. package/dist/chunk-2UHRDVPT.cjs +183 -0
  75. package/dist/chunk-2UHRDVPT.cjs.map +1 -0
  76. package/dist/chunk-5CRE35VX.js +20 -0
  77. package/dist/chunk-5CRE35VX.js.map +1 -0
  78. package/dist/chunk-6ARYCL4L.cjs +30 -0
  79. package/dist/chunk-6ARYCL4L.cjs.map +1 -0
  80. package/dist/chunk-6JCVTRUK.js +21 -0
  81. package/dist/chunk-6JCVTRUK.js.map +1 -0
  82. package/dist/chunk-6YHDDRIM.cjs +13 -0
  83. package/dist/chunk-6YHDDRIM.cjs.map +1 -0
  84. package/dist/chunk-A44JJ6NH.js +58 -0
  85. package/dist/chunk-A44JJ6NH.js.map +1 -0
  86. package/dist/chunk-CPAFEXKR.js +63 -0
  87. package/dist/chunk-CPAFEXKR.js.map +1 -0
  88. package/dist/chunk-CTIEUG5L.js +28 -0
  89. package/dist/chunk-CTIEUG5L.js.map +1 -0
  90. package/dist/chunk-DSDDDYG3.cjs +60 -0
  91. package/dist/chunk-DSDDDYG3.cjs.map +1 -0
  92. package/dist/chunk-IB7LTHEQ.js +55 -0
  93. package/dist/chunk-IB7LTHEQ.js.map +1 -0
  94. package/dist/chunk-ID7MWMJO.cjs +162 -0
  95. package/dist/chunk-ID7MWMJO.cjs.map +1 -0
  96. package/dist/chunk-IVMZANP7.cjs +67 -0
  97. package/dist/chunk-IVMZANP7.cjs.map +1 -0
  98. package/dist/chunk-L73QIINW.js +157 -0
  99. package/dist/chunk-L73QIINW.js.map +1 -0
  100. package/dist/chunk-LZGII7SX.js +11 -0
  101. package/dist/chunk-LZGII7SX.js.map +1 -0
  102. package/dist/chunk-M677T75H.js +24 -0
  103. package/dist/chunk-M677T75H.js.map +1 -0
  104. package/dist/chunk-NSK344BJ.js +80 -0
  105. package/dist/chunk-NSK344BJ.js.map +1 -0
  106. package/dist/chunk-OAVCB3MR.cjs +26 -0
  107. package/dist/chunk-OAVCB3MR.cjs.map +1 -0
  108. package/dist/chunk-PH733KDD.js +141 -0
  109. package/dist/chunk-PH733KDD.js.map +1 -0
  110. package/dist/chunk-QEBQ5NUN.cjs +148 -0
  111. package/dist/chunk-QEBQ5NUN.cjs.map +1 -0
  112. package/dist/chunk-RVX6SN4U.cjs +23 -0
  113. package/dist/chunk-RVX6SN4U.cjs.map +1 -0
  114. package/dist/chunk-T74Z3WTK.js +151 -0
  115. package/dist/chunk-T74Z3WTK.js.map +1 -0
  116. package/dist/chunk-UOUXW63J.cjs +22 -0
  117. package/dist/chunk-UOUXW63J.cjs.map +1 -0
  118. package/dist/chunk-UXSDDJXM.cjs +88 -0
  119. package/dist/chunk-UXSDDJXM.cjs.map +1 -0
  120. package/dist/chunk-VBICNC43.cjs +61 -0
  121. package/dist/chunk-VBICNC43.cjs.map +1 -0
  122. package/dist/collapsible-header.cjs +66 -0
  123. package/dist/collapsible-header.cjs.map +1 -0
  124. package/dist/collapsible-header.d.cts +15 -0
  125. package/dist/collapsible-header.d.ts +15 -0
  126. package/dist/collapsible-header.js +63 -0
  127. package/dist/collapsible-header.js.map +1 -0
  128. package/dist/collapsible.cjs +38 -0
  129. package/dist/collapsible.cjs.map +1 -0
  130. package/dist/collapsible.d.cts +8 -0
  131. package/dist/collapsible.d.ts +8 -0
  132. package/dist/collapsible.js +34 -0
  133. package/dist/collapsible.js.map +1 -0
  134. package/dist/color-picker.cjs +60 -0
  135. package/dist/color-picker.cjs.map +1 -0
  136. package/dist/color-picker.d.cts +12 -0
  137. package/dist/color-picker.d.ts +12 -0
  138. package/dist/color-picker.js +57 -0
  139. package/dist/color-picker.js.map +1 -0
  140. package/dist/command.cjs +177 -0
  141. package/dist/command.cjs.map +1 -0
  142. package/dist/command.d.cts +22 -0
  143. package/dist/command.d.ts +22 -0
  144. package/dist/command.js +167 -0
  145. package/dist/command.js.map +1 -0
  146. package/dist/confirm-dialog.cjs +72 -0
  147. package/dist/confirm-dialog.cjs.map +1 -0
  148. package/dist/confirm-dialog.d.cts +19 -0
  149. package/dist/confirm-dialog.d.ts +19 -0
  150. package/dist/confirm-dialog.js +70 -0
  151. package/dist/confirm-dialog.js.map +1 -0
  152. package/dist/control-styles.cjs +16 -0
  153. package/dist/control-styles.cjs.map +1 -0
  154. package/dist/control-styles.d.cts +7 -0
  155. package/dist/control-styles.d.ts +7 -0
  156. package/dist/control-styles.js +10 -0
  157. package/dist/control-styles.js.map +1 -0
  158. package/dist/dialog.cjs +50 -0
  159. package/dist/dialog.cjs.map +1 -0
  160. package/dist/dialog.d.cts +20 -0
  161. package/dist/dialog.d.ts +20 -0
  162. package/dist/dialog.js +5 -0
  163. package/dist/dialog.js.map +1 -0
  164. package/dist/dropdown-menu.cjs +265 -0
  165. package/dist/dropdown-menu.cjs.map +1 -0
  166. package/dist/dropdown-menu.d.cts +32 -0
  167. package/dist/dropdown-menu.d.ts +32 -0
  168. package/dist/dropdown-menu.js +249 -0
  169. package/dist/dropdown-menu.js.map +1 -0
  170. package/dist/empty-state.cjs +50 -0
  171. package/dist/empty-state.cjs.map +1 -0
  172. package/dist/empty-state.d.cts +23 -0
  173. package/dist/empty-state.d.ts +23 -0
  174. package/dist/empty-state.js +47 -0
  175. package/dist/empty-state.js.map +1 -0
  176. package/dist/field.cjs +221 -0
  177. package/dist/field.cjs.map +1 -0
  178. package/dist/field.d.cts +30 -0
  179. package/dist/field.d.ts +30 -0
  180. package/dist/field.js +210 -0
  181. package/dist/field.js.map +1 -0
  182. package/dist/hover-card.cjs +43 -0
  183. package/dist/hover-card.cjs.map +1 -0
  184. package/dist/hover-card.d.cts +9 -0
  185. package/dist/hover-card.d.ts +9 -0
  186. package/dist/hover-card.js +39 -0
  187. package/dist/hover-card.js.map +1 -0
  188. package/dist/input-group.cjs +36 -0
  189. package/dist/input-group.cjs.map +1 -0
  190. package/dist/input-group.d.cts +20 -0
  191. package/dist/input-group.d.ts +20 -0
  192. package/dist/input-group.js +7 -0
  193. package/dist/input-group.js.map +1 -0
  194. package/dist/input.cjs +13 -0
  195. package/dist/input.cjs.map +1 -0
  196. package/dist/input.d.cts +6 -0
  197. package/dist/input.d.ts +6 -0
  198. package/dist/input.js +4 -0
  199. package/dist/input.js.map +1 -0
  200. package/dist/item.cjs +196 -0
  201. package/dist/item.cjs.map +1 -0
  202. package/dist/item.d.cts +28 -0
  203. package/dist/item.d.ts +28 -0
  204. package/dist/item.js +185 -0
  205. package/dist/item.js.map +1 -0
  206. package/dist/label.cjs +13 -0
  207. package/dist/label.cjs.map +1 -0
  208. package/dist/label.d.cts +7 -0
  209. package/dist/label.d.ts +7 -0
  210. package/dist/label.js +4 -0
  211. package/dist/label.js.map +1 -0
  212. package/dist/lib/utils.cjs +12 -0
  213. package/dist/lib/utils.cjs.map +1 -0
  214. package/dist/lib/utils.d.cts +5 -0
  215. package/dist/lib/utils.d.ts +5 -0
  216. package/dist/lib/utils.js +3 -0
  217. package/dist/lib/utils.js.map +1 -0
  218. package/dist/list-row.cjs +188 -0
  219. package/dist/list-row.cjs.map +1 -0
  220. package/dist/list-row.d.cts +51 -0
  221. package/dist/list-row.d.ts +51 -0
  222. package/dist/list-row.js +164 -0
  223. package/dist/list-row.js.map +1 -0
  224. package/dist/pill-tabs.cjs +109 -0
  225. package/dist/pill-tabs.cjs.map +1 -0
  226. package/dist/pill-tabs.d.cts +24 -0
  227. package/dist/pill-tabs.d.ts +24 -0
  228. package/dist/pill-tabs.js +107 -0
  229. package/dist/pill-tabs.js.map +1 -0
  230. package/dist/popover.cjs +37 -0
  231. package/dist/popover.cjs.map +1 -0
  232. package/dist/popover.d.cts +13 -0
  233. package/dist/popover.d.ts +13 -0
  234. package/dist/popover.js +4 -0
  235. package/dist/popover.js.map +1 -0
  236. package/dist/progress-bar.cjs +40 -0
  237. package/dist/progress-bar.cjs.map +1 -0
  238. package/dist/progress-bar.d.cts +12 -0
  239. package/dist/progress-bar.d.ts +12 -0
  240. package/dist/progress-bar.js +38 -0
  241. package/dist/progress-bar.js.map +1 -0
  242. package/dist/rabbit-mark.cjs +30 -0
  243. package/dist/rabbit-mark.cjs.map +1 -0
  244. package/dist/rabbit-mark.d.cts +16 -0
  245. package/dist/rabbit-mark.d.ts +16 -0
  246. package/dist/rabbit-mark.js +26 -0
  247. package/dist/rabbit-mark.js.map +1 -0
  248. package/dist/responsive-panel.cjs +85 -0
  249. package/dist/responsive-panel.cjs.map +1 -0
  250. package/dist/responsive-panel.d.cts +33 -0
  251. package/dist/responsive-panel.d.ts +33 -0
  252. package/dist/responsive-panel.js +83 -0
  253. package/dist/responsive-panel.js.map +1 -0
  254. package/dist/scroll-area.cjs +63 -0
  255. package/dist/scroll-area.cjs.map +1 -0
  256. package/dist/scroll-area.d.cts +8 -0
  257. package/dist/scroll-area.d.ts +8 -0
  258. package/dist/scroll-area.js +60 -0
  259. package/dist/scroll-area.js.map +1 -0
  260. package/dist/section-label.cjs +30 -0
  261. package/dist/section-label.cjs.map +1 -0
  262. package/dist/section-label.d.cts +13 -0
  263. package/dist/section-label.d.ts +13 -0
  264. package/dist/section-label.js +28 -0
  265. package/dist/section-label.js.map +1 -0
  266. package/dist/segmented-control.cjs +75 -0
  267. package/dist/segmented-control.cjs.map +1 -0
  268. package/dist/segmented-control.d.cts +26 -0
  269. package/dist/segmented-control.d.ts +26 -0
  270. package/dist/segmented-control.js +53 -0
  271. package/dist/segmented-control.js.map +1 -0
  272. package/dist/select.cjs +193 -0
  273. package/dist/select.cjs.map +1 -0
  274. package/dist/select.d.cts +18 -0
  275. package/dist/select.d.ts +18 -0
  276. package/dist/select.js +182 -0
  277. package/dist/select.js.map +1 -0
  278. package/dist/separator.cjs +13 -0
  279. package/dist/separator.cjs.map +1 -0
  280. package/dist/separator.d.cts +7 -0
  281. package/dist/separator.d.ts +7 -0
  282. package/dist/separator.js +4 -0
  283. package/dist/separator.js.map +1 -0
  284. package/dist/sidebar.cjs +29 -0
  285. package/dist/sidebar.cjs.map +1 -0
  286. package/dist/sidebar.d.cts +58 -0
  287. package/dist/sidebar.d.ts +58 -0
  288. package/dist/sidebar.js +4 -0
  289. package/dist/sidebar.js.map +1 -0
  290. package/dist/skeleton.cjs +19 -0
  291. package/dist/skeleton.cjs.map +1 -0
  292. package/dist/skeleton.d.cts +5 -0
  293. package/dist/skeleton.d.ts +5 -0
  294. package/dist/skeleton.js +17 -0
  295. package/dist/skeleton.js.map +1 -0
  296. package/dist/sonner.cjs +40 -0
  297. package/dist/sonner.cjs.map +1 -0
  298. package/dist/sonner.d.cts +6 -0
  299. package/dist/sonner.d.ts +6 -0
  300. package/dist/sonner.js +38 -0
  301. package/dist/sonner.js.map +1 -0
  302. package/dist/sparkline.cjs +44 -0
  303. package/dist/sparkline.cjs.map +1 -0
  304. package/dist/sparkline.d.cts +12 -0
  305. package/dist/sparkline.d.ts +12 -0
  306. package/dist/sparkline.js +42 -0
  307. package/dist/sparkline.js.map +1 -0
  308. package/dist/spinner.cjs +13 -0
  309. package/dist/spinner.cjs.map +1 -0
  310. package/dist/spinner.d.cts +5 -0
  311. package/dist/spinner.d.ts +5 -0
  312. package/dist/spinner.js +11 -0
  313. package/dist/spinner.js.map +1 -0
  314. package/dist/stat-card.cjs +65 -0
  315. package/dist/stat-card.cjs.map +1 -0
  316. package/dist/stat-card.d.cts +22 -0
  317. package/dist/stat-card.d.ts +22 -0
  318. package/dist/stat-card.js +61 -0
  319. package/dist/stat-card.js.map +1 -0
  320. package/dist/status-dot.cjs +32 -0
  321. package/dist/status-dot.cjs.map +1 -0
  322. package/dist/status-dot.d.cts +11 -0
  323. package/dist/status-dot.d.ts +11 -0
  324. package/dist/status-dot.js +29 -0
  325. package/dist/status-dot.js.map +1 -0
  326. package/dist/switch.cjs +38 -0
  327. package/dist/switch.cjs.map +1 -0
  328. package/dist/switch.d.cts +9 -0
  329. package/dist/switch.d.ts +9 -0
  330. package/dist/switch.js +36 -0
  331. package/dist/switch.js.map +1 -0
  332. package/dist/table.cjs +118 -0
  333. package/dist/table.cjs.map +1 -0
  334. package/dist/table.d.cts +13 -0
  335. package/dist/table.d.ts +13 -0
  336. package/dist/table.js +109 -0
  337. package/dist/table.js.map +1 -0
  338. package/dist/tabs.cjs +124 -0
  339. package/dist/tabs.cjs.map +1 -0
  340. package/dist/tabs.d.cts +15 -0
  341. package/dist/tabs.d.ts +15 -0
  342. package/dist/tabs.js +118 -0
  343. package/dist/tabs.js.map +1 -0
  344. package/dist/text-link.cjs +51 -0
  345. package/dist/text-link.cjs.map +1 -0
  346. package/dist/text-link.d.cts +15 -0
  347. package/dist/text-link.d.ts +15 -0
  348. package/dist/text-link.js +48 -0
  349. package/dist/text-link.js.map +1 -0
  350. package/dist/textarea.cjs +13 -0
  351. package/dist/textarea.cjs.map +1 -0
  352. package/dist/textarea.d.cts +6 -0
  353. package/dist/textarea.d.ts +6 -0
  354. package/dist/textarea.js +4 -0
  355. package/dist/textarea.js.map +1 -0
  356. package/dist/theme.css +109 -0
  357. package/dist/timeline.cjs +171 -0
  358. package/dist/timeline.cjs.map +1 -0
  359. package/dist/timeline.d.cts +28 -0
  360. package/dist/timeline.d.ts +28 -0
  361. package/dist/timeline.js +162 -0
  362. package/dist/timeline.js.map +1 -0
  363. package/dist/toggle-group.cjs +155 -0
  364. package/dist/toggle-group.cjs.map +1 -0
  365. package/dist/toggle-group.d.cts +31 -0
  366. package/dist/toggle-group.d.ts +31 -0
  367. package/dist/toggle-group.js +130 -0
  368. package/dist/toggle-group.js.map +1 -0
  369. package/dist/toggle.cjs +21 -0
  370. package/dist/toggle.cjs.map +1 -0
  371. package/dist/toggle.d.cts +23 -0
  372. package/dist/toggle.d.ts +23 -0
  373. package/dist/toggle.js +4 -0
  374. package/dist/toggle.js.map +1 -0
  375. package/dist/tokens.css +77 -0
  376. package/dist/tooltip.cjs +25 -0
  377. package/dist/tooltip.cjs.map +1 -0
  378. package/dist/tooltip.d.cts +10 -0
  379. package/dist/tooltip.d.ts +10 -0
  380. package/dist/tooltip.js +4 -0
  381. package/dist/tooltip.js.map +1 -0
  382. package/package.json +61 -4
@@ -0,0 +1,124 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import { CheckIcon } from 'lucide-react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var choiceCardVariants = cva(
7
+ "group/choice-card flex border text-left transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-70",
8
+ {
9
+ variants: {
10
+ size: {
11
+ default: "flex-col gap-3 rounded-[12px] p-4",
12
+ sm: "flex-row items-start gap-3 rounded-[10px] p-3.5 sm:flex-col sm:gap-2"
13
+ },
14
+ selected: { true: "", false: "" }
15
+ },
16
+ compoundVariants: [
17
+ { size: "default", selected: true, className: "border-amber-500 bg-amber-500/[0.06]" },
18
+ {
19
+ size: "default",
20
+ selected: false,
21
+ className: "border-foreground/[0.08] bg-foreground/[0.02] hover:border-foreground/20 hover:bg-foreground/[0.04]"
22
+ },
23
+ {
24
+ size: "sm",
25
+ selected: true,
26
+ className: "border-amber-500/70 bg-amber-500/[0.08] ring-1 ring-amber-500/70"
27
+ },
28
+ {
29
+ size: "sm",
30
+ selected: false,
31
+ className: "border-foreground/[0.08] bg-foreground/[0.02] pointer-fine:hover:border-foreground/20"
32
+ }
33
+ ],
34
+ defaultVariants: { size: "default", selected: false }
35
+ }
36
+ );
37
+ function ChoiceCard({
38
+ title,
39
+ description,
40
+ meta,
41
+ icon,
42
+ selected,
43
+ size = "default",
44
+ className,
45
+ children,
46
+ ...props
47
+ }) {
48
+ if (size === "sm") {
49
+ return /* @__PURE__ */ jsxs(
50
+ "button",
51
+ {
52
+ type: "button",
53
+ "data-slot": "choice-card",
54
+ "data-size": size,
55
+ "aria-pressed": selected,
56
+ className: cn(choiceCardVariants({ size, selected }), className),
57
+ ...props,
58
+ children: [
59
+ icon && /* @__PURE__ */ jsx(
60
+ "span",
61
+ {
62
+ className: cn(
63
+ "flex size-7 shrink-0 items-center justify-center rounded-[7px] [&_svg:not([class*='size-'])]:size-4",
64
+ selected ? "bg-amber-500 text-black" : "bg-foreground/[0.07] text-muted-foreground"
65
+ ),
66
+ children: icon
67
+ }
68
+ ),
69
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col gap-1 sm:contents", children: [
70
+ /* @__PURE__ */ jsx(
71
+ "span",
72
+ {
73
+ className: cn(
74
+ "text-[14px] font-medium sm:text-[13px]",
75
+ selected ? "text-foreground" : "text-foreground/85"
76
+ ),
77
+ children: title
78
+ }
79
+ ),
80
+ description && /* @__PURE__ */ jsx("span", { className: "text-[12.5px] leading-[1.4] text-muted-foreground sm:text-[12px]", children: description }),
81
+ children
82
+ ] })
83
+ ]
84
+ }
85
+ );
86
+ }
87
+ return /* @__PURE__ */ jsxs(
88
+ "button",
89
+ {
90
+ type: "button",
91
+ "data-slot": "choice-card",
92
+ "data-size": size,
93
+ "aria-pressed": selected,
94
+ className: cn(choiceCardVariants({ size, selected }), className),
95
+ ...props,
96
+ children: [
97
+ /* @__PURE__ */ jsxs("span", { className: "flex w-full items-start gap-3", children: [
98
+ icon && /* @__PURE__ */ jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-[9px] border border-foreground/10 bg-foreground/[0.04] text-[13px] font-semibold text-foreground [&_svg:not([class*='size-'])]:size-4", children: icon }),
99
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
100
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-[14px] font-semibold text-foreground", children: title }),
101
+ meta && /* @__PURE__ */ jsx("span", { className: "mt-0.5 block truncate font-mono text-[11px] text-muted-foreground/70", children: meta })
102
+ ] }),
103
+ /* @__PURE__ */ jsx(
104
+ "span",
105
+ {
106
+ "aria-hidden": true,
107
+ className: cn(
108
+ "flex size-5 shrink-0 items-center justify-center rounded-full border transition-colors",
109
+ selected ? "border-amber-500 bg-amber-500 text-black" : "border-foreground/20 text-transparent"
110
+ ),
111
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3", strokeWidth: 3 })
112
+ }
113
+ )
114
+ ] }),
115
+ description && /* @__PURE__ */ jsx("span", { className: "line-clamp-2 text-[12.5px] leading-relaxed text-muted-foreground", children: description }),
116
+ children
117
+ ]
118
+ }
119
+ );
120
+ }
121
+
122
+ export { ChoiceCard, choiceCardVariants };
123
+ //# sourceMappingURL=choice-card.js.map
124
+ //# sourceMappingURL=choice-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/choice-card.tsx"],"names":[],"mappings":"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","file":"choice-card.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\n\n// The Work console's selectable option cards.\n// default — the library pickers (skills, knowledge bases): a 12px card with\n// an icon tile, title, description and a round check; picked, it\n// takes an amber border and wash.\n// sm — the exclusive mode cards (pricing model): tighter, the icon\n// tile itself turns amber, the border gets an amber ring; on a\n// phone each lies as a row, from `sm` up as a column.\n// A toggle button (aria-pressed): pressing picks or unpicks it. For a set\n// where exactly one is picked, have onClick select it and leave it pressed.\nconst choiceCardVariants = cva(\n \"group/choice-card flex border text-left transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-70\",\n {\n variants: {\n size: {\n default: \"flex-col gap-3 rounded-[12px] p-4\",\n sm: \"flex-row items-start gap-3 rounded-[10px] p-3.5 sm:flex-col sm:gap-2\",\n },\n selected: { true: \"\", false: \"\" },\n },\n compoundVariants: [\n { size: \"default\", selected: true, className: \"border-amber-500 bg-amber-500/[0.06]\" },\n {\n size: \"default\",\n selected: false,\n className:\n \"border-foreground/[0.08] bg-foreground/[0.02] hover:border-foreground/20 hover:bg-foreground/[0.04]\",\n },\n {\n size: \"sm\",\n selected: true,\n className: \"border-amber-500/70 bg-amber-500/[0.08] ring-1 ring-amber-500/70\",\n },\n {\n size: \"sm\",\n selected: false,\n className: \"border-foreground/[0.08] bg-foreground/[0.02] pointer-fine:hover:border-foreground/20\",\n },\n ],\n defaultVariants: { size: \"default\", selected: false },\n }\n)\n\nfunction ChoiceCard({\n title,\n description,\n meta,\n icon,\n selected,\n size = \"default\",\n className,\n children,\n ...props\n}: Omit<React.ComponentProps<\"button\">, \"title\"> & {\n title: React.ReactNode\n description?: React.ReactNode\n /** A line under the title (an id, a trigger), in mono. */\n meta?: React.ReactNode\n /** The tile's content: an icon, or an initial. */\n icon?: React.ReactNode\n selected: boolean\n size?: \"default\" | \"sm\"\n}) {\n if (size === \"sm\") {\n return (\n <button\n type=\"button\"\n data-slot=\"choice-card\"\n data-size={size}\n aria-pressed={selected}\n className={cn(choiceCardVariants({ size, selected }), className)}\n {...props}\n >\n {icon && (\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-[7px] [&_svg:not([class*='size-'])]:size-4\",\n selected\n ? \"bg-amber-500 text-black\"\n : \"bg-foreground/[0.07] text-muted-foreground\"\n )}\n >\n {icon}\n </span>\n )}\n <span className=\"flex min-w-0 flex-col gap-1 sm:contents\">\n <span\n className={cn(\n \"text-[14px] font-medium sm:text-[13px]\",\n selected ? \"text-foreground\" : \"text-foreground/85\"\n )}\n >\n {title}\n </span>\n {description && (\n <span className=\"text-[12.5px] leading-[1.4] text-muted-foreground sm:text-[12px]\">\n {description}\n </span>\n )}\n {children}\n </span>\n </button>\n )\n }\n\n return (\n <button\n type=\"button\"\n data-slot=\"choice-card\"\n data-size={size}\n aria-pressed={selected}\n className={cn(choiceCardVariants({ size, selected }), className)}\n {...props}\n >\n <span className=\"flex w-full items-start gap-3\">\n {icon && (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-[9px] border border-foreground/10 bg-foreground/[0.04] text-[13px] font-semibold text-foreground [&_svg:not([class*='size-'])]:size-4\">\n {icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[14px] font-semibold text-foreground\">\n {title}\n </span>\n {meta && (\n <span className=\"mt-0.5 block truncate font-mono text-[11px] text-muted-foreground/70\">\n {meta}\n </span>\n )}\n </span>\n <span\n aria-hidden={true}\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full border transition-colors\",\n selected\n ? \"border-amber-500 bg-amber-500 text-black\"\n : \"border-foreground/20 text-transparent\"\n )}\n >\n <CheckIcon className=\"size-3\" strokeWidth={3} />\n </span>\n </span>\n {description && (\n <span className=\"line-clamp-2 text-[12.5px] leading-relaxed text-muted-foreground\">\n {description}\n </span>\n )}\n {children}\n </button>\n )\n}\n\nexport { ChoiceCard, choiceCardVariants }\n"]}
@@ -0,0 +1,183 @@
1
+ 'use strict';
2
+
3
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
4
+ var React = require('react');
5
+ var radixUi = require('radix-ui');
6
+ var lucideReact = require('lucide-react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ var SidebarContext = React__namespace.createContext({ collapsed: false });
30
+ function useSidebar() {
31
+ return React__namespace.useContext(SidebarContext);
32
+ }
33
+ function Sidebar({
34
+ pinned: pinnedProp,
35
+ onPinnedChange,
36
+ className,
37
+ children,
38
+ ...props
39
+ }) {
40
+ const [ownPinned, setOwnPinned] = React__namespace.useState(true);
41
+ const pinned = pinnedProp ?? ownPinned;
42
+ const [hoverOpen, setHoverOpen] = React__namespace.useState(false);
43
+ const collapsed = !pinned && !hoverOpen;
44
+ const context = React__namespace.useMemo(() => ({ collapsed }), [collapsed]);
45
+ function togglePinned() {
46
+ if (pinned) setHoverOpen(false);
47
+ setOwnPinned(!pinned);
48
+ onPinnedChange?.(!pinned);
49
+ }
50
+ return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsxs(
51
+ "aside",
52
+ {
53
+ "data-slot": "sidebar",
54
+ "data-collapsed": collapsed ? "" : void 0,
55
+ onMouseEnter: () => setHoverOpen(true),
56
+ onMouseLeave: () => setHoverOpen(false),
57
+ className: chunk6YHDDRIM_cjs.cn(
58
+ "hidden h-full w-[295px] shrink-0 flex-col overflow-hidden border-r border-line bg-surface transition-[width] duration-200 ease-out data-collapsed:w-[50px] md:flex",
59
+ className
60
+ ),
61
+ ...props,
62
+ children: [
63
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-0 flex-1 flex-col", children }),
64
+ /* @__PURE__ */ jsxRuntime.jsx(
65
+ "button",
66
+ {
67
+ type: "button",
68
+ onClick: togglePinned,
69
+ "aria-label": pinned ? "Collapse sidebar" : "Expand sidebar",
70
+ className: "flex w-full shrink-0 cursor-pointer items-center justify-center border-t border-line py-2.5 text-faint transition-colors hover:text-foreground",
71
+ children: pinned ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "size-4", strokeWidth: 1.75 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-4", strokeWidth: 1.75 })
72
+ }
73
+ )
74
+ ]
75
+ }
76
+ ) });
77
+ }
78
+ function SidebarBrand({
79
+ title,
80
+ subtitle,
81
+ imageSrc = "/login.svg",
82
+ link,
83
+ className,
84
+ children,
85
+ ...props
86
+ }) {
87
+ const { collapsed } = useSidebar();
88
+ const Comp = link ? radixUi.Slot.Root : "div";
89
+ return (
90
+ // With a cursor the brand and its children share one line; on touch the
91
+ // children get a row of their own.
92
+ /* @__PURE__ */ jsxRuntime.jsxs(
93
+ "div",
94
+ {
95
+ "data-slot": "sidebar-brand",
96
+ className: chunk6YHDDRIM_cjs.cn(
97
+ "flex shrink-0 flex-col gap-3 pt-5 pb-3 pointer-fine:flex-row pointer-fine:items-start pointer-fine:gap-2",
98
+ collapsed ? "px-1.5" : "px-4",
99
+ className
100
+ ),
101
+ ...props,
102
+ children: [
103
+ /* @__PURE__ */ jsxRuntime.jsxs(
104
+ Comp,
105
+ {
106
+ className: chunk6YHDDRIM_cjs.cn(
107
+ "flex min-w-0 items-center gap-2.5 text-foreground no-underline pointer-coarse:pe-12",
108
+ collapsed && "flex-1 justify-center gap-0"
109
+ ),
110
+ children: [
111
+ link && /* @__PURE__ */ jsxRuntime.jsx(radixUi.Slot.Slottable, { children: link }),
112
+ /* @__PURE__ */ jsxRuntime.jsx("img", { src: imageSrc, alt: title, className: "size-9 shrink-0 rounded-full" }),
113
+ !collapsed && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 whitespace-nowrap", children: [
114
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[15px] leading-tight font-semibold", children: title }),
115
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground", children: subtitle })
116
+ ] })
117
+ ]
118
+ }
119
+ ),
120
+ children
121
+ ]
122
+ }
123
+ )
124
+ );
125
+ }
126
+ function SidebarUserBar({
127
+ avatar,
128
+ name,
129
+ className,
130
+ children,
131
+ ...props
132
+ }) {
133
+ const { collapsed } = useSidebar();
134
+ return /* @__PURE__ */ jsxRuntime.jsxs(
135
+ "div",
136
+ {
137
+ "data-slot": "sidebar-user-bar",
138
+ className: chunk6YHDDRIM_cjs.cn(
139
+ "flex shrink-0 items-center gap-2.5 border-t border-line pt-3 pb-1 pointer-coarse:gap-1.5 pointer-coarse:pt-2 pointer-coarse:pb-0",
140
+ // The left-weighted padding lines the avatar up with the rows above.
141
+ collapsed ? "justify-center gap-0 px-1.5" : "pl-2 pr-1.5",
142
+ className
143
+ ),
144
+ ...props,
145
+ children: [
146
+ avatar,
147
+ !collapsed && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
148
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-[13px] text-foreground pointer-coarse:text-[14px]", children: name }),
149
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5", children })
150
+ ] })
151
+ ]
152
+ }
153
+ );
154
+ }
155
+ function SidebarAction({
156
+ label,
157
+ asChild = false,
158
+ className,
159
+ ...props
160
+ }) {
161
+ const Comp = asChild ? radixUi.Slot.Root : "button";
162
+ return /* @__PURE__ */ jsxRuntime.jsx(
163
+ Comp,
164
+ {
165
+ "data-slot": "sidebar-action",
166
+ "aria-label": label,
167
+ ...asChild ? {} : { type: "button" },
168
+ className: chunk6YHDDRIM_cjs.cn(
169
+ "inline-flex cursor-pointer items-center justify-center rounded p-1 text-muted-foreground hover:bg-input hover:text-foreground pointer-coarse:size-11 pointer-coarse:rounded-xl pointer-coarse:p-0 pointer-coarse:active:bg-input [&_svg:not([class*='size-'])]:size-[18px]",
170
+ className
171
+ ),
172
+ ...props
173
+ }
174
+ );
175
+ }
176
+
177
+ exports.Sidebar = Sidebar;
178
+ exports.SidebarAction = SidebarAction;
179
+ exports.SidebarBrand = SidebarBrand;
180
+ exports.SidebarUserBar = SidebarUserBar;
181
+ exports.useSidebar = useSidebar;
182
+ //# sourceMappingURL=chunk-2UHRDVPT.cjs.map
183
+ //# sourceMappingURL=chunk-2UHRDVPT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sidebar.tsx"],"names":["React","jsx","jsxs","cn","ChevronLeft","ChevronRight","Slot","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAM,cAAA,GAAuBA,gBAAA,CAAA,aAAA,CAAc,EAAE,SAAA,EAAW,OAAO,CAAA;AAO/D,SAAS,UAAA,GAAa;AACpB,EAAA,OAAaA,4BAAW,cAAc,CAAA;AACxC;AAkBA,SAAS,OAAA,CAAQ;AAAA,EACf,MAAA,EAAQ,UAAA;AAAA,EACR,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,0BAAS,IAAI,CAAA;AACrD,EAAA,MAAM,SAAS,UAAA,IAAc,SAAA;AAC7B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,0BAAS,KAAK,CAAA;AACtD,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,IAAU,CAAC,SAAA;AAC9B,EAAA,MAAM,OAAA,GAAgBA,yBAAQ,OAAO,EAAE,WAAU,CAAA,EAAI,CAAC,SAAS,CAAC,CAAA;AAEhE,EAAA,SAAS,YAAA,GAAe;AAGtB,IAAA,IAAI,MAAA,eAAqB,KAAK,CAAA;AAC9B,IAAA,YAAA,CAAa,CAAC,MAAM,CAAA;AACpB,IAAA,cAAA,GAAiB,CAAC,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,uBACEC,cAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,OAAO,OAAA,EAC9B,QAAA,kBAAAC,eAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,SAAA;AAAA,MACV,gBAAA,EAAgB,YAAY,EAAA,GAAK,MAAA;AAAA,MACjC,YAAA,EAAc,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MACrC,YAAA,EAAc,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MACtC,SAAA,EAAWC,oBAAA;AAAA,QACT,oKAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAF,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAAgC,QAAA,EAAS,CAAA;AAAA,wBACxDA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA;AAAA,YACT,YAAA,EAAY,SAAS,kBAAA,GAAqB,gBAAA;AAAA,YAC1C,SAAA,EAAU,gJAAA;AAAA,YAET,QAAA,EAAA,MAAA,mBACCA,cAAA,CAACG,uBAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS,WAAA,EAAa,IAAA,EAAM,CAAA,mBAEnDH,cAAA,CAACI,wBAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,aAAa,IAAA,EAAM;AAAA;AAAA;AAExD;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAeA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,YAAA;AAAA,EACX,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,UAAA,EAAW;AACjC,EAAA,MAAM,IAAA,GAAO,IAAA,GAAOC,YAAA,CAAK,IAAA,GAAO,KAAA;AAEhC,EAAA;AAAA;AAAA;AAAA,oBAGEJ,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,eAAA;AAAA,QACV,SAAA,EAAWC,oBAAA;AAAA,UACT,0GAAA;AAAA,UACA,YAAY,QAAA,GAAW,MAAA;AAAA,UACvB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAIJ,QAAA,EAAA;AAAA,0BAAAD,eAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWC,oBAAA;AAAA,gBACT,qFAAA;AAAA,gBACA,SAAA,IAAa;AAAA,eACf;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,IAAA,oBAAQF,cAAA,CAACK,YAAA,CAAK,SAAA,EAAL,EAAgB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,+CAC9B,KAAA,EAAA,EAAI,GAAA,EAAK,UAAU,GAAA,EAAK,KAAA,EAAO,WAAU,8BAAA,EAA+B,CAAA;AAAA,gBACxE,CAAC,SAAA,oBACAJ,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,kCAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA2C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,kBAC/D,QAAA,oBAAYA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAiC,QAAA,EAAA,QAAA,EAAS;AAAA,iBAAA,EACxE;AAAA;AAAA;AAAA,WAEJ;AAAA,UACC;AAAA;AAAA;AAAA;AACH;AAEJ;AAaA,SAAS,cAAA,CAAe;AAAA,EACtB,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,UAAA,EAAW;AAEjC,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAWC,oBAAA;AAAA,QACT,kIAAA;AAAA;AAAA,QAEA,YAAY,6BAAA,GAAgC,aAAA;AAAA,QAC5C;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,QACA,CAAC,6BACAD,eAAA,CAAAK,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAN,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gFAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,0BACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA6B,QAAA,EAAS;AAAA,SAAA,EACvD;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAMA,SAAS,aAAA,CAAc;AAAA,EACrB,KAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACEL,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACX,GAAI,OAAA,GAAU,EAAC,GAAI,EAAE,MAAM,QAAA,EAAkB;AAAA,MAC9C,SAAA,EAAWE,oBAAA;AAAA,QACT,4QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-2UHRDVPT.cjs","sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"radix-ui\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\n\nconst SidebarContext = React.createContext({ collapsed: false })\n\n/**\n * Whether the enclosing rail is collapsed to its icons. Outside a `Sidebar`\n * (a phone drawer, a page) nothing is collapsed, so the same parts draw open\n * there.\n */\nfunction useSidebar() {\n return React.useContext(SidebarContext)\n}\n\ntype SidebarProps = Omit<\n React.ComponentProps<\"aside\">,\n \"onMouseEnter\" | \"onMouseLeave\"\n> & {\n /** Pinned, the sidebar stays open; unpinned, it is an icon rail that opens\n * while the pointer is over it. Kept here when not passed. */\n pinned?: boolean\n onPinnedChange?: (pinned: boolean) => void\n}\n\n/**\n * The ops console's desktop sidebar: 295px open, a 50px icon rail collapsed,\n * with the pin toggle along its bottom. Hidden below `md`, where navigation\n * belongs in a drawer: render the same parts there, outside a `Sidebar`.\n * `ListRow` and `SectionLabel` inside it shrink to their icon and rule.\n */\nfunction Sidebar({\n pinned: pinnedProp,\n onPinnedChange,\n className,\n children,\n ...props\n}: SidebarProps) {\n const [ownPinned, setOwnPinned] = React.useState(true)\n const pinned = pinnedProp ?? ownPinned\n const [hoverOpen, setHoverOpen] = React.useState(false)\n const collapsed = !pinned && !hoverOpen\n const context = React.useMemo(() => ({ collapsed }), [collapsed])\n\n function togglePinned() {\n // The toggle is under the pointer: unpinning closes the rail now rather\n // than leaving it hover-open until the pointer leaves.\n if (pinned) setHoverOpen(false)\n setOwnPinned(!pinned)\n onPinnedChange?.(!pinned)\n }\n\n return (\n <SidebarContext.Provider value={context}>\n <aside\n data-slot=\"sidebar\"\n data-collapsed={collapsed ? \"\" : undefined}\n onMouseEnter={() => setHoverOpen(true)}\n onMouseLeave={() => setHoverOpen(false)}\n className={cn(\n \"hidden h-full w-[295px] shrink-0 flex-col overflow-hidden border-r border-line bg-surface transition-[width] duration-200 ease-out data-collapsed:w-[50px] md:flex\",\n className\n )}\n {...props}\n >\n <div className=\"flex min-h-0 flex-1 flex-col\">{children}</div>\n <button\n type=\"button\"\n onClick={togglePinned}\n aria-label={pinned ? \"Collapse sidebar\" : \"Expand sidebar\"}\n className=\"flex w-full shrink-0 cursor-pointer items-center justify-center border-t border-line py-2.5 text-faint transition-colors hover:text-foreground\"\n >\n {pinned ? (\n <ChevronLeft className=\"size-4\" strokeWidth={1.75} />\n ) : (\n <ChevronRight className=\"size-4\" strokeWidth={1.75} />\n )}\n </button>\n </aside>\n </SidebarContext.Provider>\n )\n}\n\ntype SidebarBrandProps = Omit<React.ComponentProps<\"div\">, \"title\"> & {\n title: string\n subtitle?: React.ReactNode\n imageSrc?: string\n /** What the mark and title link through (a router `Link`); they are placed\n * inside it. */\n link?: React.ReactElement\n}\n\n/**\n * The sidebar's brand strip: the mark, a title and a muted subtitle; in the\n * rail the mark alone, centred. Children (a mode switch) follow it.\n */\nfunction SidebarBrand({\n title,\n subtitle,\n imageSrc = \"/login.svg\",\n link,\n className,\n children,\n ...props\n}: SidebarBrandProps) {\n const { collapsed } = useSidebar()\n const Comp = link ? Slot.Root : \"div\"\n\n return (\n // With a cursor the brand and its children share one line; on touch the\n // children get a row of their own.\n <div\n data-slot=\"sidebar-brand\"\n className={cn(\n \"flex shrink-0 flex-col gap-3 pt-5 pb-3 pointer-fine:flex-row pointer-fine:items-start pointer-fine:gap-2\",\n collapsed ? \"px-1.5\" : \"px-4\",\n className\n )}\n {...props}\n >\n {/* A drawer's close button floats over the end of this line; the\n inset keeps the title clear of it. */}\n <Comp\n className={cn(\n \"flex min-w-0 items-center gap-2.5 text-foreground no-underline pointer-coarse:pe-12\",\n collapsed && \"flex-1 justify-center gap-0\"\n )}\n >\n {link && <Slot.Slottable>{link}</Slot.Slottable>}\n <img src={imageSrc} alt={title} className=\"size-9 shrink-0 rounded-full\" />\n {!collapsed && (\n <div className=\"min-w-0 whitespace-nowrap\">\n <div className=\"text-[15px] leading-tight font-semibold\">{title}</div>\n {subtitle && <div className=\"text-xs text-muted-foreground\">{subtitle}</div>}\n </div>\n )}\n </Comp>\n {children}\n </div>\n )\n}\n\ntype SidebarUserBarProps = Omit<React.ComponentProps<\"div\">, \"children\"> & {\n avatar: React.ReactNode\n name: React.ReactNode\n /** The bar's `SidebarAction`s: theme, settings, sign out. */\n children?: React.ReactNode\n}\n\n/**\n * The sidebar's bottom bar: the user's avatar and name, then the global\n * controls. In the rail the avatar alone.\n */\nfunction SidebarUserBar({\n avatar,\n name,\n className,\n children,\n ...props\n}: SidebarUserBarProps) {\n const { collapsed } = useSidebar()\n\n return (\n <div\n data-slot=\"sidebar-user-bar\"\n className={cn(\n \"flex shrink-0 items-center gap-2.5 border-t border-line pt-3 pb-1 pointer-coarse:gap-1.5 pointer-coarse:pt-2 pointer-coarse:pb-0\",\n // The left-weighted padding lines the avatar up with the rows above.\n collapsed ? \"justify-center gap-0 px-1.5\" : \"pl-2 pr-1.5\",\n className\n )}\n {...props}\n >\n {avatar}\n {!collapsed && (\n <>\n <span className=\"min-w-0 flex-1 truncate text-[13px] text-foreground pointer-coarse:text-[14px]\">\n {name}\n </span>\n <div className=\"flex items-center gap-1.5\">{children}</div>\n </>\n )}\n </div>\n )\n}\n\n/**\n * An icon control in the user bar. 26px with a cursor, the 44px floor on\n * touch. A button, or a router link via `asChild`.\n */\nfunction SidebarAction({\n label,\n asChild = false,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & { label: string; asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-action\"\n aria-label={label}\n {...(asChild ? {} : { type: \"button\" as const })}\n className={cn(\n \"inline-flex cursor-pointer items-center justify-center rounded p-1 text-muted-foreground hover:bg-input hover:text-foreground pointer-coarse:size-11 pointer-coarse:rounded-xl pointer-coarse:p-0 pointer-coarse:active:bg-input [&_svg:not([class*='size-'])]:size-[18px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Sidebar, SidebarBrand, SidebarUserBar, SidebarAction, useSidebar }\n"]}
@@ -0,0 +1,20 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function Textarea({ className, ...props }) {
5
+ return /* @__PURE__ */ jsx(
6
+ "textarea",
7
+ {
8
+ "data-slot": "textarea",
9
+ className: cn(
10
+ "flex field-sizing-content min-h-16 w-full resize-none px-3.5 py-2.5 rounded-[10px] border border-foreground/10 bg-foreground/[0.04] text-sm text-foreground transition-colors outline-none placeholder:text-muted-foreground/50 focus-visible:border-foreground/20 focus-visible:bg-foreground/[0.06] disabled:cursor-not-allowed disabled:opacity-70 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50",
11
+ className
12
+ ),
13
+ ...props
14
+ }
15
+ );
16
+ }
17
+
18
+ export { Textarea };
19
+ //# sourceMappingURL=chunk-5CRE35VX.js.map
20
+ //# sourceMappingURL=chunk-5CRE35VX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/textarea.tsx"],"names":[],"mappings":";;;AAIA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+ZAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-5CRE35VX.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full resize-none px-3.5 py-2.5 rounded-[10px] border border-foreground/10 bg-foreground/[0.04] text-sm text-foreground transition-colors outline-none placeholder:text-muted-foreground/50 focus-visible:border-foreground/20 focus-visible:bg-foreground/[0.06] disabled:cursor-not-allowed disabled:opacity-70 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n"]}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
4
+ var radixUi = require('radix-ui');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function Separator({
8
+ className,
9
+ orientation = "horizontal",
10
+ decorative = true,
11
+ ...props
12
+ }) {
13
+ return /* @__PURE__ */ jsxRuntime.jsx(
14
+ radixUi.Separator.Root,
15
+ {
16
+ "data-slot": "separator",
17
+ decorative,
18
+ orientation,
19
+ className: chunk6YHDDRIM_cjs.cn(
20
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
21
+ className
22
+ ),
23
+ ...props
24
+ }
25
+ );
26
+ }
27
+
28
+ exports.Separator = Separator;
29
+ //# sourceMappingURL=chunk-6ARYCL4L.cjs.map
30
+ //# sourceMappingURL=chunk-6ARYCL4L.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/separator.tsx"],"names":["jsx","SeparatorPrimitive","cn"],"mappings":";;;;;;AAOA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACEA,cAAA;AAAA,IAACC,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAWC,oBAAA;AAAA,QACT,8GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-6ARYCL4L.cjs","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n"]}
@@ -0,0 +1,21 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function Input({ className, type, ...props }) {
5
+ return /* @__PURE__ */ jsx(
6
+ "input",
7
+ {
8
+ type,
9
+ "data-slot": "input",
10
+ className: cn(
11
+ "h-10 w-full min-w-0 px-3.5 py-2 rounded-[10px] border border-foreground/10 bg-foreground/[0.04] text-sm text-foreground transition-colors outline-none placeholder:text-muted-foreground/50 focus-visible:border-foreground/20 focus-visible:bg-foreground/[0.06] disabled:cursor-not-allowed disabled:opacity-70 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground disabled:pointer-events-none",
12
+ className
13
+ ),
14
+ ...props
15
+ }
16
+ );
17
+ }
18
+
19
+ export { Input };
20
+ //# sourceMappingURL=chunk-6JCVTRUK.js.map
21
+ //# sourceMappingURL=chunk-6JCVTRUK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/input.tsx"],"names":[],"mappings":";;;AAIA,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,ugBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-6JCVTRUK.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-10 w-full min-w-0 px-3.5 py-2 rounded-[10px] border border-foreground/10 bg-foreground/[0.04] text-sm text-foreground transition-colors outline-none placeholder:text-muted-foreground/50 focus-visible:border-foreground/20 focus-visible:bg-foreground/[0.06] disabled:cursor-not-allowed disabled:opacity-70 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground disabled:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n"]}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var clsx = require('clsx');
4
+ var tailwindMerge = require('tailwind-merge');
5
+
6
+ // src/lib/utils.ts
7
+ function cn(...inputs) {
8
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
9
+ }
10
+
11
+ exports.cn = cn;
12
+ //# sourceMappingURL=chunk-6YHDDRIM.cjs.map
13
+ //# sourceMappingURL=chunk-6YHDDRIM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;AAMO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-6YHDDRIM.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import { Slot } from 'radix-ui';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var buttonVariants = cva(
7
+ "group/button inline-flex shrink-0 items-center justify-center gap-1.5 rounded-[7px] border border-transparent text-[13px] font-medium whitespace-nowrap transition-colors outline-none select-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "bg-amber-500 text-black hover:bg-amber-400",
12
+ outline: "border-foreground/[0.12] bg-foreground/[0.04] text-foreground hover:bg-foreground/[0.07] aria-expanded:bg-foreground/[0.07]",
13
+ secondary: "bg-foreground/[0.08] text-foreground hover:bg-foreground/[0.12] aria-expanded:bg-foreground/[0.12]",
14
+ ghost: "text-foreground hover:bg-foreground/[0.06] aria-expanded:bg-foreground/[0.06]",
15
+ destructive: "border-destructive/40 bg-destructive/10 font-semibold text-destructive hover:bg-destructive/20 focus-visible:ring-destructive/30",
16
+ // Work's text link (see text-link): amber, brighter on hover, no underline.
17
+ link: "text-amber-500 hover:text-amber-400"
18
+ },
19
+ size: {
20
+ default: "h-9 min-h-11 px-4 pointer-fine:min-h-0 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
21
+ xs: "h-7 min-h-11 gap-1 px-2.5 text-xs pointer-fine:min-h-0 [&_svg:not([class*='size-'])]:size-3",
22
+ sm: "h-8 min-h-11 px-3 pointer-fine:min-h-0",
23
+ lg: "h-10 min-h-11 px-[18px] pointer-fine:min-h-0",
24
+ icon: "size-9 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0",
25
+ "icon-xs": "size-7 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0 [&_svg:not([class*='size-'])]:size-3",
26
+ "icon-sm": "size-8 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0",
27
+ "icon-lg": "size-10 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0"
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ variant: "default",
32
+ size: "default"
33
+ }
34
+ }
35
+ );
36
+ function Button({
37
+ className,
38
+ variant = "default",
39
+ size = "default",
40
+ asChild = false,
41
+ ...props
42
+ }) {
43
+ const Comp = asChild ? Slot.Root : "button";
44
+ return /* @__PURE__ */ jsx(
45
+ Comp,
46
+ {
47
+ "data-slot": "button",
48
+ "data-variant": variant,
49
+ "data-size": size,
50
+ className: cn(buttonVariants({ variant, size, className })),
51
+ ...props
52
+ }
53
+ );
54
+ }
55
+
56
+ export { Button, buttonVariants };
57
+ //# sourceMappingURL=chunk-A44JJ6NH.js.map
58
+ //# sourceMappingURL=chunk-A44JJ6NH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/button.tsx"],"names":[],"mappings":";;;;;AASA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,4cAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,4CAAA;AAAA,QACT,OAAA,EACE,6HAAA;AAAA,QACF,SAAA,EACE,oGAAA;AAAA,QACF,KAAA,EACE,+EAAA;AAAA,QACF,WAAA,EACE,kIAAA;AAAA;AAAA,QAEF,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EACE,0GAAA;AAAA,QACF,EAAA,EAAI,6FAAA;AAAA,QACJ,EAAA,EAAI,wCAAA;AAAA,QACJ,EAAA,EAAI,8CAAA;AAAA,QACJ,IAAA,EAAM,oEAAA;AAAA,QACN,SAAA,EACE,yGAAA;AAAA,QACF,SAAA,EAAW,oEAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGK;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-A44JJ6NH.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// The ops console's own buttons, as its Work pages draw them: sentence case\n// at 13px, 7px corners, and its amber as the default. Every size keeps the\n// 44px touch minimum on a phone and its compact height with a mouse.\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center gap-1.5 rounded-[7px] border border-transparent text-[13px] font-medium whitespace-nowrap transition-colors outline-none select-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-amber-500 text-black hover:bg-amber-400\",\n outline:\n \"border-foreground/[0.12] bg-foreground/[0.04] text-foreground hover:bg-foreground/[0.07] aria-expanded:bg-foreground/[0.07]\",\n secondary:\n \"bg-foreground/[0.08] text-foreground hover:bg-foreground/[0.12] aria-expanded:bg-foreground/[0.12]\",\n ghost:\n \"text-foreground hover:bg-foreground/[0.06] aria-expanded:bg-foreground/[0.06]\",\n destructive:\n \"border-destructive/40 bg-destructive/10 font-semibold text-destructive hover:bg-destructive/20 focus-visible:ring-destructive/30\",\n // Work's text link (see text-link): amber, brighter on hover, no underline.\n link: \"text-amber-500 hover:text-amber-400\",\n },\n size: {\n default:\n \"h-9 min-h-11 px-4 pointer-fine:min-h-0 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\n xs: \"h-7 min-h-11 gap-1 px-2.5 text-xs pointer-fine:min-h-0 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 min-h-11 px-3 pointer-fine:min-h-0\",\n lg: \"h-10 min-h-11 px-[18px] pointer-fine:min-h-0\",\n icon: \"size-9 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0\",\n \"icon-xs\":\n \"size-7 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0 [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0\",\n \"icon-lg\": \"size-10 min-h-11 min-w-11 pointer-fine:min-h-0 pointer-fine:min-w-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"]}
@@ -0,0 +1,63 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import { Toggle as Toggle$1 } from 'radix-ui';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var toggleVariants = cva(
7
+ "group/toggle inline-flex shrink-0 items-center justify-center gap-1.5 border whitespace-nowrap transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "rounded-[9px] border-foreground/[0.08] bg-foreground/[0.04] font-medium text-muted-foreground hover:text-foreground data-[state=on]:border-amber-500/40 data-[state=on]:bg-amber-500/[0.12] data-[state=on]:text-foreground",
12
+ outline: "rounded-full border-foreground/10 text-muted-foreground hover:text-foreground data-[state=on]:border-foreground/30 data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground"
13
+ },
14
+ size: {
15
+ default: "min-h-10 px-3 text-[13px] pointer-fine:min-h-8",
16
+ sm: "min-h-9 px-3 text-[12px] pointer-fine:min-h-7",
17
+ lg: "min-h-11 px-4 text-sm pointer-fine:min-h-9"
18
+ }
19
+ },
20
+ defaultVariants: {
21
+ variant: "default",
22
+ size: "default"
23
+ }
24
+ }
25
+ );
26
+ function Toggle({
27
+ className,
28
+ variant = "default",
29
+ size = "default",
30
+ ...props
31
+ }) {
32
+ return /* @__PURE__ */ jsx(
33
+ Toggle$1.Root,
34
+ {
35
+ "data-slot": "toggle",
36
+ className: cn(toggleVariants({ variant, size, className })),
37
+ ...props
38
+ }
39
+ );
40
+ }
41
+ function FilterPill({
42
+ on,
43
+ onClick,
44
+ dim,
45
+ className,
46
+ ...props
47
+ }) {
48
+ return /* @__PURE__ */ jsx(
49
+ Toggle,
50
+ {
51
+ variant: "outline",
52
+ size: "sm",
53
+ pressed: on,
54
+ onPressedChange: () => onClick(),
55
+ className: cn(dim && !on && "opacity-55", className),
56
+ ...props
57
+ }
58
+ );
59
+ }
60
+
61
+ export { FilterPill, Toggle, toggleVariants };
62
+ //# sourceMappingURL=chunk-CPAFEXKR.js.map
63
+ //# sourceMappingURL=chunk-CPAFEXKR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/toggle.tsx"],"names":["TogglePrimitive"],"mappings":";;;;;AAWA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,oVAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,6NAAA;AAAA,QACF,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,gDAAA;AAAA,QACT,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EACuC;AACrC,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AAMA,SAAS,UAAA,CAAW;AAAA,EAClB,EAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAQG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,eAAA,EAAiB,MAAM,OAAA,EAAQ;AAAA,MAC/B,WAAW,EAAA,CAAG,GAAA,IAAO,CAAC,EAAA,IAAM,cAAc,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-CPAFEXKR.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// The Work console's pressed-state toggles. `default` is the 9px chip its\n// forms use for a choice that is on or off (Once / Repeating, the days of the\n// week): a faint box, amber-tinted once pressed. `outline` is its filter\n// pill: round, bordered, a neutral fill once on. Muted text brightens on\n// hover. Touch keeps 40px or more, a mouse the compact height.\nconst toggleVariants = cva(\n \"group/toggle inline-flex shrink-0 items-center justify-center gap-1.5 border whitespace-nowrap transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5\",\n {\n variants: {\n variant: {\n default:\n \"rounded-[9px] border-foreground/[0.08] bg-foreground/[0.04] font-medium text-muted-foreground hover:text-foreground data-[state=on]:border-amber-500/40 data-[state=on]:bg-amber-500/[0.12] data-[state=on]:text-foreground\",\n outline:\n \"rounded-full border-foreground/10 text-muted-foreground hover:text-foreground data-[state=on]:border-foreground/30 data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground\",\n },\n size: {\n default: \"min-h-10 px-3 text-[13px] pointer-fine:min-h-8\",\n sm: \"min-h-9 px-3 text-[12px] pointer-fine:min-h-7\",\n lg: \"min-h-11 px-4 text-sm pointer-fine:min-h-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\n/**\n * The Work filter pill (a row of them filters a list: \"All channels\",\n * \"Slack 3\"…). An empty filter stays clickable, just quieter.\n */\nfunction FilterPill({\n on,\n onClick,\n dim,\n className,\n ...props\n}: Omit<\n React.ComponentProps<typeof TogglePrimitive.Root>,\n \"pressed\" | \"onPressedChange\" | \"onClick\"\n> & {\n on: boolean\n onClick: () => void\n /** Nothing behind it yet: still clickable, just quieter. */\n dim?: boolean\n}) {\n return (\n <Toggle\n variant=\"outline\"\n size=\"sm\"\n pressed={on}\n onPressedChange={() => onClick()}\n className={cn(dim && !on && \"opacity-55\", className)}\n {...props}\n />\n )\n}\n\nexport { Toggle, FilterPill, toggleVariants }\n"]}
@@ -0,0 +1,28 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { Separator as Separator$1 } from 'radix-ui';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Separator({
6
+ className,
7
+ orientation = "horizontal",
8
+ decorative = true,
9
+ ...props
10
+ }) {
11
+ return /* @__PURE__ */ jsx(
12
+ Separator$1.Root,
13
+ {
14
+ "data-slot": "separator",
15
+ decorative,
16
+ orientation,
17
+ className: cn(
18
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
19
+ className
20
+ ),
21
+ ...props
22
+ }
23
+ );
24
+ }
25
+
26
+ export { Separator };
27
+ //# sourceMappingURL=chunk-CTIEUG5L.js.map
28
+ //# sourceMappingURL=chunk-CTIEUG5L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/separator.tsx"],"names":["SeparatorPrimitive"],"mappings":";;;;AAOA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACE,GAAA;AAAA,IAACA,WAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-CTIEUG5L.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n"]}