@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,171 @@
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 jsxRuntime = require('react/jsx-runtime');
7
+
8
+ var TimelineContext = react.createContext(
9
+ void 0
10
+ );
11
+ var useTimeline = () => {
12
+ const context = react.useContext(TimelineContext);
13
+ if (!context) {
14
+ throw new Error("useTimeline must be used within a Timeline");
15
+ }
16
+ return context;
17
+ };
18
+ function Timeline({
19
+ defaultValue = 1,
20
+ value,
21
+ onValueChange,
22
+ orientation = "vertical",
23
+ className,
24
+ children,
25
+ ...props
26
+ }) {
27
+ const [activeStep, setInternalStep] = react.useState(defaultValue);
28
+ const setActiveStep = react.useCallback(
29
+ (step) => {
30
+ if (value === void 0) {
31
+ setInternalStep(step);
32
+ }
33
+ onValueChange?.(step);
34
+ },
35
+ [value, onValueChange]
36
+ );
37
+ const currentStep = value ?? activeStep;
38
+ return /* @__PURE__ */ jsxRuntime.jsx(
39
+ TimelineContext.Provider,
40
+ {
41
+ value: { activeStep: currentStep, setActiveStep },
42
+ children: /* @__PURE__ */ jsxRuntime.jsx(
43
+ "div",
44
+ {
45
+ className: chunk6YHDDRIM_cjs.cn(
46
+ "group/timeline flex flex-col",
47
+ className
48
+ ),
49
+ "data-orientation": orientation,
50
+ "data-slot": "timeline",
51
+ ...props,
52
+ children
53
+ }
54
+ )
55
+ }
56
+ );
57
+ }
58
+ function TimelineContent({
59
+ className,
60
+ ...props
61
+ }) {
62
+ return /* @__PURE__ */ jsxRuntime.jsx(
63
+ "div",
64
+ {
65
+ className: chunk6YHDDRIM_cjs.cn("text-foreground text-sm min-w-0 overflow-hidden", className),
66
+ "data-slot": "timeline-content",
67
+ ...props
68
+ }
69
+ );
70
+ }
71
+ function TimelineDate({
72
+ asChild = false,
73
+ className,
74
+ ...props
75
+ }) {
76
+ const Comp = asChild ? radixUi.Slot.Root : "time";
77
+ return /* @__PURE__ */ jsxRuntime.jsx(
78
+ Comp,
79
+ {
80
+ className: chunk6YHDDRIM_cjs.cn(
81
+ "text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4",
82
+ className
83
+ ),
84
+ "data-slot": "timeline-date",
85
+ ...props
86
+ }
87
+ );
88
+ }
89
+ function TimelineHeader({
90
+ className,
91
+ ...props
92
+ }) {
93
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk6YHDDRIM_cjs.cn(className), "data-slot": "timeline-header", ...props });
94
+ }
95
+ function TimelineIndicator({
96
+ asChild = false,
97
+ className,
98
+ children,
99
+ ...props
100
+ }) {
101
+ const Comp = asChild ? radixUi.Slot.Root : "div";
102
+ return /* @__PURE__ */ jsxRuntime.jsx(
103
+ Comp,
104
+ {
105
+ "aria-hidden": "true",
106
+ className: chunk6YHDDRIM_cjs.cn(
107
+ "border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2",
108
+ className
109
+ ),
110
+ "data-slot": "timeline-indicator",
111
+ ...props,
112
+ children
113
+ }
114
+ );
115
+ }
116
+ function TimelineItem({ step, className, ...props }) {
117
+ const { activeStep } = useTimeline();
118
+ return /* @__PURE__ */ jsxRuntime.jsx(
119
+ "div",
120
+ {
121
+ className: chunk6YHDDRIM_cjs.cn(
122
+ "group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6",
123
+ className
124
+ ),
125
+ "data-completed": step <= activeStep || void 0,
126
+ "data-slot": "timeline-item",
127
+ ...props
128
+ }
129
+ );
130
+ }
131
+ function TimelineSeparator({
132
+ className,
133
+ ...props
134
+ }) {
135
+ return /* @__PURE__ */ jsxRuntime.jsx(
136
+ "div",
137
+ {
138
+ "aria-hidden": "true",
139
+ className: chunk6YHDDRIM_cjs.cn(
140
+ "bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5",
141
+ className
142
+ ),
143
+ "data-slot": "timeline-separator",
144
+ ...props
145
+ }
146
+ );
147
+ }
148
+ function TimelineTitle({
149
+ className,
150
+ ...props
151
+ }) {
152
+ return /* @__PURE__ */ jsxRuntime.jsx(
153
+ "h3",
154
+ {
155
+ className: chunk6YHDDRIM_cjs.cn("text-sm font-medium", className),
156
+ "data-slot": "timeline-title",
157
+ ...props
158
+ }
159
+ );
160
+ }
161
+
162
+ exports.Timeline = Timeline;
163
+ exports.TimelineContent = TimelineContent;
164
+ exports.TimelineDate = TimelineDate;
165
+ exports.TimelineHeader = TimelineHeader;
166
+ exports.TimelineIndicator = TimelineIndicator;
167
+ exports.TimelineItem = TimelineItem;
168
+ exports.TimelineSeparator = TimelineSeparator;
169
+ exports.TimelineTitle = TimelineTitle;
170
+ //# sourceMappingURL=timeline.cjs.map
171
+ //# sourceMappingURL=timeline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/timeline.tsx"],"names":["createContext","useContext","useState","useCallback","jsx","cn","Slot"],"mappings":"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","file":"timeline.cjs","sourcesContent":["import {\n createContext,\n type HTMLAttributes,\n useCallback,\n useContext,\n useState,\n} from \"react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// Types\ntype TimelineContextValue = {\n activeStep: number\n setActiveStep: (step: number) => void\n}\n\n// Context\nconst TimelineContext = createContext<TimelineContextValue | undefined>(\n undefined\n)\n\nconst useTimeline = () => {\n const context = useContext(TimelineContext)\n if (!context) {\n throw new Error(\"useTimeline must be used within a Timeline\")\n }\n return context\n}\n\n// Components\ninterface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n defaultValue?: number\n value?: number\n onValueChange?: (value: number) => void\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nfunction Timeline({\n defaultValue = 1,\n value,\n onValueChange,\n orientation = \"vertical\",\n className,\n children,\n ...props\n}: TimelineProps) {\n const [activeStep, setInternalStep] = useState(defaultValue)\n\n const setActiveStep = useCallback(\n (step: number) => {\n if (value === undefined) {\n setInternalStep(step)\n }\n onValueChange?.(step)\n },\n [value, onValueChange]\n )\n\n const currentStep = value ?? activeStep\n\n return (\n <TimelineContext.Provider\n value={{ activeStep: currentStep, setActiveStep }}\n >\n <div\n className={cn(\n \"group/timeline flex flex-col\",\n className\n )}\n data-orientation={orientation}\n data-slot=\"timeline\"\n {...props}\n >\n {children}\n </div>\n </TimelineContext.Provider>\n )\n}\n\n// TimelineContent\nfunction TimelineContent({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"text-foreground text-sm min-w-0 overflow-hidden\", className)}\n data-slot=\"timeline-content\"\n {...props}\n />\n )\n}\n\n// TimelineDate\ninterface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {\n asChild?: boolean\n}\n\nfunction TimelineDate({\n asChild = false,\n className,\n ...props\n}: TimelineDateProps) {\n const Comp = asChild ? Slot.Root : \"time\"\n\n return (\n <Comp\n className={cn(\n \"text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4\",\n className\n )}\n data-slot=\"timeline-date\"\n {...props}\n />\n )\n}\n\n// TimelineHeader\nfunction TimelineHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(className)} data-slot=\"timeline-header\" {...props} />\n )\n}\n\n// TimelineIndicator\ninterface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n}\n\nfunction TimelineIndicator({\n asChild = false,\n className,\n children,\n ...props\n}: TimelineIndicatorProps) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n aria-hidden=\"true\"\n className={cn(\n \"border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2\",\n className\n )}\n data-slot=\"timeline-indicator\"\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\n// TimelineItem\ninterface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nfunction TimelineItem({ step, className, ...props }: TimelineItemProps) {\n const { activeStep } = useTimeline()\n\n return (\n <div\n className={cn(\n \"group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6\",\n className\n )}\n data-completed={step <= activeStep || undefined}\n data-slot=\"timeline-item\"\n {...props}\n />\n )\n}\n\n// TimelineSeparator\nfunction TimelineSeparator({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5\",\n className\n )}\n data-slot=\"timeline-separator\"\n {...props}\n />\n )\n}\n\n// TimelineTitle\nfunction TimelineTitle({\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"timeline-title\"\n {...props}\n />\n )\n}\n\nexport {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineHeader,\n TimelineIndicator,\n TimelineItem,\n TimelineSeparator,\n TimelineTitle,\n}"]}
@@ -0,0 +1,28 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface TimelineProps extends HTMLAttributes<HTMLDivElement> {
5
+ defaultValue?: number;
6
+ value?: number;
7
+ onValueChange?: (value: number) => void;
8
+ orientation?: "horizontal" | "vertical";
9
+ }
10
+ declare function Timeline({ defaultValue, value, onValueChange, orientation, className, children, ...props }: TimelineProps): react_jsx_runtime.JSX.Element;
11
+ declare function TimelineContent({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
12
+ interface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {
13
+ asChild?: boolean;
14
+ }
15
+ declare function TimelineDate({ asChild, className, ...props }: TimelineDateProps): react_jsx_runtime.JSX.Element;
16
+ declare function TimelineHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
17
+ interface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {
18
+ asChild?: boolean;
19
+ }
20
+ declare function TimelineIndicator({ asChild, className, children, ...props }: TimelineIndicatorProps): react_jsx_runtime.JSX.Element;
21
+ interface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {
22
+ step: number;
23
+ }
24
+ declare function TimelineItem({ step, className, ...props }: TimelineItemProps): react_jsx_runtime.JSX.Element;
25
+ declare function TimelineSeparator({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
26
+ declare function TimelineTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
27
+
28
+ export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
@@ -0,0 +1,28 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface TimelineProps extends HTMLAttributes<HTMLDivElement> {
5
+ defaultValue?: number;
6
+ value?: number;
7
+ onValueChange?: (value: number) => void;
8
+ orientation?: "horizontal" | "vertical";
9
+ }
10
+ declare function Timeline({ defaultValue, value, onValueChange, orientation, className, children, ...props }: TimelineProps): react_jsx_runtime.JSX.Element;
11
+ declare function TimelineContent({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
12
+ interface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {
13
+ asChild?: boolean;
14
+ }
15
+ declare function TimelineDate({ asChild, className, ...props }: TimelineDateProps): react_jsx_runtime.JSX.Element;
16
+ declare function TimelineHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
17
+ interface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {
18
+ asChild?: boolean;
19
+ }
20
+ declare function TimelineIndicator({ asChild, className, children, ...props }: TimelineIndicatorProps): react_jsx_runtime.JSX.Element;
21
+ interface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {
22
+ step: number;
23
+ }
24
+ declare function TimelineItem({ step, className, ...props }: TimelineItemProps): react_jsx_runtime.JSX.Element;
25
+ declare function TimelineSeparator({ className, ...props }: HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
26
+ declare function TimelineTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): react_jsx_runtime.JSX.Element;
27
+
28
+ export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
@@ -0,0 +1,162 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { createContext, useState, useCallback, useContext } from 'react';
3
+ import { Slot } from 'radix-ui';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var TimelineContext = createContext(
7
+ void 0
8
+ );
9
+ var useTimeline = () => {
10
+ const context = useContext(TimelineContext);
11
+ if (!context) {
12
+ throw new Error("useTimeline must be used within a Timeline");
13
+ }
14
+ return context;
15
+ };
16
+ function Timeline({
17
+ defaultValue = 1,
18
+ value,
19
+ onValueChange,
20
+ orientation = "vertical",
21
+ className,
22
+ children,
23
+ ...props
24
+ }) {
25
+ const [activeStep, setInternalStep] = useState(defaultValue);
26
+ const setActiveStep = useCallback(
27
+ (step) => {
28
+ if (value === void 0) {
29
+ setInternalStep(step);
30
+ }
31
+ onValueChange?.(step);
32
+ },
33
+ [value, onValueChange]
34
+ );
35
+ const currentStep = value ?? activeStep;
36
+ return /* @__PURE__ */ jsx(
37
+ TimelineContext.Provider,
38
+ {
39
+ value: { activeStep: currentStep, setActiveStep },
40
+ children: /* @__PURE__ */ jsx(
41
+ "div",
42
+ {
43
+ className: cn(
44
+ "group/timeline flex flex-col",
45
+ className
46
+ ),
47
+ "data-orientation": orientation,
48
+ "data-slot": "timeline",
49
+ ...props,
50
+ children
51
+ }
52
+ )
53
+ }
54
+ );
55
+ }
56
+ function TimelineContent({
57
+ className,
58
+ ...props
59
+ }) {
60
+ return /* @__PURE__ */ jsx(
61
+ "div",
62
+ {
63
+ className: cn("text-foreground text-sm min-w-0 overflow-hidden", className),
64
+ "data-slot": "timeline-content",
65
+ ...props
66
+ }
67
+ );
68
+ }
69
+ function TimelineDate({
70
+ asChild = false,
71
+ className,
72
+ ...props
73
+ }) {
74
+ const Comp = asChild ? Slot.Root : "time";
75
+ return /* @__PURE__ */ jsx(
76
+ Comp,
77
+ {
78
+ className: cn(
79
+ "text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4",
80
+ className
81
+ ),
82
+ "data-slot": "timeline-date",
83
+ ...props
84
+ }
85
+ );
86
+ }
87
+ function TimelineHeader({
88
+ className,
89
+ ...props
90
+ }) {
91
+ return /* @__PURE__ */ jsx("div", { className: cn(className), "data-slot": "timeline-header", ...props });
92
+ }
93
+ function TimelineIndicator({
94
+ asChild = false,
95
+ className,
96
+ children,
97
+ ...props
98
+ }) {
99
+ const Comp = asChild ? Slot.Root : "div";
100
+ return /* @__PURE__ */ jsx(
101
+ Comp,
102
+ {
103
+ "aria-hidden": "true",
104
+ className: cn(
105
+ "border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2",
106
+ className
107
+ ),
108
+ "data-slot": "timeline-indicator",
109
+ ...props,
110
+ children
111
+ }
112
+ );
113
+ }
114
+ function TimelineItem({ step, className, ...props }) {
115
+ const { activeStep } = useTimeline();
116
+ return /* @__PURE__ */ jsx(
117
+ "div",
118
+ {
119
+ className: cn(
120
+ "group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6",
121
+ className
122
+ ),
123
+ "data-completed": step <= activeStep || void 0,
124
+ "data-slot": "timeline-item",
125
+ ...props
126
+ }
127
+ );
128
+ }
129
+ function TimelineSeparator({
130
+ className,
131
+ ...props
132
+ }) {
133
+ return /* @__PURE__ */ jsx(
134
+ "div",
135
+ {
136
+ "aria-hidden": "true",
137
+ className: cn(
138
+ "bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5",
139
+ className
140
+ ),
141
+ "data-slot": "timeline-separator",
142
+ ...props
143
+ }
144
+ );
145
+ }
146
+ function TimelineTitle({
147
+ className,
148
+ ...props
149
+ }) {
150
+ return /* @__PURE__ */ jsx(
151
+ "h3",
152
+ {
153
+ className: cn("text-sm font-medium", className),
154
+ "data-slot": "timeline-title",
155
+ ...props
156
+ }
157
+ );
158
+ }
159
+
160
+ export { Timeline, TimelineContent, TimelineDate, TimelineHeader, TimelineIndicator, TimelineItem, TimelineSeparator, TimelineTitle };
161
+ //# sourceMappingURL=timeline.js.map
162
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/timeline.tsx"],"names":[],"mappings":"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","file":"timeline.js","sourcesContent":["import {\n createContext,\n type HTMLAttributes,\n useCallback,\n useContext,\n useState,\n} from \"react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\n\n// Types\ntype TimelineContextValue = {\n activeStep: number\n setActiveStep: (step: number) => void\n}\n\n// Context\nconst TimelineContext = createContext<TimelineContextValue | undefined>(\n undefined\n)\n\nconst useTimeline = () => {\n const context = useContext(TimelineContext)\n if (!context) {\n throw new Error(\"useTimeline must be used within a Timeline\")\n }\n return context\n}\n\n// Components\ninterface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n defaultValue?: number\n value?: number\n onValueChange?: (value: number) => void\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nfunction Timeline({\n defaultValue = 1,\n value,\n onValueChange,\n orientation = \"vertical\",\n className,\n children,\n ...props\n}: TimelineProps) {\n const [activeStep, setInternalStep] = useState(defaultValue)\n\n const setActiveStep = useCallback(\n (step: number) => {\n if (value === undefined) {\n setInternalStep(step)\n }\n onValueChange?.(step)\n },\n [value, onValueChange]\n )\n\n const currentStep = value ?? activeStep\n\n return (\n <TimelineContext.Provider\n value={{ activeStep: currentStep, setActiveStep }}\n >\n <div\n className={cn(\n \"group/timeline flex flex-col\",\n className\n )}\n data-orientation={orientation}\n data-slot=\"timeline\"\n {...props}\n >\n {children}\n </div>\n </TimelineContext.Provider>\n )\n}\n\n// TimelineContent\nfunction TimelineContent({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"text-foreground text-sm min-w-0 overflow-hidden\", className)}\n data-slot=\"timeline-content\"\n {...props}\n />\n )\n}\n\n// TimelineDate\ninterface TimelineDateProps extends HTMLAttributes<HTMLTimeElement> {\n asChild?: boolean\n}\n\nfunction TimelineDate({\n asChild = false,\n className,\n ...props\n}: TimelineDateProps) {\n const Comp = asChild ? Slot.Root : \"time\"\n\n return (\n <Comp\n className={cn(\n \"text-muted-foreground mb-1 block text-xs font-medium max-sm:h-4\",\n className\n )}\n data-slot=\"timeline-date\"\n {...props}\n />\n )\n}\n\n// TimelineHeader\nfunction TimelineHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(className)} data-slot=\"timeline-header\" {...props} />\n )\n}\n\n// TimelineIndicator\ninterface TimelineIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n asChild?: boolean\n}\n\nfunction TimelineIndicator({\n asChild = false,\n className,\n children,\n ...props\n}: TimelineIndicatorProps) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n aria-hidden=\"true\"\n className={cn(\n \"border-primary/20 group-data-completed/timeline-item:border-primary absolute size-4 rounded-full border-2 top-1.25 -left-6 -translate-x-1/2\",\n className\n )}\n data-slot=\"timeline-indicator\"\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\n// TimelineItem\ninterface TimelineItemProps extends HTMLAttributes<HTMLDivElement> {\n step: number\n}\n\nfunction TimelineItem({ step, className, ...props }: TimelineItemProps) {\n const { activeStep } = useTimeline()\n\n return (\n <div\n className={cn(\n \"group/timeline-item has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary relative flex flex-col gap-0.5 ms-8 not-last:pb-6\",\n className\n )}\n data-completed={step <= activeStep || undefined}\n data-slot=\"timeline-item\"\n {...props}\n />\n )\n}\n\n// TimelineSeparator\nfunction TimelineSeparator({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"bg-primary/10 absolute self-start group-last/timeline-item:hidden -left-6 h-[calc(100%-1rem-0.25rem)] w-0.5 -translate-x-1/2 translate-y-4.5\",\n className\n )}\n data-slot=\"timeline-separator\"\n {...props}\n />\n )\n}\n\n// TimelineTitle\nfunction TimelineTitle({\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"timeline-title\"\n {...props}\n />\n )\n}\n\nexport {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineHeader,\n TimelineIndicator,\n TimelineItem,\n TimelineSeparator,\n TimelineTitle,\n}"]}
@@ -0,0 +1,155 @@
1
+ 'use strict';
2
+
3
+ var chunkIVMZANP7_cjs = require('./chunk-IVMZANP7.cjs');
4
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
5
+ var React = require('react');
6
+ var radixUi = require('radix-ui');
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 ToggleGroupContext = React__namespace.createContext({
30
+ size: "default",
31
+ variant: "default",
32
+ spacing: 0,
33
+ orientation: "horizontal"
34
+ });
35
+ var JOINED_TRACK = {
36
+ default: "gap-1 rounded-full bg-foreground/[0.06] p-1",
37
+ outline: "gap-0 rounded-[10px] border border-foreground/10 p-0.5"
38
+ };
39
+ var JOINED_ITEM = {
40
+ default: "rounded-full border-transparent bg-transparent px-4 font-semibold text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-amber-400 data-[state=on]:text-stone-950",
41
+ outline: "rounded-[8px] border-transparent bg-transparent px-3 text-[12.5px] font-normal text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground"
42
+ };
43
+ function ToggleGroup({
44
+ className,
45
+ variant,
46
+ size,
47
+ spacing = 0,
48
+ orientation = "horizontal",
49
+ children,
50
+ ...props
51
+ }) {
52
+ return /* @__PURE__ */ jsxRuntime.jsx(
53
+ radixUi.ToggleGroup.Root,
54
+ {
55
+ "data-slot": "toggle-group",
56
+ "data-variant": variant,
57
+ "data-size": size,
58
+ "data-spacing": spacing,
59
+ "data-orientation": orientation,
60
+ style: { "--gap": spacing },
61
+ className: chunk6YHDDRIM_cjs.cn(
62
+ // `w-fit` sizes to content and refuses to shrink, so a segmented
63
+ // control wider than a phone dragged the whole page sideways rather
64
+ // than containing itself. Capped at its container, scrolling inside
65
+ // as a last resort — call sites should still shorten their labels.
66
+ "group/toggle-group no-scrollbar flex w-fit max-w-full flex-row items-center gap-[--spacing(var(--gap))] overflow-x-auto data-vertical:flex-col data-vertical:items-stretch",
67
+ spacing === 0 && JOINED_TRACK[variant ?? "default"],
68
+ className
69
+ ),
70
+ ...props,
71
+ children: /* @__PURE__ */ jsxRuntime.jsx(
72
+ ToggleGroupContext.Provider,
73
+ {
74
+ value: { variant, size, spacing, orientation },
75
+ children
76
+ }
77
+ )
78
+ }
79
+ );
80
+ }
81
+ function ToggleGroupItem({
82
+ className,
83
+ children,
84
+ variant = "default",
85
+ size = "default",
86
+ ...props
87
+ }) {
88
+ const context = React__namespace.useContext(ToggleGroupContext);
89
+ const itemVariant = context.variant || variant;
90
+ const itemSize = context.size || size;
91
+ return /* @__PURE__ */ jsxRuntime.jsx(
92
+ radixUi.ToggleGroup.Item,
93
+ {
94
+ "data-slot": "toggle-group-item",
95
+ "data-variant": itemVariant,
96
+ "data-size": itemSize,
97
+ "data-spacing": context.spacing,
98
+ className: chunk6YHDDRIM_cjs.cn(
99
+ "shrink-0 focus:z-10 focus-visible:z-10",
100
+ chunkIVMZANP7_cjs.toggleVariants({ variant: itemVariant, size: itemSize }),
101
+ context.spacing === 0 && JOINED_ITEM[itemVariant ?? "default"],
102
+ className
103
+ ),
104
+ ...props,
105
+ children
106
+ }
107
+ );
108
+ }
109
+ function ViewSwitch({
110
+ views,
111
+ value,
112
+ onChange,
113
+ label = "Show",
114
+ className
115
+ }) {
116
+ return /* @__PURE__ */ jsxRuntime.jsx(
117
+ ToggleGroup,
118
+ {
119
+ type: "single",
120
+ variant: "outline",
121
+ "aria-label": label,
122
+ value,
123
+ onValueChange: (v) => {
124
+ if (v) onChange(v);
125
+ },
126
+ className,
127
+ children: views.map((v) => /* @__PURE__ */ jsxRuntime.jsx(ToggleGroupItem, { value: v.id, children: v.label }, v.id))
128
+ }
129
+ );
130
+ }
131
+ function useRememberedView(key, views) {
132
+ const [view, setView] = React__namespace.useState(() => {
133
+ try {
134
+ const saved = localStorage.getItem(key);
135
+ return views.find((v) => v === saved) ?? views[0];
136
+ } catch {
137
+ return views[0];
138
+ }
139
+ });
140
+ const choose = (v) => {
141
+ setView(v);
142
+ try {
143
+ localStorage.setItem(key, v);
144
+ } catch {
145
+ }
146
+ };
147
+ return [view, choose];
148
+ }
149
+
150
+ exports.ToggleGroup = ToggleGroup;
151
+ exports.ToggleGroupItem = ToggleGroupItem;
152
+ exports.ViewSwitch = ViewSwitch;
153
+ exports.useRememberedView = useRememberedView;
154
+ //# sourceMappingURL=toggle-group.cjs.map
155
+ //# sourceMappingURL=toggle-group.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/toggle-group.tsx"],"names":["React","jsx","ToggleGroupPrimitive","cn","toggleVariants"],"mappings":"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","file":"toggle-group.cjs","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n})\n\n// With spacing the items are separate toggles, drawn as `toggle` draws them.\n// Joined (spacing 0) they are one segmented control, as the Work console\n// draws its two: `default` is the Work / Dev switch — a round track with the\n// picked segment an amber pill — and `outline` its view switch (Steps |\n// Stats, Open | Resolved) — a 10px bordered track, the picked segment a\n// faint fill.\nconst JOINED_TRACK = {\n default: \"gap-1 rounded-full bg-foreground/[0.06] p-1\",\n outline: \"gap-0 rounded-[10px] border border-foreground/10 p-0.5\",\n} as const\n\nconst JOINED_ITEM = {\n default:\n \"rounded-full border-transparent bg-transparent px-4 font-semibold text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-amber-400 data-[state=on]:text-stone-950\",\n outline:\n \"rounded-[8px] border-transparent bg-transparent px-3 text-[12.5px] font-normal text-muted-foreground hover:text-foreground data-[state=on]:border-transparent data-[state=on]:bg-foreground/[0.08] data-[state=on]:font-medium data-[state=on]:text-foreground\",\n} as const\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n // `w-fit` sizes to content and refuses to shrink, so a segmented\n // control wider than a phone dragged the whole page sideways rather\n // than containing itself. Capped at its container, scrolling inside\n // as a last resort — call sites should still shorten their labels.\n \"group/toggle-group no-scrollbar flex w-fit max-w-full flex-row items-center gap-[--spacing(var(--gap))] overflow-x-auto data-vertical:flex-col data-vertical:items-stretch\",\n spacing === 0 && JOINED_TRACK[variant ?? \"default\"],\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n const itemVariant = context.variant || variant\n const itemSize = context.size || size\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={itemVariant}\n data-size={itemSize}\n data-spacing={context.spacing}\n className={cn(\n \"shrink-0 focus:z-10 focus-visible:z-10\",\n toggleVariants({ variant: itemVariant, size: itemSize }),\n context.spacing === 0 && JOINED_ITEM[itemVariant ?? \"default\"],\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\n/**\n * A tab's two or three views (Steps | Stats, Members | Recent alerts): the\n * Work view switch. One view is always picked — clicking the picked one\n * again does not clear it.\n */\nfunction ViewSwitch<T extends string>({\n views,\n value,\n onChange,\n label = \"Show\",\n className,\n}: {\n views: readonly { id: T; label: React.ReactNode }[]\n value: T\n onChange: (v: T) => void\n label?: string\n className?: string\n}) {\n return (\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n aria-label={label}\n value={value}\n onValueChange={(v) => {\n if (v) onChange(v as T)\n }}\n className={className}\n >\n {views.map((v) => (\n <ToggleGroupItem key={v.id} value={v.id}>\n {v.label}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )\n}\n\n/** The view last chosen under `key`, else the first; storage may be off. */\nfunction useRememberedView<T extends string>(\n key: string,\n views: readonly T[]\n): [T, (v: T) => void] {\n const [view, setView] = React.useState<T>(() => {\n try {\n const saved = localStorage.getItem(key)\n return views.find((v) => v === saved) ?? views[0]\n } catch {\n return views[0]\n }\n })\n const choose = (v: T) => {\n setView(v)\n try {\n localStorage.setItem(key, v)\n } catch {\n // A private window keeps the choice for this visit only.\n }\n }\n return [view, choose]\n}\n\nexport { ToggleGroup, ToggleGroupItem, ViewSwitch, useRememberedView }\n"]}
@@ -0,0 +1,31 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { ToggleGroup as ToggleGroup$1 } from 'radix-ui';
5
+ import { toggleVariants } from './toggle.cjs';
6
+ import 'class-variance-authority/types';
7
+
8
+ declare function ToggleGroup({ className, variant, size, spacing, orientation, children, ...props }: React.ComponentProps<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants> & {
9
+ spacing?: number;
10
+ orientation?: "horizontal" | "vertical";
11
+ }): react_jsx_runtime.JSX.Element;
12
+ declare function ToggleGroupItem({ className, children, variant, size, ...props }: React.ComponentProps<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
13
+ /**
14
+ * A tab's two or three views (Steps | Stats, Members | Recent alerts): the
15
+ * Work view switch. One view is always picked — clicking the picked one
16
+ * again does not clear it.
17
+ */
18
+ declare function ViewSwitch<T extends string>({ views, value, onChange, label, className, }: {
19
+ views: readonly {
20
+ id: T;
21
+ label: React.ReactNode;
22
+ }[];
23
+ value: T;
24
+ onChange: (v: T) => void;
25
+ label?: string;
26
+ className?: string;
27
+ }): react_jsx_runtime.JSX.Element;
28
+ /** The view last chosen under `key`, else the first; storage may be off. */
29
+ declare function useRememberedView<T extends string>(key: string, views: readonly T[]): [T, (v: T) => void];
30
+
31
+ export { ToggleGroup, ToggleGroupItem, ViewSwitch, useRememberedView };
@@ -0,0 +1,31 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { ToggleGroup as ToggleGroup$1 } from 'radix-ui';
5
+ import { toggleVariants } from './toggle.js';
6
+ import 'class-variance-authority/types';
7
+
8
+ declare function ToggleGroup({ className, variant, size, spacing, orientation, children, ...props }: React.ComponentProps<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants> & {
9
+ spacing?: number;
10
+ orientation?: "horizontal" | "vertical";
11
+ }): react_jsx_runtime.JSX.Element;
12
+ declare function ToggleGroupItem({ className, children, variant, size, ...props }: React.ComponentProps<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
13
+ /**
14
+ * A tab's two or three views (Steps | Stats, Members | Recent alerts): the
15
+ * Work view switch. One view is always picked — clicking the picked one
16
+ * again does not clear it.
17
+ */
18
+ declare function ViewSwitch<T extends string>({ views, value, onChange, label, className, }: {
19
+ views: readonly {
20
+ id: T;
21
+ label: React.ReactNode;
22
+ }[];
23
+ value: T;
24
+ onChange: (v: T) => void;
25
+ label?: string;
26
+ className?: string;
27
+ }): react_jsx_runtime.JSX.Element;
28
+ /** The view last chosen under `key`, else the first; storage may be off. */
29
+ declare function useRememberedView<T extends string>(key: string, views: readonly T[]): [T, (v: T) => void];
30
+
31
+ export { ToggleGroup, ToggleGroupItem, ViewSwitch, useRememberedView };