tembro 2.0.3 → 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 (579) 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 -8
  51. package/dist/components/display/index.js +21 -29
  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/demo.cjs +1 -1
  67. package/dist/components/form/demo.js +1 -2
  68. package/dist/components/form/form-field-shell.cjs +1 -1
  69. package/dist/components/form/form-field-shell.d.ts +17 -3
  70. package/dist/components/form/form-field-shell.js +54 -40
  71. package/dist/components/form/form-input.cjs +1 -1
  72. package/dist/components/form/form-input.js +278 -217
  73. package/dist/components/form/form-select.cjs +1 -1
  74. package/dist/components/form/form-select.js +47 -33
  75. package/dist/components/form/form-switch.cjs +1 -1
  76. package/dist/components/form/form-switch.js +79 -66
  77. package/dist/components/form/form-textarea.cjs +1 -1
  78. package/dist/components/form/form-textarea.js +59 -48
  79. package/dist/components/form/index.cjs +1 -1
  80. package/dist/components/form/index.d.ts +0 -1
  81. package/dist/components/form/index.js +11 -12
  82. package/dist/components/form/public.cjs +1 -1
  83. package/dist/components/form/public.d.ts +0 -9
  84. package/dist/components/form/public.js +7 -16
  85. package/dist/components/inputs/async-select.cjs +1 -1
  86. package/dist/components/inputs/async-select.d.ts +11 -2
  87. package/dist/components/inputs/async-select.js +278 -270
  88. package/dist/components/inputs/combobox.cjs +1 -1
  89. package/dist/components/inputs/combobox.d.ts +5 -1
  90. package/dist/components/inputs/combobox.js +52 -19
  91. package/dist/components/inputs/index.cjs +1 -1
  92. package/dist/components/inputs/index.d.ts +0 -2
  93. package/dist/components/inputs/index.js +3 -5
  94. package/dist/components/inputs/public.cjs +1 -1
  95. package/dist/components/inputs/public.d.ts +0 -2
  96. package/dist/components/inputs/public.js +3 -5
  97. package/dist/components/inputs/simple-select.cjs +1 -1
  98. package/dist/components/inputs/simple-select.d.ts +2 -1
  99. package/dist/components/inputs/simple-select.js +32 -16
  100. package/dist/components/layout/app-sidebar.cjs +1 -1
  101. package/dist/components/layout/app-sidebar.d.ts +4 -1
  102. package/dist/components/layout/app-sidebar.js +152 -132
  103. package/dist/components/layout/breadcrumbs.cjs +1 -1
  104. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  105. package/dist/components/layout/breadcrumbs.js +10 -10
  106. package/dist/components/layout/index.cjs +1 -1
  107. package/dist/components/layout/index.d.ts +0 -1
  108. package/dist/components/layout/index.js +4 -5
  109. package/dist/components/layout/public.cjs +1 -1
  110. package/dist/components/layout/public.d.ts +0 -1
  111. package/dist/components/layout/public.js +2 -3
  112. package/dist/components/layout/stat-card.cjs +1 -1
  113. package/dist/components/layout/stat-card.d.ts +8 -1
  114. package/dist/components/layout/stat-card.js +33 -11
  115. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  116. package/dist/components/modern/calendar-scheduler.d.ts +2 -1
  117. package/dist/components/modern/calendar-scheduler.js +21 -12
  118. package/dist/components/modern/index.cjs +1 -1
  119. package/dist/components/modern/index.d.ts +0 -4
  120. package/dist/components/modern/index.js +12 -16
  121. package/dist/components/overlay/alert-dialog.cjs +1 -1
  122. package/dist/components/overlay/alert-dialog.d.ts +15 -1
  123. package/dist/components/overlay/alert-dialog.js +102 -27
  124. package/dist/components/overlay/drawer.cjs +1 -1
  125. package/dist/components/overlay/drawer.d.ts +4 -1
  126. package/dist/components/overlay/drawer.js +20 -17
  127. package/dist/components/patterns/index.cjs +1 -1
  128. package/dist/components/patterns/index.d.ts +0 -1
  129. package/dist/components/patterns/index.js +1 -2
  130. package/dist/components/patterns/public.cjs +1 -1
  131. package/dist/components/patterns/public.d.ts +0 -1
  132. package/dist/components/patterns/public.js +1 -2
  133. package/dist/components/ui/button/index.cjs +1 -1
  134. package/dist/components/ui/button/index.d.ts +3 -1
  135. package/dist/components/ui/button/index.js +7 -5
  136. package/dist/components/ui/checkbox/index.cjs +1 -1
  137. package/dist/components/ui/checkbox/index.d.ts +8 -0
  138. package/dist/components/ui/checkbox/index.js +16 -14
  139. package/dist/components/ui/collapse/index.cjs +1 -1
  140. package/dist/components/ui/collapse/index.d.ts +17 -3
  141. package/dist/components/ui/collapse/index.js +88 -33
  142. package/dist/components/ui/dialog/index.cjs +1 -1
  143. package/dist/components/ui/dialog/index.d.ts +2 -1
  144. package/dist/components/ui/dialog/index.js +6 -4
  145. package/dist/components/ui/dropdown-menu/index.cjs +1 -1
  146. package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
  147. package/dist/components/ui/dropdown-menu/index.js +87 -62
  148. package/dist/index.cjs +1 -1
  149. package/dist/index.js +145 -177
  150. package/dist/public-component-surface.cjs +1 -1
  151. package/dist/public-component-surface.js +0 -80
  152. package/dist/showcase/component-api-schema.cjs +1 -1
  153. package/dist/showcase/component-api-schema.js +2 -2
  154. package/dist/showcase/create-demo.cjs +20 -34
  155. package/dist/showcase/create-demo.js +15 -16
  156. package/dist/showcase/fallback.cjs +3 -3
  157. package/dist/showcase/fallback.js +287 -451
  158. package/dist/showcase/premium/accordion/showcase.cjs +1 -1
  159. package/dist/showcase/premium/accordion/showcase.js +36 -5
  160. package/dist/showcase/premium/action-menu/showcase.cjs +1 -1
  161. package/dist/showcase/premium/action-menu/showcase.js +26 -8
  162. package/dist/showcase/premium/activity-feed/showcase.cjs +1 -1
  163. package/dist/showcase/premium/activity-feed/showcase.js +60 -36
  164. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  165. package/dist/showcase/premium/alert/showcase.js +41 -18
  166. package/dist/showcase/premium/alert-dialog/showcase.cjs +1 -1
  167. package/dist/showcase/premium/alert-dialog/showcase.js +35 -7
  168. package/dist/showcase/premium/async-multi-select/mock.cjs +4 -3
  169. package/dist/showcase/premium/async-multi-select/mock.js +5 -5
  170. package/dist/showcase/premium/async-multi-select/showcase.cjs +1 -1
  171. package/dist/showcase/premium/async-multi-select/showcase.js +4 -3
  172. package/dist/showcase/premium/async-select/mock.cjs +1 -1
  173. package/dist/showcase/premium/async-select/mock.js +1 -1
  174. package/dist/showcase/premium/async-select/showcase.cjs +1 -1
  175. package/dist/showcase/premium/async-select/showcase.js +69 -22
  176. package/dist/showcase/premium/button/showcase.cjs +1 -1
  177. package/dist/showcase/premium/button/showcase.js +49 -3
  178. package/dist/showcase/premium/button-group/showcase.cjs +1 -1
  179. package/dist/showcase/premium/button-group/showcase.js +53 -29
  180. package/dist/showcase/premium/calendar/showcase.cjs +1 -1
  181. package/dist/showcase/premium/calendar/showcase.js +7 -2
  182. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  183. package/dist/showcase/premium/carousel/showcase.js +95 -47
  184. package/dist/showcase/premium/checkbox/showcase.cjs +1 -1
  185. package/dist/showcase/premium/checkbox/showcase.js +143 -67
  186. package/dist/showcase/premium/clearable-input/mock.cjs +4 -3
  187. package/dist/showcase/premium/clearable-input/mock.js +3 -2
  188. package/dist/showcase/premium/clearable-input/showcase.cjs +1 -1
  189. package/dist/showcase/premium/clearable-input/showcase.js +8 -2
  190. package/dist/showcase/premium/collapse/showcase.cjs +1 -1
  191. package/dist/showcase/premium/collapse/showcase.js +7 -0
  192. package/dist/showcase/premium/combobox/showcase.cjs +1 -1
  193. package/dist/showcase/premium/combobox/showcase.d.ts +2 -1
  194. package/dist/showcase/premium/combobox/showcase.js +56 -47
  195. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  196. package/dist/showcase/premium/data-table/showcase.js +138 -46
  197. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  198. package/dist/showcase/premium/data-table-parts/showcase.js +13 -13
  199. package/dist/showcase/premium/date-input/mock.cjs +1 -1
  200. package/dist/showcase/premium/date-input/mock.js +1 -1
  201. package/dist/showcase/premium/date-range-picker/showcase.cjs +1 -1
  202. package/dist/showcase/premium/date-range-picker/showcase.js +32 -1
  203. package/dist/showcase/premium/dropdown-menu/showcase.cjs +1 -1
  204. package/dist/showcase/premium/dropdown-menu/showcase.js +88 -54
  205. package/dist/showcase/premium/form-wrapper/mock.cjs +41 -15
  206. package/dist/showcase/premium/form-wrapper/mock.js +4 -4
  207. package/dist/showcase/premium/form-wrapper/showcase.cjs +1 -1
  208. package/dist/showcase/premium/form-wrapper/showcase.js +77 -28
  209. package/dist/showcase/premium/index.cjs +1 -1
  210. package/dist/showcase/premium/index.js +467 -574
  211. package/dist/showcase/premium/input/mock.cjs +4 -1
  212. package/dist/showcase/premium/input/mock.js +1 -1
  213. package/dist/showcase/premium/masked-input/mock.cjs +1 -1
  214. package/dist/showcase/premium/masked-input/mock.js +1 -1
  215. package/dist/showcase/premium/money-input/mock.cjs +1 -1
  216. package/dist/showcase/premium/money-input/mock.js +1 -1
  217. package/dist/showcase/premium/number-input/mock.cjs +1 -1
  218. package/dist/showcase/premium/number-input/mock.js +1 -1
  219. package/dist/showcase/premium/phone-input/mock.cjs +1 -1
  220. package/dist/showcase/premium/phone-input/mock.js +1 -1
  221. package/dist/showcase/premium/quantity-input/mock.cjs +1 -1
  222. package/dist/showcase/premium/quantity-input/mock.js +1 -1
  223. package/dist/showcase/premium/simple-select/mock.cjs +1 -1
  224. package/dist/showcase/premium/simple-select/mock.js +1 -1
  225. package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
  226. package/dist/showcase/premium/simple-select/showcase.js +4 -2
  227. package/dist/showcase/preview-catalog.cjs +7 -10
  228. package/dist/showcase/preview-catalog.js +7 -7
  229. package/dist/showcase/registry-quality.cjs +1 -1
  230. package/dist/showcase/registry-quality.js +0 -24
  231. package/dist/showcase/registry-specific.cjs +1 -1
  232. package/dist/showcase/registry-specific.js +149 -383
  233. package/dist/showcase/render-registry-preview.cjs +1 -1
  234. package/dist/showcase/render-registry-preview.js +163 -195
  235. package/dist/showcase/site-data.cjs +1 -1
  236. package/dist/showcase/site-data.js +197 -941
  237. package/dist/showcase/supplemental.cjs +1 -1
  238. package/dist/showcase/supplemental.js +1 -1
  239. package/dist/showcase/tembro-registry.json.cjs +1 -1
  240. package/dist/showcase/tembro-registry.json.js +33 -59
  241. package/package.json +1 -1
  242. package/packages/cli/dist/index.cjs +2 -2
  243. package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
  244. package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
  245. package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
  246. package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
  247. package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
  248. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
  249. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
  250. package/packages/cli/vendor/src/components/data-table/data-table.tsx +65 -53
  251. package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
  252. package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
  253. package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
  254. package/packages/cli/vendor/src/components/display/carousel.tsx +88 -2
  255. package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
  256. package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
  257. package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
  258. package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
  259. package/packages/cli/vendor/src/components/display/index.ts +0 -8
  260. package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
  261. package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
  262. package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
  263. package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
  264. package/packages/cli/vendor/src/components/filters/index.ts +0 -1
  265. package/packages/cli/vendor/src/components/form/demo.tsx +0 -1
  266. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
  267. package/packages/cli/vendor/src/components/form/form-input.tsx +118 -11
  268. package/packages/cli/vendor/src/components/form/form-select.tsx +26 -3
  269. package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
  270. package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
  271. package/packages/cli/vendor/src/components/form/index.ts +0 -1
  272. package/packages/cli/vendor/src/components/form/public.ts +0 -11
  273. package/packages/cli/vendor/src/components/inputs/async-select.tsx +126 -82
  274. package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
  275. package/packages/cli/vendor/src/components/inputs/index.ts +0 -2
  276. package/packages/cli/vendor/src/components/inputs/public.ts +0 -2
  277. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +52 -24
  278. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
  279. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
  280. package/packages/cli/vendor/src/components/layout/index.ts +0 -1
  281. package/packages/cli/vendor/src/components/layout/public.ts +0 -1
  282. package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
  283. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
  284. package/packages/cli/vendor/src/components/modern/index.ts +1 -5
  285. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
  286. package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
  287. package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
  288. package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
  289. package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
  290. package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
  291. package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
  292. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
  293. package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
  294. package/packages/cli/vendor/src/public-component-surface.ts +0 -16
  295. package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
  296. package/packages/cli/vendor/src/showcase/create-demo.tsx +31 -46
  297. package/packages/cli/vendor/src/showcase/fallback.tsx +83 -263
  298. package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
  299. package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
  300. package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
  301. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
  302. package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
  303. package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
  304. package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
  305. package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
  306. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
  307. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
  308. package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
  309. package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
  310. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
  311. package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
  312. package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
  313. package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
  314. package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
  315. package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
  316. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
  317. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +11 -11
  318. package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
  319. package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
  320. package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
  321. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
  322. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
  323. package/packages/cli/vendor/src/showcase/premium/index.ts +7 -46
  324. package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
  325. package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
  326. package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
  327. package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
  328. package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
  329. package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
  330. package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
  331. package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
  332. package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
  333. package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -30
  334. package/packages/cli/vendor/src/showcase/registry-specific.tsx +3 -178
  335. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +18 -51
  336. package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
  337. package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
  338. package/packages/cli/vendor/src/showcase/tembro-registry.json +206 -280
  339. package/registry.json +251 -329
  340. package/dist/components/display/aspect-ratio.cjs +0 -1
  341. package/dist/components/display/aspect-ratio.d.ts +0 -6
  342. package/dist/components/display/aspect-ratio.js +0 -21
  343. package/dist/components/display/entity-card.cjs +0 -1
  344. package/dist/components/display/entity-card.d.ts +0 -18
  345. package/dist/components/display/entity-card.js +0 -61
  346. package/dist/components/display/entity-header.cjs +0 -1
  347. package/dist/components/display/entity-header.d.ts +0 -13
  348. package/dist/components/display/entity-header.js +0 -52
  349. package/dist/components/display/file-card.cjs +0 -1
  350. package/dist/components/display/file-card.d.ts +0 -14
  351. package/dist/components/display/file-card.js +0 -59
  352. package/dist/components/display/float-button.cjs +0 -1
  353. package/dist/components/display/float-button.d.ts +0 -6
  354. package/dist/components/display/float-button.js +0 -20
  355. package/dist/components/display/key-value-card.cjs +0 -1
  356. package/dist/components/display/key-value-card.d.ts +0 -16
  357. package/dist/components/display/key-value-card.js +0 -35
  358. package/dist/components/display/keyboard-shortcut.cjs +0 -1
  359. package/dist/components/display/keyboard-shortcut.d.ts +0 -7
  360. package/dist/components/display/keyboard-shortcut.js +0 -18
  361. package/dist/components/display/skeleton-form.cjs +0 -1
  362. package/dist/components/display/skeleton-form.d.ts +0 -9
  363. package/dist/components/display/skeleton-form.js +0 -31
  364. package/dist/components/display/skeleton-table.cjs +0 -1
  365. package/dist/components/display/skeleton-table.d.ts +0 -9
  366. package/dist/components/display/skeleton-table.js +0 -42
  367. package/dist/components/display/tag-list.cjs +0 -1
  368. package/dist/components/display/tag-list.d.ts +0 -17
  369. package/dist/components/display/tag-list.js +0 -30
  370. package/dist/components/display/watermark.cjs +0 -1
  371. package/dist/components/display/watermark.d.ts +0 -6
  372. package/dist/components/display/watermark.js +0 -23
  373. package/dist/components/feedback/empty-search-state.cjs +0 -1
  374. package/dist/components/feedback/empty-search-state.d.ts +0 -11
  375. package/dist/components/feedback/empty-search-state.js +0 -45
  376. package/dist/components/feedback/empty-state.cjs +0 -1
  377. package/dist/components/feedback/empty-state.d.ts +0 -11
  378. package/dist/components/feedback/empty-state.js +0 -38
  379. package/dist/components/filters/filter-chips.cjs +0 -1
  380. package/dist/components/filters/filter-chips.d.ts +0 -18
  381. package/dist/components/filters/filter-chips.js +0 -61
  382. package/dist/components/form/repeater-field.cjs +0 -1
  383. package/dist/components/form/repeater-field.d.ts +0 -16
  384. package/dist/components/form/repeater-field.js +0 -48
  385. package/dist/components/inputs/cascader.cjs +0 -1
  386. package/dist/components/inputs/cascader.d.ts +0 -13
  387. package/dist/components/inputs/cascader.js +0 -58
  388. package/dist/components/inputs/mention-input.cjs +0 -1
  389. package/dist/components/inputs/mention-input.d.ts +0 -18
  390. package/dist/components/inputs/mention-input.js +0 -96
  391. package/dist/components/layout/stack.cjs +0 -1
  392. package/dist/components/layout/stack.d.ts +0 -23
  393. package/dist/components/layout/stack.js +0 -57
  394. package/dist/components/modern/affix.cjs +0 -1
  395. package/dist/components/modern/affix.d.ts +0 -7
  396. package/dist/components/modern/affix.js +0 -18
  397. package/dist/components/patterns/form-builder-presets.cjs +0 -1
  398. package/dist/components/patterns/form-builder-presets.d.ts +0 -1
  399. package/dist/components/patterns/form-builder-presets.js +0 -2
  400. package/dist/components/patterns/form-builder.cjs +0 -1
  401. package/dist/components/patterns/form-builder.d.ts +0 -109
  402. package/dist/components/patterns/form-builder.js +0 -263
  403. package/dist/showcase/premium/affix/index.cjs +0 -1
  404. package/dist/showcase/premium/affix/index.d.ts +0 -2
  405. package/dist/showcase/premium/affix/index.js +0 -3
  406. package/dist/showcase/premium/affix/mock.cjs +0 -12
  407. package/dist/showcase/premium/affix/mock.d.ts +0 -2
  408. package/dist/showcase/premium/affix/mock.js +0 -15
  409. package/dist/showcase/premium/affix/showcase.cjs +0 -1
  410. package/dist/showcase/premium/affix/showcase.d.ts +0 -2
  411. package/dist/showcase/premium/affix/showcase.js +0 -64
  412. package/dist/showcase/premium/aspect-ratio/index.cjs +0 -1
  413. package/dist/showcase/premium/aspect-ratio/index.d.ts +0 -2
  414. package/dist/showcase/premium/aspect-ratio/index.js +0 -3
  415. package/dist/showcase/premium/aspect-ratio/mock.cjs +0 -11
  416. package/dist/showcase/premium/aspect-ratio/mock.d.ts +0 -2
  417. package/dist/showcase/premium/aspect-ratio/mock.js +0 -26
  418. package/dist/showcase/premium/aspect-ratio/showcase.cjs +0 -1
  419. package/dist/showcase/premium/aspect-ratio/showcase.d.ts +0 -2
  420. package/dist/showcase/premium/aspect-ratio/showcase.js +0 -53
  421. package/dist/showcase/premium/cascader/index.cjs +0 -1
  422. package/dist/showcase/premium/cascader/index.d.ts +0 -2
  423. package/dist/showcase/premium/cascader/index.js +0 -3
  424. package/dist/showcase/premium/cascader/mock.cjs +0 -9
  425. package/dist/showcase/premium/cascader/mock.d.ts +0 -2
  426. package/dist/showcase/premium/cascader/mock.js +0 -19
  427. package/dist/showcase/premium/cascader/showcase.cjs +0 -1
  428. package/dist/showcase/premium/cascader/showcase.d.ts +0 -2
  429. package/dist/showcase/premium/cascader/showcase.js +0 -43
  430. package/dist/showcase/premium/empty-state/index.cjs +0 -1
  431. package/dist/showcase/premium/empty-state/index.d.ts +0 -2
  432. package/dist/showcase/premium/empty-state/index.js +0 -3
  433. package/dist/showcase/premium/empty-state/mock.cjs +0 -14
  434. package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
  435. package/dist/showcase/premium/empty-state/mock.js +0 -31
  436. package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
  437. package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
  438. package/dist/showcase/premium/empty-state/showcase.js +0 -99
  439. package/dist/showcase/premium/float-button/index.cjs +0 -1
  440. package/dist/showcase/premium/float-button/index.d.ts +0 -2
  441. package/dist/showcase/premium/float-button/index.js +0 -3
  442. package/dist/showcase/premium/float-button/mock.cjs +0 -10
  443. package/dist/showcase/premium/float-button/mock.d.ts +0 -2
  444. package/dist/showcase/premium/float-button/mock.js +0 -15
  445. package/dist/showcase/premium/float-button/showcase.cjs +0 -1
  446. package/dist/showcase/premium/float-button/showcase.d.ts +0 -2
  447. package/dist/showcase/premium/float-button/showcase.js +0 -28
  448. package/dist/showcase/premium/form-builder/index.cjs +0 -1
  449. package/dist/showcase/premium/form-builder/index.d.ts +0 -2
  450. package/dist/showcase/premium/form-builder/index.js +0 -3
  451. package/dist/showcase/premium/form-builder/mock.cjs +0 -57
  452. package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
  453. package/dist/showcase/premium/form-builder/mock.js +0 -40
  454. package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
  455. package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
  456. package/dist/showcase/premium/form-builder/showcase.js +0 -69
  457. package/dist/showcase/premium/keyboard-shortcut/index.cjs +0 -1
  458. package/dist/showcase/premium/keyboard-shortcut/index.d.ts +0 -2
  459. package/dist/showcase/premium/keyboard-shortcut/index.js +0 -3
  460. package/dist/showcase/premium/keyboard-shortcut/mock.cjs +0 -5
  461. package/dist/showcase/premium/keyboard-shortcut/mock.d.ts +0 -2
  462. package/dist/showcase/premium/keyboard-shortcut/mock.js +0 -26
  463. package/dist/showcase/premium/keyboard-shortcut/showcase.cjs +0 -1
  464. package/dist/showcase/premium/keyboard-shortcut/showcase.d.ts +0 -1
  465. package/dist/showcase/premium/keyboard-shortcut/showcase.js +0 -64
  466. package/dist/showcase/premium/mention-input/index.cjs +0 -1
  467. package/dist/showcase/premium/mention-input/index.d.ts +0 -2
  468. package/dist/showcase/premium/mention-input/index.js +0 -3
  469. package/dist/showcase/premium/mention-input/mock.cjs +0 -11
  470. package/dist/showcase/premium/mention-input/mock.d.ts +0 -2
  471. package/dist/showcase/premium/mention-input/mock.js +0 -19
  472. package/dist/showcase/premium/mention-input/showcase.cjs +0 -1
  473. package/dist/showcase/premium/mention-input/showcase.d.ts +0 -2
  474. package/dist/showcase/premium/mention-input/showcase.js +0 -35
  475. package/dist/showcase/premium/skeleton-form/index.cjs +0 -1
  476. package/dist/showcase/premium/skeleton-form/index.d.ts +0 -2
  477. package/dist/showcase/premium/skeleton-form/index.js +0 -3
  478. package/dist/showcase/premium/skeleton-form/mock.cjs +0 -5
  479. package/dist/showcase/premium/skeleton-form/mock.d.ts +0 -2
  480. package/dist/showcase/premium/skeleton-form/mock.js +0 -19
  481. package/dist/showcase/premium/skeleton-form/showcase.cjs +0 -1
  482. package/dist/showcase/premium/skeleton-form/showcase.d.ts +0 -2
  483. package/dist/showcase/premium/skeleton-form/showcase.js +0 -52
  484. package/dist/showcase/premium/skeleton-table/index.cjs +0 -1
  485. package/dist/showcase/premium/skeleton-table/index.d.ts +0 -2
  486. package/dist/showcase/premium/skeleton-table/index.js +0 -3
  487. package/dist/showcase/premium/skeleton-table/mock.cjs +0 -5
  488. package/dist/showcase/premium/skeleton-table/mock.d.ts +0 -2
  489. package/dist/showcase/premium/skeleton-table/mock.js +0 -19
  490. package/dist/showcase/premium/skeleton-table/showcase.cjs +0 -1
  491. package/dist/showcase/premium/skeleton-table/showcase.d.ts +0 -2
  492. package/dist/showcase/premium/skeleton-table/showcase.js +0 -59
  493. package/dist/showcase/premium/stack/index.cjs +0 -1
  494. package/dist/showcase/premium/stack/index.d.ts +0 -2
  495. package/dist/showcase/premium/stack/index.js +0 -3
  496. package/dist/showcase/premium/stack/mock.cjs +0 -10
  497. package/dist/showcase/premium/stack/mock.d.ts +0 -2
  498. package/dist/showcase/premium/stack/mock.js +0 -26
  499. package/dist/showcase/premium/stack/showcase.cjs +0 -1
  500. package/dist/showcase/premium/stack/showcase.d.ts +0 -1
  501. package/dist/showcase/premium/stack/showcase.js +0 -47
  502. package/dist/showcase/premium/tag-list/index.cjs +0 -1
  503. package/dist/showcase/premium/tag-list/index.d.ts +0 -2
  504. package/dist/showcase/premium/tag-list/index.js +0 -3
  505. package/dist/showcase/premium/tag-list/mock.cjs +0 -12
  506. package/dist/showcase/premium/tag-list/mock.d.ts +0 -2
  507. package/dist/showcase/premium/tag-list/mock.js +0 -26
  508. package/dist/showcase/premium/tag-list/showcase.cjs +0 -1
  509. package/dist/showcase/premium/tag-list/showcase.d.ts +0 -2
  510. package/dist/showcase/premium/tag-list/showcase.js +0 -83
  511. package/dist/showcase/premium/watermark/index.cjs +0 -1
  512. package/dist/showcase/premium/watermark/index.d.ts +0 -2
  513. package/dist/showcase/premium/watermark/index.js +0 -3
  514. package/dist/showcase/premium/watermark/mock.cjs +0 -11
  515. package/dist/showcase/premium/watermark/mock.d.ts +0 -2
  516. package/dist/showcase/premium/watermark/mock.js +0 -26
  517. package/dist/showcase/premium/watermark/showcase.cjs +0 -1
  518. package/dist/showcase/premium/watermark/showcase.d.ts +0 -2
  519. package/dist/showcase/premium/watermark/showcase.js +0 -34
  520. package/packages/cli/vendor/src/components/display/aspect-ratio.tsx +0 -22
  521. package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
  522. package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
  523. package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
  524. package/packages/cli/vendor/src/components/display/float-button.tsx +0 -27
  525. package/packages/cli/vendor/src/components/display/key-value-card.tsx +0 -50
  526. package/packages/cli/vendor/src/components/display/keyboard-shortcut.tsx +0 -31
  527. package/packages/cli/vendor/src/components/display/skeleton-form.tsx +0 -51
  528. package/packages/cli/vendor/src/components/display/skeleton-table.tsx +0 -59
  529. package/packages/cli/vendor/src/components/display/tag-list.tsx +0 -52
  530. package/packages/cli/vendor/src/components/display/watermark.tsx +0 -20
  531. package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
  532. package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
  533. package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
  534. package/packages/cli/vendor/src/components/form/repeater-field.tsx +0 -93
  535. package/packages/cli/vendor/src/components/inputs/cascader.tsx +0 -41
  536. package/packages/cli/vendor/src/components/inputs/mention-input.tsx +0 -162
  537. package/packages/cli/vendor/src/components/layout/stack.tsx +0 -106
  538. package/packages/cli/vendor/src/components/modern/affix.tsx +0 -21
  539. package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
  540. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
  541. package/packages/cli/vendor/src/showcase/premium/affix/index.ts +0 -3
  542. package/packages/cli/vendor/src/showcase/premium/affix/mock.ts +0 -26
  543. package/packages/cli/vendor/src/showcase/premium/affix/showcase.tsx +0 -37
  544. package/packages/cli/vendor/src/showcase/premium/aspect-ratio/index.ts +0 -2
  545. package/packages/cli/vendor/src/showcase/premium/aspect-ratio/mock.ts +0 -26
  546. package/packages/cli/vendor/src/showcase/premium/aspect-ratio/showcase.tsx +0 -37
  547. package/packages/cli/vendor/src/showcase/premium/cascader/index.ts +0 -3
  548. package/packages/cli/vendor/src/showcase/premium/cascader/mock.ts +0 -24
  549. package/packages/cli/vendor/src/showcase/premium/cascader/showcase.tsx +0 -20
  550. package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
  551. package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
  552. package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
  553. package/packages/cli/vendor/src/showcase/premium/float-button/index.ts +0 -3
  554. package/packages/cli/vendor/src/showcase/premium/float-button/mock.ts +0 -24
  555. package/packages/cli/vendor/src/showcase/premium/float-button/showcase.tsx +0 -21
  556. package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
  557. package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
  558. package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
  559. package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/index.ts +0 -2
  560. package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/mock.ts +0 -20
  561. package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/showcase.tsx +0 -42
  562. package/packages/cli/vendor/src/showcase/premium/mention-input/index.ts +0 -3
  563. package/packages/cli/vendor/src/showcase/premium/mention-input/mock.ts +0 -26
  564. package/packages/cli/vendor/src/showcase/premium/mention-input/showcase.tsx +0 -27
  565. package/packages/cli/vendor/src/showcase/premium/skeleton-form/index.ts +0 -3
  566. package/packages/cli/vendor/src/showcase/premium/skeleton-form/mock.ts +0 -20
  567. package/packages/cli/vendor/src/showcase/premium/skeleton-form/showcase.tsx +0 -34
  568. package/packages/cli/vendor/src/showcase/premium/skeleton-table/index.ts +0 -3
  569. package/packages/cli/vendor/src/showcase/premium/skeleton-table/mock.ts +0 -20
  570. package/packages/cli/vendor/src/showcase/premium/skeleton-table/showcase.tsx +0 -37
  571. package/packages/cli/vendor/src/showcase/premium/stack/index.ts +0 -2
  572. package/packages/cli/vendor/src/showcase/premium/stack/mock.ts +0 -25
  573. package/packages/cli/vendor/src/showcase/premium/stack/showcase.tsx +0 -22
  574. package/packages/cli/vendor/src/showcase/premium/tag-list/index.ts +0 -2
  575. package/packages/cli/vendor/src/showcase/premium/tag-list/mock.ts +0 -27
  576. package/packages/cli/vendor/src/showcase/premium/tag-list/showcase.tsx +0 -55
  577. package/packages/cli/vendor/src/showcase/premium/watermark/index.ts +0 -2
  578. package/packages/cli/vendor/src/showcase/premium/watermark/mock.ts +0 -26
  579. package/packages/cli/vendor/src/showcase/premium/watermark/showcase.tsx +0 -26
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import { CalendarIcon } from "lucide-react"
2
+ import { CalendarIcon, XIcon } from "lucide-react"
3
3
 
4
4
  import { Calendar, type CalendarDateRange, type CalendarProps } from "@/components/calendar/calendar"
5
5
  import { Button } from "@/components/ui/button"
@@ -10,10 +10,17 @@ import { parseDateKey } from "./date-utils"
10
10
  export type DateRangePickerValue = CalendarDateRange
11
11
 
12
12
  export type DateRangePickerLabels = CalendarProps["labels"] & {
13
- placeholder?: string
14
- apply?: React.ReactNode
15
- clear?: React.ReactNode
16
- }
13
+ placeholder?: string
14
+ apply?: React.ReactNode
15
+ clear?: React.ReactNode
16
+ start?: string
17
+ end?: string
18
+ }
19
+
20
+ export type DateRangePickerPreset = {
21
+ label: React.ReactNode
22
+ value: DateRangePickerValue
23
+ }
17
24
 
18
25
  export type DateRangePickerProps = Omit<
19
26
  CalendarProps,
@@ -23,31 +30,41 @@ export type DateRangePickerProps = Omit<
23
30
  onValueChange?: (value: DateRangePickerValue) => void
24
31
  labels?: DateRangePickerLabels
25
32
  placeholder?: string
26
- disabled?: boolean
27
- formatValue?: (value: string) => React.ReactNode
28
- closeOnSelect?: boolean
29
- showFooter?: boolean
30
- triggerClassName?: string
31
- contentClassName?: string
32
- }
33
+ disabled?: boolean
34
+ clearable?: boolean
35
+ formatValue?: (value: string) => React.ReactNode
36
+ closeOnSelect?: boolean
37
+ closeOnPresetSelect?: boolean
38
+ showFooter?: boolean
39
+ presets?: DateRangePickerPreset[]
40
+ triggerClassName?: string
41
+ contentClassName?: string
42
+ }
33
43
 
34
- function defaultFormatValue(value: string) {
35
- const date = parseDateKey(value)
36
- if (!date) return value
37
- return new Intl.DateTimeFormat("en-US", { dateStyle: "medium" }).format(date)
38
- }
44
+ function defaultFormatValue(value: string) {
45
+ const date = parseDateKey(value)
46
+ if (!date) return value
47
+ return new Intl.DateTimeFormat("en-US", { dateStyle: "medium" }).format(date)
48
+ }
49
+
50
+ function getTextLabel(value: React.ReactNode, fallback: string) {
51
+ return typeof value === "string" ? value : fallback
52
+ }
39
53
 
40
54
  function DateRangePicker({
41
55
  className,
42
56
  value,
43
57
  onValueChange,
44
- labels,
45
- placeholder,
46
- disabled = false,
47
- formatValue = defaultFormatValue,
48
- closeOnSelect = true,
49
- showFooter = false,
50
- triggerClassName,
58
+ labels,
59
+ placeholder,
60
+ disabled = false,
61
+ clearable = true,
62
+ formatValue = defaultFormatValue,
63
+ closeOnSelect = false,
64
+ closeOnPresetSelect = false,
65
+ showFooter = true,
66
+ presets,
67
+ triggerClassName,
51
68
  contentClassName,
52
69
  numberOfMonths = 2,
53
70
  pagedNavigation = true,
@@ -98,16 +115,44 @@ function DateRangePicker({
98
115
  setOpen(false)
99
116
  }
100
117
 
101
- const clearDraftValue = () => {
102
- const nextValue = {}
118
+ const clearDraftValue = () => {
119
+ const nextValue = {}
103
120
 
104
121
  if (showFooter) {
105
122
  setDraftValue(nextValue)
106
123
  return
107
124
  }
108
125
 
109
- onValueChange?.(nextValue)
110
- }
126
+ onValueChange?.(nextValue)
127
+ }
128
+
129
+ const resetValue = () => {
130
+ const nextValue = {}
131
+ setDraftValue(nextValue)
132
+ onValueChange?.(nextValue)
133
+ }
134
+
135
+ const clearValue = (event: React.MouseEvent<HTMLElement>) => {
136
+ event.preventDefault()
137
+ event.stopPropagation()
138
+ resetValue()
139
+ }
140
+
141
+ const selectPreset = (presetValue: DateRangePickerValue) => {
142
+ if (showFooter) {
143
+ setDraftValue(presetValue)
144
+ if (closeOnPresetSelect) {
145
+ onValueChange?.(presetValue)
146
+ setOpen(false)
147
+ }
148
+ return
149
+ }
150
+
151
+ onValueChange?.(presetValue)
152
+ if ((closeOnSelect || closeOnPresetSelect) && presetValue.from && presetValue.to) {
153
+ setOpen(false)
154
+ }
155
+ }
111
156
 
112
157
  return (
113
158
  <div data-slot="date-range-picker" className={cn("w-full", className)}>
@@ -118,33 +163,93 @@ function DateRangePicker({
118
163
  type="button"
119
164
  variant="outline"
120
165
  disabled={disabled}
121
- className={cn(
122
- "min-h-11 w-full justify-start rounded-[var(--aui-control-radius,var(--radius-md))] border-border/80 bg-background/96 text-left font-normal shadow-[var(--aui-control-shadow,0_1px_2px_rgba(15,23,42,0.04))]",
123
- !hasValue && "text-muted-foreground",
124
- triggerClassName
125
- )}
126
- />
127
- }
128
- >
129
- <CalendarIcon data-icon="inline-start" />
130
- <span className="min-w-0 flex-1 truncate">{label}</span>
131
- </PopoverTrigger>
166
+ className={cn(
167
+ "group min-h-11 w-full justify-start gap-3 rounded-[var(--aui-control-radius,var(--radius-md))] border-border/80 bg-background/96 px-3 text-left font-normal shadow-[var(--aui-control-shadow,0_1px_2px_rgba(15,23,42,0.04))]",
168
+ !hasValue && "text-muted-foreground",
169
+ triggerClassName
170
+ )}
171
+ />
172
+ }
173
+ >
174
+ <CalendarIcon data-icon="inline-start" className={cn(hasValue && "text-primary")} />
175
+ {hasValue ? (
176
+ <span className="grid min-w-0 flex-1 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-2">
177
+ <span className="grid min-w-0 gap-0.5">
178
+ <span className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">{labels?.start ?? "Start"}</span>
179
+ <span className="truncate text-sm font-semibold text-foreground">{from ? formatValue(from) : "..."}</span>
180
+ </span>
181
+ <span className="text-muted-foreground">-</span>
182
+ <span className="grid min-w-0 gap-0.5">
183
+ <span className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">{labels?.end ?? "End"}</span>
184
+ <span className="truncate text-sm font-semibold text-foreground">{to ? formatValue(to) : "..."}</span>
185
+ </span>
186
+ </span>
187
+ ) : (
188
+ <span className="grid min-w-0 flex-1 gap-0.5">
189
+ <span className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">Range</span>
190
+ <span className="truncate text-sm">{label}</span>
191
+ </span>
192
+ )}
193
+ {clearable && hasValue ? (
194
+ <span
195
+ role="button"
196
+ tabIndex={0}
197
+ aria-label={getTextLabel(labels?.clear, "Clear date range")}
198
+ className="ml-auto inline-flex size-7 shrink-0 items-center justify-center rounded-[var(--radius-sm)] text-muted-foreground opacity-80 transition hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring"
199
+ onClick={clearValue}
200
+ onKeyDown={(event) => {
201
+ if (event.key === "Enter" || event.key === " ") {
202
+ event.preventDefault()
203
+ resetValue()
204
+ }
205
+ }}
206
+ >
207
+ <XIcon className="size-3.5" />
208
+ </span>
209
+ ) : null}
210
+ </PopoverTrigger>
132
211
  <PopoverContent
133
212
  align="start"
134
213
  className={cn(
135
214
  "w-auto overflow-hidden rounded-[var(--aui-card-radius,var(--radius-lg))] border-border/70 bg-popover p-0 shadow-[var(--aui-control-panel-shadow,0_18px_40px_rgba(15,23,42,0.14))] backdrop-blur",
136
215
  contentClassName
137
216
  )}
138
- >
139
- <Calendar
140
- mode="range"
141
- range={activeValue}
142
- onRangeChange={handleRangeChange}
143
- labels={labels}
144
- numberOfMonths={numberOfMonths}
145
- pagedNavigation={pagedNavigation}
146
- {...calendarProps}
147
- />
217
+ >
218
+ {presets?.length ? (
219
+ <div className="flex flex-wrap gap-2 border-b border-border/70 bg-muted/20 px-3 py-3">
220
+ {presets.map((preset, index) => (
221
+ <Button
222
+ key={index}
223
+ type="button"
224
+ variant="outline"
225
+ size="sm"
226
+ className="h-7 rounded-full px-3 text-xs"
227
+ onClick={() => selectPreset(preset.value)}
228
+ >
229
+ {preset.label}
230
+ </Button>
231
+ ))}
232
+ </div>
233
+ ) : null}
234
+ <Calendar
235
+ mode="range"
236
+ range={activeValue}
237
+ onRangeChange={handleRangeChange}
238
+ labels={labels}
239
+ renderSelectionSummary={({ range }) => {
240
+ const fromValue = range?.from ? formatValue(range.from) : null
241
+ const toValue = range?.to ? formatValue(range.to) : null
242
+
243
+ if (fromValue && toValue) return `${fromValue} -> ${toValue}`
244
+ if (fromValue) return `${fromValue} -> ...`
245
+ return "No range selected"
246
+ }}
247
+ numberOfMonths={numberOfMonths}
248
+ pagedNavigation={pagedNavigation}
249
+ showClearShortcut={!showFooter && clearable}
250
+ showSelectionSummary
251
+ {...calendarProps}
252
+ />
148
253
  {showFooter && (
149
254
  <div className="flex flex-wrap items-center justify-between gap-3 border-t border-border/70 bg-muted/24 px-4 py-3">
150
255
  <div className="min-w-0 text-sm text-muted-foreground">
@@ -22,46 +22,55 @@ const dataTableToolbarVariants = cva("flex flex-col", {
22
22
  },
23
23
  })
24
24
 
25
- export type DataTableToolbarProps = React.ComponentProps<"div"> &
26
- VariantProps<typeof dataTableToolbarVariants> & {
27
- title?: React.ReactNode
28
- description?: React.ReactNode
29
- search?: React.ReactNode
30
- filters?: React.ReactNode
31
- actions?: React.ReactNode
32
- selectionActions?: React.ReactNode
33
- selectedCount?: number
34
- totalCount?: number
35
- selectedLabel?: (selectedCount: number, totalCount?: number) => React.ReactNode
36
- titleClassName?: string
37
- descriptionClassName?: string
38
- actionsClassName?: string
39
- }
25
+ export type DataTableToolbarProps = React.ComponentProps<"div"> &
26
+ VariantProps<typeof dataTableToolbarVariants> & {
27
+ title?: React.ReactNode
28
+ description?: React.ReactNode
29
+ search?: React.ReactNode
30
+ filters?: React.ReactNode
31
+ summary?: React.ReactNode
32
+ actions?: React.ReactNode
33
+ selectionActions?: React.ReactNode
34
+ selectedCount?: number
35
+ totalCount?: number
36
+ selectedLabel?: (selectedCount: number, totalCount?: number) => React.ReactNode
37
+ titleClassName?: string
38
+ descriptionClassName?: string
39
+ searchClassName?: string
40
+ filtersClassName?: string
41
+ summaryClassName?: string
42
+ actionsClassName?: string
43
+ }
40
44
 
41
45
  function DataTableToolbar({
42
46
  className,
43
47
  variant,
44
48
  density,
45
49
  title,
46
- description,
47
- search,
48
- filters,
49
- actions,
50
- selectionActions,
51
- selectedCount = 0,
52
- totalCount,
53
- selectedLabel = (selected, total) =>
54
- total === undefined ? `${selected} selected` : `${selected} of ${total} selected`,
55
- titleClassName,
56
- descriptionClassName,
57
- actionsClassName,
58
- children,
59
- ...props
60
- }: DataTableToolbarProps) {
61
- const hasHeading = Boolean(title || description)
62
- const hasSelection = selectedCount > 0 && Boolean(selectionActions)
63
-
64
- return (
50
+ description,
51
+ search,
52
+ filters,
53
+ summary,
54
+ actions,
55
+ selectionActions,
56
+ selectedCount = 0,
57
+ totalCount,
58
+ selectedLabel = (selected, total) =>
59
+ total === undefined ? `${selected} selected` : `${selected} of ${total} selected`,
60
+ titleClassName,
61
+ descriptionClassName,
62
+ searchClassName,
63
+ filtersClassName,
64
+ summaryClassName,
65
+ actionsClassName,
66
+ children,
67
+ ...props
68
+ }: DataTableToolbarProps) {
69
+ const hasHeading = Boolean(title || description)
70
+ const hasSelection = selectedCount > 0 && Boolean(selectionActions)
71
+ const hasMainControls = Boolean(search || filters || children)
72
+
73
+ return (
65
74
  <div
66
75
  data-slot="data-table-toolbar"
67
76
  data-variant={variant ?? "plain"}
@@ -69,8 +78,8 @@ function DataTableToolbar({
69
78
  className={cn(dataTableToolbarVariants({ variant, density }), className)}
70
79
  {...props}
71
80
  >
72
- {(hasHeading || actions) && (
73
- <div className="flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
81
+ {(hasHeading || actions) && (
82
+ <div className="flex flex-col gap-3 xl:flex-row xl:items-start xl:justify-between">
74
83
  {hasHeading && (
75
84
  <div className="grid gap-1">
76
85
  {title && <h2 className={cn("text-lg font-semibold tracking-tight text-foreground", titleClassName)}>{title}</h2>}
@@ -78,24 +87,36 @@ function DataTableToolbar({
78
87
  </div>
79
88
  )}
80
89
 
81
- {actions && <div className={cn("flex shrink-0 flex-wrap items-center gap-2", actionsClassName)}>{actions}</div>}
82
- </div>
83
- )}
84
-
85
- {(search || filters || hasSelection || children) && (
86
- <div className="flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-between">
87
- <div className="flex min-w-0 flex-1 flex-col gap-2 sm:flex-row sm:items-center">
88
- {search}
89
- {filters}
90
- {children}
91
- </div>
92
-
90
+ {actions && <div className={cn("flex min-w-0 shrink-0 flex-wrap items-center gap-2 xl:justify-end", actionsClassName)}>{actions}</div>}
91
+ </div>
92
+ )}
93
+
94
+ {(hasMainControls || summary || hasSelection) && (
95
+ <div className="flex flex-col gap-3 xl:flex-row xl:items-start xl:justify-between">
96
+ <div className="flex min-w-0 flex-1 flex-col gap-3">
97
+ {hasMainControls && (
98
+ <div className="flex min-w-0 flex-1 flex-col gap-2 lg:flex-row lg:flex-wrap lg:items-center">
99
+ {search ? <div className={cn("min-w-[16rem] max-w-xl flex-1", searchClassName)}>{search}</div> : null}
100
+ {filters ? <div className={cn("flex min-w-0 flex-1 flex-wrap items-center gap-2", filtersClassName)}>{filters}</div> : null}
101
+ {children}
102
+ </div>
103
+ )}
104
+ {summary ? (
105
+ <div
106
+ data-slot="data-table-summary"
107
+ className={cn("flex flex-wrap items-center gap-2 text-sm text-muted-foreground", summaryClassName)}
108
+ >
109
+ {summary}
110
+ </div>
111
+ ) : null}
112
+ </div>
113
+
93
114
  {hasSelection && (
94
- <div data-slot="data-table-selection-bar" className="flex shrink-0 items-center gap-2 rounded-[var(--radius-md)] border border-[color:var(--aui-control-border-strong,var(--border))] bg-[color:var(--aui-control-surface,var(--background))] px-2.5 py-1.5 text-sm shadow-[var(--aui-control-shadow,none)] backdrop-blur">
115
+ <div data-slot="data-table-selection-bar" className="flex shrink-0 flex-wrap items-center gap-2 rounded-[var(--radius-md)] border border-[color:var(--aui-control-border-strong,var(--border))] bg-[color:var(--aui-control-surface,var(--background))] px-2.5 py-1.5 text-sm shadow-[var(--aui-control-shadow,none)] backdrop-blur">
95
116
  <span className="text-muted-foreground">{selectedLabel(selectedCount, totalCount)}</span>
96
117
  {selectionActions}
97
118
  </div>
98
- )}
119
+ )}
99
120
  </div>
100
121
  )}
101
122
  </div>
@@ -24,7 +24,7 @@ import { DataTableColumnVisibilityMenu } from "@/components/data-table/data-tabl
24
24
  import { DataTablePagination, type DataTablePaginationProps } from "@/components/data-table/data-table-pagination"
25
25
  import { type DataTableRowAction } from "@/components/data-table/data-table-row-actions"
26
26
  import { DataTableToolbar, type DataTableToolbarProps } from "@/components/data-table/data-table-toolbar"
27
- import { EmptyState, type EmptyStateProps } from "@/components/feedback/empty-state"
27
+ import { DataState, type DataStateProps } from "@/components/display/data-state"
28
28
  import { LoadingState, type LoadingStateProps } from "@/components/feedback/loading-state"
29
29
  import { SearchInput, type SearchInputProps } from "@/components/inputs/search-input"
30
30
  import { Button } from "@/components/ui/button"
@@ -87,28 +87,30 @@ export type DataTablePaginationConfig = Pick<
87
87
  onPageSizeChange?: (pageSize: number) => void
88
88
  }
89
89
 
90
- export type DataTableProps<TData, TValue = unknown> = Omit<
91
- React.ComponentProps<"div">,
92
- "children"
93
- > & {
90
+ export type DataTableProps<TData, TValue = unknown> = Omit<
91
+ React.ComponentProps<"div">,
92
+ "children"
93
+ > & {
94
94
  columns: ColumnDef<TData, TValue>[]
95
95
  data: TData[]
96
- title?: React.ReactNode
97
- description?: React.ReactNode
98
- features?: DataTableFeatureConfig
99
- search?: DataTableSearchConfig
100
- toolbarActions?: React.ReactNode | ((context: DataTableActionContext<TData>) => React.ReactNode)
101
- rowActions?: (row: Row<TData>, original: TData) => DataTableRowAction<TData>[]
96
+ title?: React.ReactNode
97
+ description?: React.ReactNode
98
+ features?: DataTableFeatureConfig
99
+ search?: DataTableSearchConfig
100
+ filters?: React.ReactNode | ((context: DataTableActionContext<TData>) => React.ReactNode)
101
+ summary?: React.ReactNode | ((context: DataTableActionContext<TData>) => React.ReactNode)
102
+ toolbarActions?: React.ReactNode | ((context: DataTableActionContext<TData>) => React.ReactNode)
103
+ rowActions?: (row: Row<TData>, original: TData) => DataTableRowAction<TData>[]
102
104
  bulkActions?: DataTableBulkAction<TData>[]
103
105
  onRefresh?: (context: DataTableActionContext<TData>) => void
104
- onExport?: (context: DataTableActionContext<TData>) => void
106
+ onExport?: (context: DataTableActionContext<TData>) => void
105
107
  refreshLabel?: React.ReactNode
106
108
  exportLabel?: React.ReactNode
107
109
  getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string
108
110
  isLoading?: boolean
109
111
  isError?: boolean
110
- emptyState?: EmptyStateProps
111
- errorState?: EmptyStateProps
112
+ emptyState?: Omit<DataStateProps, "status">
113
+ errorState?: Omit<DataStateProps, "status">
112
114
  loadingState?: LoadingStateProps
113
115
  loadingVariant?: DataTableLoadingVariant
114
116
  toolbar?: React.ReactNode | ((table: TanStackTable<TData>) => React.ReactNode)
@@ -189,11 +191,13 @@ function DataTable<TData, TValue = unknown>({
189
191
  columns,
190
192
  data,
191
193
  title,
192
- description,
193
- features,
194
- search,
195
- toolbarActions,
196
- rowActions,
194
+ description,
195
+ features,
196
+ search,
197
+ filters,
198
+ summary,
199
+ toolbarActions,
200
+ rowActions,
197
201
  bulkActions,
198
202
  onRefresh,
199
203
  onExport,
@@ -259,11 +263,10 @@ function DataTable<TData, TValue = unknown>({
259
263
  pageSize: paginationConfig.pageSize,
260
264
  }
261
265
  : undefined
262
- const manualPagination = Boolean(paginationConfig && paginationConfig.manual !== false)
263
- const resolvedRowSelection = rowSelection ?? {}
264
- const selectedRowCount = Object.keys(resolvedRowSelection).length
265
-
266
- // TanStack Table returns imperative helpers that React Compiler flags by design.
266
+ const manualPagination = Boolean(paginationConfig && paginationConfig.manual !== false)
267
+ const resolvedRowSelection = rowSelection ?? {}
268
+
269
+ // TanStack Table returns imperative helpers that React Compiler flags by design.
267
270
  // eslint-disable-next-line react-hooks/incompatible-library
268
271
  const table = useReactTable({
269
272
  data,
@@ -291,18 +294,21 @@ function DataTable<TData, TValue = unknown>({
291
294
  getExpandedRowModel: getExpandedRowModel(),
292
295
  })
293
296
 
294
- const rows = table.getRowModel().rows
295
- const selectedRows = table.getSelectedRowModel().rows.map((row) => row.original)
296
- const actionContext = React.useMemo<DataTableActionContext<TData>>(
297
- () => ({ table, data, selectedRows }),
298
- [data, selectedRows, table]
299
- )
300
- const visibleColumns = table.getVisibleLeafColumns()
301
- const visibleColumnCount = Math.max(visibleColumns.length, 1)
302
- const resolvedToolbar = typeof toolbar === "function" ? toolbar(table) : toolbar
303
- const resolvedToolbarProps = typeof toolbarProps === "function" ? toolbarProps(table) : toolbarProps
304
- const shouldShowSearch = Boolean(search && features?.search !== false)
305
- const shouldShowColumnVisibility = Boolean(features?.columnVisibility && table.getAllLeafColumns().some((column) => column.getCanHide()))
297
+ const rows = table.getRowModel().rows
298
+ const selectedRows = table.getSelectedRowModel().rows.map((row) => row.original)
299
+ const selectedRowCount = selectedRows.length
300
+ const actionContext = React.useMemo<DataTableActionContext<TData>>(
301
+ () => ({ table, data, selectedRows }),
302
+ [data, selectedRows, table]
303
+ )
304
+ const visibleColumns = table.getVisibleLeafColumns()
305
+ const visibleColumnCount = Math.max(visibleColumns.length, 1)
306
+ const resolvedToolbar = typeof toolbar === "function" ? toolbar(table) : toolbar
307
+ const resolvedToolbarProps = typeof toolbarProps === "function" ? toolbarProps(table) : toolbarProps
308
+ const resolvedFilters = typeof filters === "function" ? filters(actionContext) : filters
309
+ const resolvedSummary = typeof summary === "function" ? summary(actionContext) : summary
310
+ const shouldShowSearch = Boolean(search && features?.search !== false)
311
+ const shouldShowColumnVisibility = Boolean(features?.columnVisibility && table.getAllLeafColumns().some((column) => column.getCanHide()))
306
312
  const shouldShowRefresh = Boolean(features?.refresh && onRefresh)
307
313
  const shouldShowExport = Boolean(features?.export && onExport)
308
314
  const shouldShowBulkActions = Boolean(features?.bulkActions !== false && bulkActions?.length)
@@ -310,6 +316,8 @@ function DataTable<TData, TValue = unknown>({
310
316
  title ||
311
317
  description ||
312
318
  search ||
319
+ resolvedFilters ||
320
+ resolvedSummary ||
313
321
  toolbarActions ||
314
322
  shouldShowRefresh ||
315
323
  shouldShowExport
@@ -355,9 +363,11 @@ function DataTable<TData, TValue = unknown>({
355
363
  />
356
364
  ) : undefined
357
365
  const hasDefaultToolbarContent = Boolean(
358
- title ||
359
- description ||
366
+ title ||
367
+ description ||
360
368
  defaultSearch ||
369
+ resolvedFilters ||
370
+ resolvedSummary ||
361
371
  toolbarActions ||
362
372
  shouldShowColumnVisibilityInToolbar ||
363
373
  shouldShowRefresh ||
@@ -400,26 +410,28 @@ function DataTable<TData, TValue = unknown>({
400
410
  </TableRow>
401
411
  ))
402
412
 
403
- const stateContent = shouldRenderSkeleton ? null : isLoading ? (
404
- <LoadingState label="Loading data..." {...loadingState} />
405
- ) : isError ? (
406
- <EmptyState title="Could not load data" description="Please try again." {...errorState} />
407
- ) : rows.length === 0 ? (
408
- <EmptyState {...emptyState} />
409
- ) : null
413
+ const stateContent = shouldRenderSkeleton ? null : isLoading ? (
414
+ <LoadingState label="Loading data..." {...loadingState} />
415
+ ) : isError ? (
416
+ <DataState status="error" title="Could not load data" description="Please try again." variant="plain" {...errorState} />
417
+ ) : rows.length === 0 ? (
418
+ <DataState status="empty" variant="plain" {...emptyState} />
419
+ ) : null
410
420
 
411
421
  return (
412
422
  <div data-slot="data-table" className={cn("grid gap-3", className)} {...props}>
413
423
  {hasToolbar &&
414
424
  (resolvedToolbar ?? (
415
- <DataTableToolbar
416
- title={title}
417
- description={description}
418
- search={defaultSearch}
419
- actions={defaultActions}
420
- selectionActions={defaultSelectionActions}
421
- selectedCount={selectedRowCount}
422
- totalCount={paginationConfig ? paginationConfig.rowCount ?? data.length : data.length}
425
+ <DataTableToolbar
426
+ title={title}
427
+ description={description}
428
+ search={defaultSearch}
429
+ filters={resolvedFilters}
430
+ summary={resolvedSummary}
431
+ actions={defaultActions}
432
+ selectionActions={defaultSelectionActions}
433
+ selectedCount={selectedRowCount}
434
+ totalCount={paginationConfig ? paginationConfig.rowCount ?? data.length : data.length}
423
435
  variant="plain"
424
436
  {...resolvedToolbarProps}
425
437
  />
@@ -1,13 +1,3 @@
1
- import { component, createShowcaseDemoRegistry } from "@/showcase/create-demo"
1
+ import { createShowcaseDemoRegistry } from "@/showcase/create-demo"
2
2
 
3
- export const dataTableShowcaseDemoRegistry = createShowcaseDemoRegistry([
4
- component("data-table-pagination", "DataTablePagination", "data-table", "Pagination control used by DataTable pages."),
5
- component("data-table-toolbar", "DataTableToolbar", "data-table", "Toolbar surface for DataTable search, filters and actions."),
6
- component("data-table-column-visibility-menu", "DataTableColumnVisibilityMenu", "data-table", "Column visibility menu pattern for table views."),
7
- component("data-table-select-column", "DataTableSelectColumn", "data-table", "Selection column pattern for bulk table workflows."),
8
- component("data-table-sortable-header", "DataTableSortableHeader", "data-table", "Sortable header trigger with clear visual state."),
9
- component("data-table-row-actions", "DataTableRowActions", "data-table", "Row action menu for inspect, duplicate and archive operations."),
10
- component("data-table-actions-column", "DataTableActionsColumn", "data-table", "Reusable actions column for DataTable definitions."),
11
- component("data-table-bulk-actions", "DataTableBulkActions", "data-table", "Bulk action bar for selected rows."),
12
- component("data-table-view-presets", "DataTableViewPresets", "data-table", "Saved table view presets for operational dashboards."),
13
- ])
3
+ export const dataTableShowcaseDemoRegistry = createShowcaseDemoRegistry([])
@@ -1,11 +1,6 @@
1
1
  export * from "./data-table"
2
- export * from "./data-table-actions-column"
2
+ export * from "./data-table-pagination"
3
3
  export * from "./data-table-bulk-actions"
4
4
  export * from "./data-table-column-visibility-menu"
5
- export * from "./data-table-pagination"
6
- export * from "./data-table-row-actions"
7
- export * from "./data-table-select-column"
8
5
  export * from "./data-table-sortable-header"
9
- export * from "./data-table-toolbar"
10
6
  export * from "./data-table-view-presets"
11
- export * from "./data-table-saved-filters"