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
@@ -1,75 +1,144 @@
1
1
  import * as React from "react"
2
- import { AlertTriangleIcon, CheckCircle2Icon, Loader2Icon, SearchXIcon } from "lucide-react"
2
+ import { AlertTriangleIcon, CheckCircle2Icon, Loader2Icon, SearchXIcon, XIcon } from "lucide-react"
3
3
 
4
4
  import { Button } from "@/components/ui/button"
5
5
  import { Card, CardContent } from "@/components/ui/card"
6
6
  import { cn } from "@/lib/utils"
7
7
 
8
- export type DataStateStatus = "idle" | "loading" | "empty" | "error" | "success"
8
+ export type DataStateStatus = "idle" | "loading" | "empty" | "error" | "success"
9
+ export type DataStateVariant = "card" | "plain" | "inline"
10
+ export type DataStateTone = "default" | "muted" | "success" | "warning" | "danger" | "info"
9
11
 
10
- export type DataStateProps = React.ComponentProps<typeof Card> & {
11
- status: DataStateStatus
12
- title?: React.ReactNode
13
- description?: React.ReactNode
14
- actions?: React.ReactNode
15
- icon?: React.ReactNode
16
- compact?: boolean
17
- children?: React.ReactNode
18
- retryLabel?: React.ReactNode
19
- onRetry?: () => void
20
- }
12
+ export type DataStateProps = Omit<React.ComponentProps<typeof Card>, "content" | "title" | "description" | "variant" | "tone"> & {
13
+ status: DataStateStatus
14
+ title?: React.ReactNode
15
+ description?: React.ReactNode
16
+ badge?: React.ReactNode
17
+ actions?: React.ReactNode
18
+ footer?: React.ReactNode
19
+ icon?: React.ReactNode
20
+ tone?: DataStateTone
21
+ variant?: DataStateVariant
22
+ compact?: boolean
23
+ align?: "start" | "center"
24
+ query?: React.ReactNode
25
+ children?: React.ReactNode
26
+ retryLabel?: React.ReactNode
27
+ onRetry?: () => void
28
+ clearLabel?: React.ReactNode
29
+ onClear?: () => void
30
+ }
21
31
 
22
- const defaultContent: Record<DataStateStatus, { title: string; description: string; icon: React.ReactNode }> = {
32
+ const defaultContent: Record<DataStateStatus, { title: string; description: string; icon: React.ReactNode }> = {
23
33
  idle: { title: "Ready", description: "No action has started yet.", icon: <CheckCircle2Icon /> },
24
34
  loading: { title: "Loading", description: "Please wait while data is being prepared.", icon: <Loader2Icon className="animate-spin" /> },
25
35
  empty: { title: "No data", description: "There is nothing to show yet.", icon: <SearchXIcon /> },
26
36
  error: { title: "Something went wrong", description: "Try again or check the request.", icon: <AlertTriangleIcon /> },
27
37
  success: { title: "Ready", description: "Data loaded successfully.", icon: <CheckCircle2Icon /> },
28
- }
38
+ }
39
+
40
+ const toneClassName: Record<DataStateTone, string> = {
41
+ default: "text-muted-foreground",
42
+ muted: "text-muted-foreground",
43
+ success: "text-emerald-600 dark:text-emerald-400",
44
+ warning: "text-amber-600 dark:text-amber-400",
45
+ danger: "text-destructive",
46
+ info: "text-blue-600 dark:text-blue-400",
47
+ }
29
48
 
30
49
  function DataState({
31
50
  status,
32
- title,
33
- description,
34
- actions,
35
- icon,
36
- compact = false,
37
- children,
38
- retryLabel = "Retry",
39
- onRetry,
40
- className,
41
- ...props
42
- }: DataStateProps) {
43
- const content = defaultContent[status]
44
-
51
+ title,
52
+ description,
53
+ badge,
54
+ actions,
55
+ footer,
56
+ icon,
57
+ tone,
58
+ variant = "card",
59
+ compact = false,
60
+ align = "center",
61
+ query,
62
+ children,
63
+ retryLabel = "Retry",
64
+ onRetry,
65
+ clearLabel = "Clear",
66
+ onClear,
67
+ className,
68
+ ...props
69
+ }: DataStateProps) {
70
+ const content = defaultContent[status]
71
+ const resolvedTone = tone ?? (status === "error" ? "danger" : status === "success" ? "success" : "default")
72
+ const isPlain = variant === "plain" || variant === "inline"
73
+ const body = (
74
+ <div
75
+ className={cn(
76
+ "flex flex-col justify-center",
77
+ align === "center" ? "items-center text-center" : "items-start text-left",
78
+ compact || variant === "inline" ? "p-4" : "min-h-52 p-8"
79
+ )}
80
+ >
81
+ <div
82
+ className={cn(
83
+ "mb-3 flex items-center justify-center rounded-full border border-border/70 bg-muted/45 shadow-[0_1px_0_rgba(255,255,255,0.05)] [&_svg]:size-5",
84
+ toneClassName[resolvedTone],
85
+ compact || variant === "inline" ? "size-9" : "size-12"
86
+ )}
87
+ >
88
+ {icon ?? content.icon}
89
+ </div>
90
+ <div className={cn("flex flex-wrap items-center gap-2", align === "center" ? "justify-center" : "justify-start")}>
91
+ <div className={cn("font-semibold tracking-tight text-foreground", compact ? "text-sm" : "text-base")}>{title ?? content.title}</div>
92
+ {badge}
93
+ </div>
94
+ <p className="mt-1 max-w-md text-sm text-muted-foreground">{description ?? content.description}</p>
95
+ {query && (
96
+ <div className="mt-3 max-w-full rounded-md border border-border/70 bg-muted/45 px-2.5 py-1 text-sm text-muted-foreground">
97
+ {query}
98
+ </div>
99
+ )}
100
+ {children && <div className="mt-4 w-full">{children}</div>}
101
+ {(actions || onRetry || onClear) && (
102
+ <div className={cn("mt-4 flex flex-wrap gap-2", align === "center" ? "justify-center" : "justify-start")}>
103
+ {onRetry && <Button size="sm" variant={status === "error" ? "default" : "outline"} onClick={onRetry}>{retryLabel}</Button>}
104
+ {onClear && (
105
+ <Button size="sm" variant="ghost" onClick={onClear}>
106
+ <XIcon data-icon="inline-start" />
107
+ {clearLabel}
108
+ </Button>
109
+ )}
110
+ {actions}
111
+ </div>
112
+ )}
113
+ {footer ? <div className="mt-4 w-full">{footer}</div> : null}
114
+ </div>
115
+ )
116
+
117
+ if (isPlain) {
118
+ return (
119
+ <div
120
+ data-slot="data-state"
121
+ data-status={status}
122
+ data-variant={variant}
123
+ className={cn(variant === "inline" ? "rounded-lg border border-border/70 bg-muted/20" : "min-w-0", className)}
124
+ {...props}
125
+ >
126
+ {body}
127
+ </div>
128
+ )
129
+ }
130
+
45
131
  return (
46
132
  <Card
47
133
  data-slot="data-state"
48
134
  data-status={status}
135
+ data-variant={variant}
49
136
  className={cn("min-w-0 border-border/75 bg-card/96 shadow-sm ring-1 ring-foreground/4", className)}
50
137
  {...props}
51
138
  >
52
- <CardContent className={cn("flex flex-col items-center justify-center text-center", compact ? "p-4" : "min-h-52 p-8")}>
53
- <div
54
- className={cn(
55
- "mb-3 flex items-center justify-center rounded-full border border-border/70 bg-muted/45 text-muted-foreground shadow-[0_1px_0_rgba(255,255,255,0.05)] [&_svg]:size-5",
56
- compact ? "size-9" : "size-12"
57
- )}
58
- >
59
- {icon ?? content.icon}
60
- </div>
61
- <div className={cn("font-semibold tracking-tight text-foreground", compact ? "text-sm" : "text-base")}>{title ?? content.title}</div>
62
- <p className="mt-1 max-w-md text-sm text-muted-foreground">{description ?? content.description}</p>
63
- {children && <div className="mt-4 w-full">{children}</div>}
64
- {(actions || onRetry) && (
65
- <div className="mt-4 flex flex-wrap justify-center gap-2">
66
- {onRetry && <Button size="sm" variant={status === "error" ? "default" : "outline"} onClick={onRetry}>{retryLabel}</Button>}
67
- {actions}
68
- </div>
69
- )}
70
- </CardContent>
71
- </Card>
72
- )
73
- }
139
+ <CardContent className="p-0">{body}</CardContent>
140
+ </Card>
141
+ )
142
+ }
74
143
 
75
144
  export { DataState }
@@ -8,12 +8,8 @@ export const displayShowcaseDemoRegistry = createShowcaseDemoRegistry([
8
8
  component("status-dot", "StatusDot", "display", "Tiny live status indicator with optional pulse animation."),
9
9
  component("user-card", "UserCard", "display", "User summary row with avatar, metadata and actions."),
10
10
  component("delta-badge", "DeltaBadge", "display", "Compact positive, negative, and risk deltas for metric summaries."),
11
- component("entity-header", "EntityHeader", "display", "Top summary row for a customer, invoice, or workspace."),
12
11
  component("notification-center", "NotificationCenter", "display", "Compact activity and notifications stream."),
13
- component("entity-card", "EntityCard", "display", "Structured summary card with title, meta, state and actions."),
14
- component("file-card", "FileCard", "display", "Compact file summary with state and actions."),
15
12
  component("data-list", "DataList", "display", "Readable title and description rows for compact operational lists."),
16
13
  component("status-legend", "StatusLegend", "display", "Explain status meaning and counts in a compact legend."),
17
14
  component("trend-card", "TrendCard", "display", "Metric summary card with trend context."),
18
- component("comparison-card", "ComparisonCard", "display", "Compare current and previous values in one compact card."),
19
15
  ])
@@ -2,13 +2,10 @@ export * from "./description-list"
2
2
  export * from "./data-list"
3
3
  export * from "./activity-feed"
4
4
  export * from "./avatar"
5
- export * from "./entity-header"
6
5
  export * from "./descriptions"
7
6
  export * from "./kanban"
8
7
  export * from "./code-block"
9
8
  export * from "./data-state"
10
- export * from "./entity-card"
11
- export * from "./file-card"
12
9
  export * from "./list"
13
10
  export * from "./metric-grid"
14
11
  export * from "./progress"
@@ -5,21 +5,46 @@ import { cn } from "@/lib/utils"
5
5
 
6
6
  export type AlertTone = "info" | "success" | "warning" | "destructive" | "muted"
7
7
 
8
- export type AlertProps = React.ComponentProps<"div"> & {
9
- tone?: AlertTone
10
- title?: React.ReactNode
11
- description?: React.ReactNode
12
- icon?: React.ReactNode
13
- action?: React.ReactNode
14
- }
15
-
16
- const alertToneClassName: Record<AlertTone, string> = {
17
- info: "border-primary/25 bg-primary/5 text-foreground",
18
- success: "border-emerald-500/25 bg-emerald-500/10 text-foreground",
19
- warning: "border-amber-500/30 bg-amber-500/10 text-foreground",
20
- destructive: "border-destructive/30 bg-destructive/10 text-foreground",
21
- muted: "border-border bg-muted/50 text-foreground",
22
- }
8
+ export type AlertProps = React.ComponentProps<"div"> & {
9
+ tone?: AlertTone
10
+ variant?: "soft" | "outline" | "solid"
11
+ size?: "sm" | "md"
12
+ title?: React.ReactNode
13
+ description?: React.ReactNode
14
+ icon?: React.ReactNode
15
+ action?: React.ReactNode
16
+ dismissible?: boolean
17
+ dismissLabel?: string
18
+ onDismiss?: () => void
19
+ }
20
+
21
+ const alertToneClassName: Record<AlertTone, Record<NonNullable<AlertProps["variant"]>, string>> = {
22
+ info: {
23
+ soft: "border-primary/25 bg-primary/5 text-foreground",
24
+ outline: "border-primary/35 bg-background text-foreground",
25
+ solid: "border-primary bg-primary text-primary-foreground",
26
+ },
27
+ success: {
28
+ soft: "border-emerald-500/25 bg-emerald-500/10 text-foreground",
29
+ outline: "border-emerald-500/35 bg-background text-foreground",
30
+ solid: "border-emerald-600 bg-emerald-600 text-white",
31
+ },
32
+ warning: {
33
+ soft: "border-amber-500/30 bg-amber-500/10 text-foreground",
34
+ outline: "border-amber-500/35 bg-background text-foreground",
35
+ solid: "border-amber-500 bg-amber-500 text-amber-950",
36
+ },
37
+ destructive: {
38
+ soft: "border-destructive/30 bg-destructive/10 text-foreground",
39
+ outline: "border-destructive/35 bg-background text-foreground",
40
+ solid: "border-destructive bg-destructive text-destructive-foreground",
41
+ },
42
+ muted: {
43
+ soft: "border-border bg-muted/50 text-foreground",
44
+ outline: "border-border bg-background text-foreground",
45
+ solid: "border-border bg-foreground text-background",
46
+ },
47
+ }
23
48
 
24
49
  const alertIconClassName: Record<AlertTone, string> = {
25
50
  info: "text-primary",
@@ -42,14 +67,29 @@ function defaultIcon(tone: AlertTone) {
42
67
  }
43
68
  }
44
69
 
45
- function Alert({ tone = "info", title, description, icon, action, className, children, ...props }: AlertProps) {
70
+ function Alert({
71
+ tone = "info",
72
+ variant = "soft",
73
+ size = "md",
74
+ title,
75
+ description,
76
+ icon,
77
+ action,
78
+ dismissible = false,
79
+ dismissLabel = "Dismiss alert",
80
+ onDismiss,
81
+ className,
82
+ children,
83
+ ...props
84
+ }: AlertProps) {
46
85
  return (
47
86
  <div
48
87
  data-slot="alert"
88
+ data-size={size}
49
89
  role={tone === "destructive" || tone === "warning" ? "alert" : "status"}
50
90
  className={cn(
51
- "flex gap-3 rounded-[var(--radius-2xl)] border p-4 text-sm shadow-[0_1px_0_rgba(255,255,255,0.05)]",
52
- alertToneClassName[tone],
91
+ "flex gap-3 rounded-[var(--aui-card-radius,var(--radius-xl))] border p-4 text-sm shadow-[var(--aui-card-shadow,var(--aui-control-shadow,0_1px_0_rgba(255,255,255,0.05)))] data-[size=sm]:p-3",
92
+ alertToneClassName[tone][variant],
53
93
  className
54
94
  )}
55
95
  {...props}
@@ -58,22 +98,40 @@ function Alert({ tone = "info", title, description, icon, action, className, chi
58
98
  data-slot="alert-icon"
59
99
  className={cn(
60
100
  "mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full border border-current/10 bg-background/55",
101
+ variant === "solid" && "bg-white/12 text-current",
61
102
  alertIconClassName[tone]
62
103
  )}
63
104
  >
64
105
  {icon ?? defaultIcon(tone)}
65
106
  </div>
66
107
  <div className="min-w-0 flex-1 space-y-1">
67
- {title && <div data-slot="alert-title" className="font-medium leading-none">{title}</div>}
68
- {(description || children) && (
69
- <div data-slot="alert-description" className="text-muted-foreground">
70
- {description ?? children}
71
- </div>
72
- )}
108
+ {title && <div data-slot="alert-title" className="font-medium leading-none">{title}</div>}
109
+ {(description || children) && (
110
+ <div data-slot="alert-description" className={cn("text-muted-foreground", variant === "solid" && "text-current/88")}>
111
+ {description ?? children}
112
+ </div>
113
+ )}
73
114
  </div>
74
- {action && <div data-slot="alert-action" className="shrink-0">{action}</div>}
75
- </div>
76
- )
77
- }
115
+ {(action || dismissible) ? (
116
+ <div data-slot="alert-action" className="flex shrink-0 items-start gap-2">
117
+ {action}
118
+ {dismissible ? (
119
+ <button
120
+ type="button"
121
+ aria-label={dismissLabel}
122
+ className={cn(
123
+ "inline-flex size-8 items-center justify-center rounded-full border border-current/10 bg-background/45 text-current transition-opacity hover:opacity-90",
124
+ variant === "solid" && "bg-white/12"
125
+ )}
126
+ onClick={onDismiss}
127
+ >
128
+ <span aria-hidden="true">×</span>
129
+ </button>
130
+ ) : null}
131
+ </div>
132
+ ) : null}
133
+ </div>
134
+ )
135
+ }
78
136
 
79
137
  export { Alert }
@@ -1,5 +1,3 @@
1
1
  export * from "./alert"
2
- export * from "./empty-state"
3
2
  export * from "./loading-state"
4
3
  export * from "./page-state"
5
- export * from "./empty-search-state"
@@ -2,6 +2,5 @@ import { component, createShowcaseDemoRegistry } from "@/showcase/create-demo"
2
2
 
3
3
  export const filtersShowcaseDemoRegistry = createShowcaseDemoRegistry([
4
4
  component("filter-bar", "FilterBar", "actions", "Search, filters, active-count and reset actions in one toolbar."),
5
- component("filter-chips", "FilterChips", "actions", "Inline active filter summaries with clear and remove actions."),
6
5
  component("data-table-saved-filters", "SavedFilterSelect", "actions", "Saved filter chips and quick view controls."),
7
6
  ])
@@ -1,40 +1,77 @@
1
1
  import * as React from "react"
2
- import { SlidersHorizontalIcon, XIcon } from "lucide-react"
2
+ import { SlidersHorizontalIcon, XIcon } from "lucide-react"
3
+
4
+ import { Badge } from "@/components/ui/badge"
5
+ import { Button } from "@/components/ui/button"
6
+ import { cn, stopInteractivePropagation } from "@/lib/utils"
7
+
8
+ export type FilterBarChip = {
9
+ key: string
10
+ label: React.ReactNode
11
+ value?: React.ReactNode
12
+ tone?: "default" | "success" | "warning" | "danger" | "info" | "muted"
13
+ disabled?: boolean
14
+ hidden?: boolean
15
+ }
3
16
 
4
- import { Button } from "@/components/ui/button"
5
- import { cn } from "@/lib/utils"
6
-
7
- export type FilterBarProps = React.ComponentProps<"div"> & {
17
+ export type FilterBarProps = React.ComponentProps<"div"> & {
8
18
  search?: React.ReactNode
9
19
  filters?: React.ReactNode
10
- actions?: React.ReactNode
11
- activeCount?: number
12
- activeLabel?: (count: number) => React.ReactNode
13
- resetLabel?: React.ReactNode
14
- onReset?: () => void
15
- collapsible?: boolean
16
- defaultExpanded?: boolean
17
- }
20
+ actions?: React.ReactNode
21
+ chips?: FilterBarChip[]
22
+ activeCount?: number
23
+ activeLabel?: (count: number) => React.ReactNode
24
+ resetLabel?: React.ReactNode
25
+ clearChipLabel?: React.ReactNode
26
+ onReset?: () => void
27
+ onRemoveChip?: (key: string) => void
28
+ collapsible?: boolean
29
+ defaultExpanded?: boolean
30
+ emptyChips?: React.ReactNode
31
+ chipLimit?: number
32
+ chipOverflowLabel?: (hiddenCount: number) => React.ReactNode
33
+ }
34
+
35
+ const chipVariant: Record<NonNullable<FilterBarChip["tone"]>, React.ComponentProps<typeof Badge>["variant"]> = {
36
+ default: "secondary",
37
+ success: "secondary",
38
+ warning: "outline",
39
+ danger: "destructive",
40
+ info: "outline",
41
+ muted: "outline",
42
+ }
18
43
 
19
44
  function FilterBar({
20
45
  className,
21
- search,
22
- filters,
23
- actions,
24
- activeCount = 0,
25
- activeLabel = (count) => `${count} active`,
26
- resetLabel = "Reset",
27
- onReset,
28
- collapsible = false,
29
- defaultExpanded = false,
30
- children,
31
- ...props
32
- }: FilterBarProps) {
33
- const [expanded, setExpanded] = React.useState(defaultExpanded)
34
- const hasFilters = Boolean(filters || children)
35
- const shouldShowFilters = !collapsible || expanded
36
-
37
- return (
46
+ search,
47
+ filters,
48
+ actions,
49
+ chips,
50
+ activeCount,
51
+ activeLabel = (count) => `${count} active`,
52
+ resetLabel = "Reset",
53
+ clearChipLabel,
54
+ onReset,
55
+ onRemoveChip,
56
+ collapsible = false,
57
+ defaultExpanded = false,
58
+ emptyChips,
59
+ chipLimit,
60
+ chipOverflowLabel = (hiddenCount) => `+${hiddenCount} more`,
61
+ children,
62
+ ...props
63
+ }: FilterBarProps) {
64
+ const [expanded, setExpanded] = React.useState(defaultExpanded)
65
+ const visibleChips = chips?.filter((chip) => !chip.hidden) ?? []
66
+ const renderedChips = chipLimit && chipLimit > 0 ? visibleChips.slice(0, chipLimit) : visibleChips
67
+ const hiddenChipCount = Math.max(visibleChips.length - renderedChips.length, 0)
68
+ const resolvedActiveCount = activeCount ?? visibleChips.length
69
+ const hasFilters = Boolean(filters || children)
70
+ const hasChips = Boolean(chips)
71
+ const shouldShowFilters = !collapsible || expanded
72
+ const shouldShowChipRow = visibleChips.length > 0 || (hasChips && emptyChips)
73
+
74
+ return (
38
75
  <div
39
76
  data-slot="filter-bar"
40
77
  className={cn("flex flex-col gap-3 rounded-lg border bg-card p-3", className)}
@@ -51,25 +88,25 @@ function FilterBar({
51
88
  size="sm"
52
89
  onClick={() => setExpanded((value) => !value)}
53
90
  >
54
- <SlidersHorizontalIcon data-icon="inline-start" />
55
- Filters
56
- {activeCount > 0 && (
57
- <span className="ml-1 rounded-full bg-background px-1.5 text-xs">
58
- {activeCount}
59
- </span>
60
- )}
61
- </Button>
91
+ <SlidersHorizontalIcon data-icon="inline-start" />
92
+ Filters
93
+ {resolvedActiveCount > 0 && (
94
+ <span className="ml-1 rounded-full bg-background px-1.5 text-xs">
95
+ {resolvedActiveCount}
96
+ </span>
97
+ )}
98
+ </Button>
62
99
  )}
63
100
  </div>
64
-
65
- <div className="flex shrink-0 flex-wrap items-center gap-2">
66
- {activeCount > 0 && (
67
- <span className="text-sm text-muted-foreground">{activeLabel(activeCount)}</span>
68
- )}
69
- {activeCount > 0 && onReset && (
70
- <Button type="button" variant="ghost" size="sm" onClick={onReset}>
71
- <XIcon data-icon="inline-start" />
72
- {resetLabel}
101
+
102
+ <div className="flex shrink-0 flex-wrap items-center gap-2">
103
+ {resolvedActiveCount > 0 && (
104
+ <span className="text-sm text-muted-foreground">{activeLabel(resolvedActiveCount)}</span>
105
+ )}
106
+ {resolvedActiveCount > 0 && onReset && (
107
+ <Button type="button" variant="ghost" size="sm" onClick={onReset}>
108
+ <XIcon data-icon="inline-start" />
109
+ {resetLabel}
73
110
  </Button>
74
111
  )}
75
112
  {actions}
@@ -78,12 +115,47 @@ function FilterBar({
78
115
 
79
116
  {hasFilters && shouldShowFilters && (
80
117
  <div className="flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center">
81
- {filters}
82
- {children}
83
- </div>
84
- )}
85
- </div>
86
- )
87
- }
118
+ {filters}
119
+ {children}
120
+ </div>
121
+ )}
122
+
123
+ {shouldShowChipRow && (
124
+ <div data-slot="filter-bar-chips" className="flex flex-wrap items-center gap-2">
125
+ {visibleChips.length > 0 ? (
126
+ <>
127
+ {renderedChips.map((chip) => (
128
+ <Badge key={chip.key} variant={chipVariant[chip.tone ?? "default"]} className={cn("gap-1.5", chip.disabled && "opacity-60")}>
129
+ <span>{chip.label}</span>
130
+ {chip.value !== undefined && <span className="text-muted-foreground">{chip.value}</span>}
131
+ {onRemoveChip && !chip.disabled && (
132
+ <button
133
+ type="button"
134
+ aria-label={typeof clearChipLabel === "string" ? clearChipLabel : "Remove filter"}
135
+ className="rounded-full p-0.5 hover:bg-muted"
136
+ onClick={(event) => {
137
+ stopInteractivePropagation(event)
138
+ onRemoveChip(chip.key)
139
+ }}
140
+ onMouseDown={stopInteractivePropagation}
141
+ onDoubleClick={stopInteractivePropagation}
142
+ >
143
+ <XIcon className="size-3" />
144
+ </button>
145
+ )}
146
+ </Badge>
147
+ ))}
148
+ {hiddenChipCount > 0 ? (
149
+ <Badge variant="outline">{chipOverflowLabel(hiddenChipCount)}</Badge>
150
+ ) : null}
151
+ </>
152
+ ) : (
153
+ <span className="text-sm text-muted-foreground">{emptyChips}</span>
154
+ )}
155
+ </div>
156
+ )}
157
+ </div>
158
+ )
159
+ }
88
160
 
89
161
  export { FilterBar }
@@ -1,3 +1,2 @@
1
- export * from "./filter-chips"
2
1
  export * from "./filter-bar"
3
2
  export * from "./saved-filter-select"