@desbug/ultra-ui 0.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 (379) hide show
  1. package/README.md +203 -0
  2. package/dist/components/blocks/activity-feed-card.d.ts +25 -0
  3. package/dist/components/blocks/activity-feed-card.d.ts.map +1 -0
  4. package/dist/components/blocks/activity-feed-card.js +13 -0
  5. package/dist/components/blocks/activity-feed-card.js.map +1 -0
  6. package/dist/components/blocks/bar-breakdown-card.d.ts +34 -0
  7. package/dist/components/blocks/bar-breakdown-card.d.ts.map +1 -0
  8. package/dist/components/blocks/bar-breakdown-card.js +24 -0
  9. package/dist/components/blocks/bar-breakdown-card.js.map +1 -0
  10. package/dist/components/blocks/block-card.d.ts +39 -0
  11. package/dist/components/blocks/block-card.d.ts.map +1 -0
  12. package/dist/components/blocks/block-card.js +14 -0
  13. package/dist/components/blocks/block-card.js.map +1 -0
  14. package/dist/components/blocks/callout-card.d.ts +20 -0
  15. package/dist/components/blocks/callout-card.d.ts.map +1 -0
  16. package/dist/components/blocks/callout-card.js +12 -0
  17. package/dist/components/blocks/callout-card.js.map +1 -0
  18. package/dist/components/blocks/donut-card.d.ts +28 -0
  19. package/dist/components/blocks/donut-card.d.ts.map +1 -0
  20. package/dist/components/blocks/donut-card.js +24 -0
  21. package/dist/components/blocks/donut-card.js.map +1 -0
  22. package/dist/components/blocks/file-list-card.d.ts +21 -0
  23. package/dist/components/blocks/file-list-card.d.ts.map +1 -0
  24. package/dist/components/blocks/file-list-card.js +12 -0
  25. package/dist/components/blocks/file-list-card.js.map +1 -0
  26. package/dist/components/blocks/funnel-card.d.ts +19 -0
  27. package/dist/components/blocks/funnel-card.d.ts.map +1 -0
  28. package/dist/components/blocks/funnel-card.js +18 -0
  29. package/dist/components/blocks/funnel-card.js.map +1 -0
  30. package/dist/components/blocks/gauge-card.d.ts +20 -0
  31. package/dist/components/blocks/gauge-card.d.ts.map +1 -0
  32. package/dist/components/blocks/gauge-card.js +12 -0
  33. package/dist/components/blocks/gauge-card.js.map +1 -0
  34. package/dist/components/blocks/index.d.ts +21 -0
  35. package/dist/components/blocks/index.d.ts.map +1 -0
  36. package/dist/components/blocks/index.js +24 -0
  37. package/dist/components/blocks/index.js.map +1 -0
  38. package/dist/components/blocks/kpi-card.d.ts +18 -0
  39. package/dist/components/blocks/kpi-card.d.ts.map +1 -0
  40. package/dist/components/blocks/kpi-card.js +11 -0
  41. package/dist/components/blocks/kpi-card.js.map +1 -0
  42. package/dist/components/blocks/palette.d.ts +9 -0
  43. package/dist/components/blocks/palette.d.ts.map +1 -0
  44. package/dist/components/blocks/palette.js +20 -0
  45. package/dist/components/blocks/palette.js.map +1 -0
  46. package/dist/components/blocks/progress-list-card.d.ts +29 -0
  47. package/dist/components/blocks/progress-list-card.d.ts.map +1 -0
  48. package/dist/components/blocks/progress-list-card.js +19 -0
  49. package/dist/components/blocks/progress-list-card.js.map +1 -0
  50. package/dist/components/blocks/radar-stats-card.d.ts +18 -0
  51. package/dist/components/blocks/radar-stats-card.d.ts.map +1 -0
  52. package/dist/components/blocks/radar-stats-card.js +10 -0
  53. package/dist/components/blocks/radar-stats-card.js.map +1 -0
  54. package/dist/components/blocks/ranking-list-card.d.ts +25 -0
  55. package/dist/components/blocks/ranking-list-card.d.ts.map +1 -0
  56. package/dist/components/blocks/ranking-list-card.js +10 -0
  57. package/dist/components/blocks/ranking-list-card.js.map +1 -0
  58. package/dist/components/blocks/spark-stat-card.d.ts +22 -0
  59. package/dist/components/blocks/spark-stat-card.d.ts.map +1 -0
  60. package/dist/components/blocks/spark-stat-card.js +10 -0
  61. package/dist/components/blocks/spark-stat-card.js.map +1 -0
  62. package/dist/components/blocks/steps-card.d.ts +17 -0
  63. package/dist/components/blocks/steps-card.d.ts.map +1 -0
  64. package/dist/components/blocks/steps-card.js +16 -0
  65. package/dist/components/blocks/steps-card.js.map +1 -0
  66. package/dist/components/blocks/team-list-card.d.ts +21 -0
  67. package/dist/components/blocks/team-list-card.d.ts.map +1 -0
  68. package/dist/components/blocks/team-list-card.js +9 -0
  69. package/dist/components/blocks/team-list-card.js.map +1 -0
  70. package/dist/components/blocks/timeline-card.d.ts +19 -0
  71. package/dist/components/blocks/timeline-card.d.ts.map +1 -0
  72. package/dist/components/blocks/timeline-card.js +13 -0
  73. package/dist/components/blocks/timeline-card.js.map +1 -0
  74. package/dist/components/blocks/todo-list-card.d.ts +21 -0
  75. package/dist/components/blocks/todo-list-card.d.ts.map +1 -0
  76. package/dist/components/blocks/todo-list-card.js +11 -0
  77. package/dist/components/blocks/todo-list-card.js.map +1 -0
  78. package/dist/components/blocks/trend-chart-card.d.ts +33 -0
  79. package/dist/components/blocks/trend-chart-card.d.ts.map +1 -0
  80. package/dist/components/blocks/trend-chart-card.js +13 -0
  81. package/dist/components/blocks/trend-chart-card.js.map +1 -0
  82. package/dist/components/shared/avatar-stack.d.ts +17 -0
  83. package/dist/components/shared/avatar-stack.d.ts.map +1 -0
  84. package/dist/components/shared/avatar-stack.js +10 -0
  85. package/dist/components/shared/avatar-stack.js.map +1 -0
  86. package/dist/components/shared/avatar-with-name.d.ts +15 -0
  87. package/dist/components/shared/avatar-with-name.d.ts.map +1 -0
  88. package/dist/components/shared/avatar-with-name.js +8 -0
  89. package/dist/components/shared/avatar-with-name.js.map +1 -0
  90. package/dist/components/shared/chart-card.d.ts +20 -0
  91. package/dist/components/shared/chart-card.d.ts.map +1 -0
  92. package/dist/components/shared/chart-card.js +8 -0
  93. package/dist/components/shared/chart-card.js.map +1 -0
  94. package/dist/components/shared/data-table-cells.d.ts +35 -0
  95. package/dist/components/shared/data-table-cells.d.ts.map +1 -0
  96. package/dist/components/shared/data-table-cells.js +37 -0
  97. package/dist/components/shared/data-table-cells.js.map +1 -0
  98. package/dist/components/shared/data-table-column-manager.d.ts +25 -0
  99. package/dist/components/shared/data-table-column-manager.d.ts.map +1 -0
  100. package/dist/components/shared/data-table-column-manager.js +88 -0
  101. package/dist/components/shared/data-table-column-manager.js.map +1 -0
  102. package/dist/components/shared/data-table-pagination.d.ts +11 -0
  103. package/dist/components/shared/data-table-pagination.d.ts.map +1 -0
  104. package/dist/components/shared/data-table-pagination.js +24 -0
  105. package/dist/components/shared/data-table-pagination.js.map +1 -0
  106. package/dist/components/shared/data-table-toolbar.d.ts +15 -0
  107. package/dist/components/shared/data-table-toolbar.d.ts.map +1 -0
  108. package/dist/components/shared/data-table-toolbar.js +14 -0
  109. package/dist/components/shared/data-table-toolbar.js.map +1 -0
  110. package/dist/components/shared/data-table.d.ts +49 -0
  111. package/dist/components/shared/data-table.d.ts.map +1 -0
  112. package/dist/components/shared/data-table.js +56 -0
  113. package/dist/components/shared/data-table.js.map +1 -0
  114. package/dist/components/shared/empty-state.d.ts +14 -0
  115. package/dist/components/shared/empty-state.d.ts.map +1 -0
  116. package/dist/components/shared/empty-state.js +7 -0
  117. package/dist/components/shared/empty-state.js.map +1 -0
  118. package/dist/components/shared/github-link.d.ts +16 -0
  119. package/dist/components/shared/github-link.d.ts.map +1 -0
  120. package/dist/components/shared/github-link.js +15 -0
  121. package/dist/components/shared/github-link.js.map +1 -0
  122. package/dist/components/shared/gradient-def.d.ts +23 -0
  123. package/dist/components/shared/gradient-def.d.ts.map +1 -0
  124. package/dist/components/shared/gradient-def.js +13 -0
  125. package/dist/components/shared/gradient-def.js.map +1 -0
  126. package/dist/components/shared/header-actions-menu.d.ts +12 -0
  127. package/dist/components/shared/header-actions-menu.d.ts.map +1 -0
  128. package/dist/components/shared/header-actions-menu.js +11 -0
  129. package/dist/components/shared/header-actions-menu.js.map +1 -0
  130. package/dist/components/shared/header-search.d.ts +12 -0
  131. package/dist/components/shared/header-search.d.ts.map +1 -0
  132. package/dist/components/shared/header-search.js +10 -0
  133. package/dist/components/shared/header-search.js.map +1 -0
  134. package/dist/components/shared/index.d.ts +23 -0
  135. package/dist/components/shared/index.d.ts.map +1 -0
  136. package/dist/components/shared/index.js +27 -0
  137. package/dist/components/shared/index.js.map +1 -0
  138. package/dist/components/shared/messages-menu.d.ts +16 -0
  139. package/dist/components/shared/messages-menu.d.ts.map +1 -0
  140. package/dist/components/shared/messages-menu.js +12 -0
  141. package/dist/components/shared/messages-menu.js.map +1 -0
  142. package/dist/components/shared/notifications-menu.d.ts +18 -0
  143. package/dist/components/shared/notifications-menu.d.ts.map +1 -0
  144. package/dist/components/shared/notifications-menu.js +12 -0
  145. package/dist/components/shared/notifications-menu.js.map +1 -0
  146. package/dist/components/shared/page-header.d.ts +25 -0
  147. package/dist/components/shared/page-header.d.ts.map +1 -0
  148. package/dist/components/shared/page-header.js +13 -0
  149. package/dist/components/shared/page-header.js.map +1 -0
  150. package/dist/components/shared/progress-bar.d.ts +16 -0
  151. package/dist/components/shared/progress-bar.d.ts.map +1 -0
  152. package/dist/components/shared/progress-bar.js +8 -0
  153. package/dist/components/shared/progress-bar.js.map +1 -0
  154. package/dist/components/shared/section-card.d.ts +18 -0
  155. package/dist/components/shared/section-card.d.ts.map +1 -0
  156. package/dist/components/shared/section-card.js +8 -0
  157. package/dist/components/shared/section-card.js.map +1 -0
  158. package/dist/components/shared/series-chart.d.ts +49 -0
  159. package/dist/components/shared/series-chart.d.ts.map +1 -0
  160. package/dist/components/shared/series-chart.js +29 -0
  161. package/dist/components/shared/series-chart.js.map +1 -0
  162. package/dist/components/shared/stat-card.d.ts +32 -0
  163. package/dist/components/shared/stat-card.d.ts.map +1 -0
  164. package/dist/components/shared/stat-card.js +18 -0
  165. package/dist/components/shared/stat-card.js.map +1 -0
  166. package/dist/components/shared/stats-grid.d.ts +21 -0
  167. package/dist/components/shared/stats-grid.d.ts.map +1 -0
  168. package/dist/components/shared/stats-grid.js +19 -0
  169. package/dist/components/shared/stats-grid.js.map +1 -0
  170. package/dist/components/shared/status-badge.d.ts +26 -0
  171. package/dist/components/shared/status-badge.d.ts.map +1 -0
  172. package/dist/components/shared/status-badge.js +95 -0
  173. package/dist/components/shared/status-badge.js.map +1 -0
  174. package/dist/components/ui/accordion.d.ts +8 -0
  175. package/dist/components/ui/accordion.d.ts.map +1 -0
  176. package/dist/components/ui/accordion.js +19 -0
  177. package/dist/components/ui/accordion.js.map +1 -0
  178. package/dist/components/ui/alert-dialog.d.ts +19 -0
  179. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  180. package/dist/components/ui/alert-dialog.js +43 -0
  181. package/dist/components/ui/alert-dialog.js.map +1 -0
  182. package/dist/components/ui/alert.d.ts +11 -0
  183. package/dist/components/ui/alert.d.ts.map +1 -0
  184. package/dist/components/ui/alert.js +28 -0
  185. package/dist/components/ui/alert.js.map +1 -0
  186. package/dist/components/ui/aspect-ratio.d.ts +4 -0
  187. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  188. package/dist/components/ui/aspect-ratio.js +8 -0
  189. package/dist/components/ui/aspect-ratio.js.map +1 -0
  190. package/dist/components/ui/avatar.d.ts +12 -0
  191. package/dist/components/ui/avatar.d.ts.map +1 -0
  192. package/dist/components/ui/avatar.js +24 -0
  193. package/dist/components/ui/avatar.js.map +1 -0
  194. package/dist/components/ui/badge.d.ts +10 -0
  195. package/dist/components/ui/badge.d.ts.map +1 -0
  196. package/dist/components/ui/badge.js +25 -0
  197. package/dist/components/ui/badge.js.map +1 -0
  198. package/dist/components/ui/breadcrumb.d.ts +12 -0
  199. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  200. package/dist/components/ui/breadcrumb.js +28 -0
  201. package/dist/components/ui/breadcrumb.js.map +1 -0
  202. package/dist/components/ui/button.d.ts +11 -0
  203. package/dist/components/ui/button.d.ts.map +1 -0
  204. package/dist/components/ui/button.js +36 -0
  205. package/dist/components/ui/button.js.map +1 -0
  206. package/dist/components/ui/calendar.d.ts +11 -0
  207. package/dist/components/ui/calendar.d.ts.map +1 -0
  208. package/dist/components/ui/calendar.js +77 -0
  209. package/dist/components/ui/calendar.js.map +1 -0
  210. package/dist/components/ui/card.d.ts +12 -0
  211. package/dist/components/ui/card.d.ts.map +1 -0
  212. package/dist/components/ui/card.js +25 -0
  213. package/dist/components/ui/card.js.map +1 -0
  214. package/dist/components/ui/carousel.d.ts +29 -0
  215. package/dist/components/ui/carousel.d.ts.map +1 -0
  216. package/dist/components/ui/carousel.js +92 -0
  217. package/dist/components/ui/carousel.js.map +1 -0
  218. package/dist/components/ui/chart.d.ts +45 -0
  219. package/dist/components/ui/chart.d.ts.map +1 -0
  220. package/dist/components/ui/chart.js +133 -0
  221. package/dist/components/ui/chart.js.map +1 -0
  222. package/dist/components/ui/checkbox.d.ts +5 -0
  223. package/dist/components/ui/checkbox.d.ts.map +1 -0
  224. package/dist/components/ui/checkbox.js +10 -0
  225. package/dist/components/ui/checkbox.js.map +1 -0
  226. package/dist/components/ui/collapsible.d.ts +6 -0
  227. package/dist/components/ui/collapsible.d.ts.map +1 -0
  228. package/dist/components/ui/collapsible.js +14 -0
  229. package/dist/components/ui/collapsible.js.map +1 -0
  230. package/dist/components/ui/command.d.ts +19 -0
  231. package/dist/components/ui/command.d.ts.map +1 -0
  232. package/dist/components/ui/command.js +36 -0
  233. package/dist/components/ui/command.js.map +1 -0
  234. package/dist/components/ui/context-menu.d.ts +32 -0
  235. package/dist/components/ui/context-menu.d.ts.map +1 -0
  236. package/dist/components/ui/context-menu.js +52 -0
  237. package/dist/components/ui/context-menu.js.map +1 -0
  238. package/dist/components/ui/dialog.d.ts +18 -0
  239. package/dist/components/ui/dialog.d.ts.map +1 -0
  240. package/dist/components/ui/dialog.js +38 -0
  241. package/dist/components/ui/dialog.js.map +1 -0
  242. package/dist/components/ui/drawer.d.ts +14 -0
  243. package/dist/components/ui/drawer.d.ts.map +1 -0
  244. package/dist/components/ui/drawer.js +36 -0
  245. package/dist/components/ui/drawer.js.map +1 -0
  246. package/dist/components/ui/dropdown-menu.d.ts +30 -0
  247. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  248. package/dist/components/ui/dropdown-menu.js +52 -0
  249. package/dist/components/ui/dropdown-menu.js.map +1 -0
  250. package/dist/components/ui/form.d.ts +25 -0
  251. package/dist/components/ui/form.d.ts.map +1 -0
  252. package/dist/components/ui/form.js +60 -0
  253. package/dist/components/ui/form.js.map +1 -0
  254. package/dist/components/ui/hover-card.d.ts +7 -0
  255. package/dist/components/ui/hover-card.d.ts.map +1 -0
  256. package/dist/components/ui/hover-card.js +15 -0
  257. package/dist/components/ui/hover-card.js.map +1 -0
  258. package/dist/components/ui/input-group.d.ts +17 -0
  259. package/dist/components/ui/input-group.d.ts.map +1 -0
  260. package/dist/components/ui/input-group.js +58 -0
  261. package/dist/components/ui/input-group.js.map +1 -0
  262. package/dist/components/ui/input-otp.d.ts +12 -0
  263. package/dist/components/ui/input-otp.d.ts.map +1 -0
  264. package/dist/components/ui/input-otp.js +22 -0
  265. package/dist/components/ui/input-otp.js.map +1 -0
  266. package/dist/components/ui/input.d.ts +4 -0
  267. package/dist/components/ui/input.d.ts.map +1 -0
  268. package/dist/components/ui/input.js +7 -0
  269. package/dist/components/ui/input.js.map +1 -0
  270. package/dist/components/ui/kbd.d.ts +4 -0
  271. package/dist/components/ui/kbd.d.ts.map +1 -0
  272. package/dist/components/ui/kbd.js +10 -0
  273. package/dist/components/ui/kbd.js.map +1 -0
  274. package/dist/components/ui/label.d.ts +5 -0
  275. package/dist/components/ui/label.d.ts.map +1 -0
  276. package/dist/components/ui/label.js +9 -0
  277. package/dist/components/ui/label.js.map +1 -0
  278. package/dist/components/ui/menubar.d.ts +31 -0
  279. package/dist/components/ui/menubar.d.ts.map +1 -0
  280. package/dist/components/ui/menubar.js +55 -0
  281. package/dist/components/ui/menubar.js.map +1 -0
  282. package/dist/components/ui/navigation-menu.d.ts +15 -0
  283. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  284. package/dist/components/ui/navigation-menu.js +32 -0
  285. package/dist/components/ui/navigation-menu.js.map +1 -0
  286. package/dist/components/ui/pagination.d.ts +18 -0
  287. package/dist/components/ui/pagination.d.ts.map +1 -0
  288. package/dist/components/ui/pagination.js +27 -0
  289. package/dist/components/ui/pagination.js.map +1 -0
  290. package/dist/components/ui/popover.d.ts +11 -0
  291. package/dist/components/ui/popover.d.ts.map +1 -0
  292. package/dist/components/ui/popover.js +27 -0
  293. package/dist/components/ui/popover.js.map +1 -0
  294. package/dist/components/ui/progress.d.ts +5 -0
  295. package/dist/components/ui/progress.d.ts.map +1 -0
  296. package/dist/components/ui/progress.js +9 -0
  297. package/dist/components/ui/progress.js.map +1 -0
  298. package/dist/components/ui/radio-group.d.ts +6 -0
  299. package/dist/components/ui/radio-group.d.ts.map +1 -0
  300. package/dist/components/ui/radio-group.js +12 -0
  301. package/dist/components/ui/radio-group.js.map +1 -0
  302. package/dist/components/ui/resizable.d.ts +8 -0
  303. package/dist/components/ui/resizable.d.ts.map +1 -0
  304. package/dist/components/ui/resizable.js +15 -0
  305. package/dist/components/ui/resizable.js.map +1 -0
  306. package/dist/components/ui/scroll-area.d.ts +6 -0
  307. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  308. package/dist/components/ui/scroll-area.js +12 -0
  309. package/dist/components/ui/scroll-area.js.map +1 -0
  310. package/dist/components/ui/select.d.ts +16 -0
  311. package/dist/components/ui/select.d.ts.map +1 -0
  312. package/dist/components/ui/select.js +37 -0
  313. package/dist/components/ui/select.js.map +1 -0
  314. package/dist/components/ui/separator.d.ts +5 -0
  315. package/dist/components/ui/separator.d.ts.map +1 -0
  316. package/dist/components/ui/separator.js +9 -0
  317. package/dist/components/ui/separator.js.map +1 -0
  318. package/dist/components/ui/sheet.d.ts +15 -0
  319. package/dist/components/ui/sheet.d.ts.map +1 -0
  320. package/dist/components/ui/sheet.js +38 -0
  321. package/dist/components/ui/sheet.js.map +1 -0
  322. package/dist/components/ui/sidebar.d.ts +70 -0
  323. package/dist/components/ui/sidebar.d.ts.map +1 -0
  324. package/dist/components/ui/sidebar.js +207 -0
  325. package/dist/components/ui/sidebar.js.map +1 -0
  326. package/dist/components/ui/skeleton.d.ts +3 -0
  327. package/dist/components/ui/skeleton.d.ts.map +1 -0
  328. package/dist/components/ui/skeleton.js +7 -0
  329. package/dist/components/ui/skeleton.js.map +1 -0
  330. package/dist/components/ui/slider.d.ts +5 -0
  331. package/dist/components/ui/slider.d.ts.map +1 -0
  332. package/dist/components/ui/slider.js +15 -0
  333. package/dist/components/ui/slider.js.map +1 -0
  334. package/dist/components/ui/sonner.d.ts +4 -0
  335. package/dist/components/ui/sonner.d.ts.map +1 -0
  336. package/dist/components/ui/sonner.js +26 -0
  337. package/dist/components/ui/sonner.js.map +1 -0
  338. package/dist/components/ui/switch.d.ts +7 -0
  339. package/dist/components/ui/switch.d.ts.map +1 -0
  340. package/dist/components/ui/switch.js +9 -0
  341. package/dist/components/ui/switch.js.map +1 -0
  342. package/dist/components/ui/table.d.ts +11 -0
  343. package/dist/components/ui/table.d.ts.map +1 -0
  344. package/dist/components/ui/table.js +29 -0
  345. package/dist/components/ui/table.js.map +1 -0
  346. package/dist/components/ui/tabs.d.ts +12 -0
  347. package/dist/components/ui/tabs.d.ts.map +1 -0
  348. package/dist/components/ui/tabs.js +30 -0
  349. package/dist/components/ui/tabs.js.map +1 -0
  350. package/dist/components/ui/textarea.d.ts +4 -0
  351. package/dist/components/ui/textarea.d.ts.map +1 -0
  352. package/dist/components/ui/textarea.js +7 -0
  353. package/dist/components/ui/textarea.js.map +1 -0
  354. package/dist/components/ui/toggle-group.d.ts +11 -0
  355. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  356. package/dist/components/ui/toggle-group.js +24 -0
  357. package/dist/components/ui/toggle-group.js.map +1 -0
  358. package/dist/components/ui/toggle.d.ts +10 -0
  359. package/dist/components/ui/toggle.d.ts.map +1 -0
  360. package/dist/components/ui/toggle.js +27 -0
  361. package/dist/components/ui/toggle.js.map +1 -0
  362. package/dist/components/ui/tooltip.d.ts +8 -0
  363. package/dist/components/ui/tooltip.d.ts.map +1 -0
  364. package/dist/components/ui/tooltip.js +18 -0
  365. package/dist/components/ui/tooltip.js.map +1 -0
  366. package/dist/hooks/use-mobile.d.ts +2 -0
  367. package/dist/hooks/use-mobile.d.ts.map +1 -0
  368. package/dist/hooks/use-mobile.js +16 -0
  369. package/dist/hooks/use-mobile.js.map +1 -0
  370. package/dist/index.d.ts +53 -0
  371. package/dist/index.d.ts.map +1 -0
  372. package/dist/index.js +57 -0
  373. package/dist/index.js.map +1 -0
  374. package/dist/lib/utils.d.ts +3 -0
  375. package/dist/lib/utils.d.ts.map +1 -0
  376. package/dist/lib/utils.js +6 -0
  377. package/dist/lib/utils.js.map +1 -0
  378. package/dist/styles.css +240 -0
  379. package/package.json +67 -0
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ export interface GaugeCardProps {
3
+ title?: React.ReactNode;
4
+ icon?: React.ElementType;
5
+ actions?: React.ReactNode;
6
+ /** Percentage 0–100. */
7
+ value: number;
8
+ /** Arc color (CSS color). Defaults to the primary token. */
9
+ color?: string;
10
+ /** Center label under the percentage (e.g. "Completed"). */
11
+ label?: React.ReactNode;
12
+ /** Override the big center text (defaults to `${value}%`). */
13
+ centerValue?: React.ReactNode;
14
+ /** Chart box height (default `h-[200px]`). */
15
+ height?: string;
16
+ className?: string;
17
+ }
18
+ /** Single-value radial gauge (goal completion, capacity, score…). */
19
+ export declare function GaugeCard({ title, icon, actions, value, color, label, centerValue, height, className, }: GaugeCardProps): React.JSX.Element;
20
+ //# sourceMappingURL=gauge-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/gauge-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAwB,EACxB,KAAK,EACL,WAAW,EACX,MAAoB,EACpB,SAAS,GACV,EAAE,cAAc,qBA4ChB"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { PolarAngleAxis, RadialBar, RadialBarChart, ResponsiveContainer, } from "recharts";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { BlockCard } from "./block-card.js";
6
+ /** Single-value radial gauge (goal completion, capacity, score…). */
7
+ export function GaugeCard({ title, icon, actions, value, color = "var(--primary)", label, centerValue, height = "h-[200px]", className, }) {
8
+ const pct = Math.max(0, Math.min(100, value));
9
+ const data = [{ name: "value", value: pct, fill: color }];
10
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsxs("div", { className: cn("relative w-full", height), children: [_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RadialBarChart, { data: data, innerRadius: "72%", outerRadius: "100%", startAngle: 90, endAngle: -270, children: [_jsx(PolarAngleAxis, { type: "number", domain: [0, 100], tick: false, axisLine: false }), _jsx(RadialBar, { dataKey: "value", background: { fill: "var(--muted)" }, cornerRadius: 999 })] }) }), _jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center", children: [_jsx("span", { className: "text-2xl font-semibold tracking-tight sm:text-3xl", children: centerValue ?? `${Math.round(pct)}%` }), label && (_jsx("span", { className: "text-xs text-muted-foreground", children: label }))] })] }) }));
11
+ }
12
+ //# sourceMappingURL=gauge-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gauge-card.js","sourceRoot":"","sources":["../../../src/components/blocks/gauge-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,cAAc,EACd,SAAS,EACT,cAAc,EACd,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmBzC,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,GAAG,gBAAgB,EACxB,KAAK,EACL,WAAW,EACX,MAAM,GAAG,WAAW,EACpB,SAAS,GACM;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1D,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,eAAK,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,aAC3C,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,MAAC,cAAc,IACb,IAAI,EAAE,IAAI,EACV,WAAW,EAAC,KAAK,EACjB,WAAW,EAAC,MAAM,EAClB,UAAU,EAAE,EAAE,EACd,QAAQ,EAAE,CAAC,GAAG,aAEd,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAChB,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,KAAK,GACf,EACF,KAAC,SAAS,IACR,OAAO,EAAC,OAAO,EACf,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EACpC,YAAY,EAAE,GAAG,GACjB,IACa,GACG,EACtB,eAAK,SAAS,EAAC,gFAAgF,aAC7F,eAAM,SAAS,EAAC,mDAAmD,YAChE,WAAW,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAChC,EACN,KAAK,IAAI,CACR,eAAM,SAAS,EAAC,+BAA+B,YAAE,KAAK,GAAQ,CAC/D,IACG,IACF,GACI,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ export * from "./block-card.js";
2
+ export * from "./palette.js";
3
+ export * from "./bar-breakdown-card.js";
4
+ export * from "./progress-list-card.js";
5
+ export * from "./trend-chart-card.js";
6
+ export * from "./donut-card.js";
7
+ export * from "./gauge-card.js";
8
+ export * from "./spark-stat-card.js";
9
+ export * from "./activity-feed-card.js";
10
+ export * from "./ranking-list-card.js";
11
+ export * from "./kpi-card.js";
12
+ export * from "./timeline-card.js";
13
+ export * from "./todo-list-card.js";
14
+ export * from "./team-list-card.js";
15
+ export * from "./funnel-card.js";
16
+ export * from "./radar-stats-card.js";
17
+ export * from "./callout-card.js";
18
+ export * from "./file-list-card.js";
19
+ export * from "./steps-card.js";
20
+ export { StatsGrid as StatsRow } from "../../components/shared/index.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAI7B,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,24 @@
1
+ // Pre-assembled, data-driven dashboard blocks built on the design system.
2
+ export * from "./block-card.js";
3
+ export * from "./palette.js";
4
+ export * from "./bar-breakdown-card.js";
5
+ export * from "./progress-list-card.js";
6
+ export * from "./trend-chart-card.js";
7
+ export * from "./donut-card.js";
8
+ export * from "./gauge-card.js";
9
+ export * from "./spark-stat-card.js";
10
+ export * from "./activity-feed-card.js";
11
+ export * from "./ranking-list-card.js";
12
+ export * from "./kpi-card.js";
13
+ export * from "./timeline-card.js";
14
+ export * from "./todo-list-card.js";
15
+ export * from "./team-list-card.js";
16
+ export * from "./funnel-card.js";
17
+ export * from "./radar-stats-card.js";
18
+ export * from "./callout-card.js";
19
+ export * from "./file-list-card.js";
20
+ export * from "./steps-card.js";
21
+ // The 4-up stats row (photo 1) is the existing StatsGrid; re-exported here as a
22
+ // turnkey block name.
23
+ export { StatsGrid as StatsRow } from "../../components/shared/index.js";
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/blocks/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,gFAAgF;AAChF,sBAAsB;AACtB,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ import { type StatusTone } from "../../components/shared/index.js";
3
+ export interface KpiCardProps {
4
+ title: React.ReactNode;
5
+ value: React.ReactNode;
6
+ icon?: React.ElementType;
7
+ /** Tint for the icon bubble. */
8
+ tone?: StatusTone;
9
+ /** e.g. "+12%". Color auto-derives from the sign. */
10
+ change?: string;
11
+ trend?: "up" | "down";
12
+ /** Small muted text after the change (e.g. "vs last week"). */
13
+ hint?: React.ReactNode;
14
+ className?: string;
15
+ }
16
+ /** Compact KPI tile: tinted icon bubble + label + big value + delta. */
17
+ export declare function KpiCard({ title, value, icon: Icon, tone, change, trend, hint, className, }: KpiCardProps): React.JSX.Element;
18
+ //# sourceMappingURL=kpi-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/kpi-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,gCAAgC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,IAAa,EACb,MAAM,EACN,KAAK,EACL,IAAI,EACJ,SAAS,GACV,EAAE,YAAY,qBA6Cd"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { toneSoft } from "../../components/shared/index.js";
4
+ /** Compact KPI tile: tinted icon bubble + label + big value + delta. */
5
+ export function KpiCard({ title, value, icon: Icon, tone = "gray", change, trend, hint, className, }) {
6
+ const positive = trend ? trend === "up" : !change?.trim().startsWith("-");
7
+ return (_jsxs("div", { className: cn("flex items-center gap-4 rounded-xl border bg-card p-5 text-card-foreground", className), children: [Icon && (_jsx("span", { className: cn("flex size-11 shrink-0 items-center justify-center rounded-xl", toneSoft[tone]), children: _jsx(Icon, { className: "size-5" }) })), _jsxs("div", { className: "min-w-0 space-y-1", children: [_jsx("p", { className: "truncate text-xs font-medium text-muted-foreground sm:text-sm", children: title }), _jsx("p", { className: "text-xl font-semibold tracking-tight sm:text-2xl", children: value }), (change || hint) && (_jsxs("p", { className: "flex items-center gap-1.5 text-xs font-medium", children: [change && (_jsx("span", { className: positive
8
+ ? "text-emerald-600 dark:text-emerald-400"
9
+ : "text-red-600 dark:text-red-400", children: change })), hint && _jsx("span", { className: "text-muted-foreground", children: hint })] }))] })] }));
10
+ }
11
+ //# sourceMappingURL=kpi-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-card.js","sourceRoot":"","sources":["../../../src/components/blocks/kpi-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAgBhE,wEAAwE;AACxE,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,IAAI,GAAG,MAAM,EACb,MAAM,EACN,KAAK,EACL,IAAI,EACJ,SAAS,GACI;IACb,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1E,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,4EAA4E,EAC5E,SAAS,CACV,aAEA,IAAI,IAAI,CACP,eACE,SAAS,EAAE,EAAE,CACX,8DAA8D,EAC9D,QAAQ,CAAC,IAAI,CAAC,CACf,YAED,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,GAAG,GACtB,CACR,EACD,eAAK,SAAS,EAAC,mBAAmB,aAChC,YAAG,SAAS,EAAC,+DAA+D,YACzE,KAAK,GACJ,EACJ,YAAG,SAAS,EAAC,kDAAkD,YAC5D,KAAK,GACJ,EACH,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CACnB,aAAG,SAAS,EAAC,+CAA+C,aACzD,MAAM,IAAI,CACT,eACE,SAAS,EACP,QAAQ;oCACN,CAAC,CAAC,wCAAwC;oCAC1C,CAAC,CAAC,gCAAgC,YAGrC,MAAM,GACF,CACR,EACA,IAAI,IAAI,eAAM,SAAS,EAAC,uBAAuB,YAAE,IAAI,GAAQ,IAC5D,CACL,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Default categorical palette (the blue → purple ramp used by the Square UI
3
+ * breakdown widgets). Blocks fall back to this when an item has no explicit
4
+ * color. Override per item or pass your own colors.
5
+ */
6
+ export declare const chartPalette: readonly ["#375dfb", "#6985fc", "#9baefd", "#7f69fc", "#aa9bfd", "#b069fc", "#cabffd", "#3559e9"];
7
+ /** Pick a palette color by index (wraps around). */
8
+ export declare function paletteColor(index: number): string;
9
+ //# sourceMappingURL=palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/palette.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,mGASf,CAAC;AAEX,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Default categorical palette (the blue → purple ramp used by the Square UI
3
+ * breakdown widgets). Blocks fall back to this when an item has no explicit
4
+ * color. Override per item or pass your own colors.
5
+ */
6
+ export const chartPalette = [
7
+ "#375dfb",
8
+ "#6985fc",
9
+ "#9baefd",
10
+ "#7f69fc",
11
+ "#aa9bfd",
12
+ "#b069fc",
13
+ "#cabffd",
14
+ "#3559e9",
15
+ ];
16
+ /** Pick a palette color by index (wraps around). */
17
+ export function paletteColor(index) {
18
+ return chartPalette[index % chartPalette.length];
19
+ }
20
+ //# sourceMappingURL=palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../src/components/blocks/palette.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACD,CAAC;AAEX,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ export interface ProgressListItem {
3
+ label: React.ReactNode;
4
+ value: number;
5
+ /** Denominator for the percentage; defaults to the largest value in the list. */
6
+ max?: number;
7
+ /** Fill color (CSS color); falls back to the primary token. */
8
+ color?: string;
9
+ /** Right-side text. Defaults to the value (or `${pct}%` when `showPercent`). */
10
+ hint?: React.ReactNode;
11
+ }
12
+ export interface ProgressListCardProps {
13
+ title?: React.ReactNode;
14
+ icon?: React.ElementType;
15
+ actions?: React.ReactNode;
16
+ items: ProgressListItem[];
17
+ /** Show "NN%" on the right instead of the raw value. */
18
+ showPercent?: boolean;
19
+ /** Bar height (default `h-2`). */
20
+ barHeight?: string;
21
+ formatValue?: (value: number) => string;
22
+ className?: string;
23
+ }
24
+ /**
25
+ * Vertical list of labeled progress bars (storage by type, budget usage, goal
26
+ * completion…). Each row: label + value on top, a themed track below.
27
+ */
28
+ export declare function ProgressListCard({ title, icon, actions, items, showPercent, barHeight, formatValue, className, }: ProgressListCardProps): React.JSX.Element;
29
+ //# sourceMappingURL=progress-list-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/progress-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAmB,EACnB,SAAiB,EACjB,WAA4B,EAC5B,SAAS,GACV,EAAE,qBAAqB,qBAmCvB"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { ProgressBar } from "../../components/shared/index.js";
4
+ import { BlockCard } from "./block-card.js";
5
+ const DEFAULT_FORMAT = (v) => v.toLocaleString();
6
+ /**
7
+ * Vertical list of labeled progress bars (storage by type, budget usage, goal
8
+ * completion…). Each row: label + value on top, a themed track below.
9
+ */
10
+ export function ProgressListCard({ title, icon, actions, items, showPercent = false, barHeight = "h-2", formatValue = DEFAULT_FORMAT, className, }) {
11
+ const fallbackMax = Math.max(...items.map((i) => i.value), 1);
12
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, bodyClassName: "space-y-4", children: items.map((item, i) => {
13
+ const max = item.max ?? fallbackMax;
14
+ const pct = Math.round((item.value / (max || 1)) * 100);
15
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 text-sm", children: [_jsx("span", { className: "truncate text-muted-foreground", children: item.label }), _jsx("span", { className: "shrink-0 font-medium tabular-nums", children: item.hint ??
16
+ (showPercent ? `${pct}%` : formatValue(item.value)) })] }), _jsx(ProgressBar, { value: pct, color: item.color, height: cn(barHeight) })] }, i));
17
+ }) }));
18
+ }
19
+ //# sourceMappingURL=progress-list-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/progress-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA0BzC,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,cAAc,EAC5B,SAAS,GACa;IACtB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9D,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACxD,OAAO,CACL,eAAa,SAAS,EAAC,aAAa,aAClC,eAAK,SAAS,EAAC,iDAAiD,aAC9D,eAAM,SAAS,EAAC,gCAAgC,YAC7C,IAAI,CAAC,KAAK,GACN,EACP,eAAM,SAAS,EAAC,mCAAmC,YAChD,IAAI,CAAC,IAAI;oCACR,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAChD,IACH,EACN,KAAC,WAAW,IACV,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GACrB,KAdM,CAAC,CAeL,CACP,CAAC;QACJ,CAAC,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ import type { ChartSeries } from "../../components/shared/index.js";
3
+ export interface RadarStatsCardProps {
4
+ title?: React.ReactNode;
5
+ icon?: React.ElementType;
6
+ actions?: React.ReactNode;
7
+ data: Array<Record<string, unknown>>;
8
+ /** Axis (category) key in `data`. */
9
+ axisKey: string;
10
+ /** One or more series to overlay. */
11
+ series: ChartSeries[];
12
+ /** Chart box height (default `h-[260px]`). */
13
+ height?: string;
14
+ className?: string;
15
+ }
16
+ /** Multi-axis radar — skills, scores, category strength comparisons. */
17
+ export declare function RadarStatsCard({ title, icon, actions, data, axisKey, series, height, className, }: RadarStatsCardProps): React.JSX.Element;
18
+ //# sourceMappingURL=radar-stats-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radar-stats-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/radar-stats-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAoB,EACpB,SAAS,GACV,EAAE,mBAAmB,qBAgCrB"}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { PolarAngleAxis, PolarGrid, Radar, RadarChart, ResponsiveContainer, } from "recharts";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { BlockCard } from "./block-card.js";
6
+ /** Multi-axis radar — skills, scores, category strength comparisons. */
7
+ export function RadarStatsCard({ title, icon, actions, data, axisKey, series, height = "h-[260px]", className, }) {
8
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsx("div", { className: cn("w-full", height), children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RadarChart, { data: data, outerRadius: "72%", children: [_jsx(PolarGrid, { stroke: "var(--border)" }), _jsx(PolarAngleAxis, { dataKey: axisKey, tick: { fontSize: 11, fill: "var(--muted-foreground)" } }), series.map((s) => (_jsx(Radar, { dataKey: s.key, name: s.label ?? s.key, stroke: s.color, fill: s.color, fillOpacity: 0.25, strokeWidth: 2 }, s.key)))] }) }) }) }));
9
+ }
10
+ //# sourceMappingURL=radar-stats-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radar-stats-card.js","sourceRoot":"","sources":["../../../src/components/blocks/radar-stats-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,cAAc,EACd,SAAS,EACT,KAAK,EACL,UAAU,EACV,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAgBzC,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAM,GAAG,WAAW,EACpB,SAAS,GACW;IACpB,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,cAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,YAClC,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,MAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAC,KAAK,aACvC,KAAC,SAAS,IAAC,MAAM,EAAC,eAAe,GAAG,EACpC,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,GACvD,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,KAAC,KAAK,IAEJ,OAAO,EAAE,CAAC,CAAC,GAAG,EACd,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EACtB,MAAM,EAAE,CAAC,CAAC,KAAK,EACf,IAAI,EAAE,CAAC,CAAC,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,WAAW,EAAE,CAAC,IANT,CAAC,CAAC,GAAG,CAOV,CACH,CAAC,IACS,GACO,GAClB,GACI,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ export interface RankingItem {
3
+ label: React.ReactNode;
4
+ value: React.ReactNode;
5
+ sublabel?: React.ReactNode;
6
+ /** Avatar URL — when set, replaces the rank number. */
7
+ avatar?: string;
8
+ fallback?: string;
9
+ /** 0–100; renders a thin progress bar under the row when provided. */
10
+ progress?: number;
11
+ /** Progress fill color. */
12
+ color?: string;
13
+ }
14
+ export interface RankingListCardProps {
15
+ title?: React.ReactNode;
16
+ icon?: React.ElementType;
17
+ actions?: React.ReactNode;
18
+ items: RankingItem[];
19
+ /** Show the numeric rank badge (1, 2, 3…). Default true when no avatars. */
20
+ showRank?: boolean;
21
+ className?: string;
22
+ }
23
+ /** Ranked "top N" list — rank badge or avatar, label, value, optional bar. */
24
+ export declare function RankingListCard({ title, icon, actions, items, showRank, className, }: RankingListCardProps): React.JSX.Element;
25
+ //# sourceMappingURL=ranking-list-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/ranking-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,qBAiDtB"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Avatar, AvatarFallback, AvatarImage } from "../../components/ui/avatar.js";
3
+ import { ProgressBar } from "../../components/shared/index.js";
4
+ import { BlockCard } from "./block-card.js";
5
+ /** Ranked "top N" list — rank badge or avatar, label, value, optional bar. */
6
+ export function RankingListCard({ title, icon, actions, items, showRank, className, }) {
7
+ const useRank = showRank ?? !items.some((i) => i.avatar);
8
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, bodyClassName: "space-y-4", children: items.map((item, i) => (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center gap-3", children: [useRank ? (_jsx("span", { className: "flex size-6 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-semibold text-muted-foreground", children: i + 1 })) : (_jsxs(Avatar, { className: "size-7 shrink-0", children: [item.avatar && _jsx(AvatarImage, { src: item.avatar, alt: "" }), _jsx(AvatarFallback, { className: "bg-muted text-xs", children: item.fallback ?? "•" })] })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: item.label }), item.sublabel && (_jsx("p", { className: "truncate text-xs text-muted-foreground", children: item.sublabel }))] }), _jsx("span", { className: "shrink-0 text-sm font-semibold tabular-nums", children: item.value })] }), typeof item.progress === "number" && (_jsx(ProgressBar, { value: item.progress, color: item.color, height: "h-1.5" }))] }, i))) }));
9
+ }
10
+ //# sourceMappingURL=ranking-list-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/ranking-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAyBzC,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACY;IACrB,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEzD,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,aAAa,aAClC,eAAK,SAAS,EAAC,yBAAyB,aACrC,OAAO,CAAC,CAAC,CAAC,CACT,eAAM,SAAS,EAAC,oHAAoH,YACjI,CAAC,GAAG,CAAC,GACD,CACR,CAAC,CAAC,CAAC,CACF,MAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,aAChC,IAAI,CAAC,MAAM,IAAI,KAAC,WAAW,IAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAC,EAAE,GAAG,EACxD,KAAC,cAAc,IAAC,SAAS,EAAC,kBAAkB,YACzC,IAAI,CAAC,QAAQ,IAAI,GAAG,GACN,IACV,CACV,EACD,eAAK,SAAS,EAAC,gBAAgB,aAC7B,YAAG,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,KAAK,GAAK,EAC3D,IAAI,CAAC,QAAQ,IAAI,CAChB,YAAG,SAAS,EAAC,wCAAwC,YAClD,IAAI,CAAC,QAAQ,GACZ,CACL,IACG,EACN,eAAM,SAAS,EAAC,6CAA6C,YAC1D,IAAI,CAAC,KAAK,GACN,IACH,EACL,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CACpC,KAAC,WAAW,IACV,KAAK,EAAE,IAAI,CAAC,QAAQ,EACpB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAC,OAAO,GACd,CACH,KAhCO,CAAC,CAiCL,CACP,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ export interface SparkStatCardProps {
3
+ title: React.ReactNode;
4
+ value: React.ReactNode;
5
+ icon?: React.ElementType;
6
+ change?: string;
7
+ trend?: "up" | "down";
8
+ caption?: string;
9
+ /** Sparkline rows. */
10
+ data: Array<Record<string, unknown>>;
11
+ /** Numeric key in `data` to plot. */
12
+ dataKey: string;
13
+ /** Sparkline + value color. Defaults to the primary token. */
14
+ color?: string;
15
+ type?: "area" | "line" | "bar";
16
+ /** Sparkline height utility (default `h-[56px]`). */
17
+ sparkHeight?: string;
18
+ className?: string;
19
+ }
20
+ /** Compact metric card with a mini sparkline under the value. */
21
+ export declare function SparkStatCard({ title, value, icon: Icon, change, trend, caption, data, dataKey, color, type, sparkHeight, className, }: SparkStatCardProps): React.JSX.Element;
22
+ //# sourceMappingURL=spark-stat-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spark-stat-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/spark-stat-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAwB,EACxB,IAAa,EACb,WAAwB,EACxB,SAAS,GACV,EAAE,kBAAkB,qBAgCpB"}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { SeriesChart } from "../../components/shared/index.js";
5
+ import { MetricHeadline } from "./block-card.js";
6
+ /** Compact metric card with a mini sparkline under the value. */
7
+ export function SparkStatCard({ title, value, icon: Icon, change, trend, caption, data, dataKey, color = "var(--primary)", type = "area", sparkHeight = "h-[56px]", className, }) {
8
+ return (_jsxs("div", { className: cn("flex flex-col gap-4 rounded-xl border bg-card p-5 text-card-foreground", className), children: [_jsxs("div", { className: "flex items-center gap-1.5 text-muted-foreground", children: [Icon && _jsx(Icon, { className: "size-4 sm:size-[18px]" }), _jsx("span", { className: "text-xs font-medium sm:text-sm", children: title })] }), _jsx(MetricHeadline, { value: value, change: change, trend: trend, caption: caption }), _jsx(SeriesChart, { type: type, data: data, series: [{ key: dataKey, color }], xKey: dataKey, showGrid: false, showXAxis: false, showYAxis: false, showTooltip: false, className: cn("aspect-auto w-full", sparkHeight), margin: { top: 4, right: 0, bottom: 0, left: 0 } })] }));
9
+ }
10
+ //# sourceMappingURL=spark-stat-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spark-stat-card.js","sourceRoot":"","sources":["../../../src/components/blocks/spark-stat-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAqB9C,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,IAAI,EAAE,IAAI,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,GAAG,gBAAgB,EACxB,IAAI,GAAG,MAAM,EACb,WAAW,GAAG,UAAU,EACxB,SAAS,GACU;IACnB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,SAAS,CACV,aAED,eAAK,SAAS,EAAC,iDAAiD,aAC7D,IAAI,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,uBAAuB,GAAG,EACnD,eAAM,SAAS,EAAC,gCAAgC,YAAE,KAAK,GAAQ,IAC3D,EACN,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GAChB,EACF,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACjC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,KAAK,EACf,SAAS,EAAE,KAAK,EAChB,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,KAAK,EAClB,SAAS,EAAE,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAChD,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAChD,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ export type StepStatus = "done" | "current" | "todo";
3
+ export interface StepItem {
4
+ label: React.ReactNode;
5
+ description?: React.ReactNode;
6
+ status?: StepStatus;
7
+ }
8
+ export interface StepsCardProps {
9
+ title?: React.ReactNode;
10
+ icon?: React.ElementType;
11
+ actions?: React.ReactNode;
12
+ steps: StepItem[];
13
+ className?: string;
14
+ }
15
+ /** Vertical stepper: numbered / checked circles with a connector line. */
16
+ export declare function StepsCard({ title, icon, actions, steps, className, }: StepsCardProps): React.JSX.Element;
17
+ //# sourceMappingURL=steps-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/steps-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,cAAc,qBAyDhB"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Check } from "lucide-react";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { BlockCard } from "./block-card.js";
5
+ /** Vertical stepper: numbered / checked circles with a connector line. */
6
+ export function StepsCard({ title, icon, actions, steps, className, }) {
7
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsx("ol", { className: "space-y-6", children: steps.map((step, i) => {
8
+ const status = step.status ?? "todo";
9
+ const last = i === steps.length - 1;
10
+ return (_jsxs("li", { className: "relative flex gap-4", children: [!last && (_jsx("span", { className: cn("absolute left-[15px] top-9 h-[calc(100%-0.25rem)] w-px -translate-x-1/2", status === "done" ? "bg-primary" : "bg-border"), "aria-hidden": true })), _jsx("span", { className: cn("z-10 flex size-8 shrink-0 items-center justify-center rounded-full border text-xs font-semibold", status === "done" &&
11
+ "border-primary bg-primary text-primary-foreground", status === "current" &&
12
+ "border-primary text-primary", status === "todo" &&
13
+ "border-border bg-muted text-muted-foreground"), children: status === "done" ? _jsx(Check, { className: "size-4" }) : i + 1 }), _jsxs("div", { className: "min-w-0 flex-1 pt-1", children: [_jsx("p", { className: cn("text-sm font-medium", status === "todo" && "text-muted-foreground"), children: step.label }), step.description && (_jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: step.description }))] })] }, i));
14
+ }) }) }));
15
+ }
16
+ //# sourceMappingURL=steps-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps-card.js","sourceRoot":"","sources":["../../../src/components/blocks/steps-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBzC,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACM;IACf,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,aAAI,SAAS,EAAC,WAAW,YACtB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;gBACrC,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,CACL,cAAY,SAAS,EAAC,qBAAqB,aACxC,CAAC,IAAI,IAAI,CACR,eACE,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAC/C,wBAED,CACH,EACD,eACE,SAAS,EAAE,EAAE,CACX,iGAAiG,EACjG,MAAM,KAAK,MAAM;gCACf,mDAAmD,EACrD,MAAM,KAAK,SAAS;gCAClB,6BAA6B,EAC/B,MAAM,KAAK,MAAM;gCACf,8CAA8C,CACjD,YAEA,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GACpD,EACP,eAAK,SAAS,EAAC,qBAAqB,aAClC,YACE,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,MAAM,KAAK,MAAM,IAAI,uBAAuB,CAC7C,YAEA,IAAI,CAAC,KAAK,GACT,EACH,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,sCAAsC,YAChD,IAAI,CAAC,WAAW,GACf,CACL,IACG,KArCC,CAAC,CAsCL,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACK,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import { type StatusTone } from "../../components/shared/index.js";
3
+ export interface TeamMember {
4
+ name: string;
5
+ role?: React.ReactNode;
6
+ avatar?: string;
7
+ fallback?: string;
8
+ /** Status pill (e.g. "Online" / "Away"). */
9
+ status?: React.ReactNode;
10
+ statusTone?: StatusTone;
11
+ }
12
+ export interface TeamListCardProps {
13
+ title?: React.ReactNode;
14
+ icon?: React.ElementType;
15
+ actions?: React.ReactNode;
16
+ members: TeamMember[];
17
+ className?: string;
18
+ }
19
+ /** Team / members list: avatar + name + role + optional status pill. */
20
+ export declare function TeamListCard({ title, icon, actions, members, className, }: TeamListCardProps): React.JSX.Element;
21
+ //# sourceMappingURL=team-list-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/team-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGnE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,qBAkCnB"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Avatar, AvatarFallback, AvatarImage } from "../../components/ui/avatar.js";
3
+ import { StatusBadge } from "../../components/shared/index.js";
4
+ import { BlockCard } from "./block-card.js";
5
+ /** Team / members list: avatar + name + role + optional status pill. */
6
+ export function TeamListCard({ title, icon, actions, members, className, }) {
7
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, bodyClassName: "space-y-4", children: members.map((m, i) => (_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs(Avatar, { className: "size-9 shrink-0", children: [m.avatar && _jsx(AvatarImage, { src: m.avatar, alt: m.name }), _jsx(AvatarFallback, { className: "bg-muted text-xs", children: m.fallback ?? m.name.charAt(0) })] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: m.name }), m.role && (_jsx("p", { className: "truncate text-xs text-muted-foreground", children: m.role }))] }), m.status && (_jsx(StatusBadge, { tone: m.statusTone ?? "gray", label: m.status, variant: "soft" }))] }, i))) }));
8
+ }
9
+ //# sourceMappingURL=team-list-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/team-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAoBzC,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,GACS;IAClB,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,eAAa,SAAS,EAAC,yBAAyB,aAC9C,MAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,aAChC,CAAC,CAAC,MAAM,IAAI,KAAC,WAAW,IAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,GAAI,EACxD,KAAC,cAAc,IAAC,SAAS,EAAC,kBAAkB,YACzC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAChB,IACV,EACT,eAAK,SAAS,EAAC,gBAAgB,aAC7B,YAAG,SAAS,EAAC,8BAA8B,YAAE,CAAC,CAAC,IAAI,GAAK,EACvD,CAAC,CAAC,IAAI,IAAI,CACT,YAAG,SAAS,EAAC,wCAAwC,YAAE,CAAC,CAAC,IAAI,GAAK,CACnE,IACG,EACL,CAAC,CAAC,MAAM,IAAI,CACX,KAAC,WAAW,IACV,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,MAAM,EAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EACf,OAAO,EAAC,MAAM,GACd,CACH,KAnBO,CAAC,CAoBL,CACP,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ import { type StatusTone } from "../../components/shared/index.js";
3
+ export interface TimelineItem {
4
+ title: React.ReactNode;
5
+ description?: React.ReactNode;
6
+ time?: React.ReactNode;
7
+ icon?: React.ElementType;
8
+ tone?: StatusTone;
9
+ }
10
+ export interface TimelineCardProps {
11
+ title?: React.ReactNode;
12
+ icon?: React.ElementType;
13
+ actions?: React.ReactNode;
14
+ items: TimelineItem[];
15
+ className?: string;
16
+ }
17
+ /** Vertical timeline with a connector line and tinted dots / icons. */
18
+ export declare function TimelineCard({ title, icon, actions, items, className, }: TimelineCardProps): React.JSX.Element;
19
+ //# sourceMappingURL=timeline-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/timeline-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACV,EAAE,iBAAiB,qBAqDnB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { toneSoft } from "../../components/shared/index.js";
4
+ import { BlockCard } from "./block-card.js";
5
+ /** Vertical timeline with a connector line and tinted dots / icons. */
6
+ export function TimelineCard({ title, icon, actions, items, className, }) {
7
+ return (_jsx(BlockCard, { title: title, icon: icon, actions: actions, className: className, children: _jsx("ol", { className: "relative space-y-6", children: items.map((item, i) => {
8
+ const Dot = item.icon;
9
+ const last = i === items.length - 1;
10
+ return (_jsxs("li", { className: "relative flex gap-4", children: [!last && (_jsx("span", { className: "absolute left-4 top-9 h-[calc(100%-0.5rem)] w-px -translate-x-1/2 bg-border", "aria-hidden": true })), _jsx("span", { className: cn("z-10 flex size-8 shrink-0 items-center justify-center rounded-full", toneSoft[item.tone ?? "gray"]), children: Dot ? (_jsx(Dot, { className: "size-4" })) : (_jsx("span", { className: "size-2 rounded-full bg-current" })) }), _jsxs("div", { className: "min-w-0 flex-1 pt-1", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("p", { className: "truncate text-sm font-medium", children: item.title }), item.time && (_jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: item.time }))] }), item.description && (_jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.description }))] })] }, i));
11
+ }) }) }));
12
+ }
13
+ //# sourceMappingURL=timeline-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-card.js","sourceRoot":"","sources":["../../../src/components/blocks/timeline-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBzC,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GACS;IAClB,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,YAEpB,aAAI,SAAS,EAAC,oBAAoB,YAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;gBACtB,MAAM,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,CACL,cAAY,SAAS,EAAC,qBAAqB,aACxC,CAAC,IAAI,IAAI,CACR,eACE,SAAS,EAAC,6EAA6E,wBAEvF,CACH,EACD,eACE,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAC9B,YAEA,GAAG,CAAC,CAAC,CAAC,CACL,KAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,GAAG,CAC3B,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,gCAAgC,GAAG,CACpD,GACI,EACP,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,yCAAyC,aACtD,YAAG,SAAS,EAAC,8BAA8B,YAAE,IAAI,CAAC,KAAK,GAAK,EAC3D,IAAI,CAAC,IAAI,IAAI,CACZ,eAAM,SAAS,EAAC,wCAAwC,YACrD,IAAI,CAAC,IAAI,GACL,CACR,IACG,EACL,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,sCAAsC,YAChD,IAAI,CAAC,WAAW,GACf,CACL,IACG,KAjCC,CAAC,CAkCL,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACK,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ import { Badge } from "../../components/ui/badge.js";
3
+ export interface TodoItem {
4
+ label: React.ReactNode;
5
+ done?: boolean;
6
+ badge?: React.ReactNode;
7
+ badgeVariant?: React.ComponentProps<typeof Badge>["variant"];
8
+ onCheckedChange?: (checked: boolean) => void;
9
+ }
10
+ export interface TodoListCardProps {
11
+ title?: React.ReactNode;
12
+ icon?: React.ElementType;
13
+ actions?: React.ReactNode;
14
+ items: TodoItem[];
15
+ /** Show "done/total" next to the title. */
16
+ showCount?: boolean;
17
+ className?: string;
18
+ }
19
+ /** Checklist card: checkbox + label (+ optional badge), with done styling. */
20
+ export declare function TodoListCard({ title, icon, actions, items, showCount, className, }: TodoListCardProps): React.JSX.Element;
21
+ //# sourceMappingURL=todo-list-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-list-card.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/todo-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAgB,EAChB,SAAS,GACV,EAAE,iBAAiB,qBA+CnB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { Checkbox } from "../../components/ui/checkbox.js";
4
+ import { Badge } from "../../components/ui/badge.js";
5
+ import { BlockCard } from "./block-card.js";
6
+ /** Checklist card: checkbox + label (+ optional badge), with done styling. */
7
+ export function TodoListCard({ title, icon, actions, items, showCount = true, className, }) {
8
+ const done = items.filter((i) => i.done).length;
9
+ return (_jsx(BlockCard, { title: title != null && showCount ? (_jsxs("span", { className: "flex items-center gap-2", children: [title, _jsxs("span", { className: "text-xs font-normal text-muted-foreground", children: [done, "/", items.length] })] })) : (title), icon: icon, actions: actions, className: className, bodyClassName: "space-y-1", children: items.map((item, i) => (_jsxs("label", { className: "flex cursor-pointer items-center gap-3 rounded-md px-1 py-2 hover:bg-muted/50", children: [_jsx(Checkbox, { defaultChecked: item.done, onCheckedChange: (c) => item.onCheckedChange?.(c === true) }), _jsx("span", { className: cn("min-w-0 flex-1 truncate text-sm", item.done && "text-muted-foreground line-through"), children: item.label }), item.badge && (_jsx(Badge, { variant: item.badgeVariant ?? "secondary", children: item.badge }))] }, i))) }));
10
+ }
11
+ //# sourceMappingURL=todo-list-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-list-card.js","sourceRoot":"","sources":["../../../src/components/blocks/todo-list-card.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAoBzC,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,SAAS,GACS;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EACH,KAAK,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAC3B,gBAAM,SAAS,EAAC,yBAAyB,aACtC,KAAK,EACN,gBAAM,SAAS,EAAC,2CAA2C,aACxD,IAAI,OAAG,KAAK,CAAC,MAAM,IACf,IACF,CACR,CAAC,CAAC,CAAC,CACF,KAAK,CACN,EAEH,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAC,WAAW,YAExB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,iBAEE,SAAS,EAAC,+EAA+E,aAEzF,KAAC,QAAQ,IACP,cAAc,EAAE,IAAI,CAAC,IAAI,EACzB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAC1D,EACF,eACE,SAAS,EAAE,EAAE,CACX,iCAAiC,EACjC,IAAI,CAAC,IAAI,IAAI,oCAAoC,CAClD,YAEA,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,KAAK,IAAI,CACb,KAAC,KAAK,IAAC,OAAO,EAAE,IAAI,CAAC,YAAY,IAAI,WAAW,YAC7C,IAAI,CAAC,KAAK,GACL,CACT,KAnBI,CAAC,CAoBA,CACT,CAAC,GACQ,CACb,CAAC;AACJ,CAAC"}