tembro 2.0.6 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) 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-toolbar.cjs +1 -1
  17. package/dist/components/data-table/data-table-toolbar.js +12 -13
  18. package/dist/components/display/carousel.cjs +1 -1
  19. package/dist/components/display/carousel.d.ts +9 -1
  20. package/dist/components/display/carousel.js +123 -81
  21. package/dist/components/display/code-block.cjs +2 -2
  22. package/dist/components/display/code-block.d.ts +2 -1
  23. package/dist/components/display/code-block.js +17 -12
  24. package/dist/components/display/delta-badge.cjs +1 -1
  25. package/dist/components/display/delta-badge.d.ts +2 -1
  26. package/dist/components/display/delta-badge.js +11 -7
  27. package/dist/components/display/kanban.cjs +1 -1
  28. package/dist/components/display/kanban.d.ts +4 -1
  29. package/dist/components/display/kanban.js +60 -33
  30. package/dist/components/display/metric-grid.cjs +1 -1
  31. package/dist/components/display/metric-grid.d.ts +1 -0
  32. package/dist/components/display/metric-grid.js +1 -1
  33. package/dist/components/display/qr-code.cjs +1 -1
  34. package/dist/components/display/qr-code.d.ts +2 -1
  35. package/dist/components/display/qr-code.js +19 -16
  36. package/dist/components/display/status-legend.cjs +1 -1
  37. package/dist/components/display/status-legend.js +6 -2
  38. package/dist/components/display/tag.cjs +1 -1
  39. package/dist/components/display/tag.d.ts +2 -1
  40. package/dist/components/display/tag.js +28 -22
  41. package/dist/components/display/tree-view.cjs +1 -1
  42. package/dist/components/display/tree-view.d.ts +9 -1
  43. package/dist/components/display/tree-view.js +104 -40
  44. package/dist/components/display/trend-card.cjs +1 -1
  45. package/dist/components/display/trend-card.js +27 -41
  46. package/dist/components/feedback/alert.cjs +1 -1
  47. package/dist/components/feedback/alert.d.ts +2 -1
  48. package/dist/components/feedback/alert.js +6 -6
  49. package/dist/components/feedback/loading-state.cjs +1 -1
  50. package/dist/components/feedback/loading-state.d.ts +3 -1
  51. package/dist/components/feedback/loading-state.js +23 -10
  52. package/dist/components/feedback/page-state.cjs +1 -1
  53. package/dist/components/feedback/page-state.d.ts +2 -1
  54. package/dist/components/feedback/page-state.js +7 -4
  55. package/dist/components/form/form-field-shell.cjs +1 -1
  56. package/dist/components/form/form-field-shell.d.ts +4 -2
  57. package/dist/components/form/form-field-shell.js +57 -41
  58. package/dist/components/form/form-input.cjs +1 -1
  59. package/dist/components/form/form-input.js +2 -0
  60. package/dist/components/form/form-select.cjs +1 -1
  61. package/dist/components/form/form-select.js +2 -0
  62. package/dist/components/form/form-switch.cjs +1 -1
  63. package/dist/components/form/form-switch.d.ts +1 -1
  64. package/dist/components/form/form-switch.js +58 -54
  65. package/dist/components/form/form-textarea.cjs +1 -1
  66. package/dist/components/form/form-textarea.d.ts +1 -1
  67. package/dist/components/form/form-textarea.js +29 -27
  68. package/dist/components/layout/app-sidebar.cjs +1 -1
  69. package/dist/components/layout/app-sidebar.d.ts +1 -0
  70. package/dist/components/layout/app-sidebar.js +36 -36
  71. package/dist/components/layout/breadcrumbs.cjs +1 -1
  72. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  73. package/dist/components/layout/breadcrumbs.js +7 -7
  74. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  75. package/dist/components/modern/calendar-scheduler.d.ts +5 -1
  76. package/dist/components/modern/calendar-scheduler.js +47 -28
  77. package/dist/components/modern/dual-list-picker.cjs +1 -1
  78. package/dist/components/modern/dual-list-picker.d.ts +5 -1
  79. package/dist/components/modern/dual-list-picker.js +81 -23
  80. package/dist/components/modern/rich-text-editor.cjs +1 -1
  81. package/dist/components/modern/rich-text-editor.d.ts +3 -1
  82. package/dist/components/modern/rich-text-editor.js +12 -9
  83. package/dist/components/modern/tour.cjs +1 -1
  84. package/dist/components/modern/tour.d.ts +5 -1
  85. package/dist/components/modern/tour.js +57 -35
  86. package/dist/components/navigation/command-bar.cjs +1 -1
  87. package/dist/components/navigation/command-bar.d.ts +3 -1
  88. package/dist/components/navigation/command-bar.js +10 -7
  89. package/dist/components/navigation/demo.cjs +1 -1
  90. package/dist/components/navigation/demo.js +0 -1
  91. package/dist/components/navigation/nav-tabs.cjs +1 -1
  92. package/dist/components/navigation/nav-tabs.js +39 -27
  93. package/dist/components/navigation/page-tabs.cjs +1 -1
  94. package/dist/components/navigation/page-tabs.js +41 -30
  95. package/dist/components/navigation/pagination.cjs +1 -1
  96. package/dist/components/navigation/pagination.d.ts +7 -1
  97. package/dist/components/navigation/pagination.js +48 -25
  98. package/dist/components/notifications/notification-center.cjs +1 -1
  99. package/dist/components/notifications/notification-center.d.ts +3 -1
  100. package/dist/components/notifications/notification-center.js +56 -38
  101. package/dist/components/notifications/toast.cjs +1 -1
  102. package/dist/components/notifications/toast.d.ts +1 -0
  103. package/dist/components/notifications/toast.js +4 -0
  104. package/dist/components/overlay/alert-dialog.cjs +1 -1
  105. package/dist/components/overlay/alert-dialog.js +1 -1
  106. package/dist/components/overlay/confirm-dialog.cjs +1 -1
  107. package/dist/components/overlay/confirm-dialog.d.ts +4 -2
  108. package/dist/components/overlay/confirm-dialog.js +31 -22
  109. package/dist/components/overlay/drawer.cjs +1 -1
  110. package/dist/components/overlay/drawer.d.ts +3 -1
  111. package/dist/components/overlay/drawer.js +24 -16
  112. package/dist/components/ui/accordion/index.d.ts +4 -0
  113. package/dist/components/ui/badge/index.cjs +1 -1
  114. package/dist/components/ui/badge/index.d.ts +1 -1
  115. package/dist/components/ui/badge/index.js +2 -1
  116. package/dist/components/ui/button/index.cjs +1 -1
  117. package/dist/components/ui/button/index.d.ts +2 -1
  118. package/dist/components/ui/button/index.js +13 -10
  119. package/dist/components/ui/dialog/index.cjs +1 -1
  120. package/dist/components/ui/dialog/index.js +2 -1
  121. package/dist/components/ui/hover-card.cjs +1 -1
  122. package/dist/components/ui/hover-card.d.ts +11 -3
  123. package/dist/components/ui/hover-card.js +29 -24
  124. package/dist/components/ui/input/index.d.ts +1 -1
  125. package/dist/components/ui/popover/index.cjs +1 -1
  126. package/dist/components/ui/popover/index.d.ts +2 -2
  127. package/dist/components/ui/popover/index.js +6 -5
  128. package/dist/components/ui/radio-group/index.cjs +1 -1
  129. package/dist/components/ui/radio-group/index.d.ts +5 -1
  130. package/dist/components/ui/radio-group/index.js +50 -16
  131. package/dist/components/ui/right-click-menu/index.cjs +1 -1
  132. package/dist/components/ui/right-click-menu/index.d.ts +5 -1
  133. package/dist/components/ui/right-click-menu/index.js +77 -23
  134. package/dist/components/ui/segmented-control/index.cjs +1 -1
  135. package/dist/components/ui/segmented-control/index.d.ts +2 -1
  136. package/dist/components/ui/segmented-control/index.js +23 -11
  137. package/dist/components/ui/select/index.cjs +1 -1
  138. package/dist/components/ui/select/index.d.ts +8 -1
  139. package/dist/components/ui/select/index.js +40 -35
  140. package/dist/components/ui/switch/index.cjs +1 -1
  141. package/dist/components/ui/switch/index.d.ts +18 -0
  142. package/dist/components/ui/switch/index.js +47 -17
  143. package/dist/components/ui/tabs/index.cjs +1 -1
  144. package/dist/components/ui/tabs/index.d.ts +14 -4
  145. package/dist/components/ui/tabs/index.js +11 -8
  146. package/dist/components/ui/textarea/index.cjs +1 -1
  147. package/dist/components/ui/textarea/index.d.ts +10 -2
  148. package/dist/components/ui/textarea/index.js +37 -8
  149. package/dist/components/ui/textarea.cjs +1 -0
  150. package/dist/components/ui/textarea.d.ts +1 -0
  151. package/dist/components/ui/textarea.js +2 -0
  152. package/dist/components/ui/tooltip/index.cjs +1 -1
  153. package/dist/components/ui/tooltip/index.d.ts +11 -3
  154. package/dist/components/ui/tooltip/index.js +41 -20
  155. package/dist/components/upload/file-upload.cjs +1 -1
  156. package/dist/components/upload/file-upload.d.ts +8 -1
  157. package/dist/components/upload/file-upload.js +132 -100
  158. package/dist/components/upload/image-upload.cjs +1 -1
  159. package/dist/components/upload/image-upload.d.ts +5 -1
  160. package/dist/components/upload/image-upload.js +34 -9
  161. package/dist/index.cjs +1 -1
  162. package/dist/index.js +31 -31
  163. package/dist/public-component-surface.cjs +1 -1
  164. package/dist/public-component-surface.js +15 -0
  165. package/dist/showcase/component-api-schema.cjs +1 -1
  166. package/dist/showcase/component-api-schema.js +187 -10
  167. package/dist/showcase/fallback.cjs +3 -3
  168. package/dist/showcase/fallback.js +221 -243
  169. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  170. package/dist/showcase/premium/alert/showcase.js +1 -0
  171. package/dist/showcase/premium/app-sidebar/showcase.cjs +1 -1
  172. package/dist/showcase/premium/app-sidebar/showcase.js +1 -0
  173. package/dist/showcase/premium/badge/showcase.cjs +1 -1
  174. package/dist/showcase/premium/badge/showcase.js +7 -0
  175. package/dist/showcase/premium/badge/types.d.ts +1 -1
  176. package/dist/showcase/premium/breadcrumbs/showcase.cjs +1 -1
  177. package/dist/showcase/premium/breadcrumbs/showcase.js +12 -1
  178. package/dist/showcase/premium/button/mock.cjs +1 -4
  179. package/dist/showcase/premium/button/mock.js +1 -1
  180. package/dist/showcase/premium/button/showcase.cjs +1 -1
  181. package/dist/showcase/premium/button/showcase.js +2 -2
  182. package/dist/showcase/premium/card/showcase.cjs +1 -1
  183. package/dist/showcase/premium/card/showcase.js +96 -47
  184. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  185. package/dist/showcase/premium/carousel/showcase.js +76 -49
  186. package/dist/showcase/premium/command-bar/showcase.cjs +1 -1
  187. package/dist/showcase/premium/command-bar/showcase.js +2 -0
  188. package/dist/showcase/premium/data-table/mock.cjs +12 -11
  189. package/dist/showcase/premium/data-table/mock.js +1 -1
  190. package/dist/showcase/premium/file-upload/showcase.cjs +1 -1
  191. package/dist/showcase/premium/file-upload/showcase.js +25 -4
  192. package/dist/showcase/premium/image-upload/showcase.cjs +1 -1
  193. package/dist/showcase/premium/image-upload/showcase.js +4 -1
  194. package/dist/showcase/premium/index.cjs +1 -1
  195. package/dist/showcase/premium/index.js +396 -402
  196. package/dist/showcase/premium/loading-state/showcase.cjs +1 -1
  197. package/dist/showcase/premium/loading-state/showcase.js +3 -1
  198. package/dist/showcase/premium/metric-grid/showcase.cjs +1 -1
  199. package/dist/showcase/premium/metric-grid/showcase.js +96 -28
  200. package/dist/showcase/premium/notification-center/showcase.cjs +1 -1
  201. package/dist/showcase/premium/notification-center/showcase.js +7 -3
  202. package/dist/showcase/premium/page-state/showcase.cjs +1 -1
  203. package/dist/showcase/premium/page-state/showcase.js +5 -1
  204. package/dist/showcase/premium/pagination/showcase.cjs +1 -1
  205. package/dist/showcase/premium/pagination/showcase.js +15 -2
  206. package/dist/showcase/premium/popover/showcase.cjs +1 -1
  207. package/dist/showcase/premium/popover/showcase.js +85 -50
  208. package/dist/showcase/premium/radio-group/showcase.cjs +1 -1
  209. package/dist/showcase/premium/radio-group/showcase.js +27 -4
  210. package/dist/showcase/premium/right-click-menu/showcase.cjs +1 -1
  211. package/dist/showcase/premium/right-click-menu/showcase.js +56 -43
  212. package/dist/showcase/premium/segmented-control/showcase.cjs +1 -1
  213. package/dist/showcase/premium/segmented-control/showcase.js +1 -0
  214. package/dist/showcase/premium/select/data.cjs +1 -1
  215. package/dist/showcase/premium/select/data.js +69 -34
  216. package/dist/showcase/premium/select/mock.cjs +19 -6
  217. package/dist/showcase/premium/select/mock.js +3 -2
  218. package/dist/showcase/premium/select/showcase.cjs +1 -1
  219. package/dist/showcase/premium/select/showcase.js +43 -18
  220. package/dist/showcase/premium/select/types.d.ts +3 -0
  221. package/dist/showcase/premium/statistic/showcase.cjs +1 -1
  222. package/dist/showcase/premium/statistic/showcase.js +57 -25
  223. package/dist/showcase/premium/switch/showcase.cjs +1 -1
  224. package/dist/showcase/premium/switch/showcase.js +25 -14
  225. package/dist/showcase/premium/tabs/showcase.cjs +1 -1
  226. package/dist/showcase/premium/tabs/showcase.js +171 -48
  227. package/dist/showcase/premium/textarea/mock.cjs +12 -4
  228. package/dist/showcase/premium/textarea/mock.js +1 -1
  229. package/dist/showcase/premium/textarea/showcase.cjs +1 -1
  230. package/dist/showcase/premium/textarea/showcase.js +8 -3
  231. package/dist/showcase/premium/toast/showcase.cjs +1 -1
  232. package/dist/showcase/premium/toast/showcase.js +32 -6
  233. package/dist/showcase/premium/types.d.ts +1 -1
  234. package/dist/showcase/registry-quality.cjs +1 -1
  235. package/dist/showcase/registry-quality.js +1 -0
  236. package/dist/showcase/render-registry-preview.cjs +1 -1
  237. package/dist/showcase/render-registry-preview.js +57 -79
  238. package/dist/showcase/site-data.cjs +1 -1
  239. package/dist/showcase/site-data.js +60 -21
  240. package/dist/showcase/tembro-registry.json.cjs +1 -1
  241. package/dist/showcase/tembro-registry.json.js +34 -20
  242. package/dist/showcase/types.d.ts +1 -1
  243. package/package.json +1 -1
  244. package/packages/cli/dist/index.cjs +31 -31
  245. package/packages/cli/vendor/src/components/calendar/calendar.tsx +59 -50
  246. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +7 -4
  247. package/packages/cli/vendor/src/components/charts/charts.tsx +109 -66
  248. package/packages/cli/vendor/src/components/charts/progress-ring.tsx +37 -26
  249. package/packages/cli/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +41 -22
  250. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +8 -6
  251. package/packages/cli/vendor/src/components/display/carousel.tsx +84 -3
  252. package/packages/cli/vendor/src/components/display/code-block.tsx +22 -2
  253. package/packages/cli/vendor/src/components/display/delta-badge.tsx +11 -11
  254. package/packages/cli/vendor/src/components/display/kanban.tsx +103 -57
  255. package/packages/cli/vendor/src/components/display/metric-grid.tsx +16 -13
  256. package/packages/cli/vendor/src/components/display/qr-code.tsx +17 -15
  257. package/packages/cli/vendor/src/components/display/status-legend.tsx +11 -8
  258. package/packages/cli/vendor/src/components/display/tag.tsx +39 -21
  259. package/packages/cli/vendor/src/components/display/tree-view.tsx +221 -84
  260. package/packages/cli/vendor/src/components/display/trend-card.tsx +6 -40
  261. package/packages/cli/vendor/src/components/feedback/alert.tsx +3 -1
  262. package/packages/cli/vendor/src/components/feedback/loading-state.tsx +33 -17
  263. package/packages/cli/vendor/src/components/feedback/page-state.tsx +8 -7
  264. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +37 -8
  265. package/packages/cli/vendor/src/components/form/form-input.tsx +2 -0
  266. package/packages/cli/vendor/src/components/form/form-select.tsx +2 -0
  267. package/packages/cli/vendor/src/components/form/form-switch.tsx +9 -3
  268. package/packages/cli/vendor/src/components/form/form-textarea.tsx +6 -2
  269. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +3 -1
  270. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +3 -1
  271. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +28 -13
  272. package/packages/cli/vendor/src/components/modern/dual-list-picker.tsx +103 -35
  273. package/packages/cli/vendor/src/components/modern/rich-text-editor.tsx +25 -22
  274. package/packages/cli/vendor/src/components/modern/tour.tsx +47 -29
  275. package/packages/cli/vendor/src/components/navigation/command-bar.tsx +6 -0
  276. package/packages/cli/vendor/src/components/navigation/demo.tsx +0 -1
  277. package/packages/cli/vendor/src/components/navigation/nav-tabs.tsx +38 -29
  278. package/packages/cli/vendor/src/components/navigation/page-tabs.tsx +35 -23
  279. package/packages/cli/vendor/src/components/navigation/pagination.tsx +65 -31
  280. package/packages/cli/vendor/src/components/notifications/notification-center.tsx +64 -39
  281. package/packages/cli/vendor/src/components/notifications/toast.tsx +23 -21
  282. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +1 -1
  283. package/packages/cli/vendor/src/components/overlay/confirm-dialog.tsx +45 -22
  284. package/packages/cli/vendor/src/components/overlay/drawer.tsx +18 -5
  285. package/packages/cli/vendor/src/components/ui/accordion/index.tsx +4 -0
  286. package/packages/cli/vendor/src/components/ui/badge/index.tsx +2 -1
  287. package/packages/cli/vendor/src/components/ui/button/index.tsx +11 -5
  288. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +2 -1
  289. package/packages/cli/vendor/src/components/ui/hover-card.tsx +54 -28
  290. package/packages/cli/vendor/src/components/ui/popover/index.tsx +10 -8
  291. package/packages/cli/vendor/src/components/ui/radio-group/index.tsx +55 -6
  292. package/packages/cli/vendor/src/components/ui/right-click-menu/index.tsx +120 -9
  293. package/packages/cli/vendor/src/components/ui/segmented-control/index.tsx +29 -3
  294. package/packages/cli/vendor/src/components/ui/select/index.tsx +64 -31
  295. package/packages/cli/vendor/src/components/ui/switch/index.tsx +71 -6
  296. package/packages/cli/vendor/src/components/ui/tabs/index.tsx +22 -6
  297. package/packages/cli/vendor/src/components/ui/textarea/index.tsx +105 -15
  298. package/packages/cli/vendor/src/components/ui/textarea.tsx +2 -0
  299. package/packages/cli/vendor/src/components/ui/tooltip/index.tsx +67 -22
  300. package/packages/cli/vendor/src/components/upload/file-upload.tsx +120 -57
  301. package/packages/cli/vendor/src/components/upload/image-upload.tsx +71 -24
  302. package/packages/cli/vendor/src/public-component-surface.ts +3 -0
  303. package/packages/cli/vendor/src/showcase/component-api-schema.ts +79 -41
  304. package/packages/cli/vendor/src/showcase/fallback.tsx +4 -19
  305. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +1 -0
  306. package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -0
  307. package/packages/cli/vendor/src/showcase/premium/badge/showcase.tsx +4 -2
  308. package/packages/cli/vendor/src/showcase/premium/badge/types.ts +1 -1
  309. package/packages/cli/vendor/src/showcase/premium/breadcrumbs/showcase.tsx +3 -1
  310. package/packages/cli/vendor/src/showcase/premium/button/mock.ts +2 -5
  311. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +2 -2
  312. package/packages/cli/vendor/src/showcase/premium/card/showcase.tsx +26 -1
  313. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +19 -3
  314. package/packages/cli/vendor/src/showcase/premium/command-bar/showcase.tsx +1 -1
  315. package/packages/cli/vendor/src/showcase/premium/data-table/mock.ts +26 -25
  316. package/packages/cli/vendor/src/showcase/premium/file-upload/showcase.tsx +21 -1
  317. package/packages/cli/vendor/src/showcase/premium/image-upload/showcase.tsx +4 -1
  318. package/packages/cli/vendor/src/showcase/premium/index.ts +0 -2
  319. package/packages/cli/vendor/src/showcase/premium/loading-state/showcase.tsx +1 -1
  320. package/packages/cli/vendor/src/showcase/premium/metric-grid/showcase.tsx +36 -4
  321. package/packages/cli/vendor/src/showcase/premium/notification-center/showcase.tsx +4 -3
  322. package/packages/cli/vendor/src/showcase/premium/page-state/showcase.tsx +1 -0
  323. package/packages/cli/vendor/src/showcase/premium/pagination/showcase.tsx +13 -1
  324. package/packages/cli/vendor/src/showcase/premium/popover/showcase.tsx +27 -11
  325. package/packages/cli/vendor/src/showcase/premium/radio-group/showcase.tsx +13 -1
  326. package/packages/cli/vendor/src/showcase/premium/right-click-menu/showcase.tsx +8 -5
  327. package/packages/cli/vendor/src/showcase/premium/segmented-control/showcase.tsx +1 -0
  328. package/packages/cli/vendor/src/showcase/premium/select/data.ts +12 -3
  329. package/packages/cli/vendor/src/showcase/premium/select/mock.ts +4 -4
  330. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +22 -1
  331. package/packages/cli/vendor/src/showcase/premium/select/types.ts +3 -0
  332. package/packages/cli/vendor/src/showcase/premium/statistic/showcase.tsx +10 -1
  333. package/packages/cli/vendor/src/showcase/premium/switch/showcase.tsx +15 -6
  334. package/packages/cli/vendor/src/showcase/premium/tabs/showcase.tsx +48 -1
  335. package/packages/cli/vendor/src/showcase/premium/textarea/mock.ts +12 -4
  336. package/packages/cli/vendor/src/showcase/premium/textarea/showcase.tsx +5 -0
  337. package/packages/cli/vendor/src/showcase/premium/toast/showcase.tsx +17 -1
  338. package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
  339. package/packages/cli/vendor/src/showcase/registry-quality.ts +3 -2
  340. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +0 -15
  341. package/packages/cli/vendor/src/showcase/site-data.tsx +21 -15
  342. package/packages/cli/vendor/src/showcase/tembro-registry.json +42 -20
  343. package/packages/cli/vendor/src/showcase/types.ts +1 -1
  344. package/registry.json +18 -6
@@ -1,6 +1,7 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "@/lib/utils"
1
+ import * as React from "react"
2
+
3
+ import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
4
+ import { cn } from "@/lib/utils"
4
5
 
5
6
  export type NavTabItem = {
6
7
  label: React.ReactNode
@@ -24,37 +25,45 @@ const sizeClassName = {
24
25
  lg: "h-11 px-5 text-base",
25
26
  }
26
27
 
27
- function NavTabs({ items, value, onValueChange, size = "default", fullWidth = false, className, ...props }: NavTabsProps) {
28
- return (
29
- <div data-slot="nav-tabs" className={cn("inline-flex rounded-[var(--radius-xl)] border border-border/80 bg-muted/45 p-1", fullWidth && "w-full", className)} {...props}>
30
- {items.map((item) => {
31
- const active = item.value === value
32
- const content = (
28
+ function NavTabs({ items, value, onValueChange, size = "default", fullWidth = false, className, ...props }: NavTabsProps) {
29
+ return (
30
+ <Tabs
31
+ value={value}
32
+ onValueChange={(nextValue) => onValueChange?.(String(nextValue))}
33
+ data-slot="nav-tabs"
34
+ className={cn("min-w-0", fullWidth && "w-full", className)}
35
+ {...props}
36
+ >
37
+ <TabsList data-slot="nav-tabs-list" variant="pills" overflow="scroll" className={cn(fullWidth && "w-full")}>
38
+ {items.map((item) => {
39
+ const active = item.value === value
40
+ const content = (
33
41
  <>
34
42
  {item.icon ? <span className="[&_svg]:size-4">{item.icon}</span> : null}
35
43
  <span className="truncate">{item.label}</span>
36
44
  </>
37
45
  )
38
46
 
39
- const itemClassName = cn(
40
- "inline-flex items-center justify-center gap-2 rounded-[calc(var(--radius-xl)-4px)] font-medium text-muted-foreground transition hover:text-foreground disabled:pointer-events-none disabled:opacity-50",
41
- sizeClassName[size],
42
- fullWidth && "flex-1",
43
- active && "bg-background text-foreground shadow-sm"
44
- )
45
-
46
- return item.href ? (
47
- <a key={item.value} href={item.href} aria-current={active ? "page" : undefined} className={itemClassName}>
48
- {content}
49
- </a>
50
- ) : (
51
- <button key={item.value} type="button" disabled={item.disabled} className={itemClassName} onClick={() => onValueChange?.(item.value)}>
52
- {content}
53
- </button>
54
- )
55
- })}
56
- </div>
57
- )
58
- }
47
+ const itemClassName = cn(
48
+ "min-w-0 disabled:pointer-events-none disabled:opacity-50",
49
+ sizeClassName[size],
50
+ fullWidth && "flex-1",
51
+ active && "bg-background text-foreground shadow-sm"
52
+ )
53
+
54
+ return item.href ? (
55
+ <TabsTrigger key={item.value} value={item.value} render={<a href={item.href} aria-current={active ? "page" : undefined} className={itemClassName} />}>
56
+ {content}
57
+ </TabsTrigger>
58
+ ) : (
59
+ <TabsTrigger key={item.value} value={item.value} disabled={item.disabled} className={itemClassName} onClick={() => onValueChange?.(item.value)}>
60
+ {content}
61
+ </TabsTrigger>
62
+ )
63
+ })}
64
+ </TabsList>
65
+ </Tabs>
66
+ )
67
+ }
59
68
 
60
69
  export { NavTabs }
@@ -1,7 +1,8 @@
1
1
  import * as React from "react"
2
2
 
3
- import { Badge } from "@/components/ui/badge"
4
- import { cn } from "@/lib/utils"
3
+ import { Badge } from "@/components/ui/badge"
4
+ import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
5
+ import { cn } from "@/lib/utils"
5
6
 
6
7
  export type PageTabItem<TValue extends string = string> = {
7
8
  value: TValue
@@ -30,40 +31,50 @@ function PageTabs<TValue extends string = string>({
30
31
  ...props
31
32
  }: PageTabsProps<TValue>) {
32
33
  const visibleItems = items.filter((item) => !item.hidden)
34
+ const handleValueChange = (nextValue: unknown) => {
35
+ const nextItem = visibleItems.find((item) => item.value === nextValue)
36
+ if (nextItem) {
37
+ onValueChange?.(nextItem.value, nextItem)
38
+ }
39
+ }
33
40
 
34
41
  return (
35
- <div
42
+ <Tabs
43
+ value={value}
44
+ onValueChange={handleValueChange}
36
45
  data-slot="page-tabs"
37
46
  data-variant={variant}
38
47
  className={cn(
39
- "flex min-w-0 flex-wrap gap-1.5 border-b border-border/70",
40
- variant === "pills" && "rounded-full border border-border/75 bg-muted/22 p-1 shadow-[0_1px_0_rgba(255,255,255,0.04)]",
41
- variant === "cards" && "gap-2 border-b-0",
42
- variant !== "underline" && "border-b-0",
48
+ "min-w-0",
43
49
  className
44
50
  )}
45
51
  {...props}
46
52
  >
53
+ <TabsList
54
+ data-slot="page-tabs-list"
55
+ variant={variant === "underline" ? "underline" : "pills"}
56
+ overflow="scroll"
57
+ className={cn(
58
+ "w-full",
59
+ variant === "cards" && "gap-2 border-0 bg-transparent p-0 shadow-none"
60
+ )}
61
+ >
47
62
  {visibleItems.map((item) => {
48
63
  const active = item.value === value
49
64
  return (
50
- <button
51
- key={item.value}
52
- type="button"
53
- disabled={item.disabled}
54
- data-slot="page-tab"
55
- data-active={active || undefined}
65
+ <TabsTrigger
66
+ key={item.value}
67
+ disabled={item.disabled}
68
+ value={item.value}
69
+ data-slot="page-tab"
70
+ data-active={active || undefined}
56
71
  className={cn(
57
- "inline-flex min-w-0 items-center gap-2 rounded-full px-3 text-sm font-medium transition-colors disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4",
72
+ "min-w-0 px-3 disabled:pointer-events-none disabled:opacity-50",
58
73
  size === "sm" ? "h-8" : "h-10",
59
- variant === "underline" && "rounded-none border-b-2 border-transparent px-1 text-muted-foreground hover:text-foreground",
60
- variant === "underline" && active && "border-primary text-foreground",
61
- variant === "pills" && "text-muted-foreground hover:bg-background/72 hover:text-foreground",
62
- variant === "pills" && active && "bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground",
74
+ variant === "underline" && "px-1",
63
75
  variant === "cards" && "rounded-[var(--radius-2xl)] border border-border/75 bg-card/96 text-muted-foreground shadow-sm ring-1 ring-foreground/4 hover:border-primary/28 hover:text-foreground",
64
76
  variant === "cards" && active && "border-primary/50 bg-primary/7 text-foreground"
65
77
  )}
66
- onClick={() => onValueChange?.(item.value, item)}
67
78
  >
68
79
  {item.icon}
69
80
  <span className="truncate">{item.label}</span>
@@ -72,11 +83,12 @@ function PageTabs<TValue extends string = string>({
72
83
  {item.badge}
73
84
  </Badge>
74
85
  )}
75
- </button>
86
+ </TabsTrigger>
76
87
  )
77
88
  })}
78
- </div>
79
- )
80
- }
89
+ </TabsList>
90
+ </Tabs>
91
+ )
92
+ }
81
93
 
82
94
  export { PageTabs }
@@ -20,15 +20,21 @@ export type PaginationLabels = {
20
20
  page?: (page: number) => string
21
21
  }
22
22
 
23
- export type PaginationProps = Omit<React.ComponentProps<"nav">, "onChange"> & {
24
- page: number
25
- pageCount: number
26
- onPageChange: (page: number) => void
27
- siblingCount?: number
28
- showEdges?: boolean
29
- disabled?: boolean
30
- labels?: PaginationLabels
31
- }
23
+ export type PaginationProps = Omit<React.ComponentProps<"nav">, "onChange"> & {
24
+ page: number
25
+ pageCount: number
26
+ onPageChange: (page: number) => void
27
+ siblingCount?: number
28
+ showEdges?: boolean
29
+ disabled?: boolean
30
+ labels?: PaginationLabels
31
+ compact?: boolean
32
+ totalCount?: number
33
+ pageSize?: number
34
+ pageSizeOptions?: number[]
35
+ onPageSizeChange?: (pageSize: number) => void
36
+ showSummary?: boolean
37
+ }
32
38
 
33
39
  function range(start: number, end: number) {
34
40
  const length = Math.max(end - start + 1, 0)
@@ -71,11 +77,17 @@ function Pagination({
71
77
  pageCount,
72
78
  onPageChange,
73
79
  siblingCount = 1,
74
- showEdges = true,
75
- disabled = false,
76
- labels,
77
- ...props
78
- }: PaginationProps) {
80
+ showEdges = true,
81
+ disabled = false,
82
+ labels,
83
+ compact = false,
84
+ totalCount,
85
+ pageSize,
86
+ pageSizeOptions,
87
+ onPageSizeChange,
88
+ showSummary = false,
89
+ ...props
90
+ }: PaginationProps) {
79
91
  const safePageCount = Math.max(pageCount, 1)
80
92
  const currentPage = Math.min(Math.max(page, 1), safePageCount)
81
93
  const items = getPaginationItems(currentPage, safePageCount, siblingCount)
@@ -88,21 +100,26 @@ function Pagination({
88
100
  }
89
101
  }
90
102
 
91
- return (
103
+ return (
92
104
  <nav
93
105
  data-slot="pagination"
94
106
  aria-label="Pagination"
95
107
  className={cn(
96
- "flex items-center justify-center gap-1 rounded-full border border-border/70 bg-background/76 p-1 shadow-none backdrop-blur",
108
+ "flex flex-wrap items-center justify-center gap-1 rounded-full border border-border/70 bg-background/76 p-1 shadow-none backdrop-blur",
97
109
  className
98
110
  )}
99
111
  {...props}
100
112
  >
101
- {showEdges && (
102
- <Button
113
+ {showSummary && totalCount !== undefined && pageSize ? (
114
+ <div className="px-2 text-xs text-muted-foreground">
115
+ {Math.min((currentPage - 1) * pageSize + 1, totalCount)}-{Math.min(currentPage * pageSize, totalCount)} of {totalCount}
116
+ </div>
117
+ ) : null}
118
+ {showEdges && (
119
+ <Button
103
120
  type="button"
104
- variant="outline"
105
- size="icon-sm"
121
+ variant="outline"
122
+ size={compact ? "icon-xs" : "icon-sm"}
106
123
  disabled={disabled || currentPage <= 1}
107
124
  aria-label={labels?.first ?? "First page"}
108
125
  onClick={() => goToPage(1)}
@@ -113,8 +130,8 @@ function Pagination({
113
130
 
114
131
  <Button
115
132
  type="button"
116
- variant="outline"
117
- size="icon-sm"
133
+ variant="outline"
134
+ size={compact ? "icon-xs" : "icon-sm"}
118
135
  disabled={disabled || currentPage <= 1}
119
136
  aria-label={labels?.previous ?? "Previous page"}
120
137
  onClick={() => goToPage(currentPage - 1)}
@@ -141,7 +158,7 @@ function Pagination({
141
158
  key={item}
142
159
  type="button"
143
160
  variant={item === currentPage ? "default" : "outline"}
144
- size="icon-sm"
161
+ size={compact ? "icon-xs" : "icon-sm"}
145
162
  disabled={disabled}
146
163
  aria-current={item === currentPage ? "page" : undefined}
147
164
  aria-label={labels?.page?.(item) ?? `Page ${item}`}
@@ -155,8 +172,8 @@ function Pagination({
155
172
 
156
173
  <Button
157
174
  type="button"
158
- variant="outline"
159
- size="icon-sm"
175
+ variant="outline"
176
+ size={compact ? "icon-xs" : "icon-sm"}
160
177
  disabled={disabled || currentPage >= safePageCount}
161
178
  aria-label={labels?.next ?? "Next page"}
162
179
  onClick={() => goToPage(currentPage + 1)}
@@ -167,17 +184,34 @@ function Pagination({
167
184
  {showEdges && (
168
185
  <Button
169
186
  type="button"
170
- variant="outline"
171
- size="icon-sm"
187
+ variant="outline"
188
+ size={compact ? "icon-xs" : "icon-sm"}
172
189
  disabled={disabled || currentPage >= safePageCount}
173
190
  aria-label={labels?.last ?? "Last page"}
174
191
  onClick={() => goToPage(safePageCount)}
175
192
  >
176
193
  <ChevronLastIcon />
177
194
  </Button>
178
- )}
179
- </nav>
180
- )
181
- }
195
+ )}
196
+ {pageSizeOptions && pageSize && onPageSizeChange ? (
197
+ <label className="ml-1 inline-flex items-center gap-2 rounded-full border border-border/70 bg-background/90 px-3 py-1 text-xs text-muted-foreground">
198
+ <span>Rows</span>
199
+ <select
200
+ className="bg-transparent text-foreground outline-none"
201
+ value={pageSize}
202
+ onChange={(event) => onPageSizeChange(Number(event.target.value))}
203
+ disabled={disabled}
204
+ >
205
+ {pageSizeOptions.map((option) => (
206
+ <option key={option} value={option}>
207
+ {option}
208
+ </option>
209
+ ))}
210
+ </select>
211
+ </label>
212
+ ) : null}
213
+ </nav>
214
+ )
215
+ }
182
216
 
183
217
  export { Pagination, getPaginationItems }
@@ -11,11 +11,13 @@ export type NotificationItem = {
11
11
  description?: React.ReactNode
12
12
  time?: React.ReactNode
13
13
  read?: boolean
14
+ group?: React.ReactNode
14
15
  }
15
16
 
16
17
  export type NotificationCenterProps = React.ComponentProps<"div"> & {
17
18
  notifications: NotificationItem[]
18
19
  onMarkAllRead?: () => void
20
+ onClearAll?: () => void
19
21
  onNotificationClick?: (notification: NotificationItem) => void
20
22
  emptyLabel?: React.ReactNode
21
23
  title?: React.ReactNode
@@ -24,6 +26,7 @@ export type NotificationCenterProps = React.ComponentProps<"div"> & {
24
26
  function NotificationCenter({
25
27
  notifications,
26
28
  onMarkAllRead,
29
+ onClearAll,
27
30
  onNotificationClick,
28
31
  emptyLabel = "No new notifications",
29
32
  title = "Notifications",
@@ -31,6 +34,11 @@ function NotificationCenter({
31
34
  ...props
32
35
  }: NotificationCenterProps) {
33
36
  const unreadCount = notifications.filter((n) => !n.read).length
37
+ const groupedNotifications = notifications.reduce<Record<string, NotificationItem[]>>((accumulator, notification) => {
38
+ const key = String(notification.group ?? "Recent")
39
+ accumulator[key] = [...(accumulator[key] ?? []), notification]
40
+ return accumulator
41
+ }, {})
34
42
 
35
43
  return (
36
44
  <div data-slot="notification-center" className={className} {...props}>
@@ -60,16 +68,28 @@ function NotificationCenter({
60
68
  {unreadCount > 0 ? `${unreadCount} unread update${unreadCount > 1 ? "s" : ""}` : "You're all caught up"}
61
69
  </span>
62
70
  </div>
63
- {unreadCount > 0 && onMarkAllRead && (
64
- <Button
65
- variant="ghost"
66
- size="sm"
67
- className="h-8 rounded-full border border-[color:var(--aui-surface-border)] px-3 text-xs font-semibold text-muted-foreground hover:bg-[color:var(--aui-page-bg)] hover:text-foreground"
68
- onClick={onMarkAllRead}
69
- >
70
- Mark all read
71
- </Button>
72
- )}
71
+ <div className="flex items-center gap-2">
72
+ {unreadCount > 0 && onMarkAllRead ? (
73
+ <Button
74
+ variant="ghost"
75
+ size="sm"
76
+ className="h-8 rounded-full border border-[color:var(--aui-surface-border)] px-3 text-xs font-semibold text-muted-foreground hover:bg-[color:var(--aui-page-bg)] hover:text-foreground"
77
+ onClick={onMarkAllRead}
78
+ >
79
+ Mark all read
80
+ </Button>
81
+ ) : null}
82
+ {notifications.length > 0 && onClearAll ? (
83
+ <Button
84
+ variant="ghost"
85
+ size="sm"
86
+ className="h-8 rounded-full border border-[color:var(--aui-surface-border)] px-3 text-xs font-semibold text-muted-foreground hover:bg-[color:var(--aui-page-bg)] hover:text-foreground"
87
+ onClick={onClearAll}
88
+ >
89
+ Clear all
90
+ </Button>
91
+ ) : null}
92
+ </div>
73
93
  </div>
74
94
  <div className="max-h-[400px] overflow-y-auto bg-[color:var(--aui-page-bg)] p-2">
75
95
  {notifications.length === 0 ? (
@@ -77,35 +97,40 @@ function NotificationCenter({
77
97
  {emptyLabel}
78
98
  </div>
79
99
  ) : (
80
- <div className="flex flex-col">
81
- {notifications.map((notification) => (
82
- <button
83
- key={notification.id}
84
- className={cn(
85
- "flex flex-col gap-1 rounded-2xl border border-transparent px-4 py-3 text-left transition hover:border-[color:var(--aui-surface-border)] hover:bg-[color:var(--aui-control-bg)]",
86
- !notification.read && "border-[color:color-mix(in_srgb,var(--aui-brand-strong)_16%,var(--aui-surface-border))] bg-[color:color-mix(in_srgb,var(--aui-brand-strong)_8%,var(--aui-control-bg))]"
87
- )}
88
- onClick={() => onNotificationClick?.(notification)}
89
- >
90
- <div className="flex w-full items-start justify-between gap-2">
91
- <span className="text-sm font-semibold leading-tight text-foreground">
92
- {notification.title}
93
- </span>
94
- {!notification.read && (
95
- <span className="mt-1 flex size-2 shrink-0 rounded-full bg-[color:var(--aui-brand-strong)] shadow-[0_0_0_4px_color-mix(in_srgb,var(--aui-brand-strong)_14%,transparent)]" />
96
- )}
97
- </div>
98
- {notification.description && (
99
- <span className="line-clamp-2 text-xs leading-5 text-muted-foreground">
100
- {notification.description}
101
- </span>
102
- )}
103
- {notification.time && (
104
- <span className="mt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/80">
105
- {notification.time}
106
- </span>
107
- )}
108
- </button>
100
+ <div className="flex flex-col gap-3">
101
+ {Object.entries(groupedNotifications).map(([group, groupItems]) => (
102
+ <div key={group} className="grid gap-2">
103
+ <div className="px-2 pt-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">{group}</div>
104
+ {groupItems.map((notification) => (
105
+ <button
106
+ key={notification.id}
107
+ className={cn(
108
+ "flex flex-col gap-1 rounded-2xl border border-transparent px-4 py-3 text-left transition hover:border-[color:var(--aui-surface-border)] hover:bg-[color:var(--aui-control-bg)]",
109
+ !notification.read && "border-[color:color-mix(in_srgb,var(--aui-brand-strong)_16%,var(--aui-surface-border))] bg-[color:color-mix(in_srgb,var(--aui-brand-strong)_8%,var(--aui-control-bg))]"
110
+ )}
111
+ onClick={() => onNotificationClick?.(notification)}
112
+ >
113
+ <div className="flex w-full items-start justify-between gap-2">
114
+ <span className="text-sm font-semibold leading-tight text-foreground">
115
+ {notification.title}
116
+ </span>
117
+ {!notification.read && (
118
+ <span className="mt-1 flex size-2 shrink-0 rounded-full bg-[color:var(--aui-brand-strong)] shadow-[0_0_0_4px_color-mix(in_srgb,var(--aui-brand-strong)_14%,transparent)]" />
119
+ )}
120
+ </div>
121
+ {notification.description && (
122
+ <span className="line-clamp-2 text-xs leading-5 text-muted-foreground">
123
+ {notification.description}
124
+ </span>
125
+ )}
126
+ {notification.time && (
127
+ <span className="mt-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/80">
128
+ {notification.time}
129
+ </span>
130
+ )}
131
+ </button>
132
+ ))}
133
+ </div>
109
134
  ))}
110
135
  </div>
111
136
  )}
@@ -6,15 +6,16 @@ import { cn } from "@/lib/utils"
6
6
 
7
7
  export type ToastTone = "default" | "success" | "info" | "warning" | "danger" | "loading"
8
8
 
9
- export type ToastItem = {
9
+ export type ToastItem = {
10
10
  id: string
11
11
  title?: React.ReactNode
12
12
  description?: React.ReactNode
13
13
  tone?: ToastTone
14
14
  action?: React.ReactNode
15
15
  duration?: number
16
- dismissible?: boolean
17
- }
16
+ dismissible?: boolean
17
+ group?: React.ReactNode
18
+ }
18
19
 
19
20
  export type CreateToastInput = Omit<ToastItem, "id"> & {
20
21
  id?: string
@@ -39,8 +40,8 @@ export type ToastContextValue = {
39
40
  warning: (toast: ToastShortcutInput) => string
40
41
  error: (toast: ToastShortcutInput) => string
41
42
  loading: (toast: ToastShortcutInput) => string
42
- promise: <TData>(promise: Promise<TData>, messages: ToastPromiseMessages<TData>) => Promise<TData>
43
- }
43
+ promise: <TData>(promise: Promise<TData>, messages: ToastPromiseMessages<TData>) => Promise<TData>
44
+ }
44
45
 
45
46
  const ToastContext = React.createContext<ToastContextValue | null>(null)
46
47
 
@@ -187,17 +188,17 @@ function ToastProvider({
187
188
  return (
188
189
  <ToastContext.Provider value={value}>
189
190
  {children}
190
- <div
191
- data-slot="toast-viewport"
192
- className={cn("fixed z-[100] flex w-[min(100%-2rem,24rem)] flex-col gap-2", positionClassName[position])}
193
- >
194
- {toasts.map((toast) => (
195
- <ToastCard key={toast.id} toast={toast} pauseOnHover={pauseOnHover} onDismiss={dismissToast} />
196
- ))}
197
- </div>
198
- </ToastContext.Provider>
199
- )
200
- }
191
+ <div
192
+ data-slot="toast-viewport"
193
+ className={cn("fixed z-[100] flex w-[min(100%-2rem,24rem)] flex-col gap-2", positionClassName[position])}
194
+ >
195
+ {toasts.map((toast) => (
196
+ <ToastCard key={toast.id} toast={toast} pauseOnHover={pauseOnHover} onDismiss={dismissToast} />
197
+ ))}
198
+ </div>
199
+ </ToastContext.Provider>
200
+ )
201
+ }
201
202
 
202
203
  function ToastCard({
203
204
  toast,
@@ -231,11 +232,12 @@ function ToastCard({
231
232
  onMouseLeave={() => setHovered(false)}
232
233
  >
233
234
  <div className="mt-0.5 shrink-0">{toneIcon[tone]}</div>
234
- <div className="min-w-0 flex-1 space-y-1">
235
- {toast.title && <div className="text-sm font-medium leading-none">{toast.title}</div>}
236
- {toast.description && <div className="text-sm text-muted-foreground">{toast.description}</div>}
237
- {toast.action && <div className="pt-1">{toast.action}</div>}
238
- </div>
235
+ <div className="min-w-0 flex-1 space-y-1">
236
+ {toast.group ? <div className="text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">{toast.group}</div> : null}
237
+ {toast.title && <div className="text-sm font-medium leading-none">{toast.title}</div>}
238
+ {toast.description && <div className="text-sm text-muted-foreground">{toast.description}</div>}
239
+ {toast.action && <div className="pt-1">{toast.action}</div>}
240
+ </div>
239
241
  {toast.dismissible !== false && (
240
242
  <Button type="button" variant="ghost" size="icon-xs" onClick={() => onDismiss(toast.id)}>
241
243
  <XIcon />
@@ -174,7 +174,7 @@ function AlertDialog({
174
174
  type="button"
175
175
  variant={actionTone === "destructive" ? "destructive" : "default"}
176
176
  loading={resolvedLoading}
177
- disabled={!canConfirm && !resolvedLoading}
177
+ disabled={!canConfirm || resolvedLoading}
178
178
  onClick={() => void handleAction()}
179
179
  {...actionButtonProps}
180
180
  >