tembro 2.0.4 → 2.0.5

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 (372) hide show
  1. package/dist/components/actions/action-menu.cjs +1 -1
  2. package/dist/components/actions/action-menu.d.ts +13 -1
  3. package/dist/components/actions/action-menu.js +87 -61
  4. package/dist/components/actions/button-group.cjs +1 -1
  5. package/dist/components/actions/button-group.d.ts +9 -1
  6. package/dist/components/actions/button-group.js +58 -14
  7. package/dist/components/actions/copy-button.cjs +1 -1
  8. package/dist/components/actions/copy-button.d.ts +2 -1
  9. package/dist/components/actions/copy-button.js +13 -11
  10. package/dist/components/calendar/calendar.cjs +1 -1
  11. package/dist/components/calendar/calendar.d.ts +14 -1
  12. package/dist/components/calendar/calendar.js +207 -128
  13. package/dist/components/calendar/date-picker.cjs +1 -1
  14. package/dist/components/calendar/date-picker.d.ts +3 -1
  15. package/dist/components/calendar/date-picker.js +57 -27
  16. package/dist/components/calendar/date-range-picker.cjs +1 -1
  17. package/dist/components/calendar/date-range-picker.d.ts +10 -1
  18. package/dist/components/calendar/date-range-picker.js +149 -64
  19. package/dist/components/data-table/data-table-toolbar.cjs +1 -1
  20. package/dist/components/data-table/data-table-toolbar.d.ts +5 -1
  21. package/dist/components/data-table/data-table-toolbar.js +36 -23
  22. package/dist/components/data-table/data-table.cjs +1 -1
  23. package/dist/components/data-table/data-table.d.ts +6 -4
  24. package/dist/components/data-table/data-table.js +87 -79
  25. package/dist/components/data-table/demo.cjs +1 -1
  26. package/dist/components/data-table/demo.js +3 -13
  27. package/dist/components/data-table/index.cjs +1 -1
  28. package/dist/components/data-table/index.js +5 -5
  29. package/dist/components/data-table/public.cjs +1 -1
  30. package/dist/components/data-table/public.d.ts +1 -6
  31. package/dist/components/data-table/public.js +7 -12
  32. package/dist/components/display/activity-feed.cjs +1 -1
  33. package/dist/components/display/activity-feed.d.ts +12 -1
  34. package/dist/components/display/activity-feed.js +69 -47
  35. package/dist/components/display/carousel.cjs +1 -1
  36. package/dist/components/display/carousel.d.ts +10 -1
  37. package/dist/components/display/carousel.js +68 -23
  38. package/dist/components/display/code-block.cjs +2 -1
  39. package/dist/components/display/code-block.d.ts +3 -1
  40. package/dist/components/display/code-block.js +33 -19
  41. package/dist/components/display/comparison-card.cjs +1 -1
  42. package/dist/components/display/comparison-card.d.ts +3 -3
  43. package/dist/components/display/comparison-card.js +14 -38
  44. package/dist/components/display/data-state.cjs +1 -1
  45. package/dist/components/display/data-state.d.ts +12 -2
  46. package/dist/components/display/data-state.js +80 -42
  47. package/dist/components/display/demo.cjs +1 -1
  48. package/dist/components/display/demo.js +1 -5
  49. package/dist/components/display/index.cjs +1 -1
  50. package/dist/components/display/index.d.ts +0 -3
  51. package/dist/components/display/index.js +21 -24
  52. package/dist/components/feedback/alert.cjs +1 -1
  53. package/dist/components/feedback/alert.d.ts +6 -1
  54. package/dist/components/feedback/alert.js +49 -19
  55. package/dist/components/feedback/index.cjs +1 -1
  56. package/dist/components/feedback/index.d.ts +0 -2
  57. package/dist/components/feedback/index.js +3 -5
  58. package/dist/components/filters/demo.cjs +1 -1
  59. package/dist/components/filters/demo.js +1 -5
  60. package/dist/components/filters/filter-bar.cjs +1 -1
  61. package/dist/components/filters/filter-bar.d.ts +15 -1
  62. package/dist/components/filters/filter-bar.js +94 -50
  63. package/dist/components/filters/index.cjs +1 -1
  64. package/dist/components/filters/index.d.ts +0 -1
  65. package/dist/components/filters/index.js +3 -4
  66. package/dist/components/form/form-field-shell.cjs +1 -1
  67. package/dist/components/form/form-field-shell.d.ts +17 -3
  68. package/dist/components/form/form-field-shell.js +54 -40
  69. package/dist/components/form/form-input.cjs +1 -1
  70. package/dist/components/form/form-input.js +278 -217
  71. package/dist/components/form/form-select.cjs +1 -1
  72. package/dist/components/form/form-select.js +47 -33
  73. package/dist/components/form/form-switch.cjs +1 -1
  74. package/dist/components/form/form-switch.js +79 -66
  75. package/dist/components/form/form-textarea.cjs +1 -1
  76. package/dist/components/form/form-textarea.js +59 -48
  77. package/dist/components/form/index.cjs +1 -1
  78. package/dist/components/form/index.js +14 -14
  79. package/dist/components/form/public.cjs +1 -1
  80. package/dist/components/form/public.d.ts +0 -8
  81. package/dist/components/form/public.js +7 -15
  82. package/dist/components/inputs/async-select.cjs +1 -1
  83. package/dist/components/inputs/async-select.d.ts +11 -2
  84. package/dist/components/inputs/async-select.js +278 -270
  85. package/dist/components/inputs/combobox.cjs +1 -1
  86. package/dist/components/inputs/combobox.d.ts +5 -1
  87. package/dist/components/inputs/combobox.js +52 -19
  88. package/dist/components/inputs/simple-select.cjs +1 -1
  89. package/dist/components/inputs/simple-select.d.ts +2 -1
  90. package/dist/components/inputs/simple-select.js +32 -16
  91. package/dist/components/layout/app-sidebar.cjs +1 -1
  92. package/dist/components/layout/app-sidebar.d.ts +4 -1
  93. package/dist/components/layout/app-sidebar.js +152 -132
  94. package/dist/components/layout/breadcrumbs.cjs +1 -1
  95. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  96. package/dist/components/layout/breadcrumbs.js +10 -10
  97. package/dist/components/layout/index.cjs +1 -1
  98. package/dist/components/layout/index.js +3 -3
  99. package/dist/components/layout/stat-card.cjs +1 -1
  100. package/dist/components/layout/stat-card.d.ts +8 -1
  101. package/dist/components/layout/stat-card.js +33 -11
  102. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  103. package/dist/components/modern/calendar-scheduler.d.ts +2 -1
  104. package/dist/components/modern/calendar-scheduler.js +21 -12
  105. package/dist/components/overlay/alert-dialog.cjs +1 -1
  106. package/dist/components/overlay/alert-dialog.d.ts +15 -1
  107. package/dist/components/overlay/alert-dialog.js +102 -27
  108. package/dist/components/overlay/drawer.cjs +1 -1
  109. package/dist/components/overlay/drawer.d.ts +4 -1
  110. package/dist/components/overlay/drawer.js +20 -17
  111. package/dist/components/patterns/index.cjs +1 -1
  112. package/dist/components/patterns/index.d.ts +0 -1
  113. package/dist/components/patterns/index.js +1 -2
  114. package/dist/components/patterns/public.cjs +1 -1
  115. package/dist/components/patterns/public.d.ts +0 -1
  116. package/dist/components/patterns/public.js +1 -2
  117. package/dist/components/ui/button/index.cjs +1 -1
  118. package/dist/components/ui/button/index.d.ts +3 -1
  119. package/dist/components/ui/button/index.js +7 -5
  120. package/dist/components/ui/checkbox/index.cjs +1 -1
  121. package/dist/components/ui/checkbox/index.d.ts +8 -0
  122. package/dist/components/ui/checkbox/index.js +16 -14
  123. package/dist/components/ui/collapse/index.cjs +1 -1
  124. package/dist/components/ui/collapse/index.d.ts +17 -3
  125. package/dist/components/ui/collapse/index.js +88 -33
  126. package/dist/components/ui/dialog/index.cjs +1 -1
  127. package/dist/components/ui/dialog/index.d.ts +2 -1
  128. package/dist/components/ui/dialog/index.js +6 -4
  129. package/dist/components/ui/dropdown-menu/index.cjs +1 -1
  130. package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
  131. package/dist/components/ui/dropdown-menu/index.js +87 -62
  132. package/dist/index.cjs +1 -1
  133. package/dist/index.js +137 -156
  134. package/dist/public-component-surface.cjs +1 -1
  135. package/dist/public-component-surface.js +0 -15
  136. package/dist/showcase/component-api-schema.cjs +1 -1
  137. package/dist/showcase/component-api-schema.js +2 -2
  138. package/dist/showcase/create-demo.cjs +20 -34
  139. package/dist/showcase/create-demo.js +15 -16
  140. package/dist/showcase/fallback.cjs +3 -3
  141. package/dist/showcase/fallback.js +275 -265
  142. package/dist/showcase/premium/accordion/showcase.cjs +1 -1
  143. package/dist/showcase/premium/accordion/showcase.js +36 -5
  144. package/dist/showcase/premium/action-menu/showcase.cjs +1 -1
  145. package/dist/showcase/premium/action-menu/showcase.js +26 -8
  146. package/dist/showcase/premium/activity-feed/showcase.cjs +1 -1
  147. package/dist/showcase/premium/activity-feed/showcase.js +60 -36
  148. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  149. package/dist/showcase/premium/alert/showcase.js +41 -18
  150. package/dist/showcase/premium/alert-dialog/showcase.cjs +1 -1
  151. package/dist/showcase/premium/alert-dialog/showcase.js +35 -7
  152. package/dist/showcase/premium/async-multi-select/mock.cjs +4 -3
  153. package/dist/showcase/premium/async-multi-select/mock.js +5 -5
  154. package/dist/showcase/premium/async-multi-select/showcase.cjs +1 -1
  155. package/dist/showcase/premium/async-multi-select/showcase.js +4 -3
  156. package/dist/showcase/premium/async-select/mock.cjs +1 -1
  157. package/dist/showcase/premium/async-select/mock.js +1 -1
  158. package/dist/showcase/premium/async-select/showcase.cjs +1 -1
  159. package/dist/showcase/premium/async-select/showcase.js +69 -22
  160. package/dist/showcase/premium/button/showcase.cjs +1 -1
  161. package/dist/showcase/premium/button/showcase.js +49 -3
  162. package/dist/showcase/premium/button-group/showcase.cjs +1 -1
  163. package/dist/showcase/premium/button-group/showcase.js +53 -29
  164. package/dist/showcase/premium/calendar/showcase.cjs +1 -1
  165. package/dist/showcase/premium/calendar/showcase.js +7 -2
  166. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  167. package/dist/showcase/premium/carousel/showcase.js +95 -47
  168. package/dist/showcase/premium/checkbox/showcase.cjs +1 -1
  169. package/dist/showcase/premium/checkbox/showcase.js +143 -67
  170. package/dist/showcase/premium/clearable-input/mock.cjs +4 -3
  171. package/dist/showcase/premium/clearable-input/mock.js +3 -2
  172. package/dist/showcase/premium/clearable-input/showcase.cjs +1 -1
  173. package/dist/showcase/premium/clearable-input/showcase.js +8 -2
  174. package/dist/showcase/premium/collapse/showcase.cjs +1 -1
  175. package/dist/showcase/premium/collapse/showcase.js +7 -0
  176. package/dist/showcase/premium/combobox/showcase.cjs +1 -1
  177. package/dist/showcase/premium/combobox/showcase.d.ts +2 -1
  178. package/dist/showcase/premium/combobox/showcase.js +56 -47
  179. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  180. package/dist/showcase/premium/data-table/showcase.js +138 -46
  181. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  182. package/dist/showcase/premium/data-table-parts/showcase.js +13 -13
  183. package/dist/showcase/premium/date-input/mock.cjs +1 -1
  184. package/dist/showcase/premium/date-input/mock.js +1 -1
  185. package/dist/showcase/premium/date-range-picker/showcase.cjs +1 -1
  186. package/dist/showcase/premium/date-range-picker/showcase.js +32 -1
  187. package/dist/showcase/premium/dropdown-menu/showcase.cjs +1 -1
  188. package/dist/showcase/premium/dropdown-menu/showcase.js +88 -54
  189. package/dist/showcase/premium/form-wrapper/mock.cjs +41 -15
  190. package/dist/showcase/premium/form-wrapper/mock.js +4 -4
  191. package/dist/showcase/premium/form-wrapper/showcase.cjs +1 -1
  192. package/dist/showcase/premium/form-wrapper/showcase.js +77 -28
  193. package/dist/showcase/premium/index.cjs +1 -1
  194. package/dist/showcase/premium/index.js +426 -467
  195. package/dist/showcase/premium/input/mock.cjs +4 -1
  196. package/dist/showcase/premium/input/mock.js +1 -1
  197. package/dist/showcase/premium/masked-input/mock.cjs +1 -1
  198. package/dist/showcase/premium/masked-input/mock.js +1 -1
  199. package/dist/showcase/premium/money-input/mock.cjs +1 -1
  200. package/dist/showcase/premium/money-input/mock.js +1 -1
  201. package/dist/showcase/premium/number-input/mock.cjs +1 -1
  202. package/dist/showcase/premium/number-input/mock.js +1 -1
  203. package/dist/showcase/premium/phone-input/mock.cjs +1 -1
  204. package/dist/showcase/premium/phone-input/mock.js +1 -1
  205. package/dist/showcase/premium/quantity-input/mock.cjs +1 -1
  206. package/dist/showcase/premium/quantity-input/mock.js +1 -1
  207. package/dist/showcase/premium/simple-select/mock.cjs +1 -1
  208. package/dist/showcase/premium/simple-select/mock.js +1 -1
  209. package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
  210. package/dist/showcase/premium/simple-select/showcase.js +4 -2
  211. package/dist/showcase/preview-catalog.cjs +7 -10
  212. package/dist/showcase/preview-catalog.js +7 -7
  213. package/dist/showcase/registry-quality.cjs +1 -1
  214. package/dist/showcase/registry-quality.js +0 -23
  215. package/dist/showcase/registry-specific.cjs +1 -1
  216. package/dist/showcase/registry-specific.js +149 -383
  217. package/dist/showcase/render-registry-preview.cjs +1 -1
  218. package/dist/showcase/render-registry-preview.js +163 -195
  219. package/dist/showcase/site-data.cjs +1 -1
  220. package/dist/showcase/site-data.js +197 -941
  221. package/dist/showcase/supplemental.cjs +1 -1
  222. package/dist/showcase/supplemental.js +1 -1
  223. package/dist/showcase/tembro-registry.json.cjs +1 -1
  224. package/dist/showcase/tembro-registry.json.js +33 -51
  225. package/package.json +1 -1
  226. package/packages/cli/dist/index.cjs +2 -2
  227. package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
  228. package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
  229. package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
  230. package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
  231. package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
  232. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
  233. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
  234. package/packages/cli/vendor/src/components/data-table/data-table.tsx +65 -53
  235. package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
  236. package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
  237. package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
  238. package/packages/cli/vendor/src/components/display/carousel.tsx +88 -2
  239. package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
  240. package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
  241. package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
  242. package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
  243. package/packages/cli/vendor/src/components/display/index.ts +0 -3
  244. package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
  245. package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
  246. package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
  247. package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
  248. package/packages/cli/vendor/src/components/filters/index.ts +0 -1
  249. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
  250. package/packages/cli/vendor/src/components/form/form-input.tsx +118 -11
  251. package/packages/cli/vendor/src/components/form/form-select.tsx +26 -3
  252. package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
  253. package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
  254. package/packages/cli/vendor/src/components/form/public.ts +0 -9
  255. package/packages/cli/vendor/src/components/inputs/async-select.tsx +126 -82
  256. package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
  257. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +52 -24
  258. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
  259. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
  260. package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
  261. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
  262. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
  263. package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
  264. package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
  265. package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
  266. package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
  267. package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
  268. package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
  269. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
  270. package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
  271. package/packages/cli/vendor/src/public-component-surface.ts +0 -3
  272. package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
  273. package/packages/cli/vendor/src/showcase/create-demo.tsx +31 -46
  274. package/packages/cli/vendor/src/showcase/fallback.tsx +80 -99
  275. package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
  276. package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
  277. package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
  278. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
  279. package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
  280. package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
  281. package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
  282. package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
  283. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
  284. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
  285. package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
  286. package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
  287. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
  288. package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
  289. package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
  290. package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
  291. package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
  292. package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
  293. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
  294. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +11 -11
  295. package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
  296. package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
  297. package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
  298. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
  299. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
  300. package/packages/cli/vendor/src/showcase/premium/index.ts +7 -24
  301. package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
  302. package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
  303. package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
  304. package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
  305. package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
  306. package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
  307. package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
  308. package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
  309. package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
  310. package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -28
  311. package/packages/cli/vendor/src/showcase/registry-specific.tsx +3 -178
  312. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +18 -51
  313. package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
  314. package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
  315. package/packages/cli/vendor/src/showcase/tembro-registry.json +11 -58
  316. package/registry.json +11 -61
  317. package/dist/components/display/entity-card.cjs +0 -1
  318. package/dist/components/display/entity-card.d.ts +0 -18
  319. package/dist/components/display/entity-card.js +0 -61
  320. package/dist/components/display/entity-header.cjs +0 -1
  321. package/dist/components/display/entity-header.d.ts +0 -13
  322. package/dist/components/display/entity-header.js +0 -52
  323. package/dist/components/display/file-card.cjs +0 -1
  324. package/dist/components/display/file-card.d.ts +0 -14
  325. package/dist/components/display/file-card.js +0 -59
  326. package/dist/components/feedback/empty-search-state.cjs +0 -1
  327. package/dist/components/feedback/empty-search-state.d.ts +0 -11
  328. package/dist/components/feedback/empty-search-state.js +0 -45
  329. package/dist/components/feedback/empty-state.cjs +0 -1
  330. package/dist/components/feedback/empty-state.d.ts +0 -11
  331. package/dist/components/feedback/empty-state.js +0 -38
  332. package/dist/components/filters/filter-chips.cjs +0 -1
  333. package/dist/components/filters/filter-chips.d.ts +0 -18
  334. package/dist/components/filters/filter-chips.js +0 -61
  335. package/dist/components/patterns/form-builder-presets.cjs +0 -1
  336. package/dist/components/patterns/form-builder-presets.d.ts +0 -1
  337. package/dist/components/patterns/form-builder-presets.js +0 -2
  338. package/dist/components/patterns/form-builder.cjs +0 -1
  339. package/dist/components/patterns/form-builder.d.ts +0 -109
  340. package/dist/components/patterns/form-builder.js +0 -263
  341. package/dist/showcase/premium/empty-state/index.cjs +0 -1
  342. package/dist/showcase/premium/empty-state/index.d.ts +0 -2
  343. package/dist/showcase/premium/empty-state/index.js +0 -3
  344. package/dist/showcase/premium/empty-state/mock.cjs +0 -14
  345. package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
  346. package/dist/showcase/premium/empty-state/mock.js +0 -31
  347. package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
  348. package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
  349. package/dist/showcase/premium/empty-state/showcase.js +0 -99
  350. package/dist/showcase/premium/form-builder/index.cjs +0 -1
  351. package/dist/showcase/premium/form-builder/index.d.ts +0 -2
  352. package/dist/showcase/premium/form-builder/index.js +0 -3
  353. package/dist/showcase/premium/form-builder/mock.cjs +0 -57
  354. package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
  355. package/dist/showcase/premium/form-builder/mock.js +0 -40
  356. package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
  357. package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
  358. package/dist/showcase/premium/form-builder/showcase.js +0 -69
  359. package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
  360. package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
  361. package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
  362. package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
  363. package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
  364. package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
  365. package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
  366. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
  367. package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
  368. package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
  369. package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
  370. package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
  371. package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
  372. package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
@@ -17,7 +17,9 @@ const loadOptions = async (query: string): Promise<typeof workspaceOptions> => {
17
17
 
18
18
  export function AsyncSelectShowcase() {
19
19
  const [value, setValue] = useState("")
20
+ const [teamValues, setTeamValues] = useState<string[]>(["north", "west"])
20
21
  const activeOption = routeWorkspaceOptions.find((item) => item.value === value)
22
+ const selectedTeams = routeWorkspaceOptions.filter((item) => teamValues.includes(String(item.value)))
21
23
 
22
24
  return (
23
25
  <div className="space-y-5">
@@ -49,9 +51,39 @@ export function AsyncSelectShowcase() {
49
51
  defaultOptions={workspaceOptions}
50
52
  minSearchLength={1}
51
53
  clearable
54
+ showSelectedDescription
52
55
  debounceMs={220}
56
+ labels={{
57
+ placeholder: "Choose service region",
58
+ searchPlaceholder: "Search regions...",
59
+ }}
53
60
  />
54
61
  </div>
62
+ <div className="mt-5">
63
+ <p className="text-sm font-medium aui-text-muted">Multi select uses the same component</p>
64
+ <div className="mt-3">
65
+ <AsyncSelect
66
+ isMulti
67
+ value={teamValues}
68
+ onValueChange={(nextValue) => setTeamValues(nextValue)}
69
+ loadOptions={loadOptions}
70
+ defaultOptions={workspaceOptions}
71
+ minSearchLength={1}
72
+ clearable
73
+ showSelectAll
74
+ maxSelected={3}
75
+ maxVisibleTags={2}
76
+ showSelectedDescription
77
+ debounceMs={220}
78
+ labels={{
79
+ multiPlaceholder: "Choose team coverage",
80
+ searchPlaceholder: "Search team regions...",
81
+ selectedCount: (count) => `${count} regions selected`,
82
+ hiddenSelected: (count) => `+${count} more`,
83
+ }}
84
+ />
85
+ </div>
86
+ </div>
55
87
  <div className="mt-4 grid gap-3 md:grid-cols-3">
56
88
  <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
57
89
  <p className="font-medium aui-text-strong">Type to query</p>
@@ -83,6 +115,10 @@ export function AsyncSelectShowcase() {
83
115
  <p className="text-xs uppercase tracking-[0.2em] aui-text-muted">Team</p>
84
116
  <p className="mt-2 text-sm font-medium aui-text-strong">{activeOption ? routeWorkspaceOptions.find((item) => item.value === activeOption.value)?.team : "No team"}</p>
85
117
  </div>
118
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
119
+ <p className="text-xs uppercase tracking-[0.2em] aui-text-muted">Multi mode</p>
120
+ <p className="mt-2 text-sm font-medium aui-text-strong">{selectedTeams.length ? selectedTeams.map((item) => item.label).join(", ") : "No teams selected"}</p>
121
+ </div>
86
122
  </div>
87
123
  </div>
88
124
  </div>
@@ -55,11 +55,12 @@ function StateButton({
55
55
  }
56
56
 
57
57
  return (
58
- <Button
59
- variant={variant}
60
- disabled={state === "Disabled"}
61
- className={state === "Focus" ? "ring-2 ring-[color:var(--aui-ring)] ring-offset-2 ring-offset-[color:var(--aui-page-bg)]" : undefined}
62
- >
58
+ <Button
59
+ variant={variant}
60
+ pressed={state === "Focus"}
61
+ disabled={state === "Disabled"}
62
+ className={state === "Focus" ? "ring-2 ring-[color:var(--aui-ring)] ring-offset-2 ring-offset-[color:var(--aui-page-bg)]" : undefined}
63
+ >
63
64
  {state}
64
65
  </Button>
65
66
  )
@@ -127,6 +128,7 @@ export function ButtonShowcase() {
127
128
  <Button variant="outline">Preview</Button>
128
129
  <Button
129
130
  variant={selectedVariant}
131
+ fullWidth
130
132
  loading={approvalState === "saving"}
131
133
  loadingLabel="Approving"
132
134
  onClick={approveInvoice}
@@ -136,6 +138,25 @@ export function ButtonShowcase() {
136
138
  </div>
137
139
  </div>
138
140
  </div>
141
+
142
+ <div className="mt-6 grid gap-3 md:grid-cols-4">
143
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
144
+ <p className="font-medium aui-text-strong">Primary</p>
145
+ <p className="mt-2 leading-6 aui-text-muted">Main action with filled emphasis.</p>
146
+ </div>
147
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
148
+ <p className="font-medium aui-text-strong">Secondary</p>
149
+ <p className="mt-2 leading-6 aui-text-muted">Alternative action without stealing focus.</p>
150
+ </div>
151
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
152
+ <p className="font-medium aui-text-strong">Outline</p>
153
+ <p className="mt-2 leading-6 aui-text-muted">Low-emphasis action for previews and neutral workflows.</p>
154
+ </div>
155
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
156
+ <p className="font-medium aui-text-strong">Destructive</p>
157
+ <p className="mt-2 leading-6 aui-text-muted">Reserved for archive, delete, or dangerous transitions.</p>
158
+ </div>
159
+ </div>
139
160
  </section>
140
161
 
141
162
  <section className={panelClass}>
@@ -9,6 +9,7 @@ const panelClass =
9
9
 
10
10
  export function ButtonGroupShowcase({ mode }: ComponentDemoProps) {
11
11
  const [view, setView] = React.useState<"list" | "board" | "timeline">("list")
12
+ const [density, setDensity] = React.useState<"compact" | "comfortable">("comfortable")
12
13
 
13
14
  return (
14
15
  <div className="space-y-5">
@@ -31,16 +32,32 @@ export function ButtonGroupShowcase({ mode }: ComponentDemoProps) {
31
32
  <div className="grid gap-4 xl:grid-cols-2">
32
33
  <section className={panelClass}>
33
34
  <ButtonGroup
35
+ value={view}
36
+ onValueChange={(next) => setView(next as typeof view)}
34
37
  items={[
35
- { key: "list", label: "List", variant: view === "list" ? "default" : "outline", onClick: () => setView("list") },
36
- { key: "board", label: "Board", variant: view === "board" ? "default" : "outline", onClick: () => setView("board") },
37
- { key: "timeline", label: "Timeline", variant: view === "timeline" ? "default" : "outline", onClick: () => setView("timeline") },
38
+ { key: "list", label: "List", description: "Rows first" },
39
+ { key: "board", label: "Board", description: "Kanban view" },
40
+ { key: "timeline", label: "Timeline", description: "Chronology" },
38
41
  ]}
39
42
  />
43
+ <div className="mt-4">
44
+ <ButtonGroup
45
+ value={density}
46
+ onValueChange={(next) => setDensity(next as typeof density)}
47
+ size="xs"
48
+ activeVariant="secondary"
49
+ allowDeselect
50
+ items={[
51
+ { key: "comfortable", label: "Comfortable" },
52
+ { key: "compact", label: "Compact" },
53
+ ]}
54
+ />
55
+ </div>
40
56
  </section>
41
57
  <section className={panelClass}>
42
58
  <p className="text-sm font-medium aui-text-muted">Selected view</p>
43
59
  <p className="mt-3 text-base font-medium aui-text-strong">{view}</p>
60
+ <p className="mt-2 text-sm aui-text-muted">Density: {density || "none"}</p>
44
61
  </section>
45
62
  </div>
46
63
 
@@ -48,6 +48,9 @@ export function CalendarShowcase({ mode }: ComponentDemoProps) {
48
48
  disabledDates={blockedDates}
49
49
  numberOfMonths={monthCount}
50
50
  pagedNavigation
51
+ showClearShortcut
52
+ showTodayShortcut
53
+ showSelectionSummary
51
54
  />
52
55
  </div>
53
56
  </section>
@@ -63,6 +66,8 @@ export function CalendarShowcase({ mode }: ComponentDemoProps) {
63
66
  min="2026-07-01"
64
67
  max="2026-07-31"
65
68
  disabledDates={blockedDates}
69
+ showClearShortcut
70
+ showSelectionSummary
66
71
  />
67
72
  </div>
68
73
  </section>
@@ -3,15 +3,17 @@ import * as React from "react"
3
3
  import { Button, Carousel, CarouselItem } from "@/index"
4
4
 
5
5
  const steps = [
6
- { title: "Onboarding", text: "Guide quickly from first login." },
7
- { title: "Components", text: "Review ready-made dashboard patterns." },
8
- { title: "Release", text: "Publish, test, and iterate faster." },
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" },
9
9
  ]
10
10
 
11
11
  export function CarouselShowcase() {
12
12
  const [showArrows, setShowArrows] = React.useState(true)
13
13
  const [showDots, setShowDots] = React.useState(true)
14
+ const [autoplay, setAutoplay] = React.useState(false)
14
15
  const [index, setIndex] = React.useState(0)
16
+ const [playing, setPlaying] = React.useState(false)
15
17
 
16
18
  return (
17
19
  <div className="space-y-5">
@@ -22,6 +24,23 @@ export function CarouselShowcase() {
22
24
  <Button size="sm" variant={showDots ? "default" : "outline"} onClick={() => setShowDots((value) => !value)}>
23
25
  {showDots ? "Hide" : "Show"} dots
24
26
  </Button>
27
+ <Button size="sm" variant={autoplay ? "default" : "outline"} onClick={() => setAutoplay((value) => !value)}>
28
+ {autoplay ? "Stop" : "Start"} autoplay
29
+ </Button>
30
+ </div>
31
+
32
+ <div className="grid gap-3 md:grid-cols-3">
33
+ {steps.map((step, slideIndex) => (
34
+ <Button
35
+ key={step.title}
36
+ type="button"
37
+ variant={index === slideIndex ? "default" : "outline"}
38
+ className="justify-start"
39
+ onClick={() => setIndex(slideIndex)}
40
+ >
41
+ {slideIndex + 1}. {step.title}
42
+ </Button>
43
+ ))}
25
44
  </div>
26
45
 
27
46
  <Carousel
@@ -29,24 +48,33 @@ export function CarouselShowcase() {
29
48
  loop
30
49
  showArrows={showArrows}
31
50
  showDots={showDots}
51
+ autoplay={autoplay}
52
+ autoplayInterval={2200}
53
+ showPlaybackControl
32
54
  onIndexChange={(next) => setIndex(next)}
55
+ onAutoplayChange={setPlaying}
33
56
  previousLabel="Previous slide"
34
57
  nextLabel="Next slide"
35
58
  >
36
59
  {steps.map((step, slideIndex) => (
37
60
  <CarouselItem key={step.title}>
38
- <div className="rounded-xl border border-border bg-card p-8">
39
- <div className="flex items-start justify-between gap-3">
61
+ <div className="min-h-56 rounded-xl border border-border bg-card p-8">
62
+ <div className="flex items-start justify-between gap-3">
40
63
  <div className="grid gap-2">
64
+ <p className="text-[11px] font-semibold uppercase tracking-[0.24em] text-primary">{step.tone}</p>
41
65
  <p className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">{`Slide ${slideIndex + 1}`}</p>
42
66
  <h3 className="text-lg font-semibold text-foreground">{step.title}</h3>
43
67
  <p className="text-sm text-muted-foreground">{step.text}</p>
44
68
  </div>
69
+ <div className="rounded-full border border-border/70 px-3 py-1 text-xs text-muted-foreground">
70
+ {slideIndex + 1}/{steps.length}
71
+ </div>
45
72
  </div>
46
73
  </div>
47
74
  </CarouselItem>
48
75
  ))}
49
76
  </Carousel>
77
+ <div className="text-sm text-muted-foreground">Playback: {playing || autoplay ? "active" : "paused"}</div>
50
78
  </div>
51
79
  )
52
80
  }
@@ -8,6 +8,8 @@ const panelClass =
8
8
  "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5"
9
9
 
10
10
  export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
11
+ const triState = state.checked ? "checked" : state.textValue === "mixed" ? "mixed" : "unchecked"
12
+
11
13
  return (
12
14
  <div className="space-y-5">
13
15
  <section className="rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6">
@@ -27,13 +29,51 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
27
29
  </div>
28
30
  </div>
29
31
 
30
- <div className="mt-6 grid gap-3">
32
+ <div className="mt-6 grid gap-3 md:grid-cols-3">
33
+ <div className={`${panelClass} flex items-start gap-3`}>
34
+ <Checkbox
35
+ size="lg"
36
+ allowIndeterminate
37
+ checked={triState === "mixed" ? "indeterminate" : triState === "checked"}
38
+ onCheckedStateChange={(checked) => {
39
+ if (checked === "indeterminate") {
40
+ setState({ checked: false, textValue: "mixed" })
41
+ } else if (checked) {
42
+ setState({ checked: true, textValue: "checked" })
43
+ } else {
44
+ setState({ checked: false, textValue: "unchecked" })
45
+ }
46
+ }}
47
+ />
48
+ <div>
49
+ <p className="text-sm font-medium aui-text-strong">Approval state</p>
50
+ <p className="mt-1 text-sm aui-text-muted">Use `indeterminate` when not all child tasks are complete.</p>
51
+ </div>
52
+ </div>
53
+ <div className={`${panelClass} flex items-start gap-3`}>
54
+ <Checkbox size="lg" checked="indeterminate" />
55
+ <div>
56
+ <p className="text-sm font-medium aui-text-strong">Indeterminate</p>
57
+ <p className="mt-1 text-sm aui-text-muted">Useful for parent rows and bulk selection summaries.</p>
58
+ </div>
59
+ </div>
60
+ <div className={`${panelClass} flex items-start gap-3`}>
61
+ <Checkbox size="lg" checked disabled />
62
+ <div>
63
+ <p className="text-sm font-medium aui-text-strong">Disabled selected</p>
64
+ <p className="mt-1 text-sm aui-text-muted">Shows permission-locked completion without becoming clickable.</p>
65
+ </div>
66
+ </div>
67
+ </div>
68
+
69
+ <div className="mt-3 grid gap-3">
31
70
  {checkboxDemoItems.map((item, index) => (
32
71
  <label key={item.label} htmlFor={item.id} className={`${panelClass} flex items-start gap-3`}>
33
72
  <Checkbox
34
73
  id={item.id}
35
74
  checked={index === 0 ? state.checked : item.checked}
36
75
  disabled={item.disabled}
76
+ invalid={index === 0 && triState === "unchecked"}
37
77
  onCheckedChange={index === 0 ? (checked) => setState({ checked: Boolean(checked) }) : undefined}
38
78
  defaultChecked={index > 0 ? item.checked : undefined}
39
79
  />
@@ -51,10 +91,10 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
51
91
  <div>
52
92
  <p className="text-xs font-semibold uppercase tracking-[0.24em] aui-text-muted">Live state</p>
53
93
  <h4 className="mt-2 text-lg font-semibold aui-text-strong">
54
- Release checklist is {state.checked ? "enabled" : "disabled"}
94
+ Release checklist is {triState}
55
95
  </h4>
56
96
  <p className="mt-2 text-sm leading-6 aui-text-muted">
57
- Toggle the first row or use these actions to verify controlled checkbox behavior.
97
+ Toggle the first row or use these actions to verify controlled tri-state checkbox behavior.
58
98
  </p>
59
99
  </div>
60
100
  <div className="flex flex-wrap gap-2">
@@ -64,6 +104,9 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
64
104
  <Button type="button" size="sm" variant="secondary" onClick={() => setState({ checked: false })}>
65
105
  Disable
66
106
  </Button>
107
+ <Button type="button" size="sm" variant="outline" onClick={() => setState({ checked: false, textValue: "mixed" })}>
108
+ Set mixed
109
+ </Button>
67
110
  </div>
68
111
  </div>
69
112
  </section>
@@ -2,20 +2,22 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const clearableInputMock: ComponentDemoMock = {
4
4
  code: `import * as React from "react"
5
- import { ClearableInput } from "tembro"
5
+ import { Input } from "tembro"
6
6
 
7
7
  export function Example() {
8
8
  const [value, setValue] = React.useState("workspace token")
9
9
 
10
10
  return (
11
- <ClearableInput
11
+ <Input
12
12
  value={value}
13
13
  onValueChange={setValue}
14
14
  placeholder="Filter or paste value..."
15
+ clearable
15
16
  clearOnEscape
16
17
  />
17
18
  )
18
19
  }`,
20
+ cliCommand: "npx tembro add input",
19
21
  highlights: ["Inline clear action", "Escape-to-clear support", "Focus restore after clearing", "Small but high-frequency utility input"],
20
22
  scenarios: [
21
23
  { title: "Filter reset", description: "Let users clear a short filter without hunting for an extra reset button." },
@@ -23,7 +25,7 @@ export function Example() {
23
25
  { title: "Toolbar utility", description: "Use in dense admin bars where compact cleanup matters." },
24
26
  ],
25
27
  capabilityNotes: [
26
- "Clearable input is strongest for short-lived values like filters and quick entry.",
28
+ "Prefer `Input clearable` for short-lived values like filters and quick entry.",
27
29
  "Escape clear is useful only when the input is frequently changed.",
28
30
  "Keep the field visually quiet so the clear action feels secondary.",
29
31
  ],
@@ -1,6 +1,6 @@
1
1
  import * as React from "react"
2
2
 
3
- import { Badge, ClearableInput } from "@/index"
3
+ import { Badge, Input } from "@/index"
4
4
 
5
5
  import type { ComponentDemoProps } from "../types"
6
6
 
@@ -29,11 +29,14 @@ export function ClearableInputShowcase({ mode }: ComponentDemoProps) {
29
29
  </section>
30
30
 
31
31
  <section className={panelClass}>
32
- <ClearableInput
32
+ <Input
33
33
  value={value}
34
34
  onValueChange={setValue}
35
35
  placeholder="Filter or paste value..."
36
+ clearable
36
37
  clearOnEscape
38
+ trailingAction={<span className="text-xs aui-text-muted">Live filter</span>}
39
+ replaceTrailingWhenClear={false}
37
40
  />
38
41
  </section>
39
42
 
@@ -9,6 +9,7 @@ const collapseItems = [
9
9
  {
10
10
  key: "permissions",
11
11
  title: "Permissions",
12
+ badge: <Badge variant="secondary">Core</Badge>,
12
13
  description: "Who can publish, archive, and rename library surfaces.",
13
14
  content: "Owners can publish. Editors can update docs. Reviewers can inspect previews and comment on API shape.",
14
15
  },
@@ -16,12 +17,15 @@ const collapseItems = [
16
17
  key: "release",
17
18
  title: "Release notes",
18
19
  description: "What changed in the current package cycle.",
20
+ meta: "July",
19
21
  content: "This release opened more public docs coverage for interactive form and overlay surfaces.",
20
22
  },
21
23
  {
22
24
  key: "handoff",
23
25
  title: "Handoff checklist",
24
26
  description: "What must be checked before a public release.",
27
+ disabled: true,
28
+ disabledReason: "Unlock after release branch is cut.",
25
29
  content: "Typecheck, lint, build, smoke routes, verify copy feedback, and confirm component docs route integrity.",
26
30
  },
27
31
  ] as const
@@ -1,3 +1,5 @@
1
+ import * as React from "react"
2
+
1
3
  import { Badge, Button, Combobox } from "@/index"
2
4
 
3
5
  import type { ComponentDemoProps } from "../types"
@@ -15,6 +17,7 @@ const teammateOptions = [
15
17
  export function ComboboxShowcase({ state, setState }: ComponentDemoProps) {
16
18
  const currentValue = teammateOptions.some((option) => option.value === state.selectValue) ? state.selectValue : "azamat"
17
19
  const currentOption = teammateOptions.find((option) => option.value === currentValue) ?? teammateOptions[0]
20
+ const [searchValue, setSearchValue] = React.useState("")
18
21
 
19
22
  return (
20
23
  <div className="space-y-5">
@@ -45,6 +48,10 @@ export function ComboboxShowcase({ state, setState }: ComponentDemoProps) {
45
48
  onValueChange={(value) => setState({ selectValue: value ?? "azamat" })}
46
49
  placeholder="Choose teammate"
47
50
  searchPlaceholder="Search teammate..."
51
+ clearable
52
+ allowDeselect
53
+ showSelectedDescription
54
+ onSearchChange={setSearchValue}
48
55
  />
49
56
  </div>
50
57
  </div>
@@ -68,6 +75,7 @@ export function ComboboxShowcase({ state, setState }: ComponentDemoProps) {
68
75
  <p className="mt-2 text-sm leading-6 aui-text-muted">
69
76
  Use quick actions below to verify that the value stays controlled outside the dropdown itself.
70
77
  </p>
78
+ <p className="mt-2 text-sm leading-6 aui-text-muted">Search query: {searchValue || "empty"}</p>
71
79
  </div>
72
80
  <div className="flex flex-wrap gap-2">
73
81
  <Button type="button" size="sm" onClick={() => setState({ selectValue: "nodira" })}>
@@ -5,13 +5,12 @@ import {
5
5
  Badge,
6
6
  Button,
7
7
  DataTable,
8
- DataTableBulkActions,
9
8
  DataTableColumnVisibilityMenu,
10
9
  DataTableSortableHeader,
11
- SearchInput,
12
- createDataTableActionsColumn,
13
- createDataTableSelectColumn,
10
+ SimpleSelect,
14
11
  } from "@/index"
12
+ import { createDataTableActionsColumn } from "@/components/data-table/data-table-actions-column"
13
+ import { createDataTableSelectColumn } from "@/components/data-table/data-table-select-column"
15
14
 
16
15
  type DataTableDemoRow = {
17
16
  invoice: string
@@ -26,17 +25,25 @@ const rows: DataTableDemoRow[] = [
26
25
  { invoice: "INV-4821", customer: "Acme Studio", owner: "Azamat", amount: "$12,420", status: "Paid", updatedAt: "2m ago" },
27
26
  { invoice: "INV-4822", customer: "Northwind", owner: "Madina", amount: "$8,120", status: "Review", updatedAt: "10m ago" },
28
27
  { invoice: "INV-4823", customer: "Globex", owner: "Jasur", amount: "$4,880", status: "Draft", updatedAt: "22m ago" },
28
+ { invoice: "INV-4824", customer: "Pixel Union", owner: "Azamat", amount: "$17,300", status: "Paid", updatedAt: "44m ago" },
29
+ { invoice: "INV-4825", customer: "Meridian Labs", owner: "Madina", amount: "$2,180", status: "Review", updatedAt: "1h ago" },
30
+ { invoice: "INV-4826", customer: "Orbit Cloud", owner: "Jasur", amount: "$9,040", status: "Draft", updatedAt: "3h ago" },
29
31
  ]
30
32
 
31
33
  export function DataTableShowcase() {
32
34
  const [search, setSearch] = React.useState("")
33
- const [selectedCount, setSelectedCount] = React.useState(0)
35
+ const [statusFilter, setStatusFilter] = React.useState("all")
36
+ const [ownerFilter, setOwnerFilter] = React.useState("all")
37
+ const [rowSelection, setRowSelection] = React.useState<Record<string, boolean>>({})
34
38
 
35
39
  const filteredRows = rows.filter((row) => {
36
40
  const normalized = search.trim().toLowerCase()
37
- if (!normalized) return true
38
- return `${row.invoice} ${row.customer} ${row.owner} ${row.amount}`.toLowerCase().includes(normalized)
41
+ const matchesSearch = !normalized || `${row.invoice} ${row.customer} ${row.owner} ${row.amount}`.toLowerCase().includes(normalized)
42
+ const matchesStatus = statusFilter === "all" || row.status === statusFilter
43
+ const matchesOwner = ownerFilter === "all" || row.owner === ownerFilter
44
+ return matchesSearch && matchesStatus && matchesOwner
39
45
  })
46
+ const selectedCount = Object.values(rowSelection).filter(Boolean).length
40
47
 
41
48
  const columns = React.useMemo<ColumnDef<DataTableDemoRow>[]>(
42
49
  () => [
@@ -94,7 +101,7 @@ export function DataTableShowcase() {
94
101
  </div>
95
102
  <div className="rounded-[18px] border border-[color:var(--aui-divider)] px-4 py-3">
96
103
  <p className="text-xs font-semibold uppercase tracking-[0.22em] aui-text-muted">State</p>
97
- <p className="mt-2 text-lg font-semibold aui-text-strong">Live</p>
104
+ <p className="mt-2 text-lg font-semibold aui-text-strong">{search || statusFilter !== "all" || ownerFilter !== "all" ? "Filtered" : "Live"}</p>
98
105
  </div>
99
106
  </div>
100
107
  </div>
@@ -104,24 +111,67 @@ export function DataTableShowcase() {
104
111
  data={filteredRows}
105
112
  getRowId={(row) => row.invoice}
106
113
  enableRowSelection
107
- toolbarProps={(table) => ({
108
- title: "Invoices",
109
- description: "Compact premium preview of the real DataTable surface.",
110
- search: <SearchInput value={search} onValueChange={setSearch} placeholder="Search invoice, customer..." />,
111
- actions: (
112
- <div className="flex items-center gap-2">
113
- <DataTableColumnVisibilityMenu table={table} />
114
- <DataTableBulkActions
115
- rows={filteredRows.slice(0, selectedCount)}
116
- actions={[{ key: "export", label: "Export selected", onSelect: () => undefined }]}
117
- onClearSelection={() => setSelectedCount(0)}
118
- />
119
- </div>
120
- ),
121
- })}
114
+ rowSelection={rowSelection}
115
+ title="Invoices"
116
+ description="Search, filter, visibility controls, bulk actions and row actions should stay inside one install-ready table surface."
117
+ features={{
118
+ search: true,
119
+ columnVisibility: true,
120
+ bulkActions: true,
121
+ }}
122
+ search={{
123
+ value: search,
124
+ onValueChange: setSearch,
125
+ placeholder: "Search invoice, customer...",
126
+ clearable: true,
127
+ }}
128
+ filters={
129
+ <>
130
+ <SimpleSelect
131
+ value={statusFilter}
132
+ onValueChange={(value) => setStatusFilter(value ?? "all")}
133
+ options={[
134
+ { value: "all", label: "All statuses" },
135
+ { value: "Paid", label: "Paid" },
136
+ { value: "Review", label: "Review" },
137
+ { value: "Draft", label: "Draft" },
138
+ ]}
139
+ triggerClassName="min-w-40"
140
+ />
141
+ <SimpleSelect
142
+ value={ownerFilter}
143
+ onValueChange={(value) => setOwnerFilter(value ?? "all")}
144
+ options={[
145
+ { value: "all", label: "All owners" },
146
+ { value: "Azamat", label: "Azamat" },
147
+ { value: "Madina", label: "Madina" },
148
+ { value: "Jasur", label: "Jasur" },
149
+ ]}
150
+ triggerClassName="min-w-36"
151
+ />
152
+ </>
153
+ }
154
+ summary={
155
+ <>
156
+ <Badge variant="outline">{filteredRows.length} rows</Badge>
157
+ <Badge variant="outline">{selectedCount} selected</Badge>
158
+ <Badge variant="outline">
159
+ {search || statusFilter !== "all" || ownerFilter !== "all" ? "Filtered view" : "Live view"}
160
+ </Badge>
161
+ </>
162
+ }
163
+ toolbarActions={({ table }) => (
164
+ <div className="flex items-center gap-2">
165
+ <DataTableColumnVisibilityMenu table={table} />
166
+ <Button size="sm" variant="outline">Export</Button>
167
+ </div>
168
+ )}
169
+ bulkActions={[
170
+ { key: "export", label: "Export selected", onSelect: () => undefined },
171
+ { key: "archive", label: "Archive selected", destructive: true, onSelect: () => undefined },
172
+ ]}
122
173
  onRowSelectionChange={(selection) => {
123
- const value = typeof selection === "function" ? selection({}) : selection
124
- setSelectedCount(Object.values(value).filter(Boolean).length)
174
+ setRowSelection((current) => (typeof selection === "function" ? selection(current) : selection))
125
175
  }}
126
176
  onRowClick={() => undefined}
127
177
  renderMobileCard={(row) => (
@@ -139,8 +189,8 @@ export function DataTableShowcase() {
139
189
  pageIndex: 0,
140
190
  pageSize: 5,
141
191
  rowCount: filteredRows.length,
142
- pageCount: 1,
143
- pageSizeOptions: [5],
192
+ pageCount: Math.max(Math.ceil(filteredRows.length / 5), 1),
193
+ pageSizeOptions: [5, 10],
144
194
  onPageChange: () => undefined,
145
195
  onPageSizeChange: () => undefined,
146
196
  }}