tembro 2.0.5 → 2.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 (381) hide show
  1. package/dist/components/calendar/calendar.cjs +1 -1
  2. package/dist/components/calendar/calendar.d.ts +2 -1
  3. package/dist/components/calendar/calendar.js +126 -122
  4. package/dist/components/calendar/date-range-picker.cjs +1 -1
  5. package/dist/components/calendar/date-range-picker.d.ts +2 -1
  6. package/dist/components/calendar/date-range-picker.js +39 -39
  7. package/dist/components/charts/charts.cjs +1 -1
  8. package/dist/components/charts/charts.d.ts +13 -4
  9. package/dist/components/charts/charts.js +76 -46
  10. package/dist/components/charts/progress-ring.cjs +1 -1
  11. package/dist/components/charts/progress-ring.d.ts +3 -1
  12. package/dist/components/charts/progress-ring.js +11 -10
  13. package/dist/components/data-table/data-table-column-visibility-menu.cjs +1 -1
  14. package/dist/components/data-table/data-table-column-visibility-menu.d.ts +4 -1
  15. package/dist/components/data-table/data-table-column-visibility-menu.js +36 -8
  16. package/dist/components/data-table/data-table-pagination.cjs +1 -1
  17. package/dist/components/data-table/data-table-pagination.js +4 -4
  18. package/dist/components/data-table/data-table-toolbar.cjs +1 -1
  19. package/dist/components/data-table/data-table-toolbar.js +12 -13
  20. package/dist/components/data-table/data-table.cjs +1 -1
  21. package/dist/components/data-table/data-table.d.ts +2 -2
  22. package/dist/components/data-table/data-table.js +2 -1
  23. package/dist/components/display/carousel.cjs +1 -1
  24. package/dist/components/display/carousel.d.ts +15 -1
  25. package/dist/components/display/carousel.js +128 -86
  26. package/dist/components/display/code-block.cjs +2 -2
  27. package/dist/components/display/code-block.d.ts +2 -1
  28. package/dist/components/display/code-block.js +17 -12
  29. package/dist/components/display/delta-badge.cjs +1 -1
  30. package/dist/components/display/delta-badge.d.ts +2 -1
  31. package/dist/components/display/delta-badge.js +11 -7
  32. package/dist/components/display/kanban.cjs +1 -1
  33. package/dist/components/display/kanban.d.ts +4 -1
  34. package/dist/components/display/kanban.js +60 -33
  35. package/dist/components/display/metric-grid.cjs +1 -1
  36. package/dist/components/display/metric-grid.d.ts +1 -0
  37. package/dist/components/display/metric-grid.js +1 -1
  38. package/dist/components/display/qr-code.cjs +1 -1
  39. package/dist/components/display/qr-code.d.ts +2 -1
  40. package/dist/components/display/qr-code.js +19 -16
  41. package/dist/components/display/smart-card.d.ts +1 -1
  42. package/dist/components/display/status-legend.d.ts +1 -1
  43. package/dist/components/display/tag.cjs +1 -1
  44. package/dist/components/display/tag.d.ts +2 -1
  45. package/dist/components/display/tag.js +28 -22
  46. package/dist/components/display/tree-view.cjs +1 -1
  47. package/dist/components/display/tree-view.d.ts +9 -1
  48. package/dist/components/display/tree-view.js +104 -40
  49. package/dist/components/display/trend-card.cjs +1 -1
  50. package/dist/components/display/trend-card.js +27 -41
  51. package/dist/components/feedback/alert.cjs +1 -1
  52. package/dist/components/feedback/alert.d.ts +2 -1
  53. package/dist/components/feedback/alert.js +6 -6
  54. package/dist/components/feedback/loading-state.cjs +1 -1
  55. package/dist/components/feedback/loading-state.d.ts +3 -1
  56. package/dist/components/feedback/loading-state.js +23 -10
  57. package/dist/components/feedback/page-state.cjs +1 -1
  58. package/dist/components/feedback/page-state.d.ts +2 -1
  59. package/dist/components/feedback/page-state.js +7 -4
  60. package/dist/components/form/form-field-shell.cjs +1 -1
  61. package/dist/components/form/form-field-shell.d.ts +4 -2
  62. package/dist/components/form/form-field-shell.js +57 -41
  63. package/dist/components/form/form-input.cjs +1 -1
  64. package/dist/components/form/form-input.d.ts +3 -4
  65. package/dist/components/form/form-input.js +259 -257
  66. package/dist/components/form/form-select.cjs +1 -1
  67. package/dist/components/form/form-select.d.ts +2 -2
  68. package/dist/components/form/form-select.js +8 -6
  69. package/dist/components/form/form-switch.cjs +1 -1
  70. package/dist/components/form/form-switch.d.ts +1 -1
  71. package/dist/components/form/form-switch.js +58 -54
  72. package/dist/components/form/form-textarea.cjs +1 -1
  73. package/dist/components/form/form-textarea.d.ts +1 -1
  74. package/dist/components/form/form-textarea.js +29 -27
  75. package/dist/components/inputs/async-select.d.ts +3 -0
  76. package/dist/components/inputs/search-input.d.ts +3 -0
  77. package/dist/components/inputs/simple-select.cjs +1 -1
  78. package/dist/components/inputs/simple-select.d.ts +10 -32
  79. package/dist/components/inputs/simple-select.js +5 -101
  80. package/dist/components/layout/app-sidebar.cjs +1 -1
  81. package/dist/components/layout/app-sidebar.d.ts +1 -0
  82. package/dist/components/layout/app-sidebar.js +36 -36
  83. package/dist/components/layout/breadcrumbs.cjs +1 -1
  84. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  85. package/dist/components/layout/breadcrumbs.js +7 -7
  86. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  87. package/dist/components/modern/calendar-scheduler.d.ts +5 -1
  88. package/dist/components/modern/calendar-scheduler.js +47 -28
  89. package/dist/components/modern/dual-list-picker.cjs +1 -1
  90. package/dist/components/modern/dual-list-picker.d.ts +5 -1
  91. package/dist/components/modern/dual-list-picker.js +81 -23
  92. package/dist/components/modern/rich-text-editor.cjs +1 -1
  93. package/dist/components/modern/rich-text-editor.d.ts +3 -1
  94. package/dist/components/modern/rich-text-editor.js +12 -9
  95. package/dist/components/modern/tour.cjs +1 -1
  96. package/dist/components/modern/tour.d.ts +5 -1
  97. package/dist/components/modern/tour.js +57 -35
  98. package/dist/components/navigation/command-bar.cjs +1 -1
  99. package/dist/components/navigation/command-bar.d.ts +3 -1
  100. package/dist/components/navigation/command-bar.js +10 -7
  101. package/dist/components/navigation/demo.cjs +1 -1
  102. package/dist/components/navigation/demo.js +0 -1
  103. package/dist/components/navigation/nav-tabs.cjs +1 -1
  104. package/dist/components/navigation/nav-tabs.js +39 -27
  105. package/dist/components/navigation/page-tabs.cjs +1 -1
  106. package/dist/components/navigation/page-tabs.js +41 -30
  107. package/dist/components/navigation/pagination.cjs +1 -1
  108. package/dist/components/navigation/pagination.d.ts +7 -1
  109. package/dist/components/navigation/pagination.js +48 -25
  110. package/dist/components/notifications/notification-center.cjs +1 -1
  111. package/dist/components/notifications/notification-center.d.ts +3 -1
  112. package/dist/components/notifications/notification-center.js +56 -38
  113. package/dist/components/notifications/toast.cjs +1 -1
  114. package/dist/components/notifications/toast.d.ts +1 -0
  115. package/dist/components/notifications/toast.js +4 -0
  116. package/dist/components/overlay/alert-dialog.cjs +1 -1
  117. package/dist/components/overlay/alert-dialog.js +1 -1
  118. package/dist/components/overlay/confirm-dialog.cjs +1 -1
  119. package/dist/components/overlay/confirm-dialog.d.ts +4 -2
  120. package/dist/components/overlay/confirm-dialog.js +31 -22
  121. package/dist/components/overlay/drawer.cjs +1 -1
  122. package/dist/components/overlay/drawer.d.ts +3 -1
  123. package/dist/components/overlay/drawer.js +24 -16
  124. package/dist/components/ui/accordion/index.d.ts +4 -0
  125. package/dist/components/ui/badge/index.cjs +1 -1
  126. package/dist/components/ui/badge/index.d.ts +1 -1
  127. package/dist/components/ui/badge/index.js +2 -1
  128. package/dist/components/ui/button/index.cjs +1 -1
  129. package/dist/components/ui/button/index.d.ts +2 -1
  130. package/dist/components/ui/button/index.js +13 -10
  131. package/dist/components/ui/card/index.cjs +1 -1
  132. package/dist/components/ui/card/index.d.ts +13 -2
  133. package/dist/components/ui/card/index.js +74 -49
  134. package/dist/components/ui/dialog/index.cjs +1 -1
  135. package/dist/components/ui/dialog/index.js +2 -1
  136. package/dist/components/ui/hover-card.cjs +1 -1
  137. package/dist/components/ui/hover-card.d.ts +11 -3
  138. package/dist/components/ui/hover-card.js +29 -24
  139. package/dist/components/ui/input/index.cjs +1 -1
  140. package/dist/components/ui/input/index.d.ts +9 -1
  141. package/dist/components/ui/input/index.js +63 -30
  142. package/dist/components/ui/popover/index.cjs +1 -1
  143. package/dist/components/ui/popover/index.d.ts +2 -2
  144. package/dist/components/ui/popover/index.js +6 -5
  145. package/dist/components/ui/radio-group/index.cjs +1 -1
  146. package/dist/components/ui/radio-group/index.d.ts +5 -1
  147. package/dist/components/ui/radio-group/index.js +50 -16
  148. package/dist/components/ui/right-click-menu/index.cjs +1 -1
  149. package/dist/components/ui/right-click-menu/index.d.ts +5 -1
  150. package/dist/components/ui/right-click-menu/index.js +77 -23
  151. package/dist/components/ui/segmented-control/index.cjs +1 -1
  152. package/dist/components/ui/segmented-control/index.d.ts +2 -1
  153. package/dist/components/ui/segmented-control/index.js +23 -11
  154. package/dist/components/ui/select/index.cjs +1 -1
  155. package/dist/components/ui/select/index.d.ts +40 -1
  156. package/dist/components/ui/select/index.js +159 -48
  157. package/dist/components/ui/switch/index.cjs +1 -1
  158. package/dist/components/ui/switch/index.d.ts +18 -0
  159. package/dist/components/ui/switch/index.js +47 -17
  160. package/dist/components/ui/tabs/index.cjs +1 -1
  161. package/dist/components/ui/tabs/index.d.ts +14 -4
  162. package/dist/components/ui/tabs/index.js +11 -8
  163. package/dist/components/ui/textarea/index.cjs +1 -1
  164. package/dist/components/ui/textarea/index.d.ts +10 -2
  165. package/dist/components/ui/textarea/index.js +37 -8
  166. package/dist/components/ui/textarea.cjs +1 -0
  167. package/dist/components/ui/textarea.d.ts +1 -0
  168. package/dist/components/ui/textarea.js +2 -0
  169. package/dist/components/ui/tooltip/index.cjs +1 -1
  170. package/dist/components/ui/tooltip/index.d.ts +11 -3
  171. package/dist/components/ui/tooltip/index.js +41 -20
  172. package/dist/components/upload/file-upload.cjs +1 -1
  173. package/dist/components/upload/file-upload.d.ts +8 -1
  174. package/dist/components/upload/file-upload.js +132 -100
  175. package/dist/components/upload/image-upload.cjs +1 -1
  176. package/dist/components/upload/image-upload.d.ts +5 -1
  177. package/dist/components/upload/image-upload.js +34 -9
  178. package/dist/index.cjs +1 -1
  179. package/dist/index.js +31 -31
  180. package/dist/public-component-surface.cjs +1 -1
  181. package/dist/public-component-surface.js +15 -0
  182. package/dist/showcase/component-api-schema.cjs +1 -1
  183. package/dist/showcase/component-api-schema.js +187 -10
  184. package/dist/showcase/create-demo.cjs +5 -4
  185. package/dist/showcase/create-demo.js +2 -2
  186. package/dist/showcase/fallback.cjs +3 -3
  187. package/dist/showcase/fallback.js +221 -243
  188. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  189. package/dist/showcase/premium/alert/showcase.js +1 -0
  190. package/dist/showcase/premium/app-sidebar/showcase.cjs +1 -1
  191. package/dist/showcase/premium/app-sidebar/showcase.js +1 -0
  192. package/dist/showcase/premium/badge/showcase.cjs +1 -1
  193. package/dist/showcase/premium/badge/showcase.js +7 -0
  194. package/dist/showcase/premium/badge/types.d.ts +1 -1
  195. package/dist/showcase/premium/breadcrumbs/showcase.cjs +1 -1
  196. package/dist/showcase/premium/breadcrumbs/showcase.js +12 -1
  197. package/dist/showcase/premium/button/mock.cjs +1 -4
  198. package/dist/showcase/premium/button/mock.js +1 -1
  199. package/dist/showcase/premium/button/showcase.cjs +1 -1
  200. package/dist/showcase/premium/button/showcase.js +2 -2
  201. package/dist/showcase/premium/card/showcase.cjs +1 -1
  202. package/dist/showcase/premium/card/showcase.js +96 -47
  203. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  204. package/dist/showcase/premium/carousel/showcase.js +76 -49
  205. package/dist/showcase/premium/command-bar/showcase.cjs +1 -1
  206. package/dist/showcase/premium/command-bar/showcase.js +2 -0
  207. package/dist/showcase/premium/data-table/mock.cjs +12 -11
  208. package/dist/showcase/premium/data-table/mock.js +1 -1
  209. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  210. package/dist/showcase/premium/data-table/showcase.js +1 -1
  211. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  212. package/dist/showcase/premium/data-table-parts/showcase.js +3 -1
  213. package/dist/showcase/premium/file-upload/showcase.cjs +1 -1
  214. package/dist/showcase/premium/file-upload/showcase.js +25 -4
  215. package/dist/showcase/premium/image-upload/showcase.cjs +1 -1
  216. package/dist/showcase/premium/image-upload/showcase.js +4 -1
  217. package/dist/showcase/premium/index.cjs +1 -1
  218. package/dist/showcase/premium/index.js +396 -402
  219. package/dist/showcase/premium/loading-state/showcase.cjs +1 -1
  220. package/dist/showcase/premium/loading-state/showcase.js +3 -1
  221. package/dist/showcase/premium/metric-grid/showcase.cjs +1 -1
  222. package/dist/showcase/premium/metric-grid/showcase.js +96 -28
  223. package/dist/showcase/premium/notification-center/showcase.cjs +1 -1
  224. package/dist/showcase/premium/notification-center/showcase.js +7 -3
  225. package/dist/showcase/premium/page-state/showcase.cjs +1 -1
  226. package/dist/showcase/premium/page-state/showcase.js +5 -1
  227. package/dist/showcase/premium/pagination/showcase.cjs +1 -1
  228. package/dist/showcase/premium/pagination/showcase.js +15 -2
  229. package/dist/showcase/premium/popover/showcase.cjs +1 -1
  230. package/dist/showcase/premium/popover/showcase.js +85 -50
  231. package/dist/showcase/premium/radio-group/showcase.cjs +1 -1
  232. package/dist/showcase/premium/radio-group/showcase.js +27 -4
  233. package/dist/showcase/premium/right-click-menu/showcase.cjs +1 -1
  234. package/dist/showcase/premium/right-click-menu/showcase.js +56 -43
  235. package/dist/showcase/premium/segmented-control/showcase.cjs +1 -1
  236. package/dist/showcase/premium/segmented-control/showcase.js +1 -0
  237. package/dist/showcase/premium/select/data.cjs +1 -1
  238. package/dist/showcase/premium/select/data.js +69 -34
  239. package/dist/showcase/premium/select/mock.cjs +20 -8
  240. package/dist/showcase/premium/select/mock.js +3 -2
  241. package/dist/showcase/premium/select/showcase.cjs +1 -1
  242. package/dist/showcase/premium/select/showcase.js +101 -86
  243. package/dist/showcase/premium/select/types.d.ts +3 -0
  244. package/dist/showcase/premium/statistic/showcase.cjs +1 -1
  245. package/dist/showcase/premium/statistic/showcase.js +57 -25
  246. package/dist/showcase/premium/switch/showcase.cjs +1 -1
  247. package/dist/showcase/premium/switch/showcase.js +25 -14
  248. package/dist/showcase/premium/tabs/showcase.cjs +1 -1
  249. package/dist/showcase/premium/tabs/showcase.js +171 -48
  250. package/dist/showcase/premium/textarea/mock.cjs +12 -4
  251. package/dist/showcase/premium/textarea/mock.js +1 -1
  252. package/dist/showcase/premium/textarea/showcase.cjs +1 -1
  253. package/dist/showcase/premium/textarea/showcase.js +8 -3
  254. package/dist/showcase/premium/toast/showcase.cjs +1 -1
  255. package/dist/showcase/premium/toast/showcase.js +32 -6
  256. package/dist/showcase/premium/types.d.ts +1 -1
  257. package/dist/showcase/registry-quality.cjs +1 -1
  258. package/dist/showcase/registry-quality.js +1 -0
  259. package/dist/showcase/registry-specific.cjs +1 -1
  260. package/dist/showcase/registry-specific.js +78 -74
  261. package/dist/showcase/render-registry-preview.cjs +1 -1
  262. package/dist/showcase/render-registry-preview.js +90 -108
  263. package/dist/showcase/site-data.cjs +1 -1
  264. package/dist/showcase/site-data.js +60 -21
  265. package/dist/showcase/tembro-registry.json.cjs +1 -1
  266. package/dist/showcase/tembro-registry.json.js +34 -20
  267. package/dist/showcase/types.d.ts +1 -1
  268. package/package.json +1 -1
  269. package/packages/cli/dist/index.cjs +31 -31
  270. package/packages/cli/vendor/src/components/calendar/calendar.tsx +59 -50
  271. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +7 -4
  272. package/packages/cli/vendor/src/components/charts/charts.tsx +109 -66
  273. package/packages/cli/vendor/src/components/charts/progress-ring.tsx +37 -26
  274. package/packages/cli/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +41 -22
  275. package/packages/cli/vendor/src/components/data-table/data-table-pagination.tsx +7 -7
  276. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +8 -6
  277. package/packages/cli/vendor/src/components/data-table/data-table.tsx +21 -20
  278. package/packages/cli/vendor/src/components/display/carousel.tsx +102 -9
  279. package/packages/cli/vendor/src/components/display/code-block.tsx +22 -2
  280. package/packages/cli/vendor/src/components/display/delta-badge.tsx +11 -11
  281. package/packages/cli/vendor/src/components/display/kanban.tsx +103 -57
  282. package/packages/cli/vendor/src/components/display/metric-grid.tsx +16 -13
  283. package/packages/cli/vendor/src/components/display/qr-code.tsx +17 -15
  284. package/packages/cli/vendor/src/components/display/smart-card.tsx +1 -1
  285. package/packages/cli/vendor/src/components/display/status-legend.tsx +1 -1
  286. package/packages/cli/vendor/src/components/display/tag.tsx +39 -21
  287. package/packages/cli/vendor/src/components/display/tree-view.tsx +221 -84
  288. package/packages/cli/vendor/src/components/display/trend-card.tsx +6 -40
  289. package/packages/cli/vendor/src/components/feedback/alert.tsx +3 -1
  290. package/packages/cli/vendor/src/components/feedback/loading-state.tsx +33 -17
  291. package/packages/cli/vendor/src/components/feedback/page-state.tsx +8 -7
  292. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +37 -8
  293. package/packages/cli/vendor/src/components/form/form-input.tsx +11 -12
  294. package/packages/cli/vendor/src/components/form/form-select.tsx +6 -4
  295. package/packages/cli/vendor/src/components/form/form-switch.tsx +9 -3
  296. package/packages/cli/vendor/src/components/form/form-textarea.tsx +6 -2
  297. package/packages/cli/vendor/src/components/inputs/async-select.tsx +11 -8
  298. package/packages/cli/vendor/src/components/inputs/search-input.tsx +5 -2
  299. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +20 -190
  300. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +3 -1
  301. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +3 -1
  302. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +28 -13
  303. package/packages/cli/vendor/src/components/modern/dual-list-picker.tsx +103 -35
  304. package/packages/cli/vendor/src/components/modern/rich-text-editor.tsx +25 -22
  305. package/packages/cli/vendor/src/components/modern/tour.tsx +47 -29
  306. package/packages/cli/vendor/src/components/navigation/command-bar.tsx +6 -0
  307. package/packages/cli/vendor/src/components/navigation/demo.tsx +0 -1
  308. package/packages/cli/vendor/src/components/navigation/nav-tabs.tsx +38 -29
  309. package/packages/cli/vendor/src/components/navigation/page-tabs.tsx +35 -23
  310. package/packages/cli/vendor/src/components/navigation/pagination.tsx +65 -31
  311. package/packages/cli/vendor/src/components/notifications/notification-center.tsx +64 -39
  312. package/packages/cli/vendor/src/components/notifications/toast.tsx +23 -21
  313. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +1 -1
  314. package/packages/cli/vendor/src/components/overlay/confirm-dialog.tsx +45 -22
  315. package/packages/cli/vendor/src/components/overlay/drawer.tsx +18 -5
  316. package/packages/cli/vendor/src/components/ui/accordion/index.tsx +4 -0
  317. package/packages/cli/vendor/src/components/ui/badge/index.tsx +2 -1
  318. package/packages/cli/vendor/src/components/ui/button/index.tsx +11 -5
  319. package/packages/cli/vendor/src/components/ui/card/index.tsx +95 -25
  320. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +2 -1
  321. package/packages/cli/vendor/src/components/ui/hover-card.tsx +54 -28
  322. package/packages/cli/vendor/src/components/ui/input/index.tsx +98 -0
  323. package/packages/cli/vendor/src/components/ui/popover/index.tsx +10 -8
  324. package/packages/cli/vendor/src/components/ui/radio-group/index.tsx +55 -6
  325. package/packages/cli/vendor/src/components/ui/right-click-menu/index.tsx +120 -9
  326. package/packages/cli/vendor/src/components/ui/segmented-control/index.tsx +29 -3
  327. package/packages/cli/vendor/src/components/ui/select/index.tsx +260 -34
  328. package/packages/cli/vendor/src/components/ui/switch/index.tsx +71 -6
  329. package/packages/cli/vendor/src/components/ui/tabs/index.tsx +22 -6
  330. package/packages/cli/vendor/src/components/ui/textarea/index.tsx +105 -15
  331. package/packages/cli/vendor/src/components/ui/textarea.tsx +2 -0
  332. package/packages/cli/vendor/src/components/ui/tooltip/index.tsx +67 -22
  333. package/packages/cli/vendor/src/components/upload/file-upload.tsx +120 -57
  334. package/packages/cli/vendor/src/components/upload/image-upload.tsx +71 -24
  335. package/packages/cli/vendor/src/public-component-surface.ts +3 -0
  336. package/packages/cli/vendor/src/showcase/component-api-schema.ts +79 -41
  337. package/packages/cli/vendor/src/showcase/create-demo.tsx +16 -15
  338. package/packages/cli/vendor/src/showcase/fallback.tsx +4 -19
  339. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +1 -0
  340. package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -0
  341. package/packages/cli/vendor/src/showcase/premium/badge/showcase.tsx +4 -2
  342. package/packages/cli/vendor/src/showcase/premium/badge/types.ts +1 -1
  343. package/packages/cli/vendor/src/showcase/premium/breadcrumbs/showcase.tsx +3 -1
  344. package/packages/cli/vendor/src/showcase/premium/button/mock.ts +2 -5
  345. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +2 -2
  346. package/packages/cli/vendor/src/showcase/premium/card/showcase.tsx +26 -1
  347. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +19 -3
  348. package/packages/cli/vendor/src/showcase/premium/command-bar/showcase.tsx +1 -1
  349. package/packages/cli/vendor/src/showcase/premium/data-table/mock.ts +26 -25
  350. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +3 -3
  351. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +3 -3
  352. package/packages/cli/vendor/src/showcase/premium/file-upload/showcase.tsx +21 -1
  353. package/packages/cli/vendor/src/showcase/premium/image-upload/showcase.tsx +4 -1
  354. package/packages/cli/vendor/src/showcase/premium/index.ts +0 -2
  355. package/packages/cli/vendor/src/showcase/premium/loading-state/showcase.tsx +1 -1
  356. package/packages/cli/vendor/src/showcase/premium/metric-grid/showcase.tsx +36 -4
  357. package/packages/cli/vendor/src/showcase/premium/notification-center/showcase.tsx +4 -3
  358. package/packages/cli/vendor/src/showcase/premium/page-state/showcase.tsx +1 -0
  359. package/packages/cli/vendor/src/showcase/premium/pagination/showcase.tsx +13 -1
  360. package/packages/cli/vendor/src/showcase/premium/popover/showcase.tsx +27 -11
  361. package/packages/cli/vendor/src/showcase/premium/radio-group/showcase.tsx +13 -1
  362. package/packages/cli/vendor/src/showcase/premium/right-click-menu/showcase.tsx +8 -5
  363. package/packages/cli/vendor/src/showcase/premium/segmented-control/showcase.tsx +1 -0
  364. package/packages/cli/vendor/src/showcase/premium/select/data.ts +12 -3
  365. package/packages/cli/vendor/src/showcase/premium/select/mock.ts +4 -4
  366. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +35 -22
  367. package/packages/cli/vendor/src/showcase/premium/select/types.ts +3 -0
  368. package/packages/cli/vendor/src/showcase/premium/statistic/showcase.tsx +10 -1
  369. package/packages/cli/vendor/src/showcase/premium/switch/showcase.tsx +15 -6
  370. package/packages/cli/vendor/src/showcase/premium/tabs/showcase.tsx +48 -1
  371. package/packages/cli/vendor/src/showcase/premium/textarea/mock.ts +12 -4
  372. package/packages/cli/vendor/src/showcase/premium/textarea/showcase.tsx +5 -0
  373. package/packages/cli/vendor/src/showcase/premium/toast/showcase.tsx +17 -1
  374. package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
  375. package/packages/cli/vendor/src/showcase/registry-quality.ts +3 -2
  376. package/packages/cli/vendor/src/showcase/registry-specific.tsx +7 -8
  377. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +5 -21
  378. package/packages/cli/vendor/src/showcase/site-data.tsx +21 -15
  379. package/packages/cli/vendor/src/showcase/tembro-registry.json +42 -20
  380. package/packages/cli/vendor/src/showcase/types.ts +1 -1
  381. package/registry.json +18 -6
@@ -3,12 +3,12 @@ import { CopyButton as t } from "../actions/copy-button.js";
3
3
  import * as n from "react";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  //#region src/components/display/code-block.tsx
6
- function a({ code: a, language: o, title: s, showCopy: c = !0, wrap: l = !1, lineNumbers: u = !1, maxHeight: d, className: f, ...p }) {
7
- let m = n.useMemo(() => a.split("\n"), [a]);
6
+ function a({ code: a, language: o, title: s, showCopy: c = !0, wrap: l = !1, lineNumbers: u = !1, highlightLines: d = [], maxHeight: f, className: p, ...m }) {
7
+ let h = n.useMemo(() => a.split("\n"), [a]), g = n.useMemo(() => new Set(d), [d]);
8
8
  return /* @__PURE__ */ i("div", {
9
9
  "data-slot": "code-block",
10
- className: e("overflow-hidden rounded-[var(--aui-card-radius,var(--radius-xl))] border border-[color:var(--aui-card-border,var(--border))] bg-card", f),
11
- ...p,
10
+ className: e("overflow-hidden rounded-[var(--aui-card-radius,var(--radius-xl))] border border-[color:var(--aui-card-border,var(--border))] bg-card", p),
11
+ ...m,
12
12
  children: [(s || o || c) && /* @__PURE__ */ i("div", {
13
13
  className: "flex items-center justify-between gap-3 border-b border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_72%)] px-3 py-2 text-xs text-muted-foreground",
14
14
  children: [/* @__PURE__ */ i("div", {
@@ -29,20 +29,25 @@ function a({ code: a, language: o, title: s, showCopy: c = !0, wrap: l = !1, lin
29
29
  })]
30
30
  }), /* @__PURE__ */ r("pre", {
31
31
  className: e("overflow-x-auto p-3 text-sm leading-6", l && "whitespace-pre-wrap break-words"),
32
- style: d ? {
33
- maxHeight: d,
32
+ style: f ? {
33
+ maxHeight: f,
34
34
  overflowY: "auto"
35
35
  } : void 0,
36
36
  children: u ? /* @__PURE__ */ r("code", {
37
37
  className: "grid",
38
- children: m.map((e, t) => /* @__PURE__ */ i("span", {
39
- className: "grid grid-cols-[auto_1fr] gap-4",
38
+ children: h.map((t, n) => /* @__PURE__ */ i("span", {
39
+ "data-highlighted": g.has(n + 1) || void 0,
40
+ className: e("grid grid-cols-[auto_1fr] gap-4 rounded px-1", g.has(n + 1) && "bg-primary/10 text-foreground"),
40
41
  children: [/* @__PURE__ */ r("span", {
41
42
  className: "select-none text-right text-xs text-muted-foreground/75",
42
- children: t + 1
43
- }), /* @__PURE__ */ r("span", { children: e || " " })]
44
- }, `${t}-${e}`))
45
- }) : /* @__PURE__ */ r("code", { children: a })
43
+ children: n + 1
44
+ }), /* @__PURE__ */ r("span", { children: t || " " })]
45
+ }, `${n}-${t}`))
46
+ }) : /* @__PURE__ */ r("code", { children: h.map((t, n) => /* @__PURE__ */ r("span", {
47
+ "data-highlighted": g.has(n + 1) || void 0,
48
+ className: e("block rounded px-1", g.has(n + 1) && "bg-primary/10 text-foreground"),
49
+ children: t || " "
50
+ }, `${n}-${t}`)) })
46
51
  })]
47
52
  });
48
53
  }
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("lucide-react"),i=require("react/jsx-runtime");function a({value:e,trend:n=`neutral`,size:a=`default`,icon:o=!0,className:s,...c}){let l=n===`up`?r.ArrowUpIcon:n===`down`?r.ArrowDownIcon:r.MinusIcon;return(0,i.jsxs)(`span`,{"data-slot":`delta-badge`,className:t.cn(`inline-flex items-center justify-center font-medium`,a===`sm`?`gap-0.5 rounded px-1 py-0.5 text-[10px]`:`gap-1 rounded-full px-1.5 py-0.5 text-xs`,n===`up`&&`bg-emerald-500/10 text-emerald-600 dark:text-emerald-400`,n===`down`&&`bg-destructive/10 text-destructive`,n===`neutral`&&`bg-muted text-muted-foreground`,s),...c,children:[o&&(0,i.jsx)(l,{className:t.cn(`shrink-0`,a===`sm`?`size-2.5`:`size-3`)}),e]})}exports.DeltaBadge=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/badge/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("lucide-react"),a=require("react/jsx-runtime");function o({value:e,trend:r=`neutral`,size:o=`default`,icon:s=!0,className:c,...l}){return(0,a.jsx)(n.Badge,{"data-slot":`delta-badge`,variant:`soft`,tone:r===`up`?`success`:r===`down`?`danger`:`muted`,size:o,leftIcon:s?(0,a.jsx)(r===`up`?i.ArrowUpIcon:r===`down`?i.ArrowDownIcon:i.MinusIcon,{className:t.cn(`shrink-0`,o===`sm`?`size-2.5`:`size-3`)}):void 0,label:e,className:t.cn(o===`sm`&&`min-h-5 px-1.5 text-[10px]`,c),...l})}exports.DeltaBadge=o;
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
- export type DeltaBadgeProps = React.ComponentProps<"span"> & {
2
+ import { type BadgeProps } from "@/components/ui/badge";
3
+ export type DeltaBadgeProps = Omit<BadgeProps, "children" | "label" | "tone" | "status" | "leftIcon" | "variant" | "size"> & {
3
4
  value: React.ReactNode;
4
5
  trend?: "up" | "down" | "neutral";
5
6
  size?: "sm" | "default";
@@ -1,15 +1,19 @@
1
1
  import { cn as e } from "../../lib/utils.js";
2
+ import { Badge as t } from "../ui/badge/index.js";
2
3
  import "react";
3
- import { ArrowDownIcon as t, ArrowUpIcon as n, MinusIcon as r } from "lucide-react";
4
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ import { ArrowDownIcon as n, ArrowUpIcon as r, MinusIcon as i } from "lucide-react";
5
+ import { jsx as a } from "react/jsx-runtime";
5
6
  //#region src/components/display/delta-badge.tsx
6
7
  function o({ value: o, trend: s = "neutral", size: c = "default", icon: l = !0, className: u, ...d }) {
7
- let f = s === "up" ? n : s === "down" ? t : r;
8
- return /* @__PURE__ */ a("span", {
8
+ return /* @__PURE__ */ a(t, {
9
9
  "data-slot": "delta-badge",
10
- className: e("inline-flex items-center justify-center font-medium", c === "sm" ? "gap-0.5 rounded px-1 py-0.5 text-[10px]" : "gap-1 rounded-full px-1.5 py-0.5 text-xs", s === "up" && "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400", s === "down" && "bg-destructive/10 text-destructive", s === "neutral" && "bg-muted text-muted-foreground", u),
11
- ...d,
12
- children: [l && /* @__PURE__ */ i(f, { className: e("shrink-0", c === "sm" ? "size-2.5" : "size-3") }), o]
10
+ variant: "soft",
11
+ tone: s === "up" ? "success" : s === "down" ? "danger" : "muted",
12
+ size: c,
13
+ leftIcon: l ? /* @__PURE__ */ a(s === "up" ? r : s === "down" ? n : i, { className: e("shrink-0", c === "sm" ? "size-2.5" : "size-3") }) : void 0,
14
+ label: o,
15
+ className: e(c === "sm" && "min-h-5 px-1.5 text-[10px]", u),
16
+ ...d
13
17
  });
14
18
  }
15
19
  //#endregion
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/card/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");function a({columns:e,renderCard:n,onCardClick:r,columnClassName:a,cardClassName:s,className:c,...l}){return(0,i.jsx)(`div`,{"data-slot":`kanban-board`,className:t.cn(`grid auto-cols-[minmax(280px,1fr)] grid-flow-col gap-4 overflow-x-auto pb-2`,c),...l,children:e.map(e=>(0,i.jsx)(o,{column:e,renderCard:n,onCardClick:r,columnClassName:a,cardClassName:s},e.key))})}function o({column:e,renderCard:r,onCardClick:a,columnClassName:o,cardClassName:s}){return(0,i.jsxs)(`section`,{"data-slot":`kanban-column`,className:t.cn(`grid min-h-40 content-start gap-3 rounded-lg border bg-muted/35 p-3`,o),children:[(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,i.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,i.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:e.title}),e.description&&(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),(0,i.jsx)(`div`,{className:`rounded-full bg-background px-2 py-0.5 text-xs text-muted-foreground`,children:e.count??e.cards.length})]}),(0,i.jsx)(`div`,{className:`grid gap-2`,children:e.cards.map(o=>r?.(o,e)??(0,i.jsxs)(n.Card,{"data-slot":`kanban-card`,className:t.cn(`transition-colors hover:bg-muted/40`,a&&!o.disabled&&`cursor-pointer`,o.disabled&&`pointer-events-none opacity-55`,s),onClick:()=>a?.(o,e),children:[(0,i.jsx)(n.CardHeader,{className:`p-3 pb-1`,children:(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,i.jsx)(n.CardTitle,{className:`text-sm`,children:o.title}),o.extra]})}),(o.description||o.meta)&&(0,i.jsxs)(n.CardContent,{className:`grid gap-2 p-3 pt-0 text-xs text-muted-foreground`,children:[o.description,o.meta&&(0,i.jsx)(`div`,{children:o.meta})]})]},o.key))})]})}exports.KanbanBoard=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/card/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");function a({columns:e,renderCard:n,onCardClick:a,onCardMove:s,emptyColumn:c=`No cards yet.`,columnClassName:l,cardClassName:u,className:d,...f}){let p=r.useMemo(()=>new Map(e.map(e=>[e.key,e])),[e]);return(0,i.jsx)(`div`,{"data-slot":`kanban-board`,className:t.cn(`grid auto-cols-[minmax(280px,1fr)] grid-flow-col gap-4 overflow-x-auto pb-2`,d),...f,children:e.map(e=>(0,i.jsx)(o,{column:e,renderCard:n,onCardClick:a,onCardMove:s,columnByKey:p,emptyColumn:c,columnClassName:l,cardClassName:u},e.key))})}function o({column:e,renderCard:r,onCardClick:a,onCardMove:o,columnByKey:s,emptyColumn:c,columnClassName:l,cardClassName:u}){return(0,i.jsxs)(`section`,{"data-slot":`kanban-column`,className:t.cn(`grid min-h-40 content-start gap-3 rounded-lg border bg-muted/35 p-3`,l),onDragOver:e=>{o&&e.preventDefault()},onDrop:t=>{let n=t.dataTransfer.getData(`application/x-tembro-kanban-card`),r=t.dataTransfer.getData(`application/x-tembro-kanban-column`),i=s.get(r),a=i?.cards.find(e=>e.key===n);a&&i&&i.key!==e.key&&o?.(a,i,e)},children:[(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,i.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,i.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:e.title}),e.description&&(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),(0,i.jsx)(`div`,{className:`rounded-full bg-background px-2 py-0.5 text-xs text-muted-foreground`,children:e.count??e.cards.length})]}),(0,i.jsx)(`div`,{className:`grid gap-2`,children:e.cards.length===0?(0,i.jsx)(`div`,{"data-slot":`kanban-column-empty`,className:`rounded-md border border-dashed bg-background/60 px-3 py-6 text-center text-sm text-muted-foreground`,children:typeof c==`function`?c(e):c}):e.cards.map(s=>r?.(s,e)??(0,i.jsxs)(n.Card,{"data-slot":`kanban-card`,role:a?`button`:void 0,tabIndex:a&&!s.disabled?0:void 0,draggable:!!(o&&!s.disabled),className:t.cn(`transition-colors hover:bg-muted/40`,a&&!s.disabled&&`cursor-pointer`,o&&!s.disabled&&`cursor-grab active:cursor-grabbing`,s.disabled&&`pointer-events-none opacity-55`,u),onDragStart:t=>{t.dataTransfer.setData(`application/x-tembro-kanban-card`,s.key),t.dataTransfer.setData(`application/x-tembro-kanban-column`,e.key),t.dataTransfer.effectAllowed=`move`},onClick:()=>a?.(s,e),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&a&&!s.disabled&&(t.preventDefault(),a(s,e))},children:[(0,i.jsx)(n.CardHeader,{className:`p-3 pb-1`,children:(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,i.jsx)(n.CardTitle,{className:`text-sm`,children:s.title}),(s.extra||s.actions)&&(0,i.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[s.extra,s.actions]})]})}),(s.description||s.meta)&&(0,i.jsxs)(n.CardContent,{className:`grid gap-2 p-3 pt-0 text-xs text-muted-foreground`,children:[s.description,s.meta&&(0,i.jsx)(`div`,{children:s.meta})]})]},s.key))})]})}exports.KanbanBoard=a;
@@ -5,6 +5,7 @@ export type KanbanCard = {
5
5
  description?: React.ReactNode;
6
6
  meta?: React.ReactNode;
7
7
  extra?: React.ReactNode;
8
+ actions?: React.ReactNode;
8
9
  disabled?: boolean;
9
10
  };
10
11
  export type KanbanColumn = {
@@ -18,8 +19,10 @@ export type KanbanBoardProps = React.ComponentProps<"div"> & {
18
19
  columns: KanbanColumn[];
19
20
  renderCard?: (card: KanbanCard, column: KanbanColumn) => React.ReactNode;
20
21
  onCardClick?: (card: KanbanCard, column: KanbanColumn) => void;
22
+ onCardMove?: (card: KanbanCard, fromColumn: KanbanColumn, toColumn: KanbanColumn) => void;
23
+ emptyColumn?: React.ReactNode | ((column: KanbanColumn) => React.ReactNode);
21
24
  columnClassName?: string;
22
25
  cardClassName?: string;
23
26
  };
24
- declare function KanbanBoard({ columns, renderCard, onCardClick, columnClassName, cardClassName, className, ...props }: KanbanBoardProps): React.JSX.Element;
27
+ declare function KanbanBoard({ columns, renderCard, onCardClick, onCardMove, emptyColumn, columnClassName, cardClassName, className, ...props }: KanbanBoardProps): React.JSX.Element;
25
28
  export { KanbanBoard };
@@ -1,63 +1,90 @@
1
1
  import { cn as e } from "../../lib/utils.js";
2
2
  import { Card as t, CardContent as n, CardHeader as r, CardTitle as i } from "../ui/card/index.js";
3
- import "react";
4
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
3
+ import * as a from "react";
4
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
5
  //#region src/components/display/kanban.tsx
6
- function s({ columns: t, renderCard: n, onCardClick: r, columnClassName: i, cardClassName: o, className: s, ...l }) {
7
- return /* @__PURE__ */ a("div", {
6
+ function c({ columns: t, renderCard: n, onCardClick: r, onCardMove: i, emptyColumn: s = "No cards yet.", columnClassName: c, cardClassName: u, className: d, ...f }) {
7
+ let p = a.useMemo(() => new Map(t.map((e) => [e.key, e])), [t]);
8
+ return /* @__PURE__ */ o("div", {
8
9
  "data-slot": "kanban-board",
9
- className: e("grid auto-cols-[minmax(280px,1fr)] grid-flow-col gap-4 overflow-x-auto pb-2", s),
10
- ...l,
11
- children: t.map((e) => /* @__PURE__ */ a(c, {
10
+ className: e("grid auto-cols-[minmax(280px,1fr)] grid-flow-col gap-4 overflow-x-auto pb-2", d),
11
+ ...f,
12
+ children: t.map((e) => /* @__PURE__ */ o(l, {
12
13
  column: e,
13
14
  renderCard: n,
14
15
  onCardClick: r,
15
- columnClassName: i,
16
- cardClassName: o
16
+ onCardMove: i,
17
+ columnByKey: p,
18
+ emptyColumn: s,
19
+ columnClassName: c,
20
+ cardClassName: u
17
21
  }, e.key))
18
22
  });
19
23
  }
20
- function c({ column: s, renderCard: c, onCardClick: l, columnClassName: u, cardClassName: d }) {
21
- return /* @__PURE__ */ o("section", {
24
+ function l({ column: a, renderCard: c, onCardClick: l, onCardMove: u, columnByKey: d, emptyColumn: f, columnClassName: p, cardClassName: m }) {
25
+ return /* @__PURE__ */ s("section", {
22
26
  "data-slot": "kanban-column",
23
- className: e("grid min-h-40 content-start gap-3 rounded-lg border bg-muted/35 p-3", u),
24
- children: [/* @__PURE__ */ o("div", {
27
+ className: e("grid min-h-40 content-start gap-3 rounded-lg border bg-muted/35 p-3", p),
28
+ onDragOver: (e) => {
29
+ u && e.preventDefault();
30
+ },
31
+ onDrop: (e) => {
32
+ let t = e.dataTransfer.getData("application/x-tembro-kanban-card"), n = e.dataTransfer.getData("application/x-tembro-kanban-column"), r = d.get(n), i = r?.cards.find((e) => e.key === t);
33
+ i && r && r.key !== a.key && u?.(i, r, a);
34
+ },
35
+ children: [/* @__PURE__ */ s("div", {
25
36
  className: "flex items-start justify-between gap-3",
26
- children: [/* @__PURE__ */ o("div", {
37
+ children: [/* @__PURE__ */ s("div", {
27
38
  className: "grid gap-0.5",
28
- children: [/* @__PURE__ */ a("h3", {
39
+ children: [/* @__PURE__ */ o("h3", {
29
40
  className: "text-sm font-semibold text-foreground",
30
- children: s.title
31
- }), s.description && /* @__PURE__ */ a("p", {
41
+ children: a.title
42
+ }), a.description && /* @__PURE__ */ o("p", {
32
43
  className: "text-xs text-muted-foreground",
33
- children: s.description
44
+ children: a.description
34
45
  })]
35
- }), /* @__PURE__ */ a("div", {
46
+ }), /* @__PURE__ */ o("div", {
36
47
  className: "rounded-full bg-background px-2 py-0.5 text-xs text-muted-foreground",
37
- children: s.count ?? s.cards.length
48
+ children: a.count ?? a.cards.length
38
49
  })]
39
- }), /* @__PURE__ */ a("div", {
50
+ }), /* @__PURE__ */ o("div", {
40
51
  className: "grid gap-2",
41
- children: s.cards.map((u) => c?.(u, s) ?? /* @__PURE__ */ o(t, {
52
+ children: a.cards.length === 0 ? /* @__PURE__ */ o("div", {
53
+ "data-slot": "kanban-column-empty",
54
+ className: "rounded-md border border-dashed bg-background/60 px-3 py-6 text-center text-sm text-muted-foreground",
55
+ children: typeof f == "function" ? f(a) : f
56
+ }) : a.cards.map((d) => c?.(d, a) ?? /* @__PURE__ */ s(t, {
42
57
  "data-slot": "kanban-card",
43
- className: e("transition-colors hover:bg-muted/40", l && !u.disabled && "cursor-pointer", u.disabled && "pointer-events-none opacity-55", d),
44
- onClick: () => l?.(u, s),
45
- children: [/* @__PURE__ */ a(r, {
58
+ role: l ? "button" : void 0,
59
+ tabIndex: l && !d.disabled ? 0 : void 0,
60
+ draggable: !!(u && !d.disabled),
61
+ className: e("transition-colors hover:bg-muted/40", l && !d.disabled && "cursor-pointer", u && !d.disabled && "cursor-grab active:cursor-grabbing", d.disabled && "pointer-events-none opacity-55", m),
62
+ onDragStart: (e) => {
63
+ e.dataTransfer.setData("application/x-tembro-kanban-card", d.key), e.dataTransfer.setData("application/x-tembro-kanban-column", a.key), e.dataTransfer.effectAllowed = "move";
64
+ },
65
+ onClick: () => l?.(d, a),
66
+ onKeyDown: (e) => {
67
+ (e.key === "Enter" || e.key === " ") && l && !d.disabled && (e.preventDefault(), l(d, a));
68
+ },
69
+ children: [/* @__PURE__ */ o(r, {
46
70
  className: "p-3 pb-1",
47
- children: /* @__PURE__ */ o("div", {
71
+ children: /* @__PURE__ */ s("div", {
48
72
  className: "flex items-start justify-between gap-2",
49
- children: [/* @__PURE__ */ a(i, {
73
+ children: [/* @__PURE__ */ o(i, {
50
74
  className: "text-sm",
51
- children: u.title
52
- }), u.extra]
75
+ children: d.title
76
+ }), (d.extra || d.actions) && /* @__PURE__ */ s("div", {
77
+ className: "flex shrink-0 items-center gap-1",
78
+ children: [d.extra, d.actions]
79
+ })]
53
80
  })
54
- }), (u.description || u.meta) && /* @__PURE__ */ o(n, {
81
+ }), (d.description || d.meta) && /* @__PURE__ */ s(n, {
55
82
  className: "grid gap-2 p-3 pt-0 text-xs text-muted-foreground",
56
- children: [u.description, u.meta && /* @__PURE__ */ a("div", { children: u.meta })]
83
+ children: [d.description, d.meta && /* @__PURE__ */ o("div", { children: d.meta })]
57
84
  })]
58
- }, u.key))
85
+ }, d.key))
59
86
  })]
60
87
  });
61
88
  }
62
89
  //#endregion
63
- export { s as KanbanBoard };
90
+ export { c as KanbanBoard };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/card/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a={1:`grid-cols-1`,2:`grid-cols-1 sm:grid-cols-2`,3:`grid-cols-1 sm:grid-cols-2 xl:grid-cols-3`,4:`grid-cols-1 sm:grid-cols-2 xl:grid-cols-4`},o={default:``,success:`border-emerald-500/20 bg-emerald-500/5`,warning:`border-amber-500/20 bg-amber-500/5`,danger:`border-destructive/20 bg-destructive/5`,info:`border-blue-500/20 bg-blue-500/5`,muted:`bg-muted/40`};function s({className:e,items:r,columns:s=4,compact:c=!1,itemClassName:l,...u}){let d=r.filter(e=>!e.hidden);return(0,i.jsx)(`div`,{"data-slot":`metric-grid`,className:t.cn(`grid gap-3`,a[s],e),...u,children:d.map(e=>(0,i.jsxs)(n.Card,{"data-slot":`stat-card`,"data-tone":e.tone??`default`,className:t.cn(`min-w-0 overflow-hidden`,o[e.tone??`default`],l,e.className),children:[(0,i.jsxs)(n.CardHeader,{className:t.cn(`flex flex-row items-start justify-between gap-3 space-y-0`,c?`p-3 pb-1`:`pb-2`),children:[(0,i.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,i.jsx)(n.CardDescription,{className:`truncate`,children:e.label}),(0,i.jsx)(n.CardTitle,{className:t.cn(`truncate`,c?`text-xl`:`text-2xl`),children:e.value})]}),e.icon&&(0,i.jsx)(`div`,{className:`shrink-0 rounded-lg bg-muted p-2 text-muted-foreground [&_svg]:size-4`,children:e.icon})]}),(e.description||e.trend)&&(0,i.jsxs)(n.CardContent,{className:t.cn(`flex min-w-0 items-center justify-between gap-2`,c?`p-3 pt-1`:`pt-0`),children:[e.description&&(0,i.jsx)(`div`,{className:`min-w-0 truncate text-xs text-muted-foreground`,children:e.description}),e.trend&&(0,i.jsx)(`div`,{className:`shrink-0 text-xs font-medium`,children:e.trend})]})]},e.key))})}exports.MetricGrid=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs"),n=require("../ui/card/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a={1:`grid-cols-1`,2:`grid-cols-1 sm:grid-cols-2`,3:`grid-cols-1 sm:grid-cols-2 xl:grid-cols-3`,4:`grid-cols-1 sm:grid-cols-2 xl:grid-cols-4`},o={default:``,success:`border-emerald-500/20 bg-emerald-500/5`,warning:`border-amber-500/20 bg-amber-500/5`,danger:`border-destructive/20 bg-destructive/5`,info:`border-blue-500/20 bg-blue-500/5`,muted:`bg-muted/40`};function s({className:e,items:r,columns:s=4,compact:c=!1,itemClassName:l,...u}){let d=r.filter(e=>!e.hidden);return(0,i.jsx)(`div`,{"data-slot":`metric-grid`,className:t.cn(`grid gap-3`,a[s],e),...u,children:d.map(e=>(0,i.jsxs)(n.Card,{"data-slot":`stat-card`,"data-tone":e.tone??`default`,className:t.cn(`min-w-0 overflow-hidden`,o[e.tone??`default`],l,e.className),children:[(0,i.jsxs)(n.CardHeader,{className:t.cn(`flex flex-row items-start justify-between gap-3 space-y-0`,c?`p-3 pb-1`:`pb-2`),children:[(0,i.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,i.jsx)(n.CardDescription,{className:`truncate`,children:e.label}),(0,i.jsx)(n.CardTitle,{className:t.cn(`truncate`,c?`text-xl`:`text-2xl`),children:e.loading?(0,i.jsx)(`span`,{className:`block h-8 w-24 animate-pulse rounded bg-muted`}):e.value})]}),e.icon&&(0,i.jsx)(`div`,{className:`shrink-0 rounded-lg bg-muted p-2 text-muted-foreground [&_svg]:size-4`,children:e.icon})]}),(e.description||e.trend)&&(0,i.jsxs)(n.CardContent,{className:t.cn(`flex min-w-0 items-center justify-between gap-2`,c?`p-3 pt-1`:`pt-0`),children:[e.description&&(0,i.jsx)(`div`,{className:`min-w-0 truncate text-xs text-muted-foreground`,children:e.description}),e.trend&&(0,i.jsx)(`div`,{className:`shrink-0 text-xs font-medium`,children:e.trend})]})]},e.key))})}exports.MetricGrid=s;
@@ -11,6 +11,7 @@ export type MetricItem = {
11
11
  tone?: MetricTone;
12
12
  hidden?: boolean;
13
13
  className?: string;
14
+ loading?: boolean;
14
15
  };
15
16
  export type MetricGridProps = React.ComponentProps<"div"> & {
16
17
  items: MetricItem[];
@@ -35,7 +35,7 @@ function u({ className: u, items: d, columns: f = 4, compact: p = !1, itemClassN
35
35
  children: c.label
36
36
  }), /* @__PURE__ */ o(a, {
37
37
  className: e("truncate", p ? "text-xl" : "text-2xl"),
38
- children: c.value
38
+ children: c.loading ? /* @__PURE__ */ o("span", { className: "block h-8 w-24 animate-pulse rounded bg-muted" }) : c.value
39
39
  })]
40
40
  }), c.icon && /* @__PURE__ */ o("div", {
41
41
  className: "shrink-0 rounded-lg bg-muted p-2 text-muted-foreground [&_svg]:size-4",
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("react/jsx-runtime");function i(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function a(e,t,n){return e<7&&t<7||e<7&&t>20||e>20&&t<7?!1:((Math.imul(e+17,73856093)^Math.imul(t+31,19349663)^n)>>>0)%5<2}function o({x:e,y:t}){return(0,r.jsxs)(`g`,{children:[(0,r.jsx)(`rect`,{x:e,y:t,width:`7`,height:`7`,fill:`currentColor`}),(0,r.jsx)(`rect`,{x:e+1,y:t+1,width:`5`,height:`5`,fill:`white`}),(0,r.jsx)(`rect`,{x:e+2,y:t+2,width:`3`,height:`3`,fill:`currentColor`})]})}function s({value:e,cells:t=29,title:n}){let s=i(e),c=`0 0 ${t} ${t}`,l=Array.from({length:t},(e,t)=>t),u=Array.from({length:t},(e,t)=>t);return(0,r.jsxs)(`svg`,{role:`img`,"aria-label":n??e,viewBox:c,className:`size-full text-foreground`,shapeRendering:`crispEdges`,children:[(0,r.jsx)(`rect`,{width:t,height:t,fill:`white`}),(0,r.jsx)(o,{x:0,y:0}),(0,r.jsx)(o,{x:t-7,y:0}),(0,r.jsx)(o,{x:0,y:t-7}),l.map(e=>u.map(t=>a(e,t,s)?(0,r.jsx)(`rect`,{x:t,y:e,width:`1`,height:`1`,fill:`currentColor`},`${e}-${t}`):null))]})}function c({value:e,src:n,alt:i,size:a=160,cells:o=29,className:c,...l}){return(0,r.jsx)(`div`,{"data-slot":`qr-code`,className:t.cn(`inline-flex flex-col items-center gap-2 rounded-xl border bg-background p-3`,c),...l,children:(0,r.jsx)(`div`,{className:`rounded-md bg-white p-2`,style:{width:a,height:a},children:n?(0,r.jsx)(`img`,{src:n,alt:i??e,width:a,height:a,className:`size-full rounded-sm object-contain`}):(0,r.jsx)(s,{value:e,cells:o,title:i})})})}exports.QRCode=c,exports.QRCodeSvg=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("react/jsx-runtime");function i(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function a(e,t,n){return e<7&&t<7||e<7&&t>20||e>20&&t<7?!1:((Math.imul(e+17,73856093)^Math.imul(t+31,19349663)^n)>>>0)%5<2}function o({x:e,y:t}){return(0,r.jsxs)(`g`,{children:[(0,r.jsx)(`rect`,{x:e,y:t,width:`7`,height:`7`,fill:`currentColor`}),(0,r.jsx)(`rect`,{x:e+1,y:t+1,width:`5`,height:`5`,fill:`white`}),(0,r.jsx)(`rect`,{x:e+2,y:t+2,width:`3`,height:`3`,fill:`currentColor`})]})}function s({value:e,cells:t=29,title:n}){let s=i(e),c=`0 0 ${t} ${t}`,l=Array.from({length:t},(e,t)=>t),u=Array.from({length:t},(e,t)=>t);return(0,r.jsxs)(`svg`,{role:`img`,"aria-label":n??e,viewBox:c,className:`size-full text-foreground`,shapeRendering:`crispEdges`,children:[(0,r.jsx)(`rect`,{width:t,height:t,fill:`white`}),(0,r.jsx)(o,{x:0,y:0}),(0,r.jsx)(o,{x:t-7,y:0}),(0,r.jsx)(o,{x:0,y:t-7}),l.map(e=>u.map(t=>a(e,t,s)?(0,r.jsx)(`rect`,{x:t,y:e,width:`1`,height:`1`,fill:`currentColor`},`${e}-${t}`):null))]})}function c({value:e,src:n,alt:i,size:a=160,cells:o=29,visualOnlyLabel:c=`Visual preview only. Provide src from a certified QR encoder for scan-critical use.`,className:l,...u}){return(0,r.jsxs)(`div`,{"data-slot":`qr-code`,className:t.cn(`inline-flex flex-col items-center gap-2 rounded-xl border bg-background p-3`,l),...u,children:[(0,r.jsx)(`div`,{className:`rounded-md bg-white p-2`,style:{width:a,height:a},children:n?(0,r.jsx)(`img`,{src:n,alt:i??e,width:a,height:a,className:`size-full rounded-sm object-contain`}):(0,r.jsx)(s,{value:e,cells:o,title:i})}),!n&&c&&(0,r.jsx)(`div`,{className:`max-w-48 text-center text-xs text-muted-foreground`,children:c})]})}exports.QRCode=c,exports.QRCodeSvg=s;
@@ -5,11 +5,12 @@ export type QRCodeProps = React.ComponentProps<"div"> & {
5
5
  alt?: string;
6
6
  size?: number;
7
7
  cells?: number;
8
+ visualOnlyLabel?: React.ReactNode;
8
9
  };
9
10
  declare function QRCodeSvg({ value, cells, title }: {
10
11
  value: string;
11
12
  cells?: number;
12
13
  title?: string;
13
14
  }): React.JSX.Element;
14
- declare function QRCode({ value, src, alt, size, cells, className, ...props }: QRCodeProps): React.JSX.Element;
15
+ declare function QRCode({ value, src, alt, size, cells, visualOnlyLabel, className, ...props }: QRCodeProps): React.JSX.Element;
15
16
  export { QRCode, QRCodeSvg };
@@ -71,29 +71,32 @@ function o({ value: e, cells: o = 29, title: s }) {
71
71
  ]
72
72
  });
73
73
  }
74
- function s({ value: n, src: r, alt: i, size: a = 160, cells: s = 29, className: c, ...l }) {
75
- return /* @__PURE__ */ t("div", {
74
+ function s({ value: r, src: i, alt: a, size: s = 160, cells: c = 29, visualOnlyLabel: l = "Visual preview only. Provide src from a certified QR encoder for scan-critical use.", className: u, ...d }) {
75
+ return /* @__PURE__ */ n("div", {
76
76
  "data-slot": "qr-code",
77
- className: e("inline-flex flex-col items-center gap-2 rounded-xl border bg-background p-3", c),
78
- ...l,
79
- children: /* @__PURE__ */ t("div", {
77
+ className: e("inline-flex flex-col items-center gap-2 rounded-xl border bg-background p-3", u),
78
+ ...d,
79
+ children: [/* @__PURE__ */ t("div", {
80
80
  className: "rounded-md bg-white p-2",
81
81
  style: {
82
- width: a,
83
- height: a
82
+ width: s,
83
+ height: s
84
84
  },
85
- children: r ? /* @__PURE__ */ t("img", {
86
- src: r,
87
- alt: i ?? n,
88
- width: a,
89
- height: a,
85
+ children: i ? /* @__PURE__ */ t("img", {
86
+ src: i,
87
+ alt: a ?? r,
88
+ width: s,
89
+ height: s,
90
90
  className: "size-full rounded-sm object-contain"
91
91
  }) : /* @__PURE__ */ t(o, {
92
- value: n,
93
- cells: s,
94
- title: i
92
+ value: r,
93
+ cells: c,
94
+ title: a
95
95
  })
96
- })
96
+ }), !i && l && /* @__PURE__ */ t("div", {
97
+ className: "max-w-48 text-center text-xs text-muted-foreground",
98
+ children: l
99
+ })]
97
100
  });
98
101
  }
99
102
  //#endregion
@@ -31,7 +31,7 @@ export type InfoCardRenderContext = {
31
31
  content?: React.ReactNode;
32
32
  footer?: React.ReactNode;
33
33
  };
34
- export type InfoCardProps = Omit<React.ComponentProps<typeof Card>, "title" | "content" | "size"> & InfoCardRenderContext & {
34
+ export type InfoCardProps = Omit<React.ComponentProps<typeof Card>, "title" | "content" | "size" | "orientation"> & InfoCardRenderContext & {
35
35
  orientation?: InfoCardOrientation;
36
36
  variant?: InfoCardVariant;
37
37
  size?: InfoCardSize;
@@ -12,7 +12,7 @@ export type StatusLegendItem = {
12
12
  hidden?: boolean;
13
13
  className?: string;
14
14
  };
15
- export type StatusLegendProps = React.ComponentProps<typeof Card> & {
15
+ export type StatusLegendProps = Omit<React.ComponentProps<typeof Card>, "orientation"> & {
16
16
  title?: React.ReactNode;
17
17
  description?: React.ReactNode;
18
18
  actions?: React.ReactNode;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("react/jsx-runtime");var i={neutral:`border-border bg-muted text-foreground`,info:`border-sky-200 bg-sky-50 text-sky-700 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-300`,warning:`border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-300`,danger:`border-red-200 bg-red-50 text-red-700 dark:border-red-900 dark:bg-red-950 dark:text-red-300`},a={sm:`h-6 px-2 text-xs`,default:`h-7 px-2.5 text-sm`,lg:`h-8 px-3 text-sm`};function o({tone:e=`neutral`,size:n=`default`,removable:o,selected:s,onRemove:c,className:l,children:u,...d}){return(0,r.jsxs)(`span`,{"data-slot":`tag`,"data-tone":e,"data-selected":s?`true`:void 0,className:t.cn(`inline-flex items-center gap-1 rounded-full border font-medium transition-colors`,i[e],a[n],s&&`ring-2 ring-ring ring-offset-1`,l),...d,children:[(0,r.jsx)(`span`,{children:u}),o&&(0,r.jsx)(`button`,{type:`button`,"aria-label":`Remove tag`,className:`-mr-1 inline-flex size-4 items-center justify-center rounded-full hover:bg-black/10 dark:hover:bg-white/10`,onClick:e=>{t.stopInteractivePropagation(e),c?.()},onMouseDown:t.stopInteractivePropagation,onDoubleClick:t.stopInteractivePropagation,children:`×`})]})}function s(e){return(0,r.jsx)(o,{...e})}function c({gap:e=`default`,className:n,...i}){return(0,r.jsx)(`div`,{"data-slot":`tag-group`,className:t.cn(`flex flex-wrap items-center`,e===`sm`&&`gap-1`,e==="default"&&`gap-2`,e===`lg`&&`gap-3`,n),...i})}exports.Chip=s,exports.Tag=o,exports.TagGroup=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("lucide-react"),i=require("react/jsx-runtime");var a={neutral:`border-border bg-muted text-foreground`,info:`border-sky-200 bg-sky-50 text-sky-700 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-300`,warning:`border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-300`,danger:`border-red-200 bg-red-50 text-red-700 dark:border-red-900 dark:bg-red-950 dark:text-red-300`},o={sm:`h-6 px-2 text-xs`,default:`h-7 px-2.5 text-sm`,lg:`h-8 px-3 text-sm`};function s({tone:e=`neutral`,size:n=`default`,removable:s,selected:c,onRemove:l,removeLabel:u=`Remove tag`,className:d,children:f,onKeyDown:p,...m}){let h=e=>{t.stopInteractivePropagation(e),l?.()};return(0,i.jsxs)(`span`,{"data-slot":`tag`,"data-tone":e,"data-selected":c?`true`:void 0,tabIndex:s?0:m.tabIndex,className:t.cn(`inline-flex items-center gap-1.5 rounded-full border font-medium transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/35`,a[e],o[n],c&&`ring-2 ring-ring ring-offset-1`,d),onKeyDown:e=>{s&&(e.key===`Backspace`||e.key===`Delete`)&&(e.preventDefault(),l?.()),p?.(e)},...m,children:[(0,i.jsx)(`span`,{children:f}),s&&(0,i.jsx)(`button`,{type:`button`,"aria-label":u,className:`-mr-1 inline-flex size-4 shrink-0 items-center justify-center rounded-full opacity-80 transition hover:bg-black/10 hover:opacity-100 focus-visible:ring-2 focus-visible:ring-current/35 dark:hover:bg-white/10`,onClick:h,onMouseDown:t.stopInteractivePropagation,onDoubleClick:t.stopInteractivePropagation,children:(0,i.jsx)(r.XIcon,{className:`size-3`})})]})}function c(e){return(0,i.jsx)(s,{...e})}function l({gap:e=`default`,className:n,...r}){return(0,i.jsx)(`div`,{"data-slot":`tag-group`,className:t.cn(`flex flex-wrap items-center`,e===`sm`&&`gap-1`,e==="default"&&`gap-2`,e===`lg`&&`gap-3`,n),...r})}exports.Chip=c,exports.Tag=s,exports.TagGroup=l;
@@ -7,11 +7,12 @@ export type TagProps = React.ComponentProps<"span"> & {
7
7
  removable?: boolean;
8
8
  selected?: boolean;
9
9
  onRemove?: () => void;
10
+ removeLabel?: string;
10
11
  };
11
12
  export type TagGroupProps = React.ComponentProps<"div"> & {
12
13
  gap?: "sm" | "default" | "lg";
13
14
  };
14
- declare function Tag({ tone, size, removable, selected, onRemove, className, children, ...props }: TagProps): React.JSX.Element;
15
+ declare function Tag({ tone, size, removable, selected, onRemove, removeLabel, className, children, onKeyDown, ...props }: TagProps): React.JSX.Element;
15
16
  declare function Chip(props: TagProps): React.JSX.Element;
16
17
  declare function TagGroup({ gap, className, ...props }: TagGroupProps): React.JSX.Element;
17
18
  export { Chip, Tag, TagGroup };
@@ -1,47 +1,53 @@
1
1
  import { cn as e, stopInteractivePropagation as t } from "../../lib/utils.js";
2
2
  import "react";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
+ import { XIcon as n } from "lucide-react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
5
  //#region src/components/display/tag.tsx
5
- var i = {
6
+ var a = {
6
7
  neutral: "border-border bg-muted text-foreground",
7
8
  info: "border-sky-200 bg-sky-50 text-sky-700 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-300",
8
9
  success: "border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-300",
9
10
  warning: "border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-300",
10
11
  danger: "border-red-200 bg-red-50 text-red-700 dark:border-red-900 dark:bg-red-950 dark:text-red-300"
11
- }, a = {
12
+ }, o = {
12
13
  sm: "h-6 px-2 text-xs",
13
14
  default: "h-7 px-2.5 text-sm",
14
15
  lg: "h-8 px-3 text-sm"
15
16
  };
16
- function o({ tone: o = "neutral", size: s = "default", removable: c, selected: l, onRemove: u, className: d, children: f, ...p }) {
17
- return /* @__PURE__ */ r("span", {
17
+ function s({ tone: s = "neutral", size: c = "default", removable: l, selected: u, onRemove: d, removeLabel: f = "Remove tag", className: p, children: m, onKeyDown: h, ...g }) {
18
+ let _ = (e) => {
19
+ t(e), d?.();
20
+ };
21
+ return /* @__PURE__ */ i("span", {
18
22
  "data-slot": "tag",
19
- "data-tone": o,
20
- "data-selected": l ? "true" : void 0,
21
- className: e("inline-flex items-center gap-1 rounded-full border font-medium transition-colors", i[o], a[s], l && "ring-2 ring-ring ring-offset-1", d),
22
- ...p,
23
- children: [/* @__PURE__ */ n("span", { children: f }), c && /* @__PURE__ */ n("button", {
23
+ "data-tone": s,
24
+ "data-selected": u ? "true" : void 0,
25
+ tabIndex: l ? 0 : g.tabIndex,
26
+ className: e("inline-flex items-center gap-1.5 rounded-full border font-medium transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/35", a[s], o[c], u && "ring-2 ring-ring ring-offset-1", p),
27
+ onKeyDown: (e) => {
28
+ l && (e.key === "Backspace" || e.key === "Delete") && (e.preventDefault(), d?.()), h?.(e);
29
+ },
30
+ ...g,
31
+ children: [/* @__PURE__ */ r("span", { children: m }), l && /* @__PURE__ */ r("button", {
24
32
  type: "button",
25
- "aria-label": "Remove tag",
26
- className: "-mr-1 inline-flex size-4 items-center justify-center rounded-full hover:bg-black/10 dark:hover:bg-white/10",
27
- onClick: (e) => {
28
- t(e), u?.();
29
- },
33
+ "aria-label": f,
34
+ className: "-mr-1 inline-flex size-4 shrink-0 items-center justify-center rounded-full opacity-80 transition hover:bg-black/10 hover:opacity-100 focus-visible:ring-2 focus-visible:ring-current/35 dark:hover:bg-white/10",
35
+ onClick: _,
30
36
  onMouseDown: t,
31
37
  onDoubleClick: t,
32
- children: "×"
38
+ children: /* @__PURE__ */ r(n, { className: "size-3" })
33
39
  })]
34
40
  });
35
41
  }
36
- function s(e) {
37
- return /* @__PURE__ */ n(o, { ...e });
42
+ function c(e) {
43
+ return /* @__PURE__ */ r(s, { ...e });
38
44
  }
39
- function c({ gap: t = "default", className: r, ...i }) {
40
- return /* @__PURE__ */ n("div", {
45
+ function l({ gap: t = "default", className: n, ...i }) {
46
+ return /* @__PURE__ */ r("div", {
41
47
  "data-slot": "tag-group",
42
- className: e("flex flex-wrap items-center", t === "sm" && "gap-1", t === "default" && "gap-2", t === "lg" && "gap-3", r),
48
+ className: e("flex flex-wrap items-center", t === "sm" && "gap-1", t === "default" && "gap-2", t === "lg" && "gap-3", n),
43
49
  ...i
44
50
  });
45
51
  }
46
52
  //#endregion
47
- export { s as Chip, o as Tag, c as TagGroup };
53
+ export { c as Chip, s as Tag, l as TagGroup };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("lucide-react"),i=require("react/jsx-runtime");function a({items:e,defaultExpandedKeys:r=[],expandedKeys:a,onExpandedKeysChange:s,selectedKey:c,onSelect:l,className:u,...d}){let[f,p]=n.useState(r),m=a??f,h=e=>{a===void 0&&p(e),s?.(e)},g=e=>{h(m.includes(e)?m.filter(t=>t!==e):[...m,e])};return(0,i.jsx)(`div`,{"data-slot":`tree-view`,role:`tree`,className:t.cn(`grid gap-1 text-sm`,u),...d,children:e.map(e=>(0,i.jsx)(o,{item:e,level:1,expandedKeys:m,selectedKey:c,onToggle:g,onSelect:l},e.key))})}function o({item:e,level:n,expandedKeys:a,selectedKey:s,onToggle:c,onSelect:l}){let u=!!e.children?.length,d=a.includes(e.key),f=s===e.key;return(0,i.jsxs)(`div`,{"data-slot":`tree-node`,role:`treeitem`,"aria-expanded":u?d:void 0,"aria-selected":f||void 0,children:[(0,i.jsxs)(`div`,{className:t.cn(`flex items-center gap-1 rounded-md px-2 py-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,f&&`bg-muted text-foreground`,e.disabled&&`pointer-events-none opacity-50`),style:{paddingLeft:`${n*.75}rem`},children:[(0,i.jsx)(`button`,{type:`button`,"aria-label":d?`Collapse`:`Expand`,className:t.cn(`flex size-5 items-center justify-center rounded-sm`,!u&&`invisible`),onClick:()=>c(e.key),children:(0,i.jsx)(r.ChevronRightIcon,{className:t.cn(`size-4 transition-transform`,d&&`rotate-90`)})}),e.icon,(0,i.jsx)(`button`,{type:`button`,className:`min-w-0 flex-1 truncate text-left`,onClick:()=>l?.(e),children:e.label}),e.extra]}),u&&d&&(0,i.jsx)(`div`,{role:`group`,className:`grid gap-1`,children:e.children?.map(e=>(0,i.jsx)(o,{item:e,level:n+1,expandedKeys:a,selectedKey:s,onToggle:c,onSelect:l},e.key))})]})}exports.TreeView=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../lib/utils.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("lucide-react"),i=require("react/jsx-runtime");function a({items:e,defaultExpandedKeys:r=[],expandedKeys:a,onExpandedKeysChange:s,selectedKey:c,onSelect:l,checkedKeys:d,defaultCheckedKeys:f=[],onCheckedKeysChange:p,checkable:m=!1,searchQuery:h,onLoadChildren:g,className:_,...v}){let[y,b]=n.useState(r),[x,S]=n.useState(f),C=a??y,w=d??x,T=h?.trim().toLowerCase(),E=n.useCallback(e=>{a===void 0&&b(e),s?.(e)},[a,s]),D=(e,t)=>{let n=t?[...new Set([...w,e])]:w.filter(t=>t!==e);d===void 0&&S(n),p?.(n)},O=n.useCallback(e=>{E(C.includes(e)?C.filter(t=>t!==e):[...C,e])},[C,E]),k=n.useMemo(()=>o(e,C,T),[e,C,T]);return(0,i.jsx)(`div`,{"data-slot":`tree-view`,role:`tree`,className:t.cn(`grid gap-1 text-sm`,_),onKeyDown:e=>{let t=e.target.dataset.treeNodeKey;if(!t)return;let n=k.indexOf(t),r=t=>{if(!t)return;let n=t.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`);e.currentTarget.querySelector(`[data-tree-node-key="${n}"]`)?.focus()};e.key===`ArrowDown`?(e.preventDefault(),r(k[Math.min(n+1,k.length-1)])):e.key===`ArrowUp`?(e.preventDefault(),r(k[Math.max(n-1,0)])):e.key===`ArrowRight`?(e.preventDefault(),C.includes(t)||O(t)):e.key===`ArrowLeft`&&(e.preventDefault(),C.includes(t)&&O(t)),v.onKeyDown?.(e)},...v,children:e.map(e=>(0,i.jsx)(u,{item:e,level:1,expandedKeys:C,selectedKey:c,onToggle:O,onSelect:l,checkedKeys:w,onCheckedChange:D,checkable:m,searchQuery:T,onLoadChildren:g},e.key))})}function o(e,t,n){return e.flatMap(e=>c(e,n)?[e.key,...e.children&&t.includes(e.key)?o(e.children,t,n):[]]:[])}function s(e){return e.searchText??(typeof e.label==`string`?e.label:e.key)}function c(e,t){return t?s(e).toLowerCase().includes(t)||!!e.children?.some(e=>c(e,t)):!0}function l(e,t){if(!t||typeof e!=`string`)return e;let n=e.toLowerCase().indexOf(t);return n<0?e:(0,i.jsxs)(i.Fragment,{children:[e.slice(0,n),(0,i.jsx)(`mark`,{className:`rounded bg-primary/15 px-0.5 text-foreground`,children:e.slice(n,n+t.length)}),e.slice(n+t.length)]})}function u({item:e,level:n,expandedKeys:a,selectedKey:o,onToggle:d,onSelect:f,checkedKeys:p,onCheckedChange:m,checkable:h,searchQuery:g,onLoadChildren:_}){if(!c(e,g))return null;let v=!!e.children?.length||!!_,y=a.includes(e.key),b=o===e.key,x=p.includes(e.key);return(0,i.jsxs)(`div`,{"data-slot":`tree-node`,role:`treeitem`,"aria-expanded":v?y:void 0,"aria-selected":b||void 0,children:[(0,i.jsxs)(`div`,{className:t.cn(`flex items-center gap-1 rounded-md px-2 py-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,b&&`bg-muted text-foreground`,e.disabled&&`pointer-events-none opacity-50`),style:{paddingLeft:`${n*.75}rem`},children:[(0,i.jsx)(`button`,{type:`button`,"aria-label":y?`Collapse`:`Expand`,className:t.cn(`flex size-5 items-center justify-center rounded-sm`,!v&&`invisible`),onClick:()=>{!y&&!e.children?.length&&_?.(e),d(e.key)},children:(0,i.jsx)(r.ChevronRightIcon,{className:t.cn(`size-4 transition-transform`,y&&`rotate-90`)})}),h&&(0,i.jsx)(`input`,{type:`checkbox`,className:`size-4 rounded border-border accent-primary`,checked:x,disabled:e.disabled,"aria-label":`Select ${s(e)}`,onChange:t=>m(e.key,t.currentTarget.checked)}),e.icon,(0,i.jsx)(`button`,{type:`button`,"data-tree-node-key":e.key,className:`min-w-0 flex-1 truncate rounded-sm text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`,disabled:e.disabled,onClick:()=>f?.(e),children:l(e.label,g)}),e.loading?(0,i.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Loading...`}):e.extra]}),v&&y&&(0,i.jsx)(`div`,{role:`group`,className:`grid gap-1`,children:e.children?.map(e=>(0,i.jsx)(u,{item:e,level:n+1,expandedKeys:a,selectedKey:o,onToggle:d,onSelect:f,checkedKeys:p,onCheckedChange:m,checkable:h,searchQuery:g,onLoadChildren:_},e.key))})]})}exports.TreeView=a;
@@ -2,9 +2,11 @@ import * as React from "react";
2
2
  export type TreeViewItem = {
3
3
  key: string;
4
4
  label: React.ReactNode;
5
+ searchText?: string;
5
6
  icon?: React.ReactNode;
6
7
  extra?: React.ReactNode;
7
8
  children?: TreeViewItem[];
9
+ loading?: boolean;
8
10
  disabled?: boolean;
9
11
  };
10
12
  export type TreeViewProps = Omit<React.ComponentProps<"div">, "onSelect"> & {
@@ -14,6 +16,12 @@ export type TreeViewProps = Omit<React.ComponentProps<"div">, "onSelect"> & {
14
16
  onExpandedKeysChange?: (keys: string[]) => void;
15
17
  selectedKey?: string;
16
18
  onSelect?: (item: TreeViewItem) => void;
19
+ checkedKeys?: string[];
20
+ defaultCheckedKeys?: string[];
21
+ onCheckedKeysChange?: (keys: string[]) => void;
22
+ checkable?: boolean;
23
+ searchQuery?: string;
24
+ onLoadChildren?: (item: TreeViewItem) => void | Promise<void>;
17
25
  };
18
- declare function TreeView({ items, defaultExpandedKeys, expandedKeys, onExpandedKeysChange, selectedKey, onSelect, className, ...props }: TreeViewProps): React.JSX.Element;
26
+ declare function TreeView({ items, defaultExpandedKeys, expandedKeys, onExpandedKeysChange, selectedKey, onSelect, checkedKeys, defaultCheckedKeys, onCheckedKeysChange, checkable, searchQuery, onLoadChildren, className, ...props }: TreeViewProps): React.JSX.Element;
19
27
  export { TreeView };