@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,29 @@
1
+ 'use strict';
2
+
3
+ var chunk2UHRDVPT_cjs = require('./chunk-2UHRDVPT.cjs');
4
+ require('./chunk-6YHDDRIM.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "Sidebar", {
9
+ enumerable: true,
10
+ get: function () { return chunk2UHRDVPT_cjs.Sidebar; }
11
+ });
12
+ Object.defineProperty(exports, "SidebarAction", {
13
+ enumerable: true,
14
+ get: function () { return chunk2UHRDVPT_cjs.SidebarAction; }
15
+ });
16
+ Object.defineProperty(exports, "SidebarBrand", {
17
+ enumerable: true,
18
+ get: function () { return chunk2UHRDVPT_cjs.SidebarBrand; }
19
+ });
20
+ Object.defineProperty(exports, "SidebarUserBar", {
21
+ enumerable: true,
22
+ get: function () { return chunk2UHRDVPT_cjs.SidebarUserBar; }
23
+ });
24
+ Object.defineProperty(exports, "useSidebar", {
25
+ enumerable: true,
26
+ get: function () { return chunk2UHRDVPT_cjs.useSidebar; }
27
+ });
28
+ //# sourceMappingURL=sidebar.cjs.map
29
+ //# sourceMappingURL=sidebar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"sidebar.cjs"}
@@ -0,0 +1,58 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * Whether the enclosing rail is collapsed to its icons. Outside a `Sidebar`
6
+ * (a phone drawer, a page) nothing is collapsed, so the same parts draw open
7
+ * there.
8
+ */
9
+ declare function useSidebar(): {
10
+ collapsed: boolean;
11
+ };
12
+ type SidebarProps = Omit<React.ComponentProps<"aside">, "onMouseEnter" | "onMouseLeave"> & {
13
+ /** Pinned, the sidebar stays open; unpinned, it is an icon rail that opens
14
+ * while the pointer is over it. Kept here when not passed. */
15
+ pinned?: boolean;
16
+ onPinnedChange?: (pinned: boolean) => void;
17
+ };
18
+ /**
19
+ * The ops console's desktop sidebar: 295px open, a 50px icon rail collapsed,
20
+ * with the pin toggle along its bottom. Hidden below `md`, where navigation
21
+ * belongs in a drawer: render the same parts there, outside a `Sidebar`.
22
+ * `ListRow` and `SectionLabel` inside it shrink to their icon and rule.
23
+ */
24
+ declare function Sidebar({ pinned: pinnedProp, onPinnedChange, className, children, ...props }: SidebarProps): react_jsx_runtime.JSX.Element;
25
+ type SidebarBrandProps = Omit<React.ComponentProps<"div">, "title"> & {
26
+ title: string;
27
+ subtitle?: React.ReactNode;
28
+ imageSrc?: string;
29
+ /** What the mark and title link through (a router `Link`); they are placed
30
+ * inside it. */
31
+ link?: React.ReactElement;
32
+ };
33
+ /**
34
+ * The sidebar's brand strip: the mark, a title and a muted subtitle; in the
35
+ * rail the mark alone, centred. Children (a mode switch) follow it.
36
+ */
37
+ declare function SidebarBrand({ title, subtitle, imageSrc, link, className, children, ...props }: SidebarBrandProps): react_jsx_runtime.JSX.Element;
38
+ type SidebarUserBarProps = Omit<React.ComponentProps<"div">, "children"> & {
39
+ avatar: React.ReactNode;
40
+ name: React.ReactNode;
41
+ /** The bar's `SidebarAction`s: theme, settings, sign out. */
42
+ children?: React.ReactNode;
43
+ };
44
+ /**
45
+ * The sidebar's bottom bar: the user's avatar and name, then the global
46
+ * controls. In the rail the avatar alone.
47
+ */
48
+ declare function SidebarUserBar({ avatar, name, className, children, ...props }: SidebarUserBarProps): react_jsx_runtime.JSX.Element;
49
+ /**
50
+ * An icon control in the user bar. 26px with a cursor, the 44px floor on
51
+ * touch. A button, or a router link via `asChild`.
52
+ */
53
+ declare function SidebarAction({ label, asChild, className, ...props }: React.ComponentProps<"button"> & {
54
+ label: string;
55
+ asChild?: boolean;
56
+ }): react_jsx_runtime.JSX.Element;
57
+
58
+ export { Sidebar, SidebarAction, SidebarBrand, SidebarUserBar, useSidebar };
@@ -0,0 +1,58 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * Whether the enclosing rail is collapsed to its icons. Outside a `Sidebar`
6
+ * (a phone drawer, a page) nothing is collapsed, so the same parts draw open
7
+ * there.
8
+ */
9
+ declare function useSidebar(): {
10
+ collapsed: boolean;
11
+ };
12
+ type SidebarProps = Omit<React.ComponentProps<"aside">, "onMouseEnter" | "onMouseLeave"> & {
13
+ /** Pinned, the sidebar stays open; unpinned, it is an icon rail that opens
14
+ * while the pointer is over it. Kept here when not passed. */
15
+ pinned?: boolean;
16
+ onPinnedChange?: (pinned: boolean) => void;
17
+ };
18
+ /**
19
+ * The ops console's desktop sidebar: 295px open, a 50px icon rail collapsed,
20
+ * with the pin toggle along its bottom. Hidden below `md`, where navigation
21
+ * belongs in a drawer: render the same parts there, outside a `Sidebar`.
22
+ * `ListRow` and `SectionLabel` inside it shrink to their icon and rule.
23
+ */
24
+ declare function Sidebar({ pinned: pinnedProp, onPinnedChange, className, children, ...props }: SidebarProps): react_jsx_runtime.JSX.Element;
25
+ type SidebarBrandProps = Omit<React.ComponentProps<"div">, "title"> & {
26
+ title: string;
27
+ subtitle?: React.ReactNode;
28
+ imageSrc?: string;
29
+ /** What the mark and title link through (a router `Link`); they are placed
30
+ * inside it. */
31
+ link?: React.ReactElement;
32
+ };
33
+ /**
34
+ * The sidebar's brand strip: the mark, a title and a muted subtitle; in the
35
+ * rail the mark alone, centred. Children (a mode switch) follow it.
36
+ */
37
+ declare function SidebarBrand({ title, subtitle, imageSrc, link, className, children, ...props }: SidebarBrandProps): react_jsx_runtime.JSX.Element;
38
+ type SidebarUserBarProps = Omit<React.ComponentProps<"div">, "children"> & {
39
+ avatar: React.ReactNode;
40
+ name: React.ReactNode;
41
+ /** The bar's `SidebarAction`s: theme, settings, sign out. */
42
+ children?: React.ReactNode;
43
+ };
44
+ /**
45
+ * The sidebar's bottom bar: the user's avatar and name, then the global
46
+ * controls. In the rail the avatar alone.
47
+ */
48
+ declare function SidebarUserBar({ avatar, name, className, children, ...props }: SidebarUserBarProps): react_jsx_runtime.JSX.Element;
49
+ /**
50
+ * An icon control in the user bar. 26px with a cursor, the 44px floor on
51
+ * touch. A button, or a router link via `asChild`.
52
+ */
53
+ declare function SidebarAction({ label, asChild, className, ...props }: React.ComponentProps<"button"> & {
54
+ label: string;
55
+ asChild?: boolean;
56
+ }): react_jsx_runtime.JSX.Element;
57
+
58
+ export { Sidebar, SidebarAction, SidebarBrand, SidebarUserBar, useSidebar };
@@ -0,0 +1,4 @@
1
+ export { Sidebar, SidebarAction, SidebarBrand, SidebarUserBar, useSidebar } from './chunk-L73QIINW.js';
2
+ import './chunk-LZGII7SX.js';
3
+ //# sourceMappingURL=sidebar.js.map
4
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"sidebar.js"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ function Skeleton({ className, ...props }) {
7
+ return /* @__PURE__ */ jsxRuntime.jsx(
8
+ "div",
9
+ {
10
+ "data-slot": "skeleton",
11
+ className: chunk6YHDDRIM_cjs.cn("animate-pulse bg-muted", className),
12
+ ...props
13
+ }
14
+ );
15
+ }
16
+
17
+ exports.Skeleton = Skeleton;
18
+ //# sourceMappingURL=skeleton.cjs.map
19
+ //# sourceMappingURL=skeleton.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/skeleton.tsx"],"names":["jsx","cn"],"mappings":";;;;;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAWC,oBAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"skeleton.cjs","sourcesContent":["import { cn } from \"./lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"]}
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
4
+
5
+ export { Skeleton };
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
4
+
5
+ export { Skeleton };
@@ -0,0 +1,17 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function Skeleton({ className, ...props }) {
5
+ return /* @__PURE__ */ jsx(
6
+ "div",
7
+ {
8
+ "data-slot": "skeleton",
9
+ className: cn("animate-pulse bg-muted", className),
10
+ ...props
11
+ }
12
+ );
13
+ }
14
+
15
+ export { Skeleton };
16
+ //# sourceMappingURL=skeleton.js.map
17
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/skeleton.tsx"],"names":[],"mappings":";;;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"skeleton.js","sourcesContent":["import { cn } from \"./lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"]}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var nextThemes = require('next-themes');
4
+ var sonner = require('sonner');
5
+ var lucideReact = require('lucide-react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ var Toaster = ({ ...props }) => {
9
+ const { theme = "system" } = nextThemes.useTheme();
10
+ return /* @__PURE__ */ jsxRuntime.jsx(
11
+ sonner.Toaster,
12
+ {
13
+ theme,
14
+ className: "toaster group",
15
+ icons: {
16
+ success: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleCheckIcon, { className: "size-4" }),
17
+ info: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "size-4" }),
18
+ warning: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TriangleAlertIcon, { className: "size-4" }),
19
+ error: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.OctagonXIcon, { className: "size-4" }),
20
+ loading: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2Icon, { className: "size-4 animate-spin" })
21
+ },
22
+ style: {
23
+ "--normal-bg": "var(--popover)",
24
+ "--normal-text": "var(--popover-foreground)",
25
+ "--normal-border": "var(--border)",
26
+ "--border-radius": "var(--radius)"
27
+ },
28
+ toastOptions: {
29
+ classNames: {
30
+ toast: "cn-toast"
31
+ }
32
+ },
33
+ ...props
34
+ }
35
+ );
36
+ };
37
+
38
+ exports.Toaster = Toaster;
39
+ //# sourceMappingURL=sonner.cjs.map
40
+ //# sourceMappingURL=sonner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sonner.tsx"],"names":["useTheme","jsx","Sonner","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon"],"mappings":";;;;;;;AAMA,IAAM,OAAA,GAAU,CAAC,EAAE,GAAG,OAAM,KAAoB;AAC9C,EAAA,MAAM,EAAE,KAAA,GAAQ,QAAA,EAAS,GAAIA,mBAAA,EAAS;AAEtC,EAAA,uBACEC,cAAA;AAAA,IAACC,cAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,kBACED,cAAA,CAACE,2BAAA,EAAA,EAAgB,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAEtC,IAAA,kBACEF,cAAA,CAACG,oBAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAE/B,OAAA,kBACEH,cAAA,CAACI,6BAAA,EAAA,EAAkB,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAExC,KAAA,kBACEJ,cAAA,CAACK,wBAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAEnC,OAAA,kBACEL,cAAA,CAACM,uBAAA,EAAA,EAAY,SAAA,EAAU,qBAAA,EAAsB;AAAA,OAEjD;AAAA,MACA,KAAA,EACE;AAAA,QACE,aAAA,EAAe,gBAAA;AAAA,QACf,eAAA,EAAiB,2BAAA;AAAA,QACjB,iBAAA,EAAmB,eAAA;AAAA,QACnB,iBAAA,EAAmB;AAAA,OACrB;AAAA,MAEF,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"sonner.cjs","sourcesContent":["\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\nimport { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon } from \"lucide-react\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: (\n <CircleCheckIcon className=\"size-4\" />\n ),\n info: (\n <InfoIcon className=\"size-4\" />\n ),\n warning: (\n <TriangleAlertIcon className=\"size-4\" />\n ),\n error: (\n <OctagonXIcon className=\"size-4\" />\n ),\n loading: (\n <Loader2Icon className=\"size-4 animate-spin\" />\n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n"]}
@@ -0,0 +1,6 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ToasterProps } from 'sonner';
3
+
4
+ declare const Toaster: ({ ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
5
+
6
+ export { Toaster };
@@ -0,0 +1,6 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ToasterProps } from 'sonner';
3
+
4
+ declare const Toaster: ({ ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
5
+
6
+ export { Toaster };
package/dist/sonner.js ADDED
@@ -0,0 +1,38 @@
1
+ import { useTheme } from 'next-themes';
2
+ import { Toaster as Toaster$1 } from 'sonner';
3
+ import { Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon } from 'lucide-react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var Toaster = ({ ...props }) => {
7
+ const { theme = "system" } = useTheme();
8
+ return /* @__PURE__ */ jsx(
9
+ Toaster$1,
10
+ {
11
+ theme,
12
+ className: "toaster group",
13
+ icons: {
14
+ success: /* @__PURE__ */ jsx(CircleCheckIcon, { className: "size-4" }),
15
+ info: /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }),
16
+ warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
17
+ error: /* @__PURE__ */ jsx(OctagonXIcon, { className: "size-4" }),
18
+ loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
19
+ },
20
+ style: {
21
+ "--normal-bg": "var(--popover)",
22
+ "--normal-text": "var(--popover-foreground)",
23
+ "--normal-border": "var(--border)",
24
+ "--border-radius": "var(--radius)"
25
+ },
26
+ toastOptions: {
27
+ classNames: {
28
+ toast: "cn-toast"
29
+ }
30
+ },
31
+ ...props
32
+ }
33
+ );
34
+ };
35
+
36
+ export { Toaster };
37
+ //# sourceMappingURL=sonner.js.map
38
+ //# sourceMappingURL=sonner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sonner.tsx"],"names":["Sonner"],"mappings":";;;;;AAMA,IAAM,OAAA,GAAU,CAAC,EAAE,GAAG,OAAM,KAAoB;AAC9C,EAAA,MAAM,EAAE,KAAA,GAAQ,QAAA,EAAS,GAAI,QAAA,EAAS;AAEtC,EAAA,uBACE,GAAA;AAAA,IAACA,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,kBACE,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAEtC,IAAA,kBACE,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAE/B,OAAA,kBACE,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAExC,KAAA,kBACE,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAEnC,OAAA,kBACE,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,qBAAA,EAAsB;AAAA,OAEjD;AAAA,MACA,KAAA,EACE;AAAA,QACE,aAAA,EAAe,gBAAA;AAAA,QACf,eAAA,EAAiB,2BAAA;AAAA,QACjB,iBAAA,EAAmB,eAAA;AAAA,QACnB,iBAAA,EAAmB;AAAA,OACrB;AAAA,MAEF,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"sonner.js","sourcesContent":["\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\nimport { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon } from \"lucide-react\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: (\n <CircleCheckIcon className=\"size-4\" />\n ),\n info: (\n <InfoIcon className=\"size-4\" />\n ),\n warning: (\n <TriangleAlertIcon className=\"size-4\" />\n ),\n error: (\n <OctagonXIcon className=\"size-4\" />\n ),\n loading: (\n <Loader2Icon className=\"size-4 animate-spin\" />\n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n"]}
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+
5
+ // src/sparkline.tsx
6
+ function Sparkline({
7
+ data,
8
+ color = "var(--primary)",
9
+ height = 28,
10
+ width = 80,
11
+ className
12
+ }) {
13
+ const max = Math.max(...data);
14
+ const min = Math.min(...data);
15
+ const range = max - min || 1;
16
+ const points = data.map(
17
+ (v, i) => `${i / (data.length - 1) * width},${height - (v - min) / range * (height - 4) - 2}`
18
+ ).join(" ");
19
+ return /* @__PURE__ */ jsxRuntime.jsx(
20
+ "svg",
21
+ {
22
+ viewBox: `0 0 ${width} ${height}`,
23
+ width: className ? void 0 : width,
24
+ height,
25
+ preserveAspectRatio: "none",
26
+ className: className ?? "block",
27
+ children: /* @__PURE__ */ jsxRuntime.jsx(
28
+ "polyline",
29
+ {
30
+ points,
31
+ fill: "none",
32
+ stroke: color,
33
+ strokeWidth: "1.5",
34
+ strokeLinecap: "round",
35
+ strokeLinejoin: "round"
36
+ }
37
+ )
38
+ }
39
+ );
40
+ }
41
+
42
+ exports.Sparkline = Sparkline;
43
+ //# sourceMappingURL=sparkline.cjs.map
44
+ //# sourceMappingURL=sparkline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sparkline.tsx"],"names":["jsx"],"mappings":";;;;;AAYO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,KAAA,GAAQ,EAAA;AAAA,EACR;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,IAAO,CAAA;AAC3B,EAAA,MAAM,SAAS,IAAA,CACZ,GAAA;AAAA,IACC,CAAC,CAAA,EAAG,CAAA,KACF,CAAA,EAAI,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,CAAA,GAAM,KAAK,CAAA,CAAA,EAAI,UAAW,CAAA,GAAI,GAAA,IAAO,KAAA,IAAU,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,GACzF,CACC,KAAK,GAAG,CAAA;AAEX,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,KAAA,EAAO,YAAY,MAAA,GAAY,KAAA;AAAA,MAC/B,MAAA;AAAA,MACA,mBAAA,EAAoB,MAAA;AAAA,MACpB,WAAW,SAAA,IAAa,OAAA;AAAA,MAExB,QAAA,kBAAAA,cAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAQ,KAAA;AAAA,UACR,WAAA,EAAY,KAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA,GACF;AAEJ","file":"sparkline.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\n\ninterface SparklineProps {\n data: number[];\n color?: string;\n height?: number;\n width?: number;\n className?: string;\n}\n\nexport function Sparkline({\n data,\n color = \"var(--primary)\",\n height = 28,\n width = 80,\n className,\n}: SparklineProps) {\n const max = Math.max(...data);\n const min = Math.min(...data);\n const range = max - min || 1;\n const points = data\n .map(\n (v, i) =>\n `${(i / (data.length - 1)) * width},${height - ((v - min) / range) * (height - 4) - 2}`,\n )\n .join(\" \");\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n width={className ? undefined : width}\n height={height}\n preserveAspectRatio=\"none\"\n className={className ?? \"block\"}\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface SparklineProps {
4
+ data: number[];
5
+ color?: string;
6
+ height?: number;
7
+ width?: number;
8
+ className?: string;
9
+ }
10
+ declare function Sparkline({ data, color, height, width, className, }: SparklineProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { Sparkline };
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface SparklineProps {
4
+ data: number[];
5
+ color?: string;
6
+ height?: number;
7
+ width?: number;
8
+ className?: string;
9
+ }
10
+ declare function Sparkline({ data, color, height, width, className, }: SparklineProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { Sparkline };
@@ -0,0 +1,42 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+
3
+ // src/sparkline.tsx
4
+ function Sparkline({
5
+ data,
6
+ color = "var(--primary)",
7
+ height = 28,
8
+ width = 80,
9
+ className
10
+ }) {
11
+ const max = Math.max(...data);
12
+ const min = Math.min(...data);
13
+ const range = max - min || 1;
14
+ const points = data.map(
15
+ (v, i) => `${i / (data.length - 1) * width},${height - (v - min) / range * (height - 4) - 2}`
16
+ ).join(" ");
17
+ return /* @__PURE__ */ jsx(
18
+ "svg",
19
+ {
20
+ viewBox: `0 0 ${width} ${height}`,
21
+ width: className ? void 0 : width,
22
+ height,
23
+ preserveAspectRatio: "none",
24
+ className: className ?? "block",
25
+ children: /* @__PURE__ */ jsx(
26
+ "polyline",
27
+ {
28
+ points,
29
+ fill: "none",
30
+ stroke: color,
31
+ strokeWidth: "1.5",
32
+ strokeLinecap: "round",
33
+ strokeLinejoin: "round"
34
+ }
35
+ )
36
+ }
37
+ );
38
+ }
39
+
40
+ export { Sparkline };
41
+ //# sourceMappingURL=sparkline.js.map
42
+ //# sourceMappingURL=sparkline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sparkline.tsx"],"names":[],"mappings":";;;AAYO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,KAAA,GAAQ,EAAA;AAAA,EACR;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,IAAO,CAAA;AAC3B,EAAA,MAAM,SAAS,IAAA,CACZ,GAAA;AAAA,IACC,CAAC,CAAA,EAAG,CAAA,KACF,CAAA,EAAI,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,CAAA,GAAM,KAAK,CAAA,CAAA,EAAI,UAAW,CAAA,GAAI,GAAA,IAAO,KAAA,IAAU,MAAA,GAAS,KAAK,CAAC,CAAA;AAAA,GACzF,CACC,KAAK,GAAG,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,KAAA,EAAO,YAAY,MAAA,GAAY,KAAA;AAAA,MAC/B,MAAA;AAAA,MACA,mBAAA,EAAoB,MAAA;AAAA,MACpB,WAAW,SAAA,IAAa,OAAA;AAAA,MAExB,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAQ,KAAA;AAAA,UACR,WAAA,EAAY,KAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA,GACF;AAEJ","file":"sparkline.js","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\n\ninterface SparklineProps {\n data: number[];\n color?: string;\n height?: number;\n width?: number;\n className?: string;\n}\n\nexport function Sparkline({\n data,\n color = \"var(--primary)\",\n height = 28,\n width = 80,\n className,\n}: SparklineProps) {\n const max = Math.max(...data);\n const min = Math.min(...data);\n const range = max - min || 1;\n const points = data\n .map(\n (v, i) =>\n `${(i / (data.length - 1)) * width},${height - ((v - min) / range) * (height - 4) - 2}`,\n )\n .join(\" \");\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n width={className ? undefined : width}\n height={height}\n preserveAspectRatio=\"none\"\n className={className ?? \"block\"}\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"]}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
4
+ var lucideReact = require('lucide-react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function Spinner({ className, ...props }) {
8
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2Icon, { role: "status", "aria-label": "Loading", className: chunk6YHDDRIM_cjs.cn("size-4 animate-spin", className), ...props });
9
+ }
10
+
11
+ exports.Spinner = Spinner;
12
+ //# sourceMappingURL=spinner.cjs.map
13
+ //# sourceMappingURL=spinner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/spinner.tsx"],"names":["jsx","Loader2Icon","cn"],"mappings":";;;;;;AAGA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACrE,EAAA,uBACEA,cAAA,CAACC,uBAAA,EAAA,EAAY,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,SAAA,EAAU,SAAA,EAAWC,oBAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEhH","file":"spinner.cjs","sourcesContent":["import { cn } from \"./lib/utils\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n"]}
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function Spinner({ className, ...props }: React.ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
4
+
5
+ export { Spinner };
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function Spinner({ className, ...props }: React.ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
4
+
5
+ export { Spinner };
@@ -0,0 +1,11 @@
1
+ import { cn } from './chunk-LZGII7SX.js';
2
+ import { Loader2Icon } from 'lucide-react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Spinner({ className, ...props }) {
6
+ return /* @__PURE__ */ jsx(Loader2Icon, { role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
7
+ }
8
+
9
+ export { Spinner };
10
+ //# sourceMappingURL=spinner.js.map
11
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/spinner.tsx"],"names":[],"mappings":";;;;AAGA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACrE,EAAA,uBACE,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,SAAA,EAAU,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEhH","file":"spinner.js","sourcesContent":["import { cn } from \"./lib/utils\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n"]}
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var chunkDSDDDYG3_cjs = require('./chunk-DSDDDYG3.cjs');
4
+ var chunk6YHDDRIM_cjs = require('./chunk-6YHDDRIM.cjs');
5
+ var lucideReact = require('lucide-react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function InfoHint({ text }) {
9
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDSDDDYG3_cjs.TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkDSDDDYG3_cjs.Tooltip, { children: [
10
+ /* @__PURE__ */ jsxRuntime.jsx(chunkDSDDDYG3_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
11
+ "span",
12
+ {
13
+ "aria-label": "More info",
14
+ tabIndex: 0,
15
+ className: "inline-flex cursor-help text-muted-foreground/60",
16
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, { className: "size-3.5" })
17
+ }
18
+ ) }),
19
+ /* @__PURE__ */ jsxRuntime.jsx(chunkDSDDDYG3_cjs.TooltipContent, { className: "max-w-72 text-[12px] leading-relaxed", children: text })
20
+ ] }) });
21
+ }
22
+ function StatCard({
23
+ label,
24
+ info,
25
+ value,
26
+ hint,
27
+ detail,
28
+ className,
29
+ children
30
+ }) {
31
+ return (
32
+ // Label above value, always. Putting them on one line to save height
33
+ // only works while the tile is full-width; inside the 2-up phone grid
34
+ // the label wraps and the value collides with the info icon, which is
35
+ // how this tile ended up looking broken on the Metrics tab.
36
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "stat-card", className: chunk6YHDDRIM_cjs.cn("flex h-full flex-col", className), children: [
37
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
38
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11.5px] font-medium uppercase leading-tight tracking-wide text-muted-foreground/80", children: label }),
39
+ info && /* @__PURE__ */ jsxRuntime.jsx(InfoHint, { text: info })
40
+ ] }),
41
+ value !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 flex items-baseline gap-2", children: [
42
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[22px] font-semibold leading-tight text-foreground", children: value }),
43
+ hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] text-muted-foreground", children: hint })
44
+ ] }),
45
+ children,
46
+ detail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto pt-1.5 text-[12px] leading-snug text-muted-foreground", children: detail })
47
+ ] })
48
+ );
49
+ }
50
+ function ChannelChip({ label }) {
51
+ return /* @__PURE__ */ jsxRuntime.jsx(
52
+ "span",
53
+ {
54
+ "data-slot": "channel-chip",
55
+ className: "inline-flex items-center rounded-[6px] bg-foreground/[0.07] px-1.5 py-0.5 text-[10.5px] font-medium uppercase tracking-wide text-muted-foreground",
56
+ children: label
57
+ }
58
+ );
59
+ }
60
+
61
+ exports.ChannelChip = ChannelChip;
62
+ exports.InfoHint = InfoHint;
63
+ exports.StatCard = StatCard;
64
+ //# sourceMappingURL=stat-card.cjs.map
65
+ //# sourceMappingURL=stat-card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/stat-card.tsx"],"names":["jsx","TooltipProvider","Tooltip","TooltipTrigger","Info","TooltipContent","jsxs","cn"],"mappings":";;;;;;;AAkBO,SAAS,QAAA,CAAS,EAAE,IAAA,EAAK,EAAwB;AACtD,EAAA,uBACEA,cAAA,CAACC,iCAAA,EAAA,EAAgB,aAAA,EAAe,GAAA,EAC9B,0CAACC,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAF,cAAA,CAACG,gCAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAAH,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAW,WAAA;AAAA,QACX,QAAA,EAAU,CAAA;AAAA,QACV,SAAA,EAAU,kDAAA;AAAA,QAEV,QAAA,kBAAAA,cAAA,CAACI,gBAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,KAC7B,EACF,CAAA;AAAA,oBACAJ,cAAA,CAACK,gCAAA,EAAA,EAAe,SAAA,EAAU,sCAAA,EACvB,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAUG;AACD,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKEC,eAAA,CAAC,SAAI,WAAA,EAAU,WAAA,EAAY,WAAWC,oBAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA,EACxE,QAAA,EAAA;AAAA,sBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0FAAA,EACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,IAAA,oBAAQA,cAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,IAAA,EAAM;AAAA,OAAA,EACjC,CAAA;AAAA,MACC,KAAA,KAAU,MAAA,oBACTM,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,IAAA,oBACCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAqC,QAAA,EAAA,IAAA,EAAK;AAAA,OAAA,EAE9D,CAAA;AAAA,MAED,QAAA;AAAA,MACA,MAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEACZ,QAAA,EAAA,MAAA,EACH;AAAA,KAAA,EAEJ;AAAA;AAEJ;AAEO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAM,EAAsB;AACxD,EAAA,uBACEA,cAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAU,mJAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ","file":"stat-card.cjs","sourcesContent":["// Copyright (c) 2026, Invergent SA, developed by Flavius Burca\n// SPDX-License-Identifier: AGPL-3.0-only\n//\n// Shared stat-tile primitives used by the agent Metrics tab and the\n// agent Users page: label / big value / baseline hint / bottom-pinned\n// detail, with an optional info tooltip on the label.\n\nimport { Info } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"./lib/utils\";\n\nexport function InfoHint({ text }: { text: ReactNode }) {\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n aria-label=\"More info\"\n tabIndex={0}\n className=\"inline-flex cursor-help text-muted-foreground/60\"\n >\n <Info className=\"size-3.5\" />\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-72 text-[12px] leading-relaxed\">\n {text}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nexport function StatCard({\n label,\n info,\n value,\n hint,\n detail,\n className,\n children,\n}: {\n label: string;\n info?: ReactNode;\n value?: ReactNode;\n hint?: ReactNode;\n detail?: ReactNode;\n /** Card-shell classes (border, background, padding). Omit to render\n * the bare tile inside an existing card. */\n className?: string;\n children?: ReactNode;\n}) {\n return (\n // Label above value, always. Putting them on one line to save height\n // only works while the tile is full-width; inside the 2-up phone grid\n // the label wraps and the value collides with the info icon, which is\n // how this tile ended up looking broken on the Metrics tab.\n <div data-slot=\"stat-card\" className={cn(\"flex h-full flex-col\", className)}>\n <div className=\"flex items-center gap-1.5\">\n <p className=\"text-[11.5px] font-medium uppercase leading-tight tracking-wide text-muted-foreground/80\">\n {label}\n </p>\n {info && <InfoHint text={info} />}\n </div>\n {value !== undefined && (\n <div className=\"mt-1.5 flex items-baseline gap-2\">\n <span className=\"text-[22px] font-semibold leading-tight text-foreground\">\n {value}\n </span>\n {hint && (\n <span className=\"text-[12px] text-muted-foreground\">{hint}</span>\n )}\n </div>\n )}\n {children}\n {detail && (\n <div className=\"mt-auto pt-1.5 text-[12px] leading-snug text-muted-foreground\">\n {detail}\n </div>\n )}\n </div>\n );\n}\n\nexport function ChannelChip({ label }: { label: string }) {\n return (\n <span\n data-slot=\"channel-chip\"\n className=\"inline-flex items-center rounded-[6px] bg-foreground/[0.07] px-1.5 py-0.5 text-[10.5px] font-medium uppercase tracking-wide text-muted-foreground\"\n >\n {label}\n </span>\n );\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ declare function InfoHint({ text }: {
5
+ text: ReactNode;
6
+ }): react_jsx_runtime.JSX.Element;
7
+ declare function StatCard({ label, info, value, hint, detail, className, children, }: {
8
+ label: string;
9
+ info?: ReactNode;
10
+ value?: ReactNode;
11
+ hint?: ReactNode;
12
+ detail?: ReactNode;
13
+ /** Card-shell classes (border, background, padding). Omit to render
14
+ * the bare tile inside an existing card. */
15
+ className?: string;
16
+ children?: ReactNode;
17
+ }): react_jsx_runtime.JSX.Element;
18
+ declare function ChannelChip({ label }: {
19
+ label: string;
20
+ }): react_jsx_runtime.JSX.Element;
21
+
22
+ export { ChannelChip, InfoHint, StatCard };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ declare function InfoHint({ text }: {
5
+ text: ReactNode;
6
+ }): react_jsx_runtime.JSX.Element;
7
+ declare function StatCard({ label, info, value, hint, detail, className, children, }: {
8
+ label: string;
9
+ info?: ReactNode;
10
+ value?: ReactNode;
11
+ hint?: ReactNode;
12
+ detail?: ReactNode;
13
+ /** Card-shell classes (border, background, padding). Omit to render
14
+ * the bare tile inside an existing card. */
15
+ className?: string;
16
+ children?: ReactNode;
17
+ }): react_jsx_runtime.JSX.Element;
18
+ declare function ChannelChip({ label }: {
19
+ label: string;
20
+ }): react_jsx_runtime.JSX.Element;
21
+
22
+ export { ChannelChip, InfoHint, StatCard };