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
@@ -1,8 +1,7 @@
1
1
  import {
2
- Accordion,
3
- Alert,
4
- AnchorNav,
5
- Avatar,
2
+ Accordion,
3
+ Alert,
4
+ Avatar,
6
5
  AvatarGroup,
7
6
  Badge,
8
7
  Button,
@@ -504,21 +503,7 @@ function renderGenericPreviewSurface(
504
503
  )
505
504
  }
506
505
 
507
- if (item.slug === "anchor-nav") {
508
- return (
509
- <AnchorNav
510
- orientation="horizontal"
511
- title="Sections"
512
- items={[
513
- { key: "overview", label: "Overview", href: "#overview", active: true },
514
- { key: "usage", label: "Usage", href: "#usage" },
515
- { key: "api", label: "API", href: "#api" },
516
- ]}
517
- />
518
- )
519
- }
520
-
521
- if (item.slug === "page-tabs") {
506
+ if (item.slug === "page-tabs") {
522
507
  return (
523
508
  <PageTabs
524
509
  value="overview"
@@ -39,6 +39,7 @@ export function AlertShowcase({ mode }: ComponentDemoProps) {
39
39
  tone={tone}
40
40
  dismissible
41
41
  onDismiss={() => setVisible(false)}
42
+ actionsAlign={tone === "destructive" ? "start" : "end"}
42
43
  title={tone === "success" ? "Workspace synced" : tone === "destructive" ? "Action blocked" : tone === "info" ? "Heads up" : "Review needed"}
43
44
  description={
44
45
  tone === "success"
@@ -82,6 +82,7 @@ export function AppSidebarShowcase({ mode }: ComponentDemoProps) {
82
82
  mobileToggleLabel="Open workspace menu"
83
83
  header={<div className="px-3 py-2 text-sm font-semibold">Azamat Workspace</div>}
84
84
  footer={<div className="aui-text-muted px-3 py-2 text-xs">Starter plan • 3 editors</div>}
85
+ footerClassName="bg-[color:var(--aui-page-bg-alt)]/55"
85
86
  className="min-h-[440px] rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)]"
86
87
  />
87
88
  </section>
@@ -6,9 +6,10 @@ import type { ComponentDemoProps } from "../types"
6
6
  import { badgeDemoItems } from "./data"
7
7
 
8
8
  const panelClass = "border-t border-[color:var(--aui-divider)] py-6"
9
+ type BadgeVariant = ComponentDemoProps["state"]["badgeVariant"]
9
10
 
10
11
  export function BadgeShowcase({ state, setState, mode }: ComponentDemoProps) {
11
- const variants = ["default", "secondary", "destructive", "outline", "ghost", "link"] as const
12
+ const variants: BadgeVariant[] = ["default", "secondary", "soft", "destructive", "outline", "ghost", "link"]
12
13
  const activeItem = badgeDemoItems.find((item) => item.variant === state.badgeVariant) ?? badgeDemoItems[0]
13
14
  const [chipVisible, setChipVisible] = React.useState(true)
14
15
 
@@ -47,7 +48,7 @@ export function BadgeShowcase({ state, setState, mode }: ComponentDemoProps) {
47
48
  key={variant}
48
49
  type="button"
49
50
  size="sm"
50
- variant={state.badgeVariant === variant ? "default" : "secondary"}
51
+ variant={state.badgeVariant === variant ? ("default" as const) : ("secondary" as const)}
51
52
  onClick={() => setState({ badgeVariant: variant })}
52
53
  >
53
54
  {variant}
@@ -93,6 +94,7 @@ export function BadgeShowcase({ state, setState, mode }: ComponentDemoProps) {
93
94
 
94
95
  <div className="flex flex-wrap gap-2 border-t border-[color:var(--aui-divider)] pt-4">
95
96
  <Badge variant="secondary" label="Customers" count={18} />
97
+ <Badge variant="soft" tone="info" label="Synced" dot />
96
98
  <Badge status="warning" label="Pending approval" />
97
99
  {chipVisible ? (
98
100
  <Badge
@@ -1,5 +1,5 @@
1
1
  export type BadgeDemoItem = {
2
2
  label: string
3
- variant: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link"
3
+ variant: "default" | "secondary" | "soft" | "destructive" | "outline" | "ghost" | "link"
4
4
  note: string
5
5
  }
@@ -8,6 +8,8 @@ const pages = [
8
8
  { key: "home", label: "Home", href: "/" },
9
9
  { key: "apps", label: "Apps", href: "/apps" },
10
10
  { key: "workspace", label: "Workspace", href: "/apps/workspace" },
11
+ { key: "team", label: "Team settings", href: "/apps/workspace/team" },
12
+ { key: "security", label: "Security", href: "/apps/workspace/team/security" },
11
13
  { key: "overview", label: "Overview", current: true },
12
14
  ]
13
15
 
@@ -52,7 +54,7 @@ export function BreadcrumbsShowcase({ mode }: ComponentDemoProps) {
52
54
  ) : null}
53
55
 
54
56
  <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3">
55
- <Breadcrumbs items={selectedItems} separator={separator} />
57
+ <Breadcrumbs items={selectedItems} separator={separator} maxItems={activeMode === "full" ? 4 : undefined} />
56
58
  </div>
57
59
  </div>
58
60
  )
@@ -17,7 +17,7 @@ export function BasicExamples() {
17
17
 
18
18
  <div className="flex flex-wrap gap-3">
19
19
  <Button size="sm">Small</Button>
20
- <Button size="icon" aria-label="Download">
20
+ <Button iconOnly aria-label="Download">
21
21
  <DownloadIcon className="size-4" />
22
22
  </Button>
23
23
  <Button>
@@ -36,9 +36,6 @@ export function BasicExamples() {
36
36
  </div>
37
37
 
38
38
  <div className="flex flex-wrap gap-3">
39
- <Button asChild>
40
- <a href="/docs">Open docs</a>
41
- </Button>
42
39
  <a className={buttonVariants({ variant: "outline", size: "sm" })} href="/components">
43
40
  Link styled as button
44
41
  </a>
@@ -92,4 +89,4 @@ export function ControlledButton() {
92
89
  "Supports focus, disabled and loading states for safe async interactions.",
93
90
  "Use buttonVariants for non-button elements, but keep Button variant props for real button usage.",
94
91
  ],
95
- }
92
+ }
@@ -31,7 +31,7 @@ function VariantRow({
31
31
  <div className="flex flex-wrap items-center gap-2">
32
32
  <Button variant={variant}>{label}</Button>
33
33
  <Button variant={variant} size="sm">Small</Button>
34
- <Button variant={variant} size="icon" aria-label={`${label} icon button`}>
34
+ <Button variant={variant} iconOnly aria-label={`${label} icon button`}>
35
35
  <ArrowRightIcon className="size-4" />
36
36
  </Button>
37
37
  </div>
@@ -220,7 +220,7 @@ export function ButtonShowcase() {
220
220
  <Button loading loadingLabel="Publishing">
221
221
  Publish
222
222
  </Button>
223
- <Button variant="outline" size="icon" aria-label="Download">
223
+ <Button variant="outline" iconOnly aria-label="Download">
224
224
  <DownloadIcon className="size-4" />
225
225
  </Button>
226
226
  <a href="#" className={buttonVariants({ variant: "link" })}>
@@ -1,4 +1,4 @@
1
- import { Badge, Card } from "@/index"
1
+ import { Badge, Button, Card } from "@/index"
2
2
 
3
3
  import type { ComponentDemoProps } from "../types"
4
4
 
@@ -42,8 +42,11 @@ export function CardShowcase({ state }: ComponentDemoProps) {
42
42
  <div className="grid gap-4 xl:grid-cols-[minmax(0,1.08fr)_minmax(0,0.92fr)]">
43
43
  <Card
44
44
  size={state.cardCompact ? "sm" : "default"}
45
+ eyebrow="Content"
45
46
  title={primaryProject.title}
46
47
  description={primaryProject.description}
48
+ badge={<Badge tone="success" variant="soft">Live</Badge>}
49
+ action={<Button type="button" size="xs" variant="outline">Open</Button>}
47
50
  content={
48
51
  <div className="grid gap-3 sm:grid-cols-3">
49
52
  {primaryProject.metrics.map((metric) => (
@@ -58,6 +61,9 @@ export function CardShowcase({ state }: ComponentDemoProps) {
58
61
 
59
62
  <Card
60
63
  size="sm"
64
+ interactive
65
+ selected
66
+ eyebrow="Selectable"
61
67
  title={compactProject.title}
62
68
  description={compactProject.description}
63
69
  content={
@@ -70,6 +76,25 @@ export function CardShowcase({ state }: ComponentDemoProps) {
70
76
  footer={compactProject.footer}
71
77
  />
72
78
  </div>
79
+ <div className="mt-4 grid gap-4 xl:grid-cols-[minmax(0,0.92fr)_minmax(0,1.08fr)]">
80
+ <Card
81
+ orientation="horizontal"
82
+ mediaAspect="square"
83
+ title="Media card"
84
+ description="The same Card primitive owns image, copy, action and footer slots."
85
+ media={<div className="h-full min-h-36 bg-[linear-gradient(135deg,var(--primary),color-mix(in_oklch,var(--primary),white_42%))]" />}
86
+ action={<Button type="button" size="xs">View</Button>}
87
+ content={<p className="text-sm leading-6 aui-text-muted">Use media slots for previews, thumbnails, charts, or product visuals without creating another card component.</p>}
88
+ />
89
+ <Card
90
+ size="sm"
91
+ density="compact"
92
+ title="Compact action card"
93
+ description="Dense layouts still use the same header, content and footer anatomy."
94
+ content={<div className="text-sm aui-text-strong">12 files ready for review</div>}
95
+ footer={<Button type="button" size="xs" variant="secondary">Review files</Button>}
96
+ />
97
+ </div>
73
98
  </section>
74
99
  </div>
75
100
  )
@@ -1,11 +1,12 @@
1
1
  import * as React from "react"
2
2
 
3
3
  import { Button, Carousel, CarouselItem } from "@/index"
4
+ import { cn } from "@/lib/utils"
4
5
 
5
6
  const steps = [
6
- { title: "Onboarding", text: "Guide quickly from first login.", tone: "Launch" },
7
- { title: "Components", text: "Review ready-made dashboard patterns.", tone: "Library" },
8
- { title: "Release", text: "Publish, test, and iterate faster.", tone: "Ship" },
7
+ { title: "Onboarding", text: "Guide quickly from first login.", tone: "Launch", detail: "Hero slider for product onboarding and release tours." },
8
+ { title: "Components", text: "Review ready-made dashboard patterns.", tone: "Library", detail: "Card rail, docs previews, and swipe-ready gallery states." },
9
+ { title: "Release", text: "Publish, test, and iterate faster.", tone: "Ship", detail: "Active slide details stay below the main frame for context." },
9
10
  ]
10
11
 
11
12
  export function CarouselShowcase() {
@@ -48,13 +49,28 @@ export function CarouselShowcase() {
48
49
  loop
49
50
  showArrows={showArrows}
50
51
  showDots={showDots}
52
+ showStatus
53
+ showThumbnails
51
54
  autoplay={autoplay}
52
55
  autoplayInterval={2200}
53
56
  showPlaybackControl
57
+ aspectRatio="16 / 9"
54
58
  onIndexChange={(next) => setIndex(next)}
55
59
  onAutoplayChange={setPlaying}
56
60
  previousLabel="Previous slide"
57
61
  nextLabel="Next slide"
62
+ renderThumbnail={(_, itemIndex, active) => (
63
+ <div className={cn("grid gap-1 p-3", active && "bg-primary/5")}>
64
+ <div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground">0{itemIndex + 1}</div>
65
+ <div className="text-sm font-medium text-foreground">{steps[itemIndex]?.title}</div>
66
+ </div>
67
+ )}
68
+ renderActiveDetail={(_, activeIndex) => (
69
+ <div className="rounded-[20px] border border-border/70 bg-card/80 p-4">
70
+ <p className="text-sm font-semibold text-foreground">{steps[activeIndex]?.title}</p>
71
+ <p className="mt-1 text-sm text-muted-foreground">{steps[activeIndex]?.detail}</p>
72
+ </div>
73
+ )}
58
74
  >
59
75
  {steps.map((step, slideIndex) => (
60
76
  <CarouselItem key={step.title}>
@@ -46,7 +46,7 @@ export function CommandBarShowcase() {
46
46
  </div>
47
47
  </div>
48
48
 
49
- <CommandBar open={open} position={position} className="max-w-[calc(100%-2rem)]">
49
+ <CommandBar open={open} position={position} grouped label="Review flow" className="max-w-[calc(100%-2rem)]">
50
50
  <Kbd>G</Kbd>
51
51
  <Button size="sm" variant="ghost">
52
52
  <MessageSquareIcon className="mr-2 size-4" />
@@ -1,30 +1,31 @@
1
1
  import type { ComponentDemoMock } from "../types"
2
2
 
3
- export const dataTableMock: ComponentDemoMock = {
4
- code: `import {
5
- DataTable,
6
- DataTableBulkActions,
7
- DataTableColumnVisibilityMenu,
8
- DataTableSortableHeader,
9
- createDataTableActionsColumn,
10
- createDataTableSelectColumn,
11
- } from "tembro"
12
-
13
- export function Example() {
14
- return (
15
- <DataTable
16
- columns={columns}
17
- data={rows}
18
- enableRowSelection
19
- density="comfortable"
20
- striped
21
- bordered
22
- stickyHeader
23
- rowActions={(row) => getActions(row.original)}
24
- bulkActions={bulkActions}
25
- />
26
- )
27
- }`,
3
+ export const dataTableMock: ComponentDemoMock = {
4
+ code: `import { DataTable } from "tembro"
5
+
6
+ export function Example() {
7
+ return (
8
+ <DataTable
9
+ columns={columns}
10
+ data={rows}
11
+ title="Customers"
12
+ description="Search, filter, select, and act on operational rows."
13
+ search={{ value: query, onValueChange: setQuery, placeholder: "Search rows..." }}
14
+ filters={<StatusFilter value={status} onValueChange={setStatus} />}
15
+ toolbarActions={<ExportButton rows={rows} />}
16
+ features={{ columnVisibility: true, rowActions: true, bulkActions: true }}
17
+ rowSelection={rowSelection}
18
+ onRowSelectionChange={setRowSelection}
19
+ rowActions={(row) => getActions(row.original)}
20
+ bulkActions={bulkActions}
21
+ pagination={{ pageIndex, pageSize, pageCount, totalRows: rows.length, onPageChange: setPageIndex }}
22
+ density="comfortable"
23
+ striped
24
+ bordered
25
+ stickyHeader
26
+ />
27
+ )
28
+ }`,
28
29
  highlights: ["Toolbar actions", "Bulk actions", "Row click", "Visibility menu", "Density", "Preset-driven views", "Mobile strategy", "Pagination"],
29
30
  scenarios: [
30
31
  { title: "Finance operations", description: "Filter, sort and paginate transactional rows with export-ready actions." },
@@ -7,7 +7,7 @@ import {
7
7
  DataTable,
8
8
  DataTableColumnVisibilityMenu,
9
9
  DataTableSortableHeader,
10
- SimpleSelect,
10
+ Select,
11
11
  } from "@/index"
12
12
  import { createDataTableActionsColumn } from "@/components/data-table/data-table-actions-column"
13
13
  import { createDataTableSelectColumn } from "@/components/data-table/data-table-select-column"
@@ -127,7 +127,7 @@ export function DataTableShowcase() {
127
127
  }}
128
128
  filters={
129
129
  <>
130
- <SimpleSelect
130
+ <Select
131
131
  value={statusFilter}
132
132
  onValueChange={(value) => setStatusFilter(value ?? "all")}
133
133
  options={[
@@ -138,7 +138,7 @@ export function DataTableShowcase() {
138
138
  ]}
139
139
  triggerClassName="min-w-40"
140
140
  />
141
- <SimpleSelect
141
+ <Select
142
142
  value={ownerFilter}
143
143
  onValueChange={(value) => setOwnerFilter(value ?? "all")}
144
144
  options={[
@@ -9,7 +9,7 @@ import {
9
9
  DataTableColumnVisibilityMenu,
10
10
  DataTableSortableHeader,
11
11
  DataTableViewPresets,
12
- SearchInput,
12
+ Input,
13
13
  } from "@/index"
14
14
  import { createDataTableActionsColumn } from "@/components/data-table/data-table-actions-column"
15
15
  import { DataTableSavedFilters } from "@/components/data-table/data-table-saved-filters"
@@ -147,7 +147,7 @@ export function DataTablePartShowcase({
147
147
  size="sm"
148
148
  />
149
149
  <div className="w-full max-w-[320px]">
150
- <SearchInput value={search} onValueChange={setSearch} placeholder="Search invoice, customer..." />
150
+ <Input type="search" value={search} onValueChange={setSearch} placeholder="Search invoice, customer..." />
151
151
  </div>
152
152
  </div>
153
153
  </div>
@@ -168,7 +168,7 @@ export function DataTablePartShowcase({
168
168
  toolbarProps={(table) => ({
169
169
  title: "Invoices",
170
170
  description: "Premium subroute preview for reusable DataTable parts.",
171
- search: <SearchInput value={search} onValueChange={setSearch} placeholder="Search rows..." />,
171
+ search: <Input type="search" value={search} onValueChange={setSearch} placeholder="Search rows..." />,
172
172
  actions: (
173
173
  <div className="flex items-center gap-2">
174
174
  <DataTableColumnVisibilityMenu table={table} />
@@ -4,6 +4,18 @@ import { Badge, FileUpload } from "@/index"
4
4
 
5
5
  export function FileUploadShowcase() {
6
6
  const [files, setFiles] = React.useState<File[]>([])
7
+ const [status, setStatus] = React.useState<Record<string, "idle" | "uploading" | "success" | "error">>({})
8
+
9
+ React.useEffect(() => {
10
+ setStatus((current) => {
11
+ const next = { ...current }
12
+ files.forEach((file, index) => {
13
+ const key = `${file.name}-${file.size}-${file.lastModified}`
14
+ next[key] ??= index === 0 ? "uploading" : index === 1 ? "error" : "success"
15
+ })
16
+ return next
17
+ })
18
+ }, [files])
7
19
 
8
20
  return (
9
21
  <div className="space-y-4">
@@ -22,12 +34,20 @@ export function FileUploadShowcase() {
22
34
  <FileUpload
23
35
  files={files}
24
36
  onFilesChange={setFiles}
37
+ status={status}
25
38
  accept=".pdf,.docx,.png"
26
39
  maxFiles={4}
27
40
  maxSize={4 * 1024 * 1024}
28
41
  dropzoneLabel="Upload release assets"
29
42
  dropzoneDescription="Drag files here or choose from your device."
30
43
  helperText="Supports PDF, DOCX and PNG up to 4 MB."
44
+ onRetryFile={(file) => {
45
+ const key = `${file.name}-${file.size}-${file.lastModified}`
46
+ setStatus((current) => ({ ...current, [key]: "uploading" }))
47
+ window.setTimeout(() => {
48
+ setStatus((current) => ({ ...current, [key]: "success" }))
49
+ }, 900)
50
+ }}
31
51
  />
32
52
 
33
53
  <div className="grid gap-3 md:grid-cols-3">
@@ -37,7 +57,7 @@ export function FileUploadShowcase() {
37
57
  </div>
38
58
  <div className="rounded-2xl border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3 text-sm">
39
59
  <p className="font-medium aui-text-strong">Interaction model</p>
40
- <p className="mt-2 aui-text-muted">Remove and clear actions stay isolated from the parent dropzone click.</p>
60
+ <p className="mt-2 aui-text-muted">Uploading, success and retry-ready error rows all stay isolated from the parent dropzone click.</p>
41
61
  </div>
42
62
  <div className="rounded-2xl border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3 text-sm">
43
63
  <p className="font-medium aui-text-strong">Use case</p>
@@ -23,6 +23,9 @@ export function ImageUploadShowcase() {
23
23
  files={files}
24
24
  onFilesChange={setFiles}
25
25
  maxFiles={3}
26
+ minImageWidth={1200}
27
+ minImageHeight={800}
28
+ aspectRatio={1.5}
26
29
  helperText="Upload hero illustrations or block thumbnails."
27
30
  />
28
31
 
@@ -33,7 +36,7 @@ export function ImageUploadShowcase() {
33
36
  </div>
34
37
  <div className="rounded-2xl border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3 text-sm">
35
38
  <p className="font-medium aui-text-strong">Interaction model</p>
36
- <p className="mt-2 aui-text-muted">Remove action stays separate from the parent dropzone surface.</p>
39
+ <p className="mt-2 aui-text-muted">Preview, remove, and ratio validation live inside the same reusable media surface.</p>
37
40
  </div>
38
41
  <div className="rounded-2xl border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3 text-sm">
39
42
  <p className="font-medium aui-text-strong">Use case</p>
@@ -5,7 +5,6 @@ import { AlertDialogShowcase, alertDialogMock } from "./alert-dialog"
5
5
  import { accordionMock, AccordionShowcase } from "./accordion"
6
6
  import { activityFeedMock, ActivityFeedShowcase } from "./activity-feed"
7
7
  import { ActionMenuShowcase, actionMenuMock } from "./action-menu"
8
- import { appShellMock, AppShellShowcase } from "./app-shell"
9
8
  import { appSidebarMock, AppSidebarShowcase } from "./app-sidebar"
10
9
  import { asyncSelectMock, AsyncSelectShowcase } from "./async-select"
11
10
  import { asyncMultiSelectMock, AsyncMultiSelectShowcase } from "./async-multi-select"
@@ -203,7 +202,6 @@ export const premiumShowcaseDemoRegistry: Record<string, ComponentDemoBundle> =
203
202
  table: { mock: tableMock, Showcase: TableShowcase },
204
203
  sidebar: { mock: appSidebarMock, Showcase: AppSidebarShowcase },
205
204
  "app-sidebar": { mock: appSidebarMock, Showcase: AppSidebarShowcase },
206
- "app-shell": { mock: appShellMock, Showcase: AppShellShowcase },
207
205
  "sidebar-nav": { mock: sidebarNavMock, Showcase: SidebarNavShowcase },
208
206
  breadcrumbs: { mock: breadcrumbsMock, Showcase: BreadcrumbsShowcase },
209
207
  "page-header": { mock: pageHeaderMock, Showcase: PageHeaderShowcase },
@@ -48,7 +48,7 @@ export function LoadingStateShowcase({ mode }: ComponentDemoProps) {
48
48
  ) : null}
49
49
 
50
50
  <LoadingState label={labels[index]} description={descriptions[index]} />
51
- {showSecondary ? <LoadingState label={`${labels[index]} (compact)`} description="This is a second loading area inside the same page." /> : null}
51
+ {showSecondary ? <LoadingState variant="progress" progress={68} label={`${labels[index]} (progress)`} description="This is a second loading area inside the same page." /> : null}
52
52
  </div>
53
53
  )
54
54
  }
@@ -1,12 +1,12 @@
1
1
  import * as React from "react"
2
2
 
3
- import { Button, MetricGrid } from "@/index"
3
+ import { BarChart, Button, ChartFrame, ChartLegend, DonutChart, MetricGrid } from "@/index"
4
4
 
5
5
  import type { ComponentDemoProps } from "../types"
6
6
 
7
7
  const items = [
8
- { key: "users", label: "Users", value: "2,410", description: "Last 30 days", tone: "success" as const },
9
- { key: "revenue", label: "Revenue", value: "$132k", description: "Compared with last month", tone: "info" as const },
8
+ { key: "users", label: "Users", value: "2,410", description: "Last 30 days", tone: "success" as const, trend: "+12%" },
9
+ { key: "revenue", label: "Revenue", value: "$132k", description: "Compared with last month", tone: "info" as const, trend: "+8.4%" },
10
10
  { key: "errors", label: "Errors", value: "3", description: "Immediate follow up", tone: "danger" as const },
11
11
  { key: "churn", label: "Churn", value: "1.8%", description: "Within target", tone: "warning" as const },
12
12
  ]
@@ -33,6 +33,38 @@ export function MetricGridShowcase({ mode }: ComponentDemoProps) {
33
33
  ) : null}
34
34
 
35
35
  <MetricGrid items={items} columns={columnCount} compact={compact} />
36
+ <div className="grid gap-4 xl:grid-cols-2">
37
+ <ChartFrame title="Category performance" description="Bar chart shares the same token palette.">
38
+ <BarChart
39
+ data={[
40
+ { label: "CRM", value: 42 },
41
+ { label: "Finance", value: 31 },
42
+ { label: "Auth", value: -8 },
43
+ { label: "Forms", value: 26 },
44
+ ]}
45
+ />
46
+ </ChartFrame>
47
+ <ChartFrame title="Traffic split" description="Donut, legend and KPI blocks stay visually aligned.">
48
+ <div className="grid justify-items-center gap-4">
49
+ <DonutChart
50
+ centerValue="68%"
51
+ centerLabel="Usage"
52
+ data={[
53
+ { label: "Dashboard", value: 42 },
54
+ { label: "Forms", value: 18 },
55
+ { label: "Reports", value: 8 },
56
+ ]}
57
+ />
58
+ <ChartLegend
59
+ data={[
60
+ { label: "Dashboard", value: 42 },
61
+ { label: "Forms", value: 18 },
62
+ { label: "Reports", value: 8 },
63
+ ]}
64
+ />
65
+ </div>
66
+ </ChartFrame>
67
+ </div>
36
68
  </div>
37
69
  )
38
- }
70
+ }
@@ -8,9 +8,9 @@ const panelClass =
8
8
  "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5"
9
9
 
10
10
  const seedItems = [
11
- { id: "1", title: "Invoice paid", description: "Acme Growth settled invoice #2048.", time: "2m ago", read: false },
12
- { id: "2", title: "Deployment ready", description: "Release candidate passed checks and waits for promotion.", time: "12m ago", read: false },
13
- { id: "3", title: "Member invited", description: "Operations workspace access was sent to Dilshod.", time: "1h ago", read: true },
11
+ { id: "1", title: "Invoice paid", description: "Acme Growth settled invoice #2048.", time: "2m ago", read: false, group: "Today" },
12
+ { id: "2", title: "Deployment ready", description: "Release candidate passed checks and waits for promotion.", time: "12m ago", read: false, group: "Today" },
13
+ { id: "3", title: "Member invited", description: "Operations workspace access was sent to Dilshod.", time: "1h ago", read: true, group: "Earlier" },
14
14
  ]
15
15
 
16
16
  export function NotificationCenterShowcase({ mode }: ComponentDemoProps) {
@@ -44,6 +44,7 @@ export function NotificationCenterShowcase({ mode }: ComponentDemoProps) {
44
44
  <NotificationCenter
45
45
  notifications={items}
46
46
  onMarkAllRead={() => setItems((current) => current.map((item) => ({ ...item, read: true })))}
47
+ onClearAll={() => setItems([])}
47
48
  onNotificationClick={(notification) =>
48
49
  setItems((current) => current.map((item) => (item.id === notification.id ? { ...item, read: true } : item)))
49
50
  }
@@ -54,6 +54,7 @@ export function PageStateShowcase({ mode }: ComponentDemoProps) {
54
54
  </Button>
55
55
  )
56
56
  }
57
+ extra={tone === "error" ? <Button variant="ghost">Open logs</Button> : undefined}
57
58
  />
58
59
 
59
60
  {mode === "playground" ? (
@@ -11,6 +11,7 @@ export function PaginationShowcase({ mode }: ComponentDemoProps) {
11
11
  const [page, setPage] = React.useState(6)
12
12
  const [pageCount, setPageCount] = React.useState(18)
13
13
  const [showEdges, setShowEdges] = React.useState(true)
14
+ const [pageSize, setPageSize] = React.useState(20)
14
15
 
15
16
  return (
16
17
  <div className="space-y-5">
@@ -36,7 +37,17 @@ export function PaginationShowcase({ mode }: ComponentDemoProps) {
36
37
  <p className="text-sm font-medium aui-text-muted">Review queue pages</p>
37
38
  <p className="mt-2 text-sm leading-6 aui-text-muted">Showing page <span className="font-medium aui-text-strong">{page}</span> of <span className="font-medium aui-text-strong">{pageCount}</span>.</p>
38
39
  </div>
39
- <Pagination page={page} pageCount={pageCount} onPageChange={setPage} showEdges={showEdges} />
40
+ <Pagination
41
+ page={page}
42
+ pageCount={pageCount}
43
+ onPageChange={setPage}
44
+ showEdges={showEdges}
45
+ totalCount={pageCount * pageSize}
46
+ pageSize={pageSize}
47
+ pageSizeOptions={[10, 20, 50]}
48
+ onPageSizeChange={setPageSize}
49
+ showSummary
50
+ />
40
51
  </div>
41
52
  </section>
42
53
 
@@ -53,6 +64,7 @@ export function PaginationShowcase({ mode }: ComponentDemoProps) {
53
64
  <div className="mt-4 space-y-2 text-sm leading-6 aui-text-muted">
54
65
  <p>Page: <span className="font-medium aui-text-strong">{page}</span></p>
55
66
  <p>Total pages: <span className="font-medium aui-text-strong">{pageCount}</span></p>
67
+ <p>Page size: <span className="font-medium aui-text-strong">{pageSize}</span></p>
56
68
  <p>Edges: <span className="font-medium aui-text-strong">{showEdges ? "visible" : "hidden"}</span></p>
57
69
  </div>
58
70
  </section>