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
@@ -24,14 +24,23 @@ export type CalendarDateRange = {
24
24
 
25
25
  export type CalendarDisabledReason = "disabled" | "min" | "max" | "range"
26
26
 
27
- export type CalendarLabels = {
28
- previousMonth?: string
29
- nextMonth?: string
30
- selectDate?: (date: string) => string
31
- disabledDate?: (date: string, reason: CalendarDisabledReason) => string
32
- }
33
-
34
- export type CalendarProps = React.ComponentProps<"div"> & {
27
+ export type CalendarLabels = {
28
+ previousMonth?: string
29
+ nextMonth?: string
30
+ today?: string
31
+ clear?: string
32
+ selectDate?: (date: string) => string
33
+ disabledDate?: (date: string, reason: CalendarDisabledReason) => string
34
+ }
35
+
36
+ export type CalendarSummaryState = {
37
+ mode: "single" | "range"
38
+ value?: string | null
39
+ range?: CalendarDateRange
40
+ locale: string
41
+ }
42
+
43
+ export type CalendarProps = React.ComponentProps<"div"> & {
35
44
  value?: string | null
36
45
  range?: CalendarDateRange
37
46
  onValueChange?: (value: string) => void
@@ -45,11 +54,16 @@ export type CalendarProps = React.ComponentProps<"div"> & {
45
54
  disabledDates?: string[]
46
55
  locale?: string
47
56
  weekStartsOn?: 0 | 1
48
- numberOfMonths?: number
49
- showMonthHeaders?: boolean
50
- pagedNavigation?: boolean
51
- labels?: CalendarLabels
52
- }
57
+ numberOfMonths?: number
58
+ showMonthHeaders?: boolean
59
+ showOutsideDays?: boolean
60
+ pagedNavigation?: boolean
61
+ showTodayShortcut?: boolean
62
+ showClearShortcut?: boolean
63
+ showSelectionSummary?: boolean
64
+ labels?: CalendarLabels
65
+ renderSelectionSummary?: (state: CalendarSummaryState) => React.ReactNode
66
+ }
53
67
 
54
68
  function getInitialMonth(defaultMonth?: Date | string | null, value?: string | null, range?: CalendarDateRange) {
55
69
  if (defaultMonth instanceof Date) return startOfMonth(defaultMonth)
@@ -77,7 +91,7 @@ function getDateAtSameDayInMonth(date: Date, month: Date) {
77
91
  return new Date(month.getFullYear(), month.getMonth(), Math.min(date.getDate(), lastDay))
78
92
  }
79
93
 
80
- function getDateKeysBetween(from: string, to: string) {
94
+ function getDateKeysBetween(from: string, to: string) {
81
95
  const start = parseDateKey(from)
82
96
  const end = parseDateKey(to)
83
97
 
@@ -91,10 +105,16 @@ function getDateKeysBetween(from: string, to: string) {
91
105
  cursor.setDate(cursor.getDate() + 1)
92
106
  }
93
107
 
94
- return keys
95
- }
96
-
97
- function Calendar({
108
+ return keys
109
+ }
110
+
111
+ function formatCalendarSummaryDate(value: string | null | undefined, locale: string) {
112
+ const date = parseDateKey(value)
113
+ if (!date || !value) return null
114
+ return new Intl.DateTimeFormat(locale, { dateStyle: "medium" }).format(date)
115
+ }
116
+
117
+ function Calendar({
98
118
  className,
99
119
  value,
100
120
  range,
@@ -108,15 +128,26 @@ function Calendar({
108
128
  max,
109
129
  disabledDates,
110
130
  locale = "en-US",
111
- weekStartsOn = 1,
112
- numberOfMonths = 1,
113
- showMonthHeaders,
114
- pagedNavigation = false,
115
- labels,
116
- ...props
117
- }: CalendarProps) {
118
- const [internalMonth, setInternalMonth] = React.useState(() => getInitialMonth(defaultMonth, value, range))
119
- const currentMonth = month ?? internalMonth
131
+ weekStartsOn = 1,
132
+ numberOfMonths = 1,
133
+ showMonthHeaders,
134
+ showOutsideDays = true,
135
+ pagedNavigation = false,
136
+ showTodayShortcut = false,
137
+ showClearShortcut = false,
138
+ showSelectionSummary = false,
139
+ labels,
140
+ renderSelectionSummary,
141
+ ...props
142
+ }: CalendarProps) {
143
+ const isControlledSingle = value !== undefined
144
+ const isControlledRange = range !== undefined
145
+ const [internalValue, setInternalValue] = React.useState<string | null | undefined>(value ?? null)
146
+ const [internalRange, setInternalRange] = React.useState<CalendarDateRange>(range ?? {})
147
+ const [internalMonth, setInternalMonth] = React.useState(() => getInitialMonth(defaultMonth, value, range))
148
+ const currentValue = isControlledSingle ? value : internalValue
149
+ const currentRange = isControlledRange ? range : internalRange
150
+ const currentMonth = month ?? internalMonth
120
151
  const resolvedNumberOfMonths = Math.max(numberOfMonths, 1)
121
152
  const shouldShowMonthHeaders = showMonthHeaders ?? resolvedNumberOfMonths > 1
122
153
  const navigationStep = pagedNavigation ? resolvedNumberOfMonths : 1
@@ -124,7 +155,8 @@ function Calendar({
124
155
  const disabledSet = React.useMemo(() => new Set(disabledDates ?? []), [disabledDates])
125
156
  const weekdayLabels = React.useMemo(() => getWeekdayLabels(locale, weekStartsOn), [locale, weekStartsOn])
126
157
  const buttonRefs = React.useRef(new Map<string, HTMLButtonElement>())
127
- const [focusedDateKey, setFocusedDateKey] = React.useState(() => value ?? range?.from ?? todayKey)
158
+ const [focusedDateKey, setFocusedDateKey] = React.useState(() => value ?? range?.from ?? todayKey)
159
+ const [hoveredDateKey, setHoveredDateKey] = React.useState<string | null>(null)
128
160
  const visibleMonths = React.useMemo(
129
161
  () => Array.from({ length: resolvedNumberOfMonths }, (_, index) => addMonths(currentMonth, index)),
130
162
  [currentMonth, resolvedNumberOfMonths]
@@ -160,16 +192,34 @@ function Calendar({
160
192
  )
161
193
 
162
194
  const tabbableDateKey = React.useMemo(() => {
163
- const preferred = value ?? range?.from ?? todayKey
164
- if (visibleEnabledKeys.includes(focusedDateKey)) return focusedDateKey
165
- if (visibleEnabledKeys.includes(preferred)) return preferred
166
- return visibleEnabledKeys[0]
167
- }, [focusedDateKey, range?.from, todayKey, value, visibleEnabledKeys])
168
-
169
- React.useEffect(() => {
170
- if (!focusedDateKey) return
171
- buttonRefs.current.get(focusedDateKey)?.focus()
172
- }, [focusedDateKey])
195
+ const preferred = value ?? range?.from ?? todayKey
196
+ const selectedFrom = currentRange?.from ?? undefined
197
+ const selectedValue = currentValue ?? undefined
198
+ if (visibleEnabledKeys.includes(focusedDateKey)) return focusedDateKey
199
+ if (visibleEnabledKeys.includes(selectedValue ?? selectedFrom ?? preferred)) return selectedValue ?? selectedFrom ?? preferred
200
+ return visibleEnabledKeys[0]
201
+ }, [currentRange?.from, currentValue, focusedDateKey, range?.from, todayKey, value, visibleEnabledKeys])
202
+
203
+ React.useEffect(() => {
204
+ if (isControlledSingle) {
205
+ setInternalValue(value ?? null)
206
+ }
207
+ }, [isControlledSingle, value])
208
+
209
+ React.useEffect(() => {
210
+ if (isControlledRange && range) {
211
+ setInternalRange(range)
212
+ }
213
+ }, [isControlledRange, range])
214
+
215
+ React.useEffect(() => {
216
+ if (!focusedDateKey) return
217
+ buttonRefs.current.get(focusedDateKey)?.focus()
218
+ }, [focusedDateKey])
219
+
220
+ React.useEffect(() => {
221
+ if (mode !== "range") setHoveredDateKey(null)
222
+ }, [mode])
173
223
 
174
224
  const setMonth = (nextMonth: Date) => {
175
225
  const next = startOfMonth(nextMonth)
@@ -197,31 +247,93 @@ function Calendar({
197
247
  }
198
248
  }
199
249
 
200
- const handleDateSelect = (dateKey: string) => {
250
+ const handleDateSelect = (dateKey: string) => {
201
251
  if (isDateDisabled(dateKey)) return
202
252
 
203
- if (mode === "single") {
204
- onValueChange?.(dateKey)
205
- return
206
- }
207
-
208
- const from = range?.from ?? null
209
- const to = range?.to ?? null
210
-
211
- if (!from || (from && to) || dateKey < from) {
212
- onRangeChange?.({ from: dateKey, to: null })
213
- return
214
- }
253
+ if (mode === "single") {
254
+ if (!isControlledSingle) setInternalValue(dateKey)
255
+ onValueChange?.(dateKey)
256
+ return
257
+ }
258
+
259
+ const from = currentRange?.from ?? null
260
+ const to = currentRange?.to ?? null
261
+
262
+ if (!from || (from && to) || dateKey < from) {
263
+ const nextRange = { from: dateKey, to: null }
264
+ if (!isControlledRange) setInternalRange(nextRange)
265
+ onRangeChange?.(nextRange)
266
+ return
267
+ }
215
268
 
216
269
  const rangeHasDisabledDate = getDateKeysBetween(from, dateKey).some((key) => isDateDisabled(key))
217
270
 
218
- if (rangeHasDisabledDate) {
219
- onRangeChange?.({ from: dateKey, to: null })
220
- return
221
- }
222
-
223
- onRangeChange?.({ from, to: dateKey })
224
- }
271
+ if (rangeHasDisabledDate) {
272
+ const nextRange = { from: dateKey, to: null }
273
+ if (!isControlledRange) setInternalRange(nextRange)
274
+ onRangeChange?.(nextRange)
275
+ return
276
+ }
277
+
278
+ const nextRange = { from, to: dateKey }
279
+ if (!isControlledRange) setInternalRange(nextRange)
280
+ onRangeChange?.(nextRange)
281
+ }
282
+
283
+ const previewRange =
284
+ mode === "range" &&
285
+ currentRange?.from &&
286
+ !currentRange.to &&
287
+ hoveredDateKey &&
288
+ hoveredDateKey >= currentRange.from &&
289
+ !getDateKeysBetween(currentRange.from, hoveredDateKey).some((key) => isDateDisabled(key))
290
+ ? { from: currentRange.from, to: hoveredDateKey }
291
+ : null
292
+
293
+ const summaryContent = React.useMemo(() => {
294
+ if (!showSelectionSummary && !renderSelectionSummary) return null
295
+
296
+ if (renderSelectionSummary) {
297
+ return renderSelectionSummary({
298
+ mode,
299
+ value: currentValue,
300
+ range: currentRange,
301
+ locale,
302
+ })
303
+ }
304
+
305
+ if (mode === "range") {
306
+ const formattedFrom = formatCalendarSummaryDate(currentRange?.from, locale)
307
+ const formattedTo = formatCalendarSummaryDate(currentRange?.to, locale)
308
+ if (formattedFrom && formattedTo) return `${formattedFrom} -> ${formattedTo}`
309
+ if (formattedFrom) return `${formattedFrom} -> ...`
310
+ return "No range selected"
311
+ }
312
+
313
+ return formatCalendarSummaryDate(currentValue, locale) ?? "No date selected"
314
+ }, [currentRange, currentValue, locale, mode, renderSelectionSummary, showSelectionSummary])
315
+
316
+ const clearSelection = () => {
317
+ if (mode === "single") {
318
+ if (!isControlledSingle) setInternalValue(null)
319
+ onValueChange?.("")
320
+ return
321
+ }
322
+
323
+ const nextRange = { from: null, to: null }
324
+ if (!isControlledRange) setInternalRange(nextRange)
325
+ onRangeChange?.(nextRange)
326
+ }
327
+
328
+ const jumpToToday = () => {
329
+ const today = new Date()
330
+ const todayDateKey = toDateKey(today)
331
+ setMonth(today)
332
+ setFocusedDateKey(todayDateKey)
333
+ if (!isDateDisabled(todayDateKey)) {
334
+ handleDateSelect(todayDateKey)
335
+ }
336
+ }
225
337
 
226
338
  const handleDateKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, date: Date) => {
227
339
  const visibleMonthEntry = monthDaysByMonth.find((entry) => isSameMonth(date, entry.month))
@@ -301,8 +413,8 @@ function Calendar({
301
413
  </Button>
302
414
  </div>
303
415
 
304
- <div
305
- className={cn("grid gap-3", resolvedNumberOfMonths > 1 && "sm:grid-cols-2")}
416
+ <div
417
+ className={cn("grid gap-3", resolvedNumberOfMonths > 1 && "sm:grid-cols-2")}
306
418
  style={
307
419
  resolvedNumberOfMonths > 2
308
420
  ? { gridTemplateColumns: `repeat(${resolvedNumberOfMonths}, minmax(0, 1fr))` }
@@ -328,15 +440,16 @@ function Calendar({
328
440
  <div className="mt-1.5 grid grid-cols-7 gap-1">
329
441
  {days.map((date) => {
330
442
  const dateKey = toDateKey(date)
331
- const outside = !isSameMonth(date, visibleMonth)
332
- const selected = mode === "single" ? value === dateKey : dateKey === range?.from || dateKey === range?.to
333
- const inRange = mode === "range" && isWithinRange(dateKey, range?.from, range?.to)
334
- const disabledReason = getDisabledReason(dateKey)
335
- const disabled = Boolean(disabledReason)
336
- const disabledLabel = disabledReason ? labels?.disabledDate?.(dateKey, disabledReason) : undefined
337
-
338
- return (
339
- <button
443
+ const outside = !isSameMonth(date, visibleMonth)
444
+ const selected = mode === "single" ? currentValue === dateKey : dateKey === currentRange?.from || dateKey === currentRange?.to
445
+ const inRange = mode === "range" && isWithinRange(dateKey, currentRange?.from, currentRange?.to)
446
+ const inPreviewRange = !inRange && mode === "range" && isWithinRange(dateKey, previewRange?.from, previewRange?.to)
447
+ const disabledReason = getDisabledReason(dateKey)
448
+ const disabled = Boolean(disabledReason)
449
+ const disabledLabel = disabledReason ? labels?.disabledDate?.(dateKey, disabledReason) : undefined
450
+
451
+ return (
452
+ <button
340
453
  key={dateKey}
341
454
  ref={(node) => {
342
455
  if (node) buttonRefs.current.set(dateKey, node)
@@ -349,31 +462,53 @@ function Calendar({
349
462
  tabIndex={dateKey === tabbableDateKey ? 0 : -1}
350
463
  title={disabledLabel}
351
464
  data-selected={selected || undefined}
352
- data-today={dateKey === todayKey || undefined}
353
- data-outside={outside || undefined}
354
- data-in-range={inRange || undefined}
355
- data-disabled-reason={disabledReason}
356
- className={cn(
465
+ data-today={dateKey === todayKey || undefined}
466
+ data-outside={outside || undefined}
467
+ data-in-range={inRange || undefined}
468
+ data-in-preview-range={inPreviewRange || undefined}
469
+ data-disabled-reason={disabledReason}
470
+ className={cn(
357
471
  "flex h-9 items-center justify-center rounded-[var(--radius-sm)] border border-transparent text-sm font-medium outline-none transition-[background-color,color,border-color,box-shadow,transform] hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-30",
358
- outside && "text-muted-foreground/34",
359
- dateKey === todayKey && "border-border/70 bg-muted/60 text-foreground",
360
- inRange && "bg-primary/10 text-foreground",
361
- selected && "border-primary bg-primary text-primary-foreground shadow-[0_10px_22px_color-mix(in_oklch,var(--primary),transparent_78%)] hover:bg-primary hover:text-primary-foreground"
362
- )}
363
- onFocus={() => setFocusedDateKey(dateKey)}
364
- onKeyDown={(event) => handleDateKeyDown(event, date)}
365
- onClick={() => handleDateSelect(dateKey)}
366
- >
472
+ outside && showOutsideDays ? "text-muted-foreground/34" : "text-foreground",
473
+ outside && !showOutsideDays && "pointer-events-none opacity-0",
474
+ dateKey === todayKey && "border-border/70 bg-muted/60 text-foreground",
475
+ inRange && "bg-primary/10 text-foreground",
476
+ inPreviewRange && "bg-primary/6 text-foreground",
477
+ selected && "border-primary bg-primary text-primary-foreground shadow-[0_10px_22px_color-mix(in_oklch,var(--primary),transparent_78%)] hover:bg-primary hover:text-primary-foreground"
478
+ )}
479
+ onFocus={() => setFocusedDateKey(dateKey)}
480
+ onMouseEnter={() => setHoveredDateKey(dateKey)}
481
+ onMouseLeave={() => setHoveredDateKey(null)}
482
+ onKeyDown={(event) => handleDateKeyDown(event, date)}
483
+ onClick={() => handleDateSelect(dateKey)}
484
+ >
367
485
  {date.getDate()}
368
486
  </button>
369
487
  )
370
488
  })}
371
489
  </div>
372
490
  </div>
373
- ))}
374
- </div>
375
- </div>
376
- )
377
- }
491
+ ))}
492
+ </div>
493
+ {(showTodayShortcut || showClearShortcut || showSelectionSummary || renderSelectionSummary) ? (
494
+ <div className="mt-3 flex flex-wrap items-center justify-between gap-2 border-t border-[color:var(--aui-card-border,var(--border))] pt-3">
495
+ <div className="text-xs text-muted-foreground">{summaryContent}</div>
496
+ <div className="flex flex-wrap gap-2">
497
+ {showClearShortcut ? (
498
+ <Button type="button" size="sm" variant="ghost" onClick={clearSelection}>
499
+ {labels?.clear ?? "Clear"}
500
+ </Button>
501
+ ) : null}
502
+ {showTodayShortcut ? (
503
+ <Button type="button" size="sm" variant="outline" onClick={jumpToToday}>
504
+ {labels?.today ?? "Today"}
505
+ </Button>
506
+ ) : null}
507
+ </div>
508
+ </div>
509
+ ) : null}
510
+ </div>
511
+ )
512
+ }
378
513
 
379
514
  export { Calendar }
@@ -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 CalendarProps } from "@/components/calendar/calendar"
5
5
  import { Button } from "@/components/ui/button"
@@ -7,9 +7,10 @@ import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover
7
7
  import { cn } from "@/lib/utils"
8
8
  import { parseDateKey } from "./date-utils"
9
9
 
10
- export type DatePickerLabels = CalendarProps["labels"] & {
11
- placeholder?: string
12
- }
10
+ export type DatePickerLabels = CalendarProps["labels"] & {
11
+ placeholder?: string
12
+ selected?: string
13
+ }
13
14
 
14
15
  export type DatePickerProps = Omit<
15
16
  CalendarProps,
@@ -17,10 +18,11 @@ export type DatePickerProps = Omit<
17
18
  > & {
18
19
  placeholder?: string
19
20
  labels?: DatePickerLabels
20
- disabled?: boolean
21
- formatValue?: (value: string) => React.ReactNode
22
- triggerClassName?: string
23
- contentClassName?: string
21
+ disabled?: boolean
22
+ clearable?: boolean
23
+ formatValue?: (value: string) => React.ReactNode
24
+ triggerClassName?: string
25
+ contentClassName?: string
24
26
  }
25
27
 
26
28
  function defaultFormatValue(value: string) {
@@ -33,9 +35,10 @@ function DatePicker({
33
35
  value,
34
36
  onValueChange,
35
37
  placeholder,
36
- labels,
37
- disabled = false,
38
- formatValue = defaultFormatValue,
38
+ labels,
39
+ disabled = false,
40
+ clearable = true,
41
+ formatValue = defaultFormatValue,
39
42
  triggerClassName,
40
43
  contentClassName,
41
44
  className,
@@ -44,10 +47,21 @@ function DatePicker({
44
47
  const [open, setOpen] = React.useState(false)
45
48
  const hasValue = Boolean(value)
46
49
 
47
- const handleSelect = (nextValue: string) => {
48
- onValueChange?.(nextValue)
49
- setOpen(false)
50
- }
50
+ const handleSelect = (nextValue: string) => {
51
+ onValueChange?.(nextValue)
52
+ setOpen(false)
53
+ }
54
+
55
+ const clearValue = () => {
56
+ onValueChange?.("")
57
+ setOpen(false)
58
+ }
59
+
60
+ const handleClear = (event: React.MouseEvent<HTMLElement>) => {
61
+ event.preventDefault()
62
+ event.stopPropagation()
63
+ clearValue()
64
+ }
51
65
 
52
66
  return (
53
67
  <div data-slot="date-picker" className={cn("w-full", className)}>
@@ -58,19 +72,41 @@ function DatePicker({
58
72
  type="button"
59
73
  variant="outline"
60
74
  disabled={disabled}
61
- className={cn(
62
- "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))]",
63
- !hasValue && "text-muted-foreground",
64
- triggerClassName
65
- )}
66
- />
67
- }
68
- >
69
- <CalendarIcon data-icon="inline-start" />
70
- <span className="min-w-0 flex-1 truncate">
71
- {hasValue ? formatValue(String(value)) : placeholder ?? labels?.placeholder ?? "Select date"}
72
- </span>
73
- </PopoverTrigger>
75
+ className={cn(
76
+ "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))]",
77
+ !hasValue && "text-muted-foreground",
78
+ triggerClassName
79
+ )}
80
+ />
81
+ }
82
+ >
83
+ <CalendarIcon data-icon="inline-start" className={cn(hasValue && "text-primary")} />
84
+ <span className="grid min-w-0 flex-1 gap-0.5">
85
+ <span className="text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
86
+ {labels?.selected ?? "Date"}
87
+ </span>
88
+ <span className={cn("truncate text-sm", hasValue && "font-semibold text-foreground")}>
89
+ {hasValue ? formatValue(String(value)) : placeholder ?? labels?.placeholder ?? "Select date"}
90
+ </span>
91
+ </span>
92
+ {clearable && hasValue ? (
93
+ <span
94
+ role="button"
95
+ tabIndex={0}
96
+ aria-label={labels?.clear ?? "Clear date"}
97
+ 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"
98
+ onClick={handleClear}
99
+ onKeyDown={(event) => {
100
+ if (event.key === "Enter" || event.key === " ") {
101
+ event.preventDefault()
102
+ clearValue()
103
+ }
104
+ }}
105
+ >
106
+ <XIcon className="size-3.5" />
107
+ </span>
108
+ ) : null}
109
+ </PopoverTrigger>
74
110
  <PopoverContent
75
111
  align="start"
76
112
  className={cn(
@@ -78,7 +114,15 @@ function DatePicker({
78
114
  contentClassName
79
115
  )}
80
116
  >
81
- <Calendar value={value} onValueChange={handleSelect} labels={labels} {...calendarProps} />
117
+ <Calendar
118
+ value={value}
119
+ onValueChange={handleSelect}
120
+ labels={labels}
121
+ showTodayShortcut
122
+ showClearShortcut={clearable}
123
+ showSelectionSummary
124
+ {...calendarProps}
125
+ />
82
126
  </PopoverContent>
83
127
  </Popover>
84
128
  </div>