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
@@ -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>