@tollerud/ui 1.1.5 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/AGENTS.md +36 -13
  2. package/CHANGELOG.md +411 -0
  3. package/COMPONENTS.md +951 -0
  4. package/GETTING_STARTED.md +159 -0
  5. package/README.md +51 -43
  6. package/SKILL.md +59 -24
  7. package/components.json +18 -0
  8. package/dist/accordion.d.ts +20 -0
  9. package/dist/accordion.js +5 -0
  10. package/dist/accordion.js.map +1 -0
  11. package/dist/action-diff.d.ts +26 -0
  12. package/dist/action-diff.js +5 -0
  13. package/dist/action-diff.js.map +1 -0
  14. package/dist/action-row.d.ts +36 -0
  15. package/dist/action-row.js +6 -0
  16. package/dist/action-row.js.map +1 -0
  17. package/dist/alert-inbox.d.ts +23 -0
  18. package/dist/alert-inbox.js +6 -0
  19. package/dist/alert-inbox.js.map +1 -0
  20. package/dist/alert.d.ts +33 -0
  21. package/dist/alert.js +5 -0
  22. package/dist/alert.js.map +1 -0
  23. package/dist/approval-card.d.ts +27 -0
  24. package/dist/approval-card.js +5 -0
  25. package/dist/approval-card.js.map +1 -0
  26. package/dist/area-chart.d.ts +10 -0
  27. package/dist/area-chart.js +5 -0
  28. package/dist/area-chart.js.map +1 -0
  29. package/dist/avatar.d.ts +28 -0
  30. package/dist/avatar.js +5 -0
  31. package/dist/avatar.js.map +1 -0
  32. package/dist/backup-status-panel.d.ts +25 -0
  33. package/dist/backup-status-panel.js +6 -0
  34. package/dist/backup-status-panel.js.map +1 -0
  35. package/dist/badge.d.ts +17 -0
  36. package/dist/badge.js +5 -0
  37. package/dist/badge.js.map +1 -0
  38. package/dist/bar-chart.d.ts +15 -0
  39. package/dist/bar-chart.js +5 -0
  40. package/dist/bar-chart.js.map +1 -0
  41. package/dist/bento-dashboard.d.ts +30 -0
  42. package/dist/bento-dashboard.js +10 -0
  43. package/dist/bento-dashboard.js.map +1 -0
  44. package/dist/breadcrumb.d.ts +16 -0
  45. package/dist/breadcrumb.js +5 -0
  46. package/dist/breadcrumb.js.map +1 -0
  47. package/dist/button.d.ts +29 -0
  48. package/dist/button.js +5 -0
  49. package/dist/button.js.map +1 -0
  50. package/dist/card.d.ts +10 -0
  51. package/dist/card.js +5 -0
  52. package/dist/card.js.map +1 -0
  53. package/dist/checkbox.d.ts +9 -0
  54. package/dist/checkbox.js +5 -0
  55. package/dist/checkbox.js.map +1 -0
  56. package/dist/chunk-2QWKOCWF.js +79 -0
  57. package/dist/chunk-2QWKOCWF.js.map +1 -0
  58. package/dist/chunk-3LTW224O.js +53 -0
  59. package/dist/chunk-3LTW224O.js.map +1 -0
  60. package/dist/chunk-3XTZPDNV.js +94 -0
  61. package/dist/chunk-3XTZPDNV.js.map +1 -0
  62. package/dist/chunk-435JHF7G.js +65 -0
  63. package/dist/chunk-435JHF7G.js.map +1 -0
  64. package/dist/chunk-4PA2ACNF.js +52 -0
  65. package/dist/chunk-4PA2ACNF.js.map +1 -0
  66. package/dist/chunk-5GWHUJ5D.js +29 -0
  67. package/dist/chunk-5GWHUJ5D.js.map +1 -0
  68. package/dist/chunk-6FUKJD3W.js +123 -0
  69. package/dist/chunk-6FUKJD3W.js.map +1 -0
  70. package/dist/chunk-6IS2AYYG.js +106 -0
  71. package/dist/chunk-6IS2AYYG.js.map +1 -0
  72. package/dist/chunk-6PZKU6ZL.js +78 -0
  73. package/dist/chunk-6PZKU6ZL.js.map +1 -0
  74. package/dist/chunk-6SKTH45H.js +75 -0
  75. package/dist/chunk-6SKTH45H.js.map +1 -0
  76. package/dist/chunk-6UXW5YUC.js +77 -0
  77. package/dist/chunk-6UXW5YUC.js.map +1 -0
  78. package/dist/chunk-7EP2T3OW.js +52 -0
  79. package/dist/chunk-7EP2T3OW.js.map +1 -0
  80. package/dist/chunk-7J5QXUQN.js +38 -0
  81. package/dist/chunk-7J5QXUQN.js.map +1 -0
  82. package/dist/chunk-A6L5C3IJ.js +47 -0
  83. package/dist/chunk-A6L5C3IJ.js.map +1 -0
  84. package/dist/chunk-ADE22JSR.js +54 -0
  85. package/dist/chunk-ADE22JSR.js.map +1 -0
  86. package/dist/chunk-ANW6J6PV.js +42 -0
  87. package/dist/chunk-ANW6J6PV.js.map +1 -0
  88. package/dist/chunk-APFFKNPS.js +80 -0
  89. package/dist/chunk-APFFKNPS.js.map +1 -0
  90. package/dist/chunk-AQT3FZRQ.js +23 -0
  91. package/dist/chunk-AQT3FZRQ.js.map +1 -0
  92. package/dist/chunk-AZADSX4Z.js +85 -0
  93. package/dist/chunk-AZADSX4Z.js.map +1 -0
  94. package/dist/chunk-BPCH5LJ3.js +36 -0
  95. package/dist/chunk-BPCH5LJ3.js.map +1 -0
  96. package/dist/chunk-CDI7353B.js +40 -0
  97. package/dist/chunk-CDI7353B.js.map +1 -0
  98. package/dist/chunk-CKNWXYMA.js +53 -0
  99. package/dist/chunk-CKNWXYMA.js.map +1 -0
  100. package/dist/chunk-DNJI65VQ.js +22 -0
  101. package/dist/chunk-DNJI65VQ.js.map +1 -0
  102. package/dist/chunk-DOUDJU4P.js +63 -0
  103. package/dist/chunk-DOUDJU4P.js.map +1 -0
  104. package/dist/chunk-DRCMGIQ6.js +64 -0
  105. package/dist/chunk-DRCMGIQ6.js.map +1 -0
  106. package/dist/chunk-DZOBXK2S.js +28 -0
  107. package/dist/chunk-DZOBXK2S.js.map +1 -0
  108. package/dist/chunk-EN4OJCEF.js +54 -0
  109. package/dist/chunk-EN4OJCEF.js.map +1 -0
  110. package/dist/chunk-EVHZFYWX.js +33 -0
  111. package/dist/chunk-EVHZFYWX.js.map +1 -0
  112. package/dist/chunk-G2VKWNZA.js +53 -0
  113. package/dist/chunk-G2VKWNZA.js.map +1 -0
  114. package/dist/chunk-GTM2DE4C.js +156 -0
  115. package/dist/chunk-GTM2DE4C.js.map +1 -0
  116. package/dist/chunk-H3ZVGTJM.js +165 -0
  117. package/dist/chunk-H3ZVGTJM.js.map +1 -0
  118. package/dist/chunk-HWAWUEHC.js +28 -0
  119. package/dist/chunk-HWAWUEHC.js.map +1 -0
  120. package/dist/chunk-HWJVRTWO.js +36 -0
  121. package/dist/chunk-HWJVRTWO.js.map +1 -0
  122. package/dist/chunk-ILADNTUB.js +77 -0
  123. package/dist/chunk-ILADNTUB.js.map +1 -0
  124. package/dist/chunk-IUPVQWO5.js +31 -0
  125. package/dist/chunk-IUPVQWO5.js.map +1 -0
  126. package/dist/chunk-JFOW2DI5.js +43 -0
  127. package/dist/chunk-JFOW2DI5.js.map +1 -0
  128. package/dist/chunk-JRFSUVSO.js +66 -0
  129. package/dist/chunk-JRFSUVSO.js.map +1 -0
  130. package/dist/chunk-KI6OTVID.js +91 -0
  131. package/dist/chunk-KI6OTVID.js.map +1 -0
  132. package/dist/chunk-LUM2YJBH.js +73 -0
  133. package/dist/chunk-LUM2YJBH.js.map +1 -0
  134. package/dist/chunk-NHPISZWS.js +71 -0
  135. package/dist/chunk-NHPISZWS.js.map +1 -0
  136. package/dist/chunk-NOLWJJHT.js +52 -0
  137. package/dist/chunk-NOLWJJHT.js.map +1 -0
  138. package/dist/chunk-NPVINX3Q.js +20 -0
  139. package/dist/chunk-NPVINX3Q.js.map +1 -0
  140. package/dist/chunk-NSMU66ZX.js +47 -0
  141. package/dist/chunk-NSMU66ZX.js.map +1 -0
  142. package/dist/chunk-O5SWPHUQ.js +79 -0
  143. package/dist/chunk-O5SWPHUQ.js.map +1 -0
  144. package/dist/chunk-OGVSZ7NV.js +53 -0
  145. package/dist/chunk-OGVSZ7NV.js.map +1 -0
  146. package/dist/chunk-OLHMMFQ7.js +43 -0
  147. package/dist/chunk-OLHMMFQ7.js.map +1 -0
  148. package/dist/chunk-ONMTHBZ4.js +54 -0
  149. package/dist/chunk-ONMTHBZ4.js.map +1 -0
  150. package/dist/chunk-OVSIOZHJ.js +56 -0
  151. package/dist/chunk-OVSIOZHJ.js.map +1 -0
  152. package/dist/chunk-Q54CVE3W.js +154 -0
  153. package/dist/chunk-Q54CVE3W.js.map +1 -0
  154. package/dist/chunk-QEHTPQHL.js +35 -0
  155. package/dist/chunk-QEHTPQHL.js.map +1 -0
  156. package/dist/chunk-QEIEWGHA.js +62 -0
  157. package/dist/chunk-QEIEWGHA.js.map +1 -0
  158. package/dist/chunk-QQHBEACI.js +88 -0
  159. package/dist/chunk-QQHBEACI.js.map +1 -0
  160. package/dist/chunk-RJTDQOT2.js +73 -0
  161. package/dist/chunk-RJTDQOT2.js.map +1 -0
  162. package/dist/chunk-RQ3RXKAZ.js +203 -0
  163. package/dist/chunk-RQ3RXKAZ.js.map +1 -0
  164. package/dist/chunk-RZK2S2OO.js +126 -0
  165. package/dist/chunk-RZK2S2OO.js.map +1 -0
  166. package/dist/chunk-SAP7JSSO.js +106 -0
  167. package/dist/chunk-SAP7JSSO.js.map +1 -0
  168. package/dist/chunk-T3TQPOVM.js +79 -0
  169. package/dist/chunk-T3TQPOVM.js.map +1 -0
  170. package/dist/chunk-T3UQ7G4T.js +58 -0
  171. package/dist/chunk-T3UQ7G4T.js.map +1 -0
  172. package/dist/chunk-T56TTOI6.js +53 -0
  173. package/dist/chunk-T56TTOI6.js.map +1 -0
  174. package/dist/chunk-T7EFDE2L.js +36 -0
  175. package/dist/chunk-T7EFDE2L.js.map +1 -0
  176. package/dist/chunk-VFS3V3VY.js +91 -0
  177. package/dist/chunk-VFS3V3VY.js.map +1 -0
  178. package/dist/chunk-VOARBYVQ.js +44 -0
  179. package/dist/chunk-VOARBYVQ.js.map +1 -0
  180. package/dist/chunk-WDANALHD.js +95 -0
  181. package/dist/chunk-WDANALHD.js.map +1 -0
  182. package/dist/chunk-WSQNPRGN.js +12 -0
  183. package/dist/chunk-WSQNPRGN.js.map +1 -0
  184. package/dist/chunk-YPP7QHYT.js +393 -0
  185. package/dist/chunk-YPP7QHYT.js.map +1 -0
  186. package/dist/chunk-YTU7BRDW.js +72 -0
  187. package/dist/chunk-YTU7BRDW.js.map +1 -0
  188. package/dist/chunk-YYWODLER.js +111 -0
  189. package/dist/chunk-YYWODLER.js.map +1 -0
  190. package/dist/chunk-ZOXO3G3I.js +50 -0
  191. package/dist/chunk-ZOXO3G3I.js.map +1 -0
  192. package/dist/chunk-ZTFOR3AN.js +79 -0
  193. package/dist/chunk-ZTFOR3AN.js.map +1 -0
  194. package/dist/code-block.d.ts +14 -0
  195. package/dist/code-block.js +5 -0
  196. package/dist/code-block.js.map +1 -0
  197. package/dist/combobox.d.ts +26 -0
  198. package/dist/combobox.js +5 -0
  199. package/dist/combobox.js.map +1 -0
  200. package/dist/command-menu.d.ts +52 -0
  201. package/dist/command-menu.js +7 -0
  202. package/dist/command-menu.js.map +1 -0
  203. package/dist/container.d.ts +9 -0
  204. package/dist/container.js +5 -0
  205. package/dist/container.js.map +1 -0
  206. package/dist/cta-band.d.ts +12 -0
  207. package/dist/cta-band.js +5 -0
  208. package/dist/cta-band.js.map +1 -0
  209. package/dist/data-table.d.ts +58 -0
  210. package/dist/data-table.js +12 -0
  211. package/dist/data-table.js.map +1 -0
  212. package/dist/date-picker.d.ts +20 -0
  213. package/dist/date-picker.js +5 -0
  214. package/dist/date-picker.js.map +1 -0
  215. package/dist/dialog.d.ts +21 -0
  216. package/dist/dialog.js +5 -0
  217. package/dist/dialog.js.map +1 -0
  218. package/dist/divider.d.ts +12 -0
  219. package/dist/divider.js +5 -0
  220. package/dist/divider.js.map +1 -0
  221. package/dist/docker-stack-card.d.ts +21 -0
  222. package/dist/docker-stack-card.js +6 -0
  223. package/dist/docker-stack-card.js.map +1 -0
  224. package/dist/donut.d.ts +15 -0
  225. package/dist/donut.js +5 -0
  226. package/dist/donut.js.map +1 -0
  227. package/dist/dropdown-menu.d.ts +15 -0
  228. package/dist/dropdown-menu.js +5 -0
  229. package/dist/dropdown-menu.js.map +1 -0
  230. package/dist/empty.d.ts +12 -0
  231. package/dist/empty.js +5 -0
  232. package/dist/empty.js.map +1 -0
  233. package/dist/feature-card.d.ts +11 -0
  234. package/dist/feature-card.js +6 -0
  235. package/dist/feature-card.js.map +1 -0
  236. package/dist/file-upload.d.ts +20 -0
  237. package/dist/file-upload.js +5 -0
  238. package/dist/file-upload.js.map +1 -0
  239. package/dist/footer.d.ts +35 -0
  240. package/dist/footer.js +6 -0
  241. package/dist/footer.js.map +1 -0
  242. package/dist/form-row.d.ts +19 -0
  243. package/dist/form-row.js +5 -0
  244. package/dist/form-row.js.map +1 -0
  245. package/dist/glow-card.d.ts +14 -0
  246. package/dist/glow-card.js +5 -0
  247. package/dist/glow-card.js.map +1 -0
  248. package/dist/hero-block.d.ts +16 -0
  249. package/dist/hero-block.js +7 -0
  250. package/dist/hero-block.js.map +1 -0
  251. package/dist/host-card.d.ts +27 -0
  252. package/dist/host-card.js +6 -0
  253. package/dist/host-card.js.map +1 -0
  254. package/dist/incident-card.d.ts +23 -0
  255. package/dist/incident-card.js +5 -0
  256. package/dist/incident-card.js.map +1 -0
  257. package/dist/index.d.ts +77 -960
  258. package/dist/index.js +69 -3812
  259. package/dist/index.js.map +1 -1
  260. package/dist/input.d.ts +10 -0
  261. package/dist/input.js +5 -0
  262. package/dist/input.js.map +1 -0
  263. package/dist/kbd.d.ts +24 -0
  264. package/dist/kbd.js +5 -0
  265. package/dist/kbd.js.map +1 -0
  266. package/dist/log-viewer.d.ts +35 -0
  267. package/dist/log-viewer.js +5 -0
  268. package/dist/log-viewer.js.map +1 -0
  269. package/dist/meter.d.ts +23 -0
  270. package/dist/meter.js +5 -0
  271. package/dist/meter.js.map +1 -0
  272. package/dist/monogram.d.ts +20 -0
  273. package/dist/monogram.js +5 -0
  274. package/dist/monogram.js.map +1 -0
  275. package/dist/noir-glow-background.d.ts +56 -0
  276. package/dist/noir-glow-background.js +4 -0
  277. package/dist/noir-glow-background.js.map +1 -0
  278. package/dist/pagination.d.ts +16 -0
  279. package/dist/pagination.js +5 -0
  280. package/dist/pagination.js.map +1 -0
  281. package/dist/panel.d.ts +12 -0
  282. package/dist/panel.js +5 -0
  283. package/dist/panel.js.map +1 -0
  284. package/dist/password-input.d.ts +10 -0
  285. package/dist/password-input.js +5 -0
  286. package/dist/password-input.js.map +1 -0
  287. package/dist/pill.d.ts +17 -0
  288. package/dist/pill.js +5 -0
  289. package/dist/pill.js.map +1 -0
  290. package/dist/pricing-card.d.ts +20 -0
  291. package/dist/pricing-card.js +6 -0
  292. package/dist/pricing-card.js.map +1 -0
  293. package/dist/progress.d.ts +6 -0
  294. package/dist/progress.js +5 -0
  295. package/dist/progress.js.map +1 -0
  296. package/dist/radio-group.d.ts +18 -0
  297. package/dist/radio-group.js +5 -0
  298. package/dist/radio-group.js.map +1 -0
  299. package/dist/rollback-plan.d.ts +23 -0
  300. package/dist/rollback-plan.js +5 -0
  301. package/dist/rollback-plan.js.map +1 -0
  302. package/dist/segmented.d.ts +17 -0
  303. package/dist/segmented.js +5 -0
  304. package/dist/segmented.js.map +1 -0
  305. package/dist/select.d.ts +18 -0
  306. package/dist/select.js +5 -0
  307. package/dist/select.js.map +1 -0
  308. package/dist/service-health-card.d.ts +21 -0
  309. package/dist/service-health-card.js +6 -0
  310. package/dist/service-health-card.js.map +1 -0
  311. package/dist/sheet.d.ts +25 -0
  312. package/dist/sheet.js +5 -0
  313. package/dist/sheet.js.map +1 -0
  314. package/dist/skeleton.d.ts +13 -0
  315. package/dist/skeleton.js +5 -0
  316. package/dist/skeleton.js.map +1 -0
  317. package/dist/slider.d.ts +12 -0
  318. package/dist/slider.js +5 -0
  319. package/dist/slider.js.map +1 -0
  320. package/dist/sparkline.d.ts +16 -0
  321. package/dist/sparkline.js +5 -0
  322. package/dist/sparkline.js.map +1 -0
  323. package/dist/stat-card.d.ts +15 -0
  324. package/dist/stat-card.js +5 -0
  325. package/dist/stat-card.js.map +1 -0
  326. package/dist/status-dot.d.ts +13 -0
  327. package/dist/status-dot.js +5 -0
  328. package/dist/status-dot.js.map +1 -0
  329. package/dist/stepper.d.ts +16 -0
  330. package/dist/stepper.js +5 -0
  331. package/dist/stepper.js.map +1 -0
  332. package/dist/switch.d.ts +9 -0
  333. package/dist/switch.js +5 -0
  334. package/dist/switch.js.map +1 -0
  335. package/dist/tabs.d.ts +9 -0
  336. package/dist/tabs.js +5 -0
  337. package/dist/tabs.js.map +1 -0
  338. package/dist/tag-input.d.ts +20 -0
  339. package/dist/tag-input.js +5 -0
  340. package/dist/tag-input.js.map +1 -0
  341. package/dist/textarea.d.ts +10 -0
  342. package/dist/textarea.js +5 -0
  343. package/dist/textarea.js.map +1 -0
  344. package/dist/timeline.d.ts +30 -0
  345. package/dist/timeline.js +5 -0
  346. package/dist/timeline.js.map +1 -0
  347. package/dist/toaster.d.ts +10 -0
  348. package/dist/toaster.js +4 -0
  349. package/dist/toaster.js.map +1 -0
  350. package/dist/tooltip.d.ts +12 -0
  351. package/dist/tooltip.js +5 -0
  352. package/dist/tooltip.js.map +1 -0
  353. package/dist/utils.d.ts +5 -0
  354. package/dist/utils.js +4 -0
  355. package/dist/utils.js.map +1 -0
  356. package/globals-layers.css +1019 -0
  357. package/globals-v3.css +17 -0
  358. package/globals-v4.css +2 -0
  359. package/globals.css +12 -939
  360. package/package.json +85 -17
  361. package/registry.json +936 -0
  362. package/tailwind.css +9 -0
  363. package/tokens.css +20 -0
  364. package/tollerud-avatar-full.png +0 -0
  365. package/dist/index.cjs +0 -3938
  366. package/dist/index.cjs.map +0 -1
  367. package/dist/index.d.cts +0 -960
  368. /package/{tia-full-figure.svg → tollerud-avatar-full.svg} +0 -0
@@ -0,0 +1,33 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ declare const toneStyles: {
5
+ readonly default: {
6
+ readonly wrapper: "border-tollerud-border bg-tollerud-surface-raised";
7
+ readonly icon: "text-tollerud-text-muted";
8
+ };
9
+ readonly accent: {
10
+ readonly wrapper: "border-tollerud-yellow/30 bg-tollerud-yellow/5";
11
+ readonly icon: "text-tollerud-yellow";
12
+ };
13
+ readonly info: {
14
+ readonly wrapper: "border-blue-500/30 bg-blue-500/5";
15
+ readonly icon: "text-blue-400";
16
+ };
17
+ readonly success: {
18
+ readonly wrapper: "border-green-500/30 bg-green-500/5";
19
+ readonly icon: "text-green-400";
20
+ };
21
+ readonly error: {
22
+ readonly wrapper: "border-red-500/30 bg-red-500/5";
23
+ readonly icon: "text-red-400";
24
+ };
25
+ };
26
+ interface AlertProps extends HTMLAttributes<HTMLDivElement> {
27
+ tone?: keyof typeof toneStyles;
28
+ title?: string;
29
+ icon?: React.ReactNode;
30
+ }
31
+ declare const Alert: react.ForwardRefExoticComponent<AlertProps & react.RefAttributes<HTMLDivElement>>;
32
+
33
+ export { Alert, type AlertProps };
package/dist/alert.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Alert } from './chunk-ANW6J6PV.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=alert.js.map
5
+ //# sourceMappingURL=alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"alert.js"}
@@ -0,0 +1,27 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ type ApprovalState = 'pending' | 'approved' | 'rejected';
5
+ interface ApprovalCardProps extends HTMLAttributes<HTMLDivElement> {
6
+ /** Action being approved */
7
+ action: string;
8
+ /** Description of what will happen */
9
+ description?: string;
10
+ /** Source (e.g. 'Emma → backup.sh') */
11
+ source?: string;
12
+ /** Current approval state */
13
+ state?: ApprovalState;
14
+ /** Timestamp of the request */
15
+ timestamp?: string;
16
+ /** Called when user approves */
17
+ onApprove?: () => void;
18
+ /** Called when user rejects */
19
+ onReject?: () => void;
20
+ /** Whether actions are disabled */
21
+ disabled?: boolean;
22
+ /** Whether the card is loading */
23
+ loading?: boolean;
24
+ }
25
+ declare const ApprovalCard: react.ForwardRefExoticComponent<ApprovalCardProps & react.RefAttributes<HTMLDivElement>>;
26
+
27
+ export { ApprovalCard, type ApprovalCardProps, type ApprovalState };
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { ApprovalCard } from './chunk-APFFKNPS.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=approval-card.js.map
5
+ //# sourceMappingURL=approval-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"approval-card.js"}
@@ -0,0 +1,10 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface AreaChartProps extends HTMLAttributes<HTMLDivElement> {
5
+ data: number[];
6
+ height?: number;
7
+ }
8
+ declare const AreaChart: react.ForwardRefExoticComponent<AreaChartProps & react.RefAttributes<HTMLDivElement>>;
9
+
10
+ export { AreaChart, type AreaChartProps };
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { AreaChart } from './chunk-6PZKU6ZL.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=area-chart.js.map
5
+ //# sourceMappingURL=area-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"area-chart.js"}
@@ -0,0 +1,28 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ declare const avatarSizes: {
5
+ readonly sm: "h-6 w-6 text-[10px]";
6
+ readonly md: "h-8 w-8 text-xs";
7
+ readonly lg: "h-11 w-11 text-sm";
8
+ };
9
+ interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
10
+ /** Image source */
11
+ src?: string;
12
+ /** Accessible name / used to derive initials fallback */
13
+ name?: string;
14
+ /** Explicit fallback content (overrides derived initials) */
15
+ fallback?: React.ReactNode;
16
+ /** Named size token or explicit pixel diameter */
17
+ size?: keyof typeof avatarSizes | number;
18
+ }
19
+ declare const Avatar: react.ForwardRefExoticComponent<AvatarProps & react.RefAttributes<HTMLSpanElement>>;
20
+ interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {
21
+ /** Maximum avatars to render before collapsing into a "+N" overflow indicator */
22
+ max?: number;
23
+ size?: keyof typeof avatarSizes | number;
24
+ children: React.ReactNode;
25
+ }
26
+ declare const AvatarGroup: react.ForwardRefExoticComponent<AvatarGroupProps & react.RefAttributes<HTMLDivElement>>;
27
+
28
+ export { Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps };
package/dist/avatar.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Avatar, AvatarGroup } from './chunk-VFS3V3VY.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=avatar.js.map
5
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"avatar.js"}
@@ -0,0 +1,25 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+ import { Status } from './status-dot.js';
4
+
5
+ interface BackupJob {
6
+ name: string;
7
+ status: Status;
8
+ lastRun?: string;
9
+ nextRun?: string;
10
+ size?: string;
11
+ target?: string;
12
+ }
13
+ interface BackupStatusPanelProps extends HTMLAttributes<HTMLDivElement> {
14
+ /** List of backup jobs */
15
+ jobs: BackupJob[];
16
+ /** Total size of all backups */
17
+ totalSize?: string;
18
+ /** Last full backup timestamp */
19
+ lastFullBackup?: string;
20
+ /** Whether the panel is loading */
21
+ loading?: boolean;
22
+ }
23
+ declare const BackupStatusPanel: react.ForwardRefExoticComponent<BackupStatusPanelProps & react.RefAttributes<HTMLDivElement>>;
24
+
25
+ export { type BackupJob, BackupStatusPanel, type BackupStatusPanelProps };
@@ -0,0 +1,6 @@
1
+ 'use client';
2
+ export { BackupStatusPanel } from './chunk-JRFSUVSO.js';
3
+ import './chunk-NHPISZWS.js';
4
+ import './chunk-WSQNPRGN.js';
5
+ //# sourceMappingURL=backup-status-panel.js.map
6
+ //# sourceMappingURL=backup-status-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"backup-status-panel.js"}
@@ -0,0 +1,17 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ declare const badgeVariants: {
5
+ readonly default: "bg-tollerud-noir-700 text-tollerud-text-secondary";
6
+ readonly accent: "bg-tollerud-yellow/15 text-tollerud-yellow";
7
+ readonly success: "bg-tollerud-success/15 text-tollerud-success";
8
+ readonly error: "bg-tollerud-error/15 text-tollerud-error";
9
+ readonly info: "bg-tollerud-info/15 text-tollerud-info";
10
+ readonly warning: "bg-tollerud-yellow/15 text-tollerud-warning";
11
+ };
12
+ interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
13
+ variant?: keyof typeof badgeVariants;
14
+ }
15
+ declare const Badge: react.ForwardRefExoticComponent<BadgeProps & react.RefAttributes<HTMLSpanElement>>;
16
+
17
+ export { Badge, type BadgeProps };
package/dist/badge.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Badge } from './chunk-QEHTPQHL.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=badge.js.map
5
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"badge.js"}
@@ -0,0 +1,15 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface BarChartDatum {
5
+ label: string;
6
+ value: number;
7
+ accent?: boolean;
8
+ }
9
+ interface BarChartProps extends HTMLAttributes<HTMLDivElement> {
10
+ data: BarChartDatum[];
11
+ height?: number;
12
+ }
13
+ declare const BarChart: react.ForwardRefExoticComponent<BarChartProps & react.RefAttributes<HTMLDivElement>>;
14
+
15
+ export { BarChart, type BarChartDatum, type BarChartProps };
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { BarChart } from './chunk-4PA2ACNF.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=bar-chart.js.map
5
+ //# sourceMappingURL=bar-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"bar-chart.js"}
@@ -0,0 +1,30 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { HostCardProps } from './host-card.js';
4
+ import { StatCardProps } from './stat-card.js';
5
+ import { ServiceHealthCardProps } from './service-health-card.js';
6
+ import { IncidentSeverity } from './incident-card.js';
7
+ import { BackupJob } from './backup-status-panel.js';
8
+ import './status-dot.js';
9
+
10
+ interface BentoDashboardProps {
11
+ title: string;
12
+ hosts?: HostCardProps[];
13
+ metrics?: StatCardProps[];
14
+ services?: ServiceHealthCardProps[];
15
+ incidents?: {
16
+ title: string;
17
+ severity: IncidentSeverity;
18
+ timestamp: string;
19
+ service: string;
20
+ description?: string;
21
+ acknowledged?: boolean;
22
+ }[];
23
+ backupJobs?: BackupJob[];
24
+ className?: string;
25
+ /** Render the incident list footer */
26
+ renderIncidentFooter?: () => ReactNode;
27
+ }
28
+ declare function BentoDashboard({ title, hosts, metrics, services, incidents, className, }: BentoDashboardProps): react.JSX.Element;
29
+
30
+ export { BentoDashboard, type BentoDashboardProps };
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ export { BentoDashboard } from './chunk-ONMTHBZ4.js';
3
+ import './chunk-LUM2YJBH.js';
4
+ import './chunk-7EP2T3OW.js';
5
+ import './chunk-DOUDJU4P.js';
6
+ import './chunk-NHPISZWS.js';
7
+ import './chunk-EN4OJCEF.js';
8
+ import './chunk-WSQNPRGN.js';
9
+ //# sourceMappingURL=bento-dashboard.js.map
10
+ //# sourceMappingURL=bento-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"bento-dashboard.js"}
@@ -0,0 +1,16 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface BreadcrumbItem {
5
+ label: React.ReactNode;
6
+ href?: string;
7
+ onClick?: () => void;
8
+ }
9
+ interface BreadcrumbProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
10
+ items: BreadcrumbItem[];
11
+ /** Custom separator (defaults to a chevron) */
12
+ separator?: React.ReactNode;
13
+ }
14
+ declare const Breadcrumb: react.ForwardRefExoticComponent<BreadcrumbProps & react.RefAttributes<HTMLElement>>;
15
+
16
+ export { Breadcrumb, type BreadcrumbItem, type BreadcrumbProps };
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Breadcrumb } from './chunk-7J5QXUQN.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=breadcrumb.js.map
5
+ //# sourceMappingURL=breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"breadcrumb.js"}
@@ -0,0 +1,29 @@
1
+ import * as react from 'react';
2
+ import { ButtonHTMLAttributes } from 'react';
3
+
4
+ declare const variants: {
5
+ readonly primary: "bg-tollerud-yellow text-tollerud-black border-tollerud-yellow hover:bg-tollerud-yellow hover:shadow-tollerud-glow";
6
+ readonly secondary: "bg-transparent text-tollerud-text-primary border-tollerud-border hover:border-tollerud-text-secondary hover:bg-tollerud-surface-hover";
7
+ readonly ghost: "bg-transparent text-tollerud-text-secondary border-transparent hover:text-tollerud-text-primary hover:bg-tollerud-surface-hover";
8
+ readonly destructive: "bg-tollerud-error text-white border-tollerud-error hover:shadow-[0_0_12px_rgba(239,68,68,0.3)]";
9
+ readonly terminal: "font-mono text-tollerud-yellow border-[rgba(255,255,0,0.25)] bg-transparent hover:border-tollerud-yellow hover:shadow-tollerud-glow hover:bg-[rgba(255,255,0,0.05)]";
10
+ };
11
+ declare const sizes: {
12
+ readonly sm: "px-3 py-1 text-sm";
13
+ readonly md: "px-4 py-2 text-base";
14
+ readonly lg: "px-6 py-3 text-lg";
15
+ };
16
+ interface ButtonVariantProps {
17
+ variant?: keyof typeof variants;
18
+ size?: keyof typeof sizes;
19
+ }
20
+ declare function buttonVariants({ variant, size, className }?: ButtonVariantProps & {
21
+ className?: string;
22
+ }): string;
23
+ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonVariantProps {
24
+ /** Render as the single child element (e.g. a `<Link>`) instead of a `<button>`, merging props and styles onto it. */
25
+ asChild?: boolean;
26
+ }
27
+ declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
28
+
29
+ export { Button, type ButtonProps, type ButtonVariantProps, buttonVariants };
package/dist/button.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Button, buttonVariants } from './chunk-ADE22JSR.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=button.js.map
5
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"button.js"}
package/dist/card.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ interface CardProps extends HTMLAttributes<HTMLDivElement> {
5
+ accent?: boolean;
6
+ density?: 'comfortable' | 'compact';
7
+ }
8
+ declare const Card: react.ForwardRefExoticComponent<CardProps & react.RefAttributes<HTMLDivElement>>;
9
+
10
+ export { Card, type CardProps };
package/dist/card.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Card } from './chunk-DZOBXK2S.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=card.js.map
5
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"card.js"}
@@ -0,0 +1,9 @@
1
+ import * as react from 'react';
2
+ import { InputHTMLAttributes } from 'react';
3
+
4
+ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
5
+ label?: string;
6
+ }
7
+ declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
8
+
9
+ export { Checkbox, type CheckboxProps };
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ export { Checkbox } from './chunk-T3TQPOVM.js';
3
+ import './chunk-WSQNPRGN.js';
4
+ //# sourceMappingURL=checkbox.js.map
5
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"checkbox.js"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { cn } from './chunk-WSQNPRGN.js';
3
+ import { forwardRef } from 'react';
4
+ import { Check } from 'lucide-react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var Stepper = forwardRef(
8
+ ({ className, steps, current, orientation = "horizontal", ...props }, ref) => {
9
+ const vertical = orientation === "vertical";
10
+ return /* @__PURE__ */ jsx(
11
+ "ol",
12
+ {
13
+ ref,
14
+ className: cn("flex", vertical ? "flex-col gap-0" : "items-start gap-0 w-full", className),
15
+ ...props,
16
+ children: steps.map((step, i) => {
17
+ const status = i < current ? "complete" : i === current ? "active" : "upcoming";
18
+ const isLast = i === steps.length - 1;
19
+ return /* @__PURE__ */ jsxs(
20
+ "li",
21
+ {
22
+ className: cn(
23
+ "flex",
24
+ vertical ? "flex-row gap-3" : "flex-col flex-1 gap-2",
25
+ !vertical && !isLast && "pr-2"
26
+ ),
27
+ children: [
28
+ /* @__PURE__ */ jsxs("div", { className: cn("flex items-center", vertical ? "flex-col" : "flex-row gap-2 w-full"), children: [
29
+ /* @__PURE__ */ jsx(
30
+ "span",
31
+ {
32
+ className: cn(
33
+ "flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-medium transition-colors duration-[150ms]",
34
+ status === "complete" && "bg-tollerud-yellow text-tollerud-noir-black",
35
+ status === "active" && "border-2 border-tollerud-yellow text-tollerud-yellow",
36
+ status === "upcoming" && "border border-tollerud-border text-tollerud-text-muted"
37
+ ),
38
+ children: status === "complete" ? /* @__PURE__ */ jsx(Check, { size: 14 }) : i + 1
39
+ }
40
+ ),
41
+ !isLast && /* @__PURE__ */ jsx(
42
+ "span",
43
+ {
44
+ "aria-hidden": "true",
45
+ className: cn(
46
+ "bg-tollerud-border",
47
+ vertical ? "w-px flex-1 my-1" : "h-px flex-1",
48
+ status === "complete" && "bg-tollerud-yellow"
49
+ )
50
+ }
51
+ )
52
+ ] }),
53
+ /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", vertical && "pb-6"), children: [
54
+ /* @__PURE__ */ jsx(
55
+ "span",
56
+ {
57
+ className: cn(
58
+ "text-sm font-medium",
59
+ status === "upcoming" ? "text-tollerud-text-muted" : "text-tollerud-text-primary"
60
+ ),
61
+ children: step.label
62
+ }
63
+ ),
64
+ step.description && /* @__PURE__ */ jsx("span", { className: "text-xs text-tollerud-text-muted", children: step.description })
65
+ ] })
66
+ ]
67
+ },
68
+ i
69
+ );
70
+ })
71
+ }
72
+ );
73
+ }
74
+ );
75
+ Stepper.displayName = "Stepper";
76
+
77
+ export { Stepper };
78
+ //# sourceMappingURL=chunk-2QWKOCWF.js.map
79
+ //# sourceMappingURL=chunk-2QWKOCWF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/Stepper.tsx"],"names":[],"mappings":";;;;;AAgBA,IAAM,OAAA,GAAU,UAAA;AAAA,EACd,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,EAAS,cAAc,YAAA,EAAc,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC5E,IAAA,MAAM,WAAW,WAAA,KAAgB,UAAA;AAEjC,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAW,EAAA,CAAG,MAAA,EAAQ,QAAA,GAAW,gBAAA,GAAmB,4BAA4B,SAAS,CAAA;AAAA,QACxF,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,UAAA,MAAM,SAAS,CAAA,GAAI,OAAA,GAAU,UAAA,GAAa,CAAA,KAAM,UAAU,QAAA,GAAW,UAAA;AACrE,UAAA,MAAM,MAAA,GAAS,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAEpC,UAAA,uBACE,IAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT,MAAA;AAAA,gBACA,WAAW,gBAAA,GAAmB,uBAAA;AAAA,gBAC9B,CAAC,QAAA,IAAY,CAAC,MAAA,IAAU;AAAA,eAC1B;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,qBAAqB,QAAA,GAAW,UAAA,GAAa,uBAAuB,CAAA,EACrF,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,uHAAA;AAAA,wBACA,WAAW,UAAA,IAAc,6CAAA;AAAA,wBACzB,WAAW,QAAA,IAAY,sDAAA;AAAA,wBACvB,WAAW,UAAA,IAAc;AAAA,uBAC3B;AAAA,sBAEC,qBAAW,UAAA,mBAAa,GAAA,CAAC,SAAM,IAAA,EAAM,EAAA,EAAI,IAAK,CAAA,GAAI;AAAA;AAAA,mBACrD;AAAA,kBACC,CAAC,MAAA,oBACA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,aAAA,EAAY,MAAA;AAAA,sBACZ,SAAA,EAAW,EAAA;AAAA,wBACT,oBAAA;AAAA,wBACA,WAAW,kBAAA,GAAqB,aAAA;AAAA,wBAChC,WAAW,UAAA,IAAc;AAAA;AAC3B;AAAA;AACF,iBAAA,EAEJ,CAAA;AAAA,qCACC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,eAAA,EAAiB,QAAA,IAAY,MAAM,CAAA,EACpD,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,qBAAA;AAAA,wBACA,MAAA,KAAW,aAAa,0BAAA,GAA6B;AAAA,uBACvD;AAAA,sBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,mBACR;AAAA,kBACC,KAAK,WAAA,oBACJ,GAAA,CAAC,UAAK,SAAA,EAAU,kCAAA,EAAoC,eAAK,WAAA,EAAY;AAAA,iBAAA,EAEzE;AAAA;AAAA,aAAA;AAAA,YAzCK;AAAA,WA0CP;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA","file":"chunk-2QWKOCWF.js","sourcesContent":["import { type HTMLAttributes, forwardRef } from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nexport interface StepperStep {\n label: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface StepperProps extends HTMLAttributes<HTMLOListElement> {\n steps: StepperStep[]\n /** 0-indexed current step */\n current: number\n orientation?: 'horizontal' | 'vertical'\n}\n\nconst Stepper = forwardRef<HTMLOListElement, StepperProps>(\n ({ className, steps, current, orientation = 'horizontal', ...props }, ref) => {\n const vertical = orientation === 'vertical'\n\n return (\n <ol\n ref={ref}\n className={cn('flex', vertical ? 'flex-col gap-0' : 'items-start gap-0 w-full', className)}\n {...props}\n >\n {steps.map((step, i) => {\n const status = i < current ? 'complete' : i === current ? 'active' : 'upcoming'\n const isLast = i === steps.length - 1\n\n return (\n <li\n key={i}\n className={cn(\n 'flex',\n vertical ? 'flex-row gap-3' : 'flex-col flex-1 gap-2',\n !vertical && !isLast && 'pr-2'\n )}\n >\n <div className={cn('flex items-center', vertical ? 'flex-col' : 'flex-row gap-2 w-full')}>\n <span\n className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-medium transition-colors duration-[150ms]',\n status === 'complete' && 'bg-tollerud-yellow text-tollerud-noir-black',\n status === 'active' && 'border-2 border-tollerud-yellow text-tollerud-yellow',\n status === 'upcoming' && 'border border-tollerud-border text-tollerud-text-muted'\n )}\n >\n {status === 'complete' ? <Check size={14} /> : i + 1}\n </span>\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'bg-tollerud-border',\n vertical ? 'w-px flex-1 my-1' : 'h-px flex-1',\n status === 'complete' && 'bg-tollerud-yellow'\n )}\n />\n )}\n </div>\n <div className={cn('flex flex-col', vertical && 'pb-6')}>\n <span\n className={cn(\n 'text-sm font-medium',\n status === 'upcoming' ? 'text-tollerud-text-muted' : 'text-tollerud-text-primary'\n )}\n >\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-xs text-tollerud-text-muted\">{step.description}</span>\n )}\n </div>\n </li>\n )\n })}\n </ol>\n )\n }\n)\nStepper.displayName = 'Stepper'\n\nexport { Stepper }\n"]}
@@ -0,0 +1,53 @@
1
+ 'use client';
2
+ import { cn } from './chunk-WSQNPRGN.js';
3
+ import { forwardRef } from 'react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var Timeline = forwardRef(
7
+ ({ className, items, active, loading, ...props }, ref) => {
8
+ return /* @__PURE__ */ jsx(
9
+ "div",
10
+ {
11
+ ref,
12
+ className: cn("tollerud-timeline", loading && "animate-pulse", className),
13
+ role: "list",
14
+ "aria-label": "Activity timeline",
15
+ ...props,
16
+ children: items.map((item, i) => {
17
+ const isLast = i === items.length - 1;
18
+ return /* @__PURE__ */ jsxs("div", { className: "tollerud-timeline__item", role: "listitem", children: [
19
+ /* @__PURE__ */ jsx("div", { className: "tollerud-timeline__marker", children: /* @__PURE__ */ jsxs("div", { className: "tollerud-timeline__dot-group", children: [
20
+ item.icon ? /* @__PURE__ */ jsx("span", { className: "tollerud-timeline__icon", children: item.icon }) : /* @__PURE__ */ jsx(
21
+ "span",
22
+ {
23
+ className: cn(
24
+ "tollerud-timeline__dot",
25
+ active && "tollerud-timeline__dot--active",
26
+ item.status === "online" && "tollerud-timeline__dot--online",
27
+ item.status === "offline" && "tollerud-timeline__dot--offline",
28
+ item.status === "warning" && "tollerud-timeline__dot--warning",
29
+ item.status === "idle" && "tollerud-timeline__dot--idle"
30
+ )
31
+ }
32
+ ),
33
+ !isLast && /* @__PURE__ */ jsx("div", { className: "tollerud-timeline__line" })
34
+ ] }) }),
35
+ /* @__PURE__ */ jsxs("div", { className: "tollerud-timeline__content", children: [
36
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
37
+ /* @__PURE__ */ jsx("span", { className: "tollerud-timeline__title", children: item.title }),
38
+ /* @__PURE__ */ jsx("span", { className: "tollerud-timeline__time", children: item.time })
39
+ ] }),
40
+ item.description && /* @__PURE__ */ jsx("p", { className: "tollerud-timeline__description", children: item.description }),
41
+ item.meta && item.meta.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5 mt-1", children: item.meta.map((m) => /* @__PURE__ */ jsx("span", { className: "tollerud-timeline__meta", children: m }, m)) })
42
+ ] })
43
+ ] }, item.id);
44
+ })
45
+ }
46
+ );
47
+ }
48
+ );
49
+ Timeline.displayName = "Timeline";
50
+
51
+ export { Timeline };
52
+ //# sourceMappingURL=chunk-3LTW224O.js.map
53
+ //# sourceMappingURL=chunk-3LTW224O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/Timeline.tsx"],"names":[],"mappings":";;;;AA6BA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,QAAQ,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACxD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,OAAA,IAAW,iBAAiB,SAAS,CAAA;AAAA,QACxE,IAAA,EAAK,MAAA;AAAA,QACL,YAAA,EAAW,mBAAA;AAAA,QACV,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,UAAA,MAAM,MAAA,GAAS,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAEpC,UAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAkB,SAAA,EAAU,yBAAA,EAA0B,MAAK,UAAA,EAE1D,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,SAAI,SAAA,EAAU,2BAAA,EACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8BAAA,EACZ,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,uBACJ,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yBAAA,EAA2B,QAAA,EAAA,IAAA,CAAK,MAAK,CAAA,mBAErD,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,wBAAA;AAAA,oBACA,MAAA,IAAU,gCAAA;AAAA,oBACV,IAAA,CAAK,WAAW,QAAA,IAAY,gCAAA;AAAA,oBAC5B,IAAA,CAAK,WAAW,SAAA,IAAa,iCAAA;AAAA,oBAC7B,IAAA,CAAK,WAAW,SAAA,IAAa,iCAAA;AAAA,oBAC7B,IAAA,CAAK,WAAW,MAAA,IAAU;AAAA;AAC5B;AAAA,eACF;AAAA,cAED,CAAC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAA0B;AAAA,aAAA,EACvD,CAAA,EACF,CAAA;AAAA,4BAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,gCACvD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,eAAK,IAAA,EAAK;AAAA,eAAA,EACvD,CAAA;AAAA,cACC,KAAK,WAAA,oBACJ,GAAA,CAAC,OAAE,SAAA,EAAU,gCAAA,EAAkC,eAAK,WAAA,EAAY,CAAA;AAAA,cAEjE,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,oBAC/B,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACZ,QAAA,EAAA,IAAA,CAAK,KAAK,GAAA,CAAI,CAAC,sBACd,GAAA,CAAC,MAAA,EAAA,EAAa,WAAU,yBAAA,EAA2B,QAAA,EAAA,CAAA,EAAA,EAAxC,CAA0C,CACtD,CAAA,EACH;AAAA,aAAA,EAEJ;AAAA,WAAA,EAAA,EAtCQ,KAAK,EAuCf,CAAA;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-3LTW224O.js","sourcesContent":["import { type HTMLAttributes, type ReactNode, forwardRef } from 'react'\nimport { cn } from '@/lib/utils'\nimport type { Status } from './StatusDot'\n\nexport interface TimelineItemData {\n id: string\n /** Timestamp label */\n time: string\n /** Title/headline of the event */\n title: string\n /** Description */\n description?: string\n /** Status indicator dot */\n status?: Status\n /** Optional icon to replace dot */\n icon?: ReactNode\n /** Optional metadata badges */\n meta?: string[]\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLDivElement> {\n /** Timeline events */\n items: TimelineItemData[]\n /** Whether items are active (show animated dot pulse) */\n active?: boolean\n /** Whether the timeline is loading */\n loading?: boolean\n}\n\nconst Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n ({ className, items, active, loading, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('tollerud-timeline', loading && 'animate-pulse', className)}\n role=\"list\"\n aria-label=\"Activity timeline\"\n {...props}\n >\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n\n return (\n <div key={item.id} className=\"tollerud-timeline__item\" role=\"listitem\">\n {/* Dot column */}\n <div className=\"tollerud-timeline__marker\">\n <div className=\"tollerud-timeline__dot-group\">\n {item.icon ? (\n <span className=\"tollerud-timeline__icon\">{item.icon}</span>\n ) : (\n <span\n className={cn(\n 'tollerud-timeline__dot',\n active && 'tollerud-timeline__dot--active',\n item.status === 'online' && 'tollerud-timeline__dot--online',\n item.status === 'offline' && 'tollerud-timeline__dot--offline',\n item.status === 'warning' && 'tollerud-timeline__dot--warning',\n item.status === 'idle' && 'tollerud-timeline__dot--idle'\n )}\n />\n )}\n {!isLast && <div className=\"tollerud-timeline__line\" />}\n </div>\n </div>\n\n {/* Content */}\n <div className=\"tollerud-timeline__content\">\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"tollerud-timeline__title\">{item.title}</span>\n <span className=\"tollerud-timeline__time\">{item.time}</span>\n </div>\n {item.description && (\n <p className=\"tollerud-timeline__description\">{item.description}</p>\n )}\n {item.meta && item.meta.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {item.meta.map((m) => (\n <span key={m} className=\"tollerud-timeline__meta\">{m}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n)\nTimeline.displayName = 'Timeline'\n\nexport { Timeline }"]}