themelia-react-ui 2.0.0 → 2.0.1

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 (625) hide show
  1. package/CHANGELOG.md +351 -0
  2. package/README.md +26 -13
  3. package/dist/{accordion-CQXVcd7Q.js → accordion-B6a3vVgA.js} +84 -82
  4. package/dist/accordion-B6a3vVgA.js.map +1 -0
  5. package/dist/action-menu-TzCoSlwL.js +280 -0
  6. package/dist/action-menu-TzCoSlwL.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-CCIXb2A1.js → affordance-geometry.generated-B5iu-Mkr.js} +3 -2
  8. package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
  9. package/dist/{ai-artifact-2PQ2fItc.js → ai-artifact-BMJdv-6q.js} +379 -376
  10. package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
  11. package/dist/{app-shell-BE_j8-AT.js → app-shell-ZK5RWdo6.js} +4 -4
  12. package/dist/{app-shell-BE_j8-AT.js.map → app-shell-ZK5RWdo6.js.map} +1 -1
  13. package/dist/attachment-BtfhGm8i.js +245 -0
  14. package/dist/attachment-BtfhGm8i.js.map +1 -0
  15. package/dist/{auth-M3vGMgDR.js → auth-CYxKfo69.js} +237 -235
  16. package/dist/auth-CYxKfo69.js.map +1 -0
  17. package/dist/{avatar-djdaaQ_s.js → avatar-BBnEJIx8.js} +66 -65
  18. package/dist/avatar-BBnEJIx8.js.map +1 -0
  19. package/dist/badge-MrKVNzW9.js +93 -0
  20. package/dist/badge-MrKVNzW9.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/batch-action-bar.js +3 -0
  27. package/dist/base/buttons.js +2 -3
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +13 -13
  30. package/dist/base/carousel.js.map +1 -1
  31. package/dist/base/cascader.js +103 -115
  32. package/dist/base/cascader.js.map +1 -1
  33. package/dist/base/chart.js +1 -1
  34. package/dist/base/choice-inputs.js +3 -3
  35. package/dist/base/code-block.js +1 -1
  36. package/dist/base/combobox.js +1 -1
  37. package/dist/base/command.js +1 -1
  38. package/dist/base/copyable.js +1 -1
  39. package/dist/base/date-pickers.js +2 -2
  40. package/dist/base/display.js +7 -7
  41. package/dist/base/feedback.js +3 -3
  42. package/dist/base/forms-numeric.js +1 -1
  43. package/dist/base/forms.js +2 -2
  44. package/dist/base/inline-edit.js +17 -17
  45. package/dist/base/inline-edit.js.map +1 -1
  46. package/dist/base/item.js +1 -1
  47. package/dist/base/media-gallery.js +1 -1
  48. package/dist/base/metadata-list.js +3 -0
  49. package/dist/base/navigation.js +7 -7
  50. package/dist/base/popover-menu.js +1 -1
  51. package/dist/base/popover.js +1 -1
  52. package/dist/base/qr-code.js +1 -1
  53. package/dist/base/repeaters.js +171 -170
  54. package/dist/base/repeaters.js.map +1 -1
  55. package/dist/base/sheet.js +1 -1
  56. package/dist/base/sidebar.js +1 -1
  57. package/dist/base/signature-pad.js +147 -137
  58. package/dist/base/signature-pad.js.map +1 -1
  59. package/dist/base/skeleton.js +1 -1
  60. package/dist/base/spinner.js +1 -1
  61. package/dist/base/structure.js +1 -1
  62. package/dist/base/table.js +1 -1
  63. package/dist/base/text-inputs.js +2 -2
  64. package/dist/base/toaster.js +2 -2
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +2 -2
  69. package/dist/batch-action-bar-BZGDG-Si.js +104 -0
  70. package/dist/batch-action-bar-BZGDG-Si.js.map +1 -0
  71. package/dist/blocks/admin.js +173 -171
  72. package/dist/blocks/admin.js.map +1 -1
  73. package/dist/blocks/ai.js +266 -263
  74. package/dist/blocks/ai.js.map +1 -1
  75. package/dist/blocks/analytics/usage-card.js +1 -1
  76. package/dist/blocks/analytics.js +440 -438
  77. package/dist/blocks/analytics.js.map +1 -1
  78. package/dist/blocks/collaboration.js +1 -1
  79. package/dist/blocks/commerce/receipt.js +1 -1
  80. package/dist/blocks/commerce.js +1945 -1266
  81. package/dist/blocks/commerce.js.map +1 -1
  82. package/dist/blocks/data-display.js +3 -2
  83. package/dist/blocks/onboarding.js +50 -49
  84. package/dist/blocks/onboarding.js.map +1 -1
  85. package/dist/blocks/planning.js +25 -25
  86. package/dist/blocks/planning.js.map +1 -1
  87. package/dist/blocks/timelines.js +1 -1
  88. package/dist/breadcrumbs-D5t7I023.js +129 -0
  89. package/dist/breadcrumbs-D5t7I023.js.map +1 -0
  90. package/dist/{button-R9CCoH7A.js → button-QYwiyhD2.js} +15 -14
  91. package/dist/button-QYwiyhD2.js.map +1 -0
  92. package/dist/{button-BS3KDg00.js → buttons-SbIcm1HJ.js} +200 -213
  93. package/dist/buttons-SbIcm1HJ.js.map +1 -0
  94. package/dist/{cards-QoJ4syG9.js → cards-CiiHpKYd.js} +8 -8
  95. package/dist/cards-CiiHpKYd.js.map +1 -0
  96. package/dist/{chart-DwYRKKc-.js → chart-QfrARkXl.js} +5 -5
  97. package/dist/{chart-DwYRKKc-.js.map → chart-QfrARkXl.js.map} +1 -1
  98. package/dist/checkbox-DhB6K0bK.js +36 -0
  99. package/dist/checkbox-DhB6K0bK.js.map +1 -0
  100. package/dist/choice-inputs-t6w3ATNz.js +766 -0
  101. package/dist/choice-inputs-t6w3ATNz.js.map +1 -0
  102. package/dist/code-block-Dgbu-CU3.js +185 -0
  103. package/dist/code-block-Dgbu-CU3.js.map +1 -0
  104. package/dist/{collapsible-oMUGM4tr.js → collapsible-D8AEGU1-.js} +4 -4
  105. package/dist/{collapsible-oMUGM4tr.js.map → collapsible-D8AEGU1-.js.map} +1 -1
  106. package/dist/{collection-content-Ys-OZOkY.js → collection-content-uK16Grv0.js} +3 -3
  107. package/dist/{collection-content-Ys-OZOkY.js.map → collection-content-uK16Grv0.js.map} +1 -1
  108. package/dist/{combobox-6dvVny2q.js → combobox-2Ic8N9bL.js} +74 -68
  109. package/dist/combobox-2Ic8N9bL.js.map +1 -0
  110. package/dist/{combobox-CB7039j7.js → combobox-DLl0bfiq.js} +307 -305
  111. package/dist/combobox-DLl0bfiq.js.map +1 -0
  112. package/dist/{command-kPMPjIxJ.js → command-kNR20o7x.js} +7 -7
  113. package/dist/{command-kPMPjIxJ.js.map → command-kNR20o7x.js.map} +1 -1
  114. package/dist/{comments-You0Bzbr.js → comments-BpDuCUUu.js} +341 -339
  115. package/dist/comments-BpDuCUUu.js.map +1 -0
  116. package/dist/components/base/action-menu/action-menu.d.ts +21 -4
  117. package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
  118. package/dist/components/base/action-menu/index.d.ts +1 -0
  119. package/dist/components/base/badge/badge.recipes.d.ts +4 -4
  120. package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
  121. package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
  122. package/dist/components/base/batch-action-bar/index.d.ts +8 -0
  123. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  124. package/dist/components/base/buttons/button.recipes.d.ts +2 -2
  125. package/dist/components/base/choice-inputs/checkbox.d.ts +2 -2
  126. package/dist/components/base/choice-inputs/choice-types.d.ts +18 -6
  127. package/dist/components/base/display/alert-dialog.d.ts +6 -5
  128. package/dist/components/base/display/dialog.d.ts +4 -8
  129. package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
  130. package/dist/components/base/forms/form-sizing.d.ts +15 -12
  131. package/dist/components/base/metadata-list/index.d.ts +12 -0
  132. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
  133. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
  134. package/dist/components/base/navigation/index.d.ts +1 -1
  135. package/dist/components/base/navigation/page-header/index.d.ts +1 -0
  136. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
  137. package/dist/components/base/navigation/page-header/page-header.d.ts +26 -3
  138. package/dist/components/base/sheet/sheet.d.ts +4 -8
  139. package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
  140. package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
  141. package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
  142. package/dist/components/base/upload/upload.recipes.d.ts +25 -3
  143. package/dist/components/base/value-inputs/index.d.ts +5 -5
  144. package/dist/components/base/value-inputs/tags-input.d.ts +36 -12
  145. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  146. package/dist/components/blocks/commerce/address-card/types.d.ts +2 -1
  147. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
  148. package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
  149. package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
  150. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
  151. package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
  152. package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
  153. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
  154. package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
  155. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
  156. package/dist/components/blocks/commerce/index.d.ts +13 -5
  157. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  158. package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
  159. package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
  160. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
  161. package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
  162. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
  163. package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
  164. package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
  165. package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
  166. package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
  167. package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
  168. package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
  169. package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
  170. package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
  171. package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
  172. package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
  173. package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
  174. package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
  175. package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
  176. package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
  177. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
  178. package/dist/components/blocks/commerce/payment-method/types.d.ts +12 -1
  179. package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
  180. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
  181. package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
  182. package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
  183. package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
  184. package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
  185. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  186. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
  187. package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
  188. package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
  189. package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
  190. package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
  191. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  192. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
  193. package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
  194. package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
  195. package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
  196. package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
  197. package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
  198. package/dist/components/features/kanban/kanban.d.ts +1 -1
  199. package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
  200. package/dist/components/features/kanban/kanban.types.d.ts +2 -2
  201. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  202. package/dist/components/features/media-library/index.d.ts +1 -1
  203. package/dist/components/features/media-library/media-library.d.ts +1 -1
  204. package/dist/components/features/media-library/media-library.strings.d.ts +4 -0
  205. package/dist/components/features/media-library/media-library.types.d.ts +74 -1
  206. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  207. package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
  208. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  209. package/dist/components/features/overlays/dialog.d.ts +1 -1
  210. package/dist/components/features/overlays/index.d.ts +1 -1
  211. package/dist/components/features/overlays/overlay-tone-icon.d.ts +3 -3
  212. package/dist/components/features/overlays/overlays.types.d.ts +20 -0
  213. package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
  214. package/dist/components/features/products/components/product-details-card.d.ts +5 -0
  215. package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
  216. package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
  217. package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
  218. package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
  219. package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
  220. package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
  221. package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
  222. package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
  223. package/dist/components/features/products/products.types.d.ts +9 -2
  224. package/dist/components/features/resource/index.d.ts +1 -1
  225. package/dist/components/features/resource/resource.d.ts +1 -1
  226. package/dist/components/features/resource/resource.types.d.ts +34 -6
  227. package/dist/components/features/rich-text-editor/index.d.ts +2 -1
  228. package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
  229. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
  230. package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
  231. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  232. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
  233. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +45 -0
  234. package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
  235. package/dist/components/features/sync/index.d.ts +26 -3
  236. package/dist/components/features/table/data-table.d.ts +1 -1
  237. package/dist/components/features/table/table.types.d.ts +32 -7
  238. package/dist/components/layout/page/index.d.ts +1 -1
  239. package/dist/components/layout/page/page.types.d.ts +33 -36
  240. package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
  241. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  242. package/dist/components/layout/settings/settings.d.ts +16 -2
  243. package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
  244. package/dist/components/typography/rich-text/index.d.ts +1 -1
  245. package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
  246. package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
  247. package/dist/components/typography/text-link.d.ts +4 -3
  248. package/dist/components/ui/checkbox.d.ts +4 -3
  249. package/dist/components/ui/overlay.recipes.d.ts +0 -9
  250. package/dist/components/ui/switch.d.ts +2 -2
  251. package/dist/{containers-D_L4mTVb.js → containers-DmWiJa2I.js} +36 -35
  252. package/dist/containers-DmWiJa2I.js.map +1 -0
  253. package/dist/{copyable-DDjTeW_j.js → copyable-B3Gwgdqc.js} +6 -6
  254. package/dist/{copyable-DDjTeW_j.js.map → copyable-B3Gwgdqc.js.map} +1 -1
  255. package/dist/data-display-DafIvCl5.js +960 -0
  256. package/dist/data-display-DafIvCl5.js.map +1 -0
  257. package/dist/{date-uf3z37Nm.js → date-BgK3bTdo.js} +5 -5
  258. package/dist/{date-uf3z37Nm.js.map → date-BgK3bTdo.js.map} +1 -1
  259. package/dist/date-picker-CF-DtUpF.js +1529 -0
  260. package/dist/date-picker-CF-DtUpF.js.map +1 -0
  261. package/dist/{date-pickers-CnFCb0n2.js → date-pickers-BmzxJl5l.js} +19 -19
  262. package/dist/{date-pickers-CnFCb0n2.js.map → date-pickers-BmzxJl5l.js.map} +1 -1
  263. package/dist/{display-DrdvPwF0.js → display-DsQTVzMz.js} +88 -87
  264. package/dist/display-DsQTVzMz.js.map +1 -0
  265. package/dist/{dropdown-menu-CURh59jb.js → dropdown-menu-E2qmdC7o.js} +7 -7
  266. package/dist/{dropdown-menu-CURh59jb.js.map → dropdown-menu-E2qmdC7o.js.map} +1 -1
  267. package/dist/features/activities.js +414 -501
  268. package/dist/features/activities.js.map +1 -1
  269. package/dist/features/ai-chat.js +170 -169
  270. package/dist/features/ai-chat.js.map +1 -1
  271. package/dist/features/async-preview.js +8 -8
  272. package/dist/features/async-preview.js.map +1 -1
  273. package/dist/features/combobox.js +1 -1
  274. package/dist/features/comments.js +1 -1
  275. package/dist/features/data-view.js +139 -138
  276. package/dist/features/data-view.js.map +1 -1
  277. package/dist/features/email-composer/engine.js +1 -1
  278. package/dist/features/email-composer.js +73 -71
  279. package/dist/features/email-composer.js.map +1 -1
  280. package/dist/features/event-calendar.js +278 -275
  281. package/dist/features/event-calendar.js.map +1 -1
  282. package/dist/features/filters.js +1 -1
  283. package/dist/features/global-search.js +307 -310
  284. package/dist/features/global-search.js.map +1 -1
  285. package/dist/features/kanban.js +95 -97
  286. package/dist/features/kanban.js.map +1 -1
  287. package/dist/features/map.js +56 -57
  288. package/dist/features/map.js.map +1 -1
  289. package/dist/features/media-library.js +918 -825
  290. package/dist/features/media-library.js.map +1 -1
  291. package/dist/features/mentions.js +1 -1
  292. package/dist/features/overlays.js +1 -1
  293. package/dist/features/products.js +1115 -1122
  294. package/dist/features/products.js.map +1 -1
  295. package/dist/features/questionnaire.js +202 -194
  296. package/dist/features/questionnaire.js.map +1 -1
  297. package/dist/features/resource-assignment.js +25 -25
  298. package/dist/features/resource-assignment.js.map +1 -1
  299. package/dist/features/resource.js +77 -69
  300. package/dist/features/resource.js.map +1 -1
  301. package/dist/features/rich-text-editor.js +30 -11
  302. package/dist/features/rich-text-editor.js.map +1 -1
  303. package/dist/features/schema-form.js +33 -33
  304. package/dist/features/schema-form.js.map +1 -1
  305. package/dist/features/suggestions.js +3 -3
  306. package/dist/features/sync.js +3 -3
  307. package/dist/features/table.js +1 -1
  308. package/dist/features/theme-tweaker.js +397 -396
  309. package/dist/features/theme-tweaker.js.map +1 -1
  310. package/dist/{feedback-C7nR0UtT.js → feedback-qNuMBtRH.js} +84 -83
  311. package/dist/feedback-qNuMBtRH.js.map +1 -0
  312. package/dist/{field-affordance-recipes-CkOCdE2y.js → field-affordance-recipes-qQeIf4lG.js} +8 -6
  313. package/dist/field-affordance-recipes-qQeIf4lG.js.map +1 -0
  314. package/dist/field-state-recipes-BVA2CWHo.js +12 -0
  315. package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
  316. package/dist/{filters-Da-gNPsE.js → filters-BkHH53uv.js} +565 -563
  317. package/dist/filters-BkHH53uv.js.map +1 -0
  318. package/dist/focus-recipes-B653VaLq.js +12 -0
  319. package/dist/focus-recipes-B653VaLq.js.map +1 -0
  320. package/dist/{form-field-VZRULhUK.js → form-field-DUt4UxSV.js} +4 -4
  321. package/dist/{form-field-VZRULhUK.js.map → form-field-DUt4UxSV.js.map} +1 -1
  322. package/dist/{form-sizing-uWP4lzVh.js → form-sizing-By94KzXE.js} +19 -15
  323. package/dist/form-sizing-By94KzXE.js.map +1 -0
  324. package/dist/{forms-DDeEnXSY.js → forms-Bzha-Y3B.js} +22 -22
  325. package/dist/{forms-DDeEnXSY.js.map → forms-Bzha-Y3B.js.map} +1 -1
  326. package/dist/{forms-numeric-D3CO60IF.js → forms-numeric-C0bvjRPZ.js} +265 -264
  327. package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
  328. package/dist/{header-2ycNqGOR.js → header-BOefOKd1.js} +47 -51
  329. package/dist/header-BOefOKd1.js.map +1 -0
  330. package/dist/{hooks-DQ5SPwZw.js → hooks-9k_TtmKh.js} +2 -2
  331. package/dist/{hooks-DQ5SPwZw.js.map → hooks-9k_TtmKh.js.map} +1 -1
  332. package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
  333. package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
  334. package/dist/icon-badge-CAuKupo9.js +55 -0
  335. package/dist/icon-badge-CAuKupo9.js.map +1 -0
  336. package/dist/index.js +7 -7
  337. package/dist/input-DWhBBBww.js +262 -0
  338. package/dist/input-DWhBBBww.js.map +1 -0
  339. package/dist/{input-BoLm9Hks.js → input-Ddi_LSYv.js} +3 -3
  340. package/dist/{input-BoLm9Hks.js.map → input-Ddi_LSYv.js.map} +1 -1
  341. package/dist/interaction-recipes-CHr0dJUs.js +24 -0
  342. package/dist/interaction-recipes-CHr0dJUs.js.map +1 -0
  343. package/dist/{item-xzh8Df65.js → item-DEmDiTlD.js} +98 -97
  344. package/dist/item-DEmDiTlD.js.map +1 -0
  345. package/dist/layer-recipes-CCpklYME.js +13 -0
  346. package/dist/layer-recipes-CCpklYME.js.map +1 -0
  347. package/dist/layout/app-shell.js +1 -1
  348. package/dist/layout/auth.js +1 -1
  349. package/dist/layout/containers.js +1 -1
  350. package/dist/layout/header.js +1 -1
  351. package/dist/layout/hooks.js +1 -1
  352. package/dist/layout/navigation.js +1 -1
  353. package/dist/layout/page.js +1 -1
  354. package/dist/layout/settings.js +1 -1
  355. package/dist/layout/sidebar.js +2 -2
  356. package/dist/layout/workspace.js +1 -1
  357. package/dist/layout.js +10 -10
  358. package/dist/lib/affordance-geometry.generated.d.ts +1 -0
  359. package/dist/lib/field-affordance-recipes.d.ts +6 -1
  360. package/dist/lib/field-state-recipes.d.ts +9 -8
  361. package/dist/lib/focus-recipes.d.ts +24 -0
  362. package/dist/lib/interaction-recipes.d.ts +35 -0
  363. package/dist/lib/layer-recipes.d.ts +19 -0
  364. package/dist/lib/motion-recipes.d.ts +1 -0
  365. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -0
  366. package/dist/lib/safe-image-src.d.ts +10 -0
  367. package/dist/lib/sanitize-html.d.ts +15 -3
  368. package/dist/lib/surface-recipes.d.ts +47 -7
  369. package/dist/lib/token-merge.generated.d.ts +9 -6
  370. package/dist/lib/tone-recipes.d.ts +79 -0
  371. package/dist/lib/ui-provider/hooks.d.ts +2 -1
  372. package/dist/lib/ui-provider/index.d.ts +2 -2
  373. package/dist/lib/ui-provider/types.d.ts +9 -0
  374. package/dist/lib/utils.js +1 -1
  375. package/dist/media-gallery-DcTtAaeC.js +203 -0
  376. package/dist/media-gallery-DcTtAaeC.js.map +1 -0
  377. package/dist/mentions-D-uyCh01.js +568 -0
  378. package/dist/mentions-D-uyCh01.js.map +1 -0
  379. package/dist/{message-YfFmbXNP.js → message-CdHgIWKf.js} +5 -5
  380. package/dist/{message-YfFmbXNP.js.map → message-CdHgIWKf.js.map} +1 -1
  381. package/dist/metadata-list-X5rYAKSB.js +394 -0
  382. package/dist/metadata-list-X5rYAKSB.js.map +1 -0
  383. package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
  384. package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
  385. package/dist/navigation-D3KwXmaq.js +145 -0
  386. package/dist/navigation-D3KwXmaq.js.map +1 -0
  387. package/dist/navigation-HJf5zxlH.js +268 -0
  388. package/dist/navigation-HJf5zxlH.js.map +1 -0
  389. package/dist/{navigation-row-recipes-DlU-4QYO.js → navigation-row-recipes-BVowojQw.js} +2 -2
  390. package/dist/{navigation-row-recipes-DlU-4QYO.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
  391. package/dist/{number-CKRBYmZK.js → number-DMhe-Vsk.js} +5 -5
  392. package/dist/{number-CKRBYmZK.js.map → number-DMhe-Vsk.js.map} +1 -1
  393. package/dist/overflow-tab-bar-sQHXLlwQ.js +280 -0
  394. package/dist/overflow-tab-bar-sQHXLlwQ.js.map +1 -0
  395. package/dist/overlay.recipes-8GHqmlb4.js +6 -0
  396. package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
  397. package/dist/overlays-I0axtYA6.js +999 -0
  398. package/dist/overlays-I0axtYA6.js.map +1 -0
  399. package/dist/page-B5dTH9gE.js +224 -0
  400. package/dist/page-B5dTH9gE.js.map +1 -0
  401. package/dist/page-header-commands-DjzFEq3E.js +126 -0
  402. package/dist/page-header-commands-DjzFEq3E.js.map +1 -0
  403. package/dist/{pagination-Cm0jqa3I.js → pagination-3bPA_a6K.js} +15 -15
  404. package/dist/{pagination-Cm0jqa3I.js.map → pagination-3bPA_a6K.js.map} +1 -1
  405. package/dist/{popover-Dcv_9jxr.js → popover-Di55PyAI.js} +8 -8
  406. package/dist/popover-Di55PyAI.js.map +1 -0
  407. package/dist/{popover-menu-DnRFKnHP.js → popover-menu-B71Tn2Qz.js} +6 -6
  408. package/dist/{popover-menu-DnRFKnHP.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
  409. package/dist/{popover.recipes-wmbvL8Ah.js → popover.recipes-Bdyhj2db.js} +2 -2
  410. package/dist/{popover.recipes-wmbvL8Ah.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
  411. package/dist/{primitives-BHrwQXFC.js → primitives-B-CkiEMU.js} +5 -5
  412. package/dist/{primitives-BHrwQXFC.js.map → primitives-B-CkiEMU.js.map} +1 -1
  413. package/dist/primitives.js +4 -4
  414. package/dist/{progress-Br9WTFya.js → progress-rnS8-uAW.js} +9 -9
  415. package/dist/{progress-Br9WTFya.js.map → progress-rnS8-uAW.js.map} +1 -1
  416. package/dist/{receipt-CV89q1fs.js → receipt-D0oswZ0p.js} +6 -6
  417. package/dist/{receipt-CV89q1fs.js.map → receipt-D0oswZ0p.js.map} +1 -1
  418. package/dist/rich-text-DvGulsNJ.js +78 -0
  419. package/dist/rich-text-DvGulsNJ.js.map +1 -0
  420. package/dist/rich-text-editor-sMU_Scqm.js +1204 -0
  421. package/dist/rich-text-editor-sMU_Scqm.js.map +1 -0
  422. package/dist/rich-text-editor.recipes-CadiF_Uu.js +88 -0
  423. package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +1 -0
  424. package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
  425. package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
  426. package/dist/safe-image-src-C6kQSMBZ.js +17 -0
  427. package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
  428. package/dist/sanitize-html-DsQmI48u.js +92 -0
  429. package/dist/sanitize-html-DsQmI48u.js.map +1 -0
  430. package/dist/scroll-area-Bt_vXY2b.js +48 -0
  431. package/dist/scroll-area-Bt_vXY2b.js.map +1 -0
  432. package/dist/{separator-Do5GWDYi.js → separator-C8DlRGwF.js} +3 -3
  433. package/dist/{separator-Do5GWDYi.js.map → separator-C8DlRGwF.js.map} +1 -1
  434. package/dist/{separator-BMEvwnSX.js → separator-CYHnjsAb.js} +2 -2
  435. package/dist/{separator-BMEvwnSX.js.map → separator-CYHnjsAb.js.map} +1 -1
  436. package/dist/services/actions/action-adapters.d.ts +18 -0
  437. package/dist/services/actions/index.d.ts +1 -1
  438. package/dist/services/actions.js +16 -4
  439. package/dist/services/actions.js.map +1 -1
  440. package/dist/settings-CQW3b-Cu.js +170 -0
  441. package/dist/settings-CQW3b-Cu.js.map +1 -0
  442. package/dist/sheet-4SEvVYzA.js +210 -0
  443. package/dist/sheet-4SEvVYzA.js.map +1 -0
  444. package/dist/{sidebar-Crc9M9JV.js → sidebar-C7WWR29L.js} +180 -179
  445. package/dist/sidebar-C7WWR29L.js.map +1 -0
  446. package/dist/{sidebar-Cb8WzOvE.js → sidebar-d7Dg80ln.js} +16 -16
  447. package/dist/sidebar-d7Dg80ln.js.map +1 -0
  448. package/dist/{skeleton-DVMXr15h.js → skeleton-Cz890JZF.js} +9 -9
  449. package/dist/{skeleton-DVMXr15h.js.map → skeleton-Cz890JZF.js.map} +1 -1
  450. package/dist/smart-card-lFKxn5Hu.js +595 -0
  451. package/dist/smart-card-lFKxn5Hu.js.map +1 -0
  452. package/dist/{spinner-CmTAbEp0.js → spinner-fa3h1Aif.js} +7 -7
  453. package/dist/{spinner-CmTAbEp0.js.map → spinner-fa3h1Aif.js.map} +1 -1
  454. package/dist/{structure-hzCW-XsV.js → structure-DC2dygdA.js} +2 -2
  455. package/dist/{structure-hzCW-XsV.js.map → structure-DC2dygdA.js.map} +1 -1
  456. package/dist/style.css +1 -1
  457. package/dist/surface-recipes-BKRVW8Os.js +43 -0
  458. package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
  459. package/dist/{table-D6zKeYQX.js → table-CIKyLUsy.js} +59 -58
  460. package/dist/table-CIKyLUsy.js.map +1 -0
  461. package/dist/table-CrcLN9Io.js +1458 -0
  462. package/dist/table-CrcLN9Io.js.map +1 -0
  463. package/dist/{tabs-Dk8E_knt.js → tabs-DwBJfjxX.js} +58 -57
  464. package/dist/tabs-DwBJfjxX.js.map +1 -0
  465. package/dist/{text-inputs-BFpku0Qd.js → text-inputs-aaK9wcDT.js} +74 -79
  466. package/dist/text-inputs-aaK9wcDT.js.map +1 -0
  467. package/dist/theme.css +3 -3
  468. package/dist/{timelines-CxuAFIc2.js → timelines-C_SBwHNP.js} +153 -150
  469. package/dist/timelines-C_SBwHNP.js.map +1 -0
  470. package/dist/tone-recipes-CPoExcTE.js +70 -0
  471. package/dist/tone-recipes-CPoExcTE.js.map +1 -0
  472. package/dist/tooltip-CsfgrfS7.js +111 -0
  473. package/dist/tooltip-CsfgrfS7.js.map +1 -0
  474. package/dist/{tree-BotPlyiD.js → tree-BiKhg8AY.js} +68 -66
  475. package/dist/tree-BiKhg8AY.js.map +1 -0
  476. package/dist/typography/rich-text.js +1 -1
  477. package/dist/typography-DTRkE9zL.js +117 -0
  478. package/dist/typography-DTRkE9zL.js.map +1 -0
  479. package/dist/typography.js +1 -1
  480. package/dist/{ui-provider-D2_TeLqw.js → ui-provider-1D_NSYzO.js} +11 -3
  481. package/dist/ui-provider-1D_NSYzO.js.map +1 -0
  482. package/dist/ui-provider.js +3 -3
  483. package/dist/{upload-B0WHW7ak.js → upload-BO8-CLN6.js} +209 -209
  484. package/dist/upload-BO8-CLN6.js.map +1 -0
  485. package/dist/{upload-queue-BHZ_wBfd.js → upload-queue-EOC8g1gf.js} +109 -111
  486. package/dist/upload-queue-EOC8g1gf.js.map +1 -0
  487. package/dist/upload.recipes-BbxTqrCT.js +61 -0
  488. package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
  489. package/dist/{usage-card-U0YBLTNT.js → usage-card-obRaBskq.js} +46 -46
  490. package/dist/{usage-card-U0YBLTNT.js.map → usage-card-obRaBskq.js.map} +1 -1
  491. package/dist/{utils-Cospvlj1.js → utils-l5LpDw2z.js} +56 -24
  492. package/dist/utils-l5LpDw2z.js.map +1 -0
  493. package/dist/value-inputs-TAYMX111.js +947 -0
  494. package/dist/value-inputs-TAYMX111.js.map +1 -0
  495. package/dist/{value-typography-Deb3yQZg.js → value-typography-b8wpz1eX.js} +2 -2
  496. package/dist/{value-typography-Deb3yQZg.js.map → value-typography-b8wpz1eX.js.map} +1 -1
  497. package/dist/workspace-DH0v0KcB.js +407 -0
  498. package/dist/workspace-DH0v0KcB.js.map +1 -0
  499. package/docs/consumer-skill/SKILL.md +19 -20
  500. package/docs/consumer-skill/examples/app-layout.tsx +1 -1
  501. package/docs/consumer-skill/examples/composition.tsx +3 -3
  502. package/docs/consumer-skill/examples/detail.tsx +59 -12
  503. package/docs/consumer-skill/examples/edit.tsx +1 -1
  504. package/docs/consumer-skill/examples/receipt.tsx +2 -2
  505. package/docs/consumer-skill/examples/scoped-directory.tsx +1 -1
  506. package/docs/consumer-skill/examples/website.tsx +1 -1
  507. package/docs/consumer-skill/references/agents-md.md +33 -0
  508. package/docs/consumer-skill/references/analytics.md +1 -1
  509. package/docs/consumer-skill/references/composition.md +51 -8
  510. package/docs/consumer-skill/references/design-contract.md +12 -3
  511. package/docs/consumer-skill/references/installation.md +11 -1
  512. package/docs/consumer-skill/references/public-api.json +847 -447
  513. package/docs/consumer-skill/references/review.md +25 -5
  514. package/docs/consumer-skill/references/theming.md +8 -4
  515. package/docs/consumer-skill/references/tokens.json +1 -1
  516. package/docs/consumer-skill/references/workflows.md +29 -10
  517. package/docs/consumer-skill/scripts/composition-policy.mjs +41 -11
  518. package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
  519. package/package.json +10 -2
  520. package/dist/accordion-CQXVcd7Q.js.map +0 -1
  521. package/dist/action-menu-BTpyPWJ2.js +0 -264
  522. package/dist/action-menu-BTpyPWJ2.js.map +0 -1
  523. package/dist/affordance-geometry.generated-CCIXb2A1.js.map +0 -1
  524. package/dist/ai-artifact-2PQ2fItc.js.map +0 -1
  525. package/dist/attachment-q69dlt5Y.js +0 -244
  526. package/dist/attachment-q69dlt5Y.js.map +0 -1
  527. package/dist/auth-M3vGMgDR.js.map +0 -1
  528. package/dist/avatar-djdaaQ_s.js.map +0 -1
  529. package/dist/badge-0tATj-tW.js +0 -92
  530. package/dist/badge-0tATj-tW.js.map +0 -1
  531. package/dist/breadcrumbs-BG_FfMK4.js +0 -128
  532. package/dist/breadcrumbs-BG_FfMK4.js.map +0 -1
  533. package/dist/button-BS3KDg00.js.map +0 -1
  534. package/dist/button-R9CCoH7A.js.map +0 -1
  535. package/dist/buttons-DS0ZIwJ_.js +0 -99
  536. package/dist/buttons-DS0ZIwJ_.js.map +0 -1
  537. package/dist/cards-QoJ4syG9.js.map +0 -1
  538. package/dist/checkbox-B7ygNTYp.js +0 -35
  539. package/dist/checkbox-B7ygNTYp.js.map +0 -1
  540. package/dist/choice-inputs-DrJ17tpL.js +0 -752
  541. package/dist/choice-inputs-DrJ17tpL.js.map +0 -1
  542. package/dist/code-block-CD0B7M93.js +0 -183
  543. package/dist/code-block-CD0B7M93.js.map +0 -1
  544. package/dist/combobox-6dvVny2q.js.map +0 -1
  545. package/dist/combobox-CB7039j7.js.map +0 -1
  546. package/dist/comments-You0Bzbr.js.map +0 -1
  547. package/dist/components/layout/page/partials/page-header-commands.d.ts +0 -13
  548. package/dist/containers-D_L4mTVb.js.map +0 -1
  549. package/dist/data-display-3xWQUnMA.js +0 -1335
  550. package/dist/data-display-3xWQUnMA.js.map +0 -1
  551. package/dist/date-picker-DrDFj8Lo.js +0 -1527
  552. package/dist/date-picker-DrDFj8Lo.js.map +0 -1
  553. package/dist/display-DrdvPwF0.js.map +0 -1
  554. package/dist/feedback-C7nR0UtT.js.map +0 -1
  555. package/dist/field-affordance-recipes-CkOCdE2y.js.map +0 -1
  556. package/dist/field-state-recipes-C-MFBX_8.js +0 -11
  557. package/dist/field-state-recipes-C-MFBX_8.js.map +0 -1
  558. package/dist/filters-Da-gNPsE.js.map +0 -1
  559. package/dist/form-sizing-uWP4lzVh.js.map +0 -1
  560. package/dist/forms-numeric-D3CO60IF.js.map +0 -1
  561. package/dist/header-2ycNqGOR.js.map +0 -1
  562. package/dist/icon-badge-DKlaKXoo.js +0 -53
  563. package/dist/icon-badge-DKlaKXoo.js.map +0 -1
  564. package/dist/input-DhQdBnV3.js +0 -255
  565. package/dist/input-DhQdBnV3.js.map +0 -1
  566. package/dist/item-xzh8Df65.js.map +0 -1
  567. package/dist/media-gallery-DQUQ0m3O.js +0 -201
  568. package/dist/media-gallery-DQUQ0m3O.js.map +0 -1
  569. package/dist/mentions-DwnO1hh4.js +0 -564
  570. package/dist/mentions-DwnO1hh4.js.map +0 -1
  571. package/dist/navigation-Cbp5V8gG.js +0 -264
  572. package/dist/navigation-Cbp5V8gG.js.map +0 -1
  573. package/dist/navigation-Cs1npsPm.js +0 -300
  574. package/dist/navigation-Cs1npsPm.js.map +0 -1
  575. package/dist/overlay.recipes-CNO2S9V6.js +0 -34
  576. package/dist/overlay.recipes-CNO2S9V6.js.map +0 -1
  577. package/dist/overlays-DhZO7N-I.js +0 -994
  578. package/dist/overlays-DhZO7N-I.js.map +0 -1
  579. package/dist/page-C6R_8jFt.js +0 -325
  580. package/dist/page-C6R_8jFt.js.map +0 -1
  581. package/dist/page-header-hUTzcRZX.js +0 -112
  582. package/dist/page-header-hUTzcRZX.js.map +0 -1
  583. package/dist/popover-Dcv_9jxr.js.map +0 -1
  584. package/dist/rich-text-editor-CF8QYt5p.js +0 -574
  585. package/dist/rich-text-editor-CF8QYt5p.js.map +0 -1
  586. package/dist/rich-text-editor.recipes-CnrbmTS1.js +0 -81
  587. package/dist/rich-text-editor.recipes-CnrbmTS1.js.map +0 -1
  588. package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
  589. package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
  590. package/dist/rich-text-j-FGAeZW.js +0 -32
  591. package/dist/rich-text-j-FGAeZW.js.map +0 -1
  592. package/dist/sanitize-html-BG9FGe-j.js +0 -64
  593. package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
  594. package/dist/scroll-area-DRdr16Pt.js +0 -47
  595. package/dist/scroll-area-DRdr16Pt.js.map +0 -1
  596. package/dist/settings-DHk0L2MF.js +0 -161
  597. package/dist/settings-DHk0L2MF.js.map +0 -1
  598. package/dist/sheet-DRFNY1_D.js +0 -207
  599. package/dist/sheet-DRFNY1_D.js.map +0 -1
  600. package/dist/sidebar-Cb8WzOvE.js.map +0 -1
  601. package/dist/sidebar-Crc9M9JV.js.map +0 -1
  602. package/dist/smart-card-Bek-TwUp.js +0 -599
  603. package/dist/smart-card-Bek-TwUp.js.map +0 -1
  604. package/dist/surface-recipes-DOdoBXGm.js +0 -28
  605. package/dist/surface-recipes-DOdoBXGm.js.map +0 -1
  606. package/dist/table-D6zKeYQX.js.map +0 -1
  607. package/dist/table-Dn4XSrSB.js +0 -1444
  608. package/dist/table-Dn4XSrSB.js.map +0 -1
  609. package/dist/tabs-Dk8E_knt.js.map +0 -1
  610. package/dist/text-inputs-BFpku0Qd.js.map +0 -1
  611. package/dist/timelines-CxuAFIc2.js.map +0 -1
  612. package/dist/tree-BotPlyiD.js.map +0 -1
  613. package/dist/typography-CAr3dQhX.js +0 -116
  614. package/dist/typography-CAr3dQhX.js.map +0 -1
  615. package/dist/ui-provider-D2_TeLqw.js.map +0 -1
  616. package/dist/upload-B0WHW7ak.js.map +0 -1
  617. package/dist/upload-queue-BHZ_wBfd.js.map +0 -1
  618. package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
  619. package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
  620. package/dist/utils-Cospvlj1.js.map +0 -1
  621. package/dist/value-inputs-CjfzGMsN.js +0 -854
  622. package/dist/value-inputs-CjfzGMsN.js.map +0 -1
  623. package/dist/workspace-YoFjXi6i.js +0 -394
  624. package/dist/workspace-YoFjXi6i.js.map +0 -1
  625. /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-picker-DrDFj8Lo.js","names":["Calendar","React","Button","React","_Fragment","React","ToggleGroup","ToggleGroupPrimitive","TogglePrimitive","React","ToggleGroup","React","CalendarIcon","Calendar","_Fragment","React","CalendarIcon","Calendar","_Fragment","React","CalendarIcon","Calendar","_Fragment","React","useDatesConfig","useDensityConfig","cn","Heading","Text","Button","buttonVariants","Button$1","Grid","Stack","formatDateRange","Separator","selectToggleRecipes","formFieldTriggerClasses","resolveFormControlSize","formControlIconClasses","formControlSizeClasses","Input","PopoverTrigger","Popover","PopoverContent","FormField","useIsMobile","React$1","Fragment$1","padTimeSegment","value","clamp","min","max","alignSecondsToStep","step","totalSeconds","lastOfDay","aligned","parseTimeString","timeString","parts","hRaw","mRaw","sRaw","hours","minutes","seconds","normalizedTimeToString","secondsPart","includeSeconds","time","createDefaultNormalizedTime","source","date","alignedSeconds","alignedHours","alignedMinutes","alignedSecondsRemainder","normalizedTimeToDisplaySegments","format","period","displayHour","displaySegmentsToNormalizedTime","parseSegment","numeric","segments","isPM","alignNormalizedTimeToStep","formatNormalizedTimeForDisplay","periodLabel","labels","QUOTED_TEXT_REGEX","TIME_TOKEN_REGEX","readableFormatIncludesTime","sanitized","getDayPickerYearBounds","yearSelection","createDateOutput","options","locale","dateFormat","readableFormat","createMultipleDatesOutput","dates","d","createDateRangeOutput","range","applyTimeToDate","normalized","newDate","calculateDaysDifference","to","from","validateDateRange","daysDiff","getRangeValidationMessage","translations","getMultipleDatesValidationMessage","required","formatDateButtonText","text","placeholder","defaultPlaceholder","formatMultipleDatesButtonText","formatRangeButtonText","resolvePickerButtonProps","tone","buttonStyle","isSingleMode","props","isMultipleMode","isRangeMode","getDefaultPresets","t","startOfWeek","endOfWeek","startOfMonth","endOfMonth","addDays","Calendar$1","defaultClassNames","getDefaultClassNames","DayPicker","className","formatters","buttonVariant","captionLayout","classNames","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","components","ref","modifiers","day","DatePickerField","hasError","error","showHint","hint","label","Label","triggerId","children","describedById","DatePickerFooter","config","visibleActions","actions","action","customText","output","displayText","showSummary","autoSummary","showOnlyWhenSelected","hasSelection","isDisabled","DatePickerHeader","Icon","align","title","description","usePickerTriggerSize","sizeProp","defaultScale","iconOnlyWidth","pickerTriggerClasses","size","iconOnly","defaultDatePickerStrings","days","count","toggleVariants","cva","ToggleGroupContext","ToggleGroup$1","ToggleGroup","variant","spacing","ToggleGroupItem","context","Toggle","defaultTimePickerStrings","SEGMENT_ORDER","DEFAULT_24H","DEFAULT_12H","BLANK","periodItemClasses","segmentWidthClasses","sanitizeNumeric","ensureTwoDigits","getNextKey","activeOrder","idx","key","getPreviousKey","hoursToDisplay","determinePeriodFromHours","segmentsWithDefaults","blankSegments","fillBlanks","fallbackHours","segmentsFromValue","parsed","TimePicker","stringsProp","useStrings","precision","open","setOpen","setSegments","segmentsRef","isLocalEditRef","digitEntryRef","updateSegments","next","inputRefs","toTimeString","emitAligned","segs","onValueChange","commitSegments","focusSegment","applyDigitInput","current","inProgress","typed","segmentKey","digit","candidate","nextPeriod","updated","handleNumericChange","rawValue","v","handlePeriodChange","handleBlur","handleFocus","event","handleKeyDown","target","periodToggleValue","segmentLabels","editor","mode","node","id","index","values","isBlank","triggerText","invalid","Clock","SingleDatePicker","baseProps","generatedTriggerId","describedBy","isInvalid","ariaDescribedBy","timeFormat","withTime","timeStep","readableHasTime","showTimeInButton","setDate","defaultValue","setTime","initial","previousValueRef","defaultInitializedRef","lastValueDefinedRef","createOutput","finalDate","selectedDate","effectiveTime","overrideTime","applied","dateFnsLocale","isTimeEnabled","wasValueDefined","isValueDefined","applyState","baseDate","emitChange","prevTime","valueTime","handleSelect","seededTime","closeOnSelect","handleTimeChange","nextTime","timeDisplay","buttonText","footerSummary","resolved","triggerProps","Calendar","disabledDates","yearBounds","calendarProps","MultipleDatePicker","setDates","selectedDates","newDates","validationMessage","RangeDatePicker","presetsProp","isMobile","resolvedNumberOfMonths","presets","weekStartsOn","showTimeInSummary","initialRange","setRange","startTime","setStartTime","endTime","setEndTime","hasValidationMessage","validationText","prev","nextFrom","nextTo","alignOrKeep","finalRange","currentRange","handleStartTimeChange","handleEndTimeChange","resolveNextRange","triggerDate","dayPickerRange","nextRange","withConfirm","isComplete","isValid","handlePresetSelect","preset","handleConfirm","startTimeDisplay","endTimeDisplay","fromBase","fromText","toBase","showTime","showConfirm","DatePicker","enUS","componentClassName"],"sources":["../src/components/base/date-pickers/date-picker-helpers.ts","../src/components/base/date-pickers/date-picker-internals.ts","../src/components/ui/calendar.tsx","../src/components/base/date-pickers/date-picker-field.tsx","../src/components/base/date-pickers/date-picker-footer.tsx","../src/components/base/date-pickers/date-picker-header.tsx","../src/components/base/date-pickers/date-picker.recipes.ts","../src/components/base/date-pickers/date-pickers.strings.ts","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/base/date-pickers/time-picker.tsx","../src/components/base/date-pickers/date-picker-single.tsx","../src/components/base/date-pickers/date-picker-multiple.tsx","../src/components/base/date-pickers/date-picker-range.tsx","../src/components/base/date-pickers/date-picker.tsx"],"sourcesContent":["import { format } from 'date-fns';\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport type { DateRange } from 'react-day-picker';\nimport { formatDateRange } from '../../primitives/date';\nimport type {\n\tDateOutput,\n\tMultipleDatesOutput,\n\tDateRangeOutput,\n\tDatePickerStrings,\n\tYearSelectionConfig\n} from './datepicker.types';\n\nexport type TimePeriod = 'AM' | 'PM';\n\nexport interface NormalizedTime {\n\thours: number;\n\tminutes: number;\n\tseconds: number;\n}\n\nexport interface DisplayTimeSegments {\n\thours: string;\n\tminutes: string;\n\tseconds?: string;\n\tperiod?: TimePeriod;\n}\n\nexport interface TimeDisplayLabels {\n\tam?: string;\n\tpm?: string;\n}\n\nexport const HOURS_24_MAX = 23;\nexport const HOURS_12_MAX = 12;\nexport const MINUTES_MAX = 59;\nexport const SECONDS_MAX = 59;\n\nexport function padTimeSegment(value: number): string {\n\treturn value.toString().padStart(2, '0');\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(Math.max(value, min), max);\n}\n\n/**\n * Snaps a time to the nearest legal `step`, rather than the one below it:\n * with a 15-minute step, 10:38 belongs at 10:45 and 10:37 at 10:30. Ties\n * round up. The result is always itself a legal step, so the last one\n * before midnight is used instead of overflowing into the next day.\n */\nfunction alignSecondsToStep(totalSeconds: number, step: number): number {\n\tif (step <= 0) {\n\t\treturn totalSeconds;\n\t}\n\tconst lastOfDay = Math.floor((24 * 60 * 60 - 1) / step) * step;\n\tconst aligned = Math.round(totalSeconds / step) * step;\n\treturn Math.max(0, Math.min(aligned, lastOfDay));\n}\n\nexport function parseTimeString(timeString: string | undefined): NormalizedTime | null {\n\tif (!timeString) {\n\t\treturn null;\n\t}\n\tconst parts = timeString.split(':');\n\tif (parts.length < 2 || parts.length > 3) {\n\t\treturn null;\n\t}\n\tconst [hRaw, mRaw, sRaw] = parts;\n\tconst hours = clamp(Number.parseInt(hRaw, 10), 0, HOURS_24_MAX);\n\tconst minutes = clamp(Number.parseInt(mRaw, 10), 0, MINUTES_MAX);\n\tconst seconds = clamp(Number.parseInt(sRaw ?? '0', 10), 0, SECONDS_MAX);\n\tif (Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds)) {\n\t\treturn null;\n\t}\n\treturn { hours, minutes, seconds };\n}\n\nexport function normalizedTimeToString(time: NormalizedTime, includeSeconds: boolean): string {\n\tconst secondsPart = includeSeconds ? `:${padTimeSegment(time.seconds)}` : '';\n\treturn `${padTimeSegment(time.hours)}:${padTimeSegment(time.minutes)}${secondsPart}`;\n}\n\nexport function createDefaultNormalizedTime(\n\tdate: Date | undefined,\n\tincludeSeconds: boolean,\n\tstep: number\n): NormalizedTime {\n\tconst source = Number.isFinite(date?.getTime?.()) ? (date as Date) : new Date();\n\tconst hours = source.getHours();\n\tconst minutes = source.getMinutes();\n\tconst seconds = includeSeconds ? source.getSeconds() : 0;\n\tconst totalSeconds = hours * 3600 + minutes * 60 + seconds;\n\tconst alignedSeconds = alignSecondsToStep(totalSeconds, step);\n\tconst alignedHours = Math.floor(alignedSeconds / 3600);\n\tconst alignedMinutes = Math.floor((alignedSeconds % 3600) / 60);\n\tconst alignedSecondsRemainder = alignedSeconds % 60;\n\treturn {\n\t\thours: alignedHours,\n\t\tminutes: alignedMinutes,\n\t\tseconds: includeSeconds ? alignedSecondsRemainder : 0,\n\t};\n}\n\nexport function normalizedTimeToDisplaySegments(\n\ttime: NormalizedTime,\n\tformat: '12' | '24',\n\tincludeSeconds: boolean\n): DisplayTimeSegments {\n\tif (format === '12') {\n\t\tconst period: TimePeriod = time.hours >= 12 ? 'PM' : 'AM';\n\t\tlet displayHour = time.hours % 12;\n\t\tif (displayHour === 0) {\n\t\t\tdisplayHour = 12;\n\t\t}\n\t\treturn {\n\t\t\thours: padTimeSegment(displayHour),\n\t\t\tminutes: padTimeSegment(time.minutes),\n\t\t\tseconds: includeSeconds ? padTimeSegment(time.seconds) : undefined,\n\t\t\tperiod,\n\t\t};\n\t}\n\treturn {\n\t\thours: padTimeSegment(time.hours),\n\t\tminutes: padTimeSegment(time.minutes),\n\t\tseconds: includeSeconds ? padTimeSegment(time.seconds) : undefined,\n\t};\n}\n\nexport function displaySegmentsToNormalizedTime(\n\tsegments: DisplayTimeSegments,\n\tformat: '12' | '24',\n\tincludeSeconds: boolean\n): NormalizedTime {\n\tconst parseSegment = (value: string | undefined): number => {\n\t\tconst numeric = Number.parseInt(value ?? '0', 10);\n\t\treturn Number.isNaN(numeric) ? 0 : numeric;\n\t};\n\tlet hours = parseSegment(segments.hours);\n\tconst minutes = clamp(parseSegment(segments.minutes), 0, MINUTES_MAX);\n\tconst seconds = includeSeconds ? clamp(parseSegment(segments.seconds), 0, SECONDS_MAX) : 0;\n\tif (format === '12') {\n\t\thours = clamp(hours, 1, HOURS_12_MAX);\n\t\tconst period = segments.period ?? 'AM';\n\t\tconst isPM = period === 'PM';\n\t\thours = hours % 12;\n\t\tif (isPM) {\n\t\t\thours += 12;\n\t\t}\n\t} else {\n\t\thours = clamp(hours, 0, HOURS_24_MAX);\n\t}\n\treturn { hours, minutes, seconds };\n}\n\nexport function alignNormalizedTimeToStep(\n\ttime: NormalizedTime,\n\tstep: number,\n\tincludeSeconds: boolean\n): NormalizedTime {\n\tconst totalSeconds = time.hours * 3600 + time.minutes * 60 + time.seconds;\n\tconst alignedSeconds = alignSecondsToStep(totalSeconds, step);\n\tconst hours = Math.floor(alignedSeconds / 3600);\n\tconst minutes = Math.floor((alignedSeconds % 3600) / 60);\n\tconst seconds = includeSeconds ? alignedSeconds % 60 : 0;\n\treturn { hours, minutes, seconds };\n}\n\nexport function formatNormalizedTimeForDisplay(\n\ttime: NormalizedTime,\n\tincludeSeconds: boolean,\n\tformat: '12' | '24',\n\tlabels?: TimeDisplayLabels\n): string {\n\tconst minutes = padTimeSegment(time.minutes);\n\tconst secondsPart = includeSeconds ? `:${padTimeSegment(time.seconds)}` : '';\n\tif (format === '24') {\n\t\treturn `${padTimeSegment(time.hours)}:${minutes}${secondsPart}`;\n\t}\n\tconst period: TimePeriod = time.hours >= 12 ? 'PM' : 'AM';\n\tlet displayHour = time.hours % 12;\n\tif (displayHour === 0) {\n\t\tdisplayHour = 12;\n\t}\n\tconst periodLabel = period === 'AM' ? labels?.am ?? 'AM' : labels?.pm ?? 'PM';\n\treturn `${padTimeSegment(displayHour)}:${minutes}${secondsPart} ${periodLabel}`;\n}\n\nconst QUOTED_TEXT_REGEX = /'[^']*'/g;\nconst TIME_TOKEN_REGEX = /[HKhk]|\\bp\\b|\\bt\\b|\\ba\\b/;\n\nexport function readableFormatIncludesTime(format: string | undefined): boolean {\n\tif (!format) {\n\t\treturn false;\n\t}\n\tconst sanitized = format.replace(QUOTED_TEXT_REGEX, '');\n\treturn TIME_TOKEN_REGEX.test(sanitized);\n}\n\nexport function getDayPickerYearBounds(\n\tyearSelection: YearSelectionConfig | undefined\n): { startMonth?: Date; endMonth?: Date } {\n\treturn {\n\t\tstartMonth: typeof yearSelection?.fromYear === 'number' ? new Date(yearSelection.fromYear, 0) : undefined,\n\t\tendMonth: typeof yearSelection?.toYear === 'number' ? new Date(yearSelection.toYear, 11) : undefined,\n\t};\n}\n\n/**\n * Create date output object with formatted strings\n */\nexport function createDateOutput(\n\tdate: Date | undefined,\n\tdateFormat: string,\n\treadableFormat: string,\n\tlocale?: DateFnsLocale\n): DateOutput {\n\tconst options = locale ? { locale } : undefined;\n\treturn {\n\t\tdate,\n\t\tformatted: date ? format(date, dateFormat, options) : undefined,\n\t\treadable: date ? format(date, readableFormat, options) : undefined,\n\t};\n}\n\n/**\n * Create multiple dates output object with formatted strings\n */\nexport function createMultipleDatesOutput(\n\tdates: Date[],\n\tdateFormat: string,\n\treadableFormat: string,\n\tlocale?: DateFnsLocale\n): MultipleDatesOutput {\n\tconst options = locale ? { locale } : undefined;\n\treturn {\n\t\tdates,\n\t\tformatted: dates.map(d => format(d, dateFormat, options)),\n\t\treadable: dates.map(d => format(d, readableFormat, options)),\n\t};\n}\n\n/**\n * Create date range output object with formatted strings\n */\nexport function createDateRangeOutput(\n\trange: DateRange | undefined,\n\tdateFormat: string,\n\treadableFormat: string,\n\tlocale?: DateFnsLocale\n): DateRangeOutput {\n\tconst options = locale ? { locale } : undefined;\n\treturn {\n\t\trange,\n\t\tformatted: {\n\t\t\tfrom: range?.from ? format(range.from, dateFormat, options) : undefined,\n\t\t\tto: range?.to ? format(range.to, dateFormat, options) : undefined,\n\t\t},\n\t\treadable: {\n\t\t\tfrom: range?.from ? format(range.from, readableFormat, options) : undefined,\n\t\t\tto: range?.to ? format(range.to, readableFormat, options) : undefined,\n\t\t},\n\t};\n}\n\n/**\n * Apply time to a date\n */\nexport function applyTimeToDate(date: Date, time: string | NormalizedTime): Date {\n\tconst normalized = typeof time === 'string' ? parseTimeString(time) : time;\n\tconst newDate = new Date(date);\n\tif (!Number.isFinite(newDate.getTime()) || !normalized) {\n\t\treturn new Date(NaN);\n\t}\n\tnewDate.setHours(normalized.hours, normalized.minutes, normalized.seconds, 0);\n\treturn newDate;\n}\n\n/**\n * Apply time to date range\n */\nexport function applyTimeToRange(\n\trange: DateRange,\n\tstartTime: string | NormalizedTime,\n\tendTime: string | NormalizedTime\n): DateRange {\n\tlet finalRange = range;\n\n\tif (range.from) {\n\t\tfinalRange = { ...finalRange, from: applyTimeToDate(range.from, startTime) };\n\t}\n\n\tif (range.to && finalRange) {\n\t\tfinalRange = { ...finalRange, to: applyTimeToDate(range.to, endTime) };\n\t}\n\n\treturn finalRange;\n}\n\n/**\n * Calculate days difference between two dates\n */\nexport function calculateDaysDifference(from: Date, to: Date): number {\n\treturn Math.ceil((to.getTime() - from.getTime()) / (1000 * 60 * 60 * 24)) + 1;\n}\n\n/**\n * Validate date range constraints\n */\nexport function validateDateRange(\n\trange: DateRange | undefined,\n\tmin?: number,\n\tmax?: number\n): { isValid: boolean; daysDiff?: number } {\n\tif (!range?.from || !range?.to) {\n\t\treturn { isValid: true };\n\t}\n\n\tconst daysDiff = calculateDaysDifference(range.from, range.to);\n\n\tif (min && daysDiff < min) {\n\t\treturn { isValid: false, daysDiff };\n\t}\n\n\tif (max && daysDiff > max) {\n\t\treturn { isValid: false, daysDiff };\n\t}\n\n\treturn { isValid: true, daysDiff };\n}\n\n/**\n * Get validation message for date range\n */\nexport function getRangeValidationMessage(\n\trange: DateRange | undefined,\n\tmin: number | undefined,\n\tmax: number | undefined,\n\ttranslations: DatePickerStrings\n): string | null {\n\tif (!range?.from || !range?.to) return null;\n\n\tconst daysDiff = calculateDaysDifference(range.from, range.to);\n\n\tif (min && daysDiff < min) {\n\t\treturn translations.minimumDays(min);\n\t}\n\n\tif (max && daysDiff > max) {\n\t\treturn translations.maximumDays(max);\n\t}\n\n\treturn null;\n}\n\n/**\n * Get validation message for multiple dates\n */\nexport function getMultipleDatesValidationMessage(\n\tdates: Date[],\n\tmin: number | undefined,\n\tmax: number | undefined,\n\trequired: boolean | undefined,\n\ttranslations: DatePickerStrings\n): string | null {\n\tif (required && dates.length === 0) {\n\t\treturn translations.datesRequired;\n\t}\n\n\tif (min && dates.length < min) {\n\t\treturn translations.minimumDates(min);\n\t}\n\n\t// The maximum reads as a warning, so it waits until there is a\n\t// selection to warn about instead of greeting an empty calendar.\n\tif (max && dates.length > 0) {\n\t\treturn translations.maximumDates(max);\n\t}\n\n\treturn null;\n}\n\n/**\n * Format button text for single date\n */\nexport function formatDateButtonText(\n\tdate: Date | undefined,\n\treadableFormat: string,\n\tplaceholder: string | undefined,\n\tdefaultPlaceholder: string,\n\ttime?: string,\n\tlocale?: DateFnsLocale\n): string {\n\tif (date) {\n\t\tconst options = locale ? { locale } : undefined;\n\t\tlet text = format(date, readableFormat, options);\n\t\tif (time) {\n\t\t\ttext += ` ${time}`;\n\t\t}\n\t\treturn text;\n\t}\n\treturn placeholder ?? defaultPlaceholder;\n}\n\n/**\n * Format button text for multiple dates\n */\nexport function formatMultipleDatesButtonText(\n\tdates: Date[],\n\treadableFormat: string,\n\tplaceholder: string | undefined,\n\tdefaultPlaceholder: string,\n\ttranslations: DatePickerStrings,\n\tlocale?: DateFnsLocale\n): string {\n\tif (dates.length > 0) {\n\t\tif (dates.length === 1) {\n\t\t\tconst options = locale ? { locale } : undefined;\n\t\t\treturn format(dates[0], readableFormat, options);\n\t\t}\n\t\treturn translations.datesSelected(dates.length);\n\t}\n\treturn placeholder ?? defaultPlaceholder;\n}\n\n/**\n * Format button text for date range\n */\nexport function formatRangeButtonText(\n\trange: DateRange | undefined,\n\treadableFormat: string,\n\tplaceholder: string | undefined,\n\tdefaultPlaceholder: string,\n\tlocale?: DateFnsLocale\n): string {\n\tif (range?.from) {\n\t\treturn formatDateRange(range, {\n\t\t\tformat: readableFormat,\n\t\t\tlocale,\n\t\t}) ?? placeholder ?? defaultPlaceholder;\n\t}\n\treturn placeholder ?? defaultPlaceholder;\n}\n","/**\n * Internal wiring shared by the three <DatePicker> mode components.\n *\n * Split out of date-picker.tsx unchanged: the props-union type guards the\n * dispatcher narrows with, the trigger presentation mapping, and the default\n * range presets. Nothing here is part of the package's\n * public API — date-pickers/index.ts does not re-export it.\n */\nimport { addDays, startOfWeek, endOfWeek, startOfMonth, endOfMonth } from 'date-fns';\n\nimport { type ButtonTone, type ButtonStyle } from '../buttons';\n\nimport type {\n\tDatePickerProps,\n\tSingleDatePickerProps,\n\tMultipleDatePickerProps,\n\tRangeDatePickerProps,\n\tDatePickerStrings,\n\tPresetDateRange\n} from './datepicker.types';\n\nexport function resolvePickerButtonProps(\n\ttone?: ButtonTone,\n\tbuttonStyle?: ButtonStyle,\n): { tone: ButtonTone; buttonStyle: ButtonStyle } {\n\treturn {\n\t\ttone: tone ?? 'secondary',\n\t\tbuttonStyle: buttonStyle ?? 'outline',\n\t};\n}\n\n// Type guards\nexport function isSingleMode(props: DatePickerProps): props is SingleDatePickerProps {\n\treturn !props.mode || props.mode === 'single';\n}\n\nexport function isMultipleMode(props: DatePickerProps): props is MultipleDatePickerProps {\n\treturn props.mode === 'multiple';\n}\n\nexport function isRangeMode(props: DatePickerProps): props is RangeDatePickerProps {\n\treturn props.mode === 'range';\n}\n\n// Default preset ranges — labels resolved from DatePickerStrings.\n// `weekStartsOn` is the resolved value from the resolution chain\n// (`prop ?? useDatesConfig().weekStartsOn ?? 1`); passed in by the\n// caller so this stays a pure function.\nexport function getDefaultPresets(\n\tt: DatePickerStrings,\n\tweekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6,\n): PresetDateRange[] {\n\treturn [\n\t\t{\n\t\t\tlabel: t.today,\n\t\t\tgetValue: () => ({ from: new Date(), to: new Date() }),\n\t\t},\n\t\t{\n\t\t\tlabel: t.thisWeek,\n\t\t\tgetValue: () => ({\n\t\t\t\tfrom: startOfWeek(new Date(), { weekStartsOn }),\n\t\t\t\tto: endOfWeek(new Date(), { weekStartsOn })\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tlabel: t.thisMonth,\n\t\t\tgetValue: () => ({\n\t\t\t\tfrom: startOfMonth(new Date()),\n\t\t\t\tto: endOfMonth(new Date())\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tlabel: t.last30Days,\n\t\t\tgetValue: () => ({\n\t\t\t\tfrom: addDays(new Date(), -30),\n\t\t\t\tto: new Date()\n\t\t\t}),\n\t\t},\n\t];\n}\n","\"use client\"\n\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from \"lucide-react\"\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n type Locale,\n} from \"react-day-picker\"\n\nimport { Button, buttonVariants } from \"./button\"\nimport { cn } from \"../../lib/utils\"\nimport { selectToggleRecipes } from \"../../lib/field-affordance-recipes\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n locale,\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n // Day cells are controls: the small action height and the bounded inner\n // radius, written from the root tokens so a scoped density applies.\n \"p-space-lg [--cell-radius:min(calc(var(--radius)*0.75),calc(min(var(--height-action),var(--height-control))*var(--density-scale)/4))] [--cell-size:calc(var(--height-action)*8/9*var(--density-scale))] bg-background group/calendar [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code, { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-space-xl flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-space-xl\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-space-xs w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-space-sm\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-(--cell-radius) flex items-center gap-space-xs text-sm [&>svg]:text-muted-foreground [&>svg]:size-icon-md\",\n defaultClassNames.caption_label\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-xs select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-space-md\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-xs select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-icon\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon className={cn(\"size-icon\", className)} {...props} />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(selectToggleRecipes.icon.md, className)} {...props} />\n )\n },\n DayButton: ({ ...props }) => (\n <CalendarDayButton locale={locale} {...props} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: React.ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n !!modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:ring-ring relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-space-xs border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-2 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","/**\n * Private label / hint / error chrome shared by the DatePicker modes and\n * MonthYearPicker. It keeps FormField's rhythm and roles: the same label recipe,\n * the same gap to the trigger and to the supporting line, and a polite alert for\n * the validation message. Validation marks the trigger, not the label.\n *\n * The hint keeps its documented place beside the label and is suppressed while\n * an error shows. Not part of the public API.\n */\nimport type { ReactNode, Ref } from 'react';\n\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\n\nexport interface DatePickerFieldProps {\n\trootRef?: Ref<HTMLDivElement>;\n\tclassName?: string;\n\tlabel?: string;\n\thint?: string;\n\terror?: string;\n\t/** Id of the trigger the label names. */\n\ttriggerId: string;\n\t/** Id of the validation message the trigger references. */\n\tdescribedById: string;\n\tchildren: ReactNode;\n}\n\nexport function DatePickerField({\n\trootRef,\n\tclassName,\n\tlabel,\n\thint,\n\terror,\n\ttriggerId,\n\tdescribedById,\n\tchildren,\n}: DatePickerFieldProps) {\n\tconst hasError = typeof error === 'string' && error !== '';\n\tconst showHint = !hasError && typeof hint === 'string' && hint !== '';\n\n\treturn (\n\t\t<Stack ref={rootRef} gap=\"xs\" className={className}>\n\t\t\t{!!(label || showHint) && (\n\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"xs\">\n\t\t\t\t\t{!!label && (\n\t\t\t\t\t\t<Label htmlFor={triggerId} className=\"date-picker--label leading-6\">\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t)}\n\t\t\t\t\t{showHint && (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"date-picker--hint\">\n\t\t\t\t\t\t\t{hint}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t{children}\n\n\t\t\t{hasError && (\n\t\t\t\t<Text\n\t\t\t\t\tid={describedById}\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t\trole=\"alert\"\n\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\tclassName=\"date-picker--error\"\n\t\t\t\t\tcontent={error}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { Button } from '../buttons';\nimport { Separator } from '../display/separator';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport type {\n\tDatePickerFooterConfig,\n\tDateOutput,\n\tDateRangeOutput,\n\tMultipleDatesOutput\n} from './datepicker.types';\n\nexport interface DatePickerFooterProps {\n\t/** Configuration for this surface. */\n\tconfig: DatePickerFooterConfig;\n\toutput: DateOutput | DateRangeOutput | MultipleDatesOutput;\n\thasSelection: boolean;\n\tautoSummary?: string;\n\tclassName?: string;\n}\n\nexport function DatePickerFooter({\n\tconfig,\n\toutput,\n\thasSelection,\n\tautoSummary,\n\tclassName\n}: DatePickerFooterProps) {\n\tconst { text, actions, showOnlyWhenSelected = false, showSummary = false } = config;\n\tconst visibleActions = actions?.filter((action) => action.visible !== false) ?? [];\n\n\t// Resolve custom text\n\tconst customText = React.useMemo(() => {\n\t\tif (!text) return undefined;\n\t\treturn typeof text === 'function' ? text(output) : text;\n\t}, [text, output]);\n\n\t// Determine what text to show\n\tconst displayText = customText || (showSummary ? autoSummary : undefined);\n\n\t// Don't render if showOnlyWhenSelected is true and no selection\n\tif (showOnlyWhenSelected && !hasSelection) {\n\t\treturn null;\n\t}\n\n\t// Don't render if no text and no actions\n\tif (!displayText && visibleActions.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Separator />\n\t\t\t<div className={cn('date-picker-footer--component p-surface', className)}>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t{!!displayText && (\n\t\t\t\t\t<Stack gap=\"xs\" className=\"date-picker-footer--summary\">\n\t\t\t\t\t\t{!!showSummary && !!customText && !!autoSummary && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<Text type=\"secondary\">{autoSummary}</Text>\n\t\t\t\t\t\t\t\t<Text weight=\"medium\">{customText}</Text>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!showSummary && !!customText && <Text weight=\"medium\">{customText}</Text>}\n\t\t\t\t\t\t{!!showSummary && !customText && !!autoSummary && <Text type=\"secondary\">{autoSummary}</Text>}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t{visibleActions.length > 0 && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tclassName=\"date-picker-footer--actions\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{visibleActions.map((action) => {\n\t\t\t\t\t\t\tconst isDisabled =\n\t\t\t\t\t\t\t\ttypeof action.disabled === 'function'\n\t\t\t\t\t\t\t\t\t? action.disabled(output)\n\t\t\t\t\t\t\t\t\t: action.disabled;\n\t\t\t\t\t\t\tconst buttonStyle = action.buttonStyle === 'link'\n\t\t\t\t\t\t\t\t? 'ghost'\n\t\t\t\t\t\t\t\t: action.buttonStyle ?? 'solid';\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tkey={action.label}\n\t\t\t\t\t\t\t\t\ttone={action.tone ?? 'primary'}\n\t\t\t\t\t\t\t\t\tbuttonStyle={buttonStyle}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\tloading={action.loading}\n\t\t\t\t\t\t\t\t\tonClick={() => action.onClick(output)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1',\n\t\t\t\t\t\t\t\t\t\taction.buttonStyle === 'link' && 'underline underline-offset-4',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nDatePickerFooter.displayName = 'DatePickerFooter';\n","import { Heading, Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport type { DatePickerHeaderConfig } from './datepicker.types';\n\nexport interface DatePickerHeaderProps {\n\t/** Configuration for this surface. */\n\tconfig: DatePickerHeaderConfig;\n\tclassName?: string;\n}\n\nexport function DatePickerHeader({ config, className }: DatePickerHeaderProps) {\n\tconst { title, description, icon: Icon, align = 'left' } = config;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('date-picker-header--component', \n\t\t\t\t'border-b border-border p-surface',\n\t\t\t\talign === 'center' ? 'text-center' : 'text-left',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t<Stack direction=\"horizontal\" gap=\"md\" wrap={false}>\n\t\t\t\t{/* Optional and neutral: colour stays for meaning. */}\n\t\t\t\t{!!Icon && (\n\t\t\t\t\t<div className=\"shrink-0\">\n\t\t\t\t\t\t<Icon aria-hidden=\"true\" className=\"size-icon text-muted-foreground\" />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<Stack gap=\"dense\" className={cn('flex-1', align === 'center' && !Icon && 'text-center')}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\ttag=\"h3\"\n\t\t\t\t\t\talign={align === 'center' ? 'center' : 'left'}\n\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Heading>\n\t\t\t\t\t{!!description && <Text type=\"secondary\">{description}</Text>}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nDatePickerHeader.displayName = 'DatePickerHeader';\n","import { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\n\n/** Picker triggers resolve the same explicit/provider/default scale as fields. */\nexport function usePickerTriggerSize(sizeProp: FormControlSize | undefined): FormControlSize {\n const { defaultScale } = useDensityConfig();\n return resolveFormControlSize(sizeProp, defaultScale);\n}\n\nconst iconOnlyWidth: Record<FormControlSize, string> = {\n sm: 'w-control-sm', md: 'w-control', lg: 'w-control-lg',\n};\n\n/** Button composition contributes behavior; the shared field owner supplies chrome. */\nexport function pickerTriggerClasses(size: FormControlSize, iconOnly = false): string {\n return cn(formFieldTriggerClasses(size), 'justify-start', iconOnly && [iconOnlyWidth[size], 'shrink-0 justify-center px-0']);\n}\n","/**\n * Default user-facing strings for the date-picker family\n * (`<DatePicker>`, `<DateRangePicker>`, `<MonthYearPicker>`).\n *\n * Library is locale-agnostic — consumers wire backend i18n via the\n * `strings` prop and pass a `Locale` object from `date-fns/locale` (or\n * any equivalent) via the `locale` prop:\n *\n * import { bg } from 'date-fns/locale';\n * <DatePicker locale={bg} strings={{ today: t('date.today') }} />\n */\nimport type { DatePickerStrings } from './datepicker.types';\n\nexport const defaultDatePickerStrings: DatePickerStrings = {\n\tselectDate: 'Select a date',\n\tselectDates: 'Select dates',\n\tselectDateRange: 'Select date range',\n\tfrom: 'From',\n\tto: 'To',\n\tconfirm: 'Confirm',\n\tclear: 'Clear',\n\ttoday: 'Today',\n\tstartDate: 'Start date',\n\tendDate: 'End date',\n\tstartTime: 'Start time',\n\tendTime: 'End time',\n\thours: 'Hours',\n\tminutes: 'Minutes',\n\tseconds: 'Seconds',\n\tam: 'AM',\n\tpm: 'PM',\n\tminimumDays: (days: number) => `A minimum of ${days} days is required`,\n\tmaximumDays: (days: number) => `A maximum of ${days} days is allowed`,\n\tminimumDates: (min: number) => `Select at least ${min} dates`,\n\tmaximumDates: (max: number) => `Select up to ${max} dates`,\n\tdatesRequired: 'At least one date must be selected',\n\tdatesSelected: (count: number) => `${count} dates selected`,\n\tlastWeek: 'Last week',\n\tlastMonth: 'Last month',\n\tlastYear: 'Last year',\n\tnextWeek: 'Next week',\n\tnextMonth: 'Next month',\n\tnextYear: 'Next year',\n\tthisWeek: 'This Week',\n\tthisMonth: 'This Month',\n\tlast30Days: 'Last 30 Days',\n\tselectMonthYear: 'Select month and year',\n\tmonth: 'Month',\n\tyear: 'Year',\n};\n\nexport type { DatePickerStrings };\n","import { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst toggleVariants = cva(\n \"box-border border border-transparent py-0 font-sans text-foreground hover:text-foreground aria-pressed:bg-muted focus-visible:ring-2 focus-visible:ring-ring aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive gap-space-xs rounded-inner text-sm font-medium transition-[color,background-color,box-shadow] [&_svg:not([class*='size-'])]:size-icon group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-input hover:bg-muted border bg-transparent shadow-none\",\n },\n size: {\n default: \"h-control min-w-9 px-control\",\n sm: \"h-control-sm min-w-8 px-control-sm\",\n lg: \"h-control-lg min-w-10 px-control\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"@base-ui/react/toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { toggleVariants } from \"./toggle\"\nimport { cn } from \"../../lib/utils\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n})\n\nexport type ToggleGroupProps = ToggleGroupPrimitive.Props &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: ToggleGroupProps) {\n return (\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"rounded-inner group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n \"border-border group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-control-sm group-data-[spacing=0]/toggle-group:shadow-none group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-inner group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-inner group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-inner group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-inner shrink-0 focus:z-10 focus-visible:z-10 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </TogglePrimitive>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","/**\n * TimePicker — the package's one time-of-day control.\n *\n * Merged from the former `base/forms/fields/time-picker.tsx` (a trigger\n * over a now/done confirm dialog) and `base/date-pickers/segmented-time-input.tsx`\n * (an inline hh:mm:ss segment editor). The segment editor is the engine;\n * `mode=\"popover\"` wraps it in an anchored surface behind a field-shaped\n * trigger. `SegmentedTimeInput` no longer exists as a public symbol.\n *\n * Import discipline: this module deep-imports\n * `@/components/base/forms/fields/input` rather than the `fields` barrel.\n * The barrel re-exports `DateTimeInput`, which imports `DatePicker` from\n * this very family — going through the barrel closed a genuine cycle\n * across two separately-bundled entrypoints. `input.tsx` reaches only\n * typography, `lib/`, `../form-sizing` and its own `./hooks`, so it cannot\n * loop back.\n */\nimport { Clock } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Input } from '../text-inputs';\nimport {\n\tformControlSizeClasses,\n\tformFieldTriggerClasses,\n\tresolveFormControlSize,\n} from '../forms/form-sizing';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { Text } from '../../typography';\nimport { ToggleGroup, ToggleGroupItem } from '../../ui/toggle-group';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport type { DisplayTimeSegments, NormalizedTime, TimePeriod } from './date-picker-helpers';\nimport {\n\talignNormalizedTimeToStep,\n\tdisplaySegmentsToNormalizedTime,\n\tformatNormalizedTimeForDisplay,\n\tHOURS_12_MAX,\n\tHOURS_24_MAX,\n\tMINUTES_MAX,\n\tnormalizedTimeToDisplaySegments,\n\tnormalizedTimeToString,\n\tparseTimeString,\n\tSECONDS_MAX,\n} from './date-picker-helpers';\n\nexport interface TimePickerStrings {\n\t/** Trigger text in `mode=\"popover\"` when there is no value. */\n\tplaceholder: string;\n\t/** Accessible name for the hours segment. */\n\thours: string;\n\t/** Accessible name for the minutes segment. */\n\tminutes: string;\n\t/** Accessible name for the seconds segment. Only rendered when `precision` is `'seconds'`. */\n\tseconds: string;\n\t/** Copy for the ante-meridiem half of the day. Only rendered when `format` is `'12'`. */\n\tam: string;\n\t/** Copy for the post-meridiem half of the day. Only rendered when `format` is `'12'`. */\n\tpm: string;\n}\n\nexport const defaultTimePickerStrings: TimePickerStrings = {\n\tplaceholder: 'Select time',\n\thours: 'Hours',\n\tminutes: 'Minutes',\n\tseconds: 'Seconds',\n\tam: 'AM',\n\tpm: 'PM',\n};\n\nexport interface TimePickerProps {\n\t/**\n\t * Selected time as `'HH:mm'` or `'HH:mm:ss'`, always on a 24-hour clock\n\t * regardless of `format`. Controlled. `null` or omitted leaves every\n\t * segment blank.\n\t */\n\tvalue?: string | null;\n\t/**\n\t * Fired with the next time in the same shape as `value` — `'HH:mm'` when\n\t * `precision` is `'minutes'`, `'HH:mm:ss'` when it is `'seconds'`. Fires\n\t * while typing and again on blur, always with a time aligned to `step`,\n\t * so a listener never sees a value `step` forbids. The segments keep\n\t * showing exactly what was typed until blur snaps them to that value.\n\t */\n\tonValueChange?: (value: string | null) => void;\n\n\t/**\n\t * `'inline'` renders the segments directly; `'popover'` puts them behind a\n\t * field-shaped trigger showing the formatted time. Default: `'inline'`.\n\t */\n\tmode?: 'inline' | 'popover';\n\t/** Clock convention. `'12'` adds the AM/PM segment. Default: `'24'`. */\n\tformat?: '12' | '24';\n\t/** Finest segment offered. Default: `'minutes'`. */\n\tprecision?: 'minutes' | 'seconds';\n\t/**\n\t * Alignment granularity, **in seconds**. Emitted times are snapped to the\n\t * nearest legal step; the display snaps on blur. Default: `60`.\n\t */\n\tstep?: number;\n\n\t/** Control-height preset. Falls back to `UIProvider.density.defaultScale`. */\n\tsize?: FormControlSize;\n\t/** Disables every segment, and the trigger in `mode=\"popover\"`. */\n\tdisabled?: boolean;\n\t/** Applies invalid control styling. Validation copy remains owned by `FormField`. */\n\tinvalid?: boolean;\n\t/** Trigger text in `mode=\"popover\"` when there is no value. Wins over `strings.placeholder`. */\n\tplaceholder?: string;\n\t/** String overrides merged over defaults. */\n\tstrings?: StringsProp<TimePickerStrings>;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/**\n\t * Lands on the popover trigger, or on the hours segment when inline, so\n\t * `<FormField label>` — which clones its child with a generated `id` —\n\t * gets a real `htmlFor` target.\n\t */\n\tid?: string;\n}\n\ntype TimeSegmentKey = 'hours' | 'minutes' | 'seconds';\n\nconst SEGMENT_ORDER: TimeSegmentKey[] = ['hours', 'minutes', 'seconds'];\nconst DEFAULT_24H = '00';\nconst DEFAULT_12H = '12';\n/** Shown for a segment with no value yet. Parsed back to the segment default. */\nconst BLANK = '--';\n\n/** Selected period: the same primary fill as a selected PillRadioGroup pill. */\nconst periodItemClasses = 'aria-pressed:bg-primary aria-pressed:text-primary-foreground';\n\nconst segmentWidthClasses: Record<FormControlSize, string> = {\n\tsm: 'w-12',\n\tmd: 'w-14',\n\tlg: 'w-16',\n};\n\nfunction sanitizeNumeric(value: string): string {\n\treturn value.replace(/\\D/g, '').slice(-2);\n}\n\nfunction ensureTwoDigits(value: string): string {\n\tif (value.length === 0) return '00';\n\tif (value.length === 1) return `0${value}`;\n\treturn value;\n}\n\nfunction getNextKey(key: TimeSegmentKey, includeSeconds: boolean): TimeSegmentKey | null {\n\tconst activeOrder = includeSeconds ? SEGMENT_ORDER : SEGMENT_ORDER.slice(0, 2);\n\tconst idx = activeOrder.indexOf(key);\n\treturn idx > -1 && idx < activeOrder.length - 1 ? activeOrder[idx + 1] : null;\n}\n\nfunction getPreviousKey(key: TimeSegmentKey, includeSeconds: boolean): TimeSegmentKey | null {\n\tconst activeOrder = includeSeconds ? SEGMENT_ORDER : SEGMENT_ORDER.slice(0, 2);\n\tconst idx = activeOrder.indexOf(key);\n\treturn idx > 0 ? activeOrder[idx - 1] : null;\n}\n\nfunction hoursToDisplay(hours: number, format: '12' | '24'): number {\n\tif (format === '24') {\n\t\treturn hours;\n\t}\n\treturn hours % 12 || 12;\n}\n\nfunction determinePeriodFromHours(hours: number): TimePeriod {\n\treturn hours >= 12 ? 'PM' : 'AM';\n}\n\nfunction segmentsWithDefaults(\n\tsegments: DisplayTimeSegments,\n\tformat: '12' | '24'\n): DisplayTimeSegments {\n\tif (format === '12') {\n\t\treturn { ...segments, period: segments.period ?? 'AM' };\n\t}\n\treturn { ...segments, period: undefined };\n}\n\n/** Blank segments for a `null` value — nothing selected, nothing implied. */\nfunction blankSegments(includeSeconds: boolean): DisplayTimeSegments {\n\treturn {\n\t\thours: BLANK,\n\t\tminutes: BLANK,\n\t\tseconds: includeSeconds ? BLANK : undefined,\n\t};\n}\n\n/**\n * Substitutes the segment defaults for anything still blank, so a partially\n * typed time converts to a real `NormalizedTime` instead of parsing `'--'`\n * as NaN.\n */\nfunction fillBlanks(segments: DisplayTimeSegments, format: '12' | '24'): DisplayTimeSegments {\n\tconst fallbackHours = format === '12' ? DEFAULT_12H : DEFAULT_24H;\n\treturn {\n\t\thours: segments.hours === BLANK ? fallbackHours : segments.hours,\n\t\tminutes: segments.minutes === BLANK ? DEFAULT_24H : segments.minutes,\n\t\tseconds: segments.seconds === BLANK ? DEFAULT_24H : segments.seconds,\n\t\tperiod: segments.period,\n\t};\n}\n\nfunction segmentsFromValue(\n\tvalue: string | null | undefined,\n\tformat: '12' | '24',\n\tincludeSeconds: boolean\n): DisplayTimeSegments {\n\tconst parsed = parseTimeString(value ?? undefined);\n\tif (!parsed) {\n\t\treturn blankSegments(includeSeconds);\n\t}\n\treturn segmentsWithDefaults(\n\t\tnormalizedTimeToDisplaySegments(parsed, format, includeSeconds),\n\t\tformat\n\t);\n}\n\n/**\n * TimePicker — segmented time-of-day input, inline or behind a popover trigger.\n */\nexport const TimePicker = React.forwardRef<HTMLElement, TimePickerProps>(function TimePicker({\n\tvalue,\n\tonValueChange,\n\tmode = 'inline',\n\tformat = '24',\n\tprecision = 'minutes',\n\tstep = 60,\n\tsize: sizeProp,\n\tdisabled,\n\tinvalid,\n\tplaceholder,\n\tstrings: stringsProp,\n\tclassName,\n\tid,\n}: TimePickerProps, ref) {\n\tconst t = useStrings(defaultTimePickerStrings, stringsProp);\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\tconst includeSeconds = precision === 'seconds';\n\n\tconst [open, setOpen] = React.useState(false);\n\n\tconst activeOrder = React.useMemo(\n\t\t() => (includeSeconds ? SEGMENT_ORDER : SEGMENT_ORDER.slice(0, 2)),\n\t\t[includeSeconds]\n\t);\n\n\tconst [segments, setSegments] = React.useState<DisplayTimeSegments>(() =>\n\t\tsegmentsFromValue(value, format, includeSeconds)\n\t);\n\n\t// Ref always holds the latest segments so rapid keystrokes read fresh values.\n\tconst segmentsRef = React.useRef(segments);\n\t// Flag to skip the value-sync useEffect when we emit the value ourselves.\n\tconst isLocalEditRef = React.useRef(false);\n\t// Two-digit entry in progress: which segment, and what has been typed\n\t// into it so far. Cleared whenever focus moves or the value is replaced.\n\tconst digitEntryRef = React.useRef<{ key: TimeSegmentKey; typed: string } | null>(null);\n\tconst updateSegments = React.useCallback((next: DisplayTimeSegments) => {\n\t\tsegmentsRef.current = next;\n\t\tsetSegments(next);\n\t}, []);\n\n\tconst inputRefs = React.useRef<Record<TimeSegmentKey, HTMLInputElement | null>>({\n\t\thours: null,\n\t\tminutes: null,\n\t\tseconds: null,\n\t});\n\n\t// Sync from the `value` prop (e.g. external reset or date selection).\n\t// Skip when the change originated from our own emitAligned call, to avoid\n\t// snapping the display to the aligned value mid-typing.\n\tReact.useEffect(() => {\n\t\tif (isLocalEditRef.current) {\n\t\t\tisLocalEditRef.current = false;\n\t\t\treturn;\n\t\t}\n\t\tdigitEntryRef.current = null;\n\t\tupdateSegments(segmentsFromValue(value, format, includeSeconds));\n\t}, [value, format, includeSeconds, updateSegments]);\n\n\tconst toTimeString = React.useCallback(\n\t\t(time: NormalizedTime) => normalizedTimeToString(time, includeSeconds),\n\t\t[includeSeconds]\n\t);\n\n\t// Emit to the parent while typing so the form value stays current before\n\t// blur — but always step-aligned, so a listener never sees a time `step`\n\t// forbids. The display keeps the raw keystrokes (\"03\" on the way to\n\t// \"30\"); only blur snaps it to what was emitted.\n\tconst emitAligned = React.useCallback(\n\t\t(segs: DisplayTimeSegments) => {\n\t\t\tisLocalEditRef.current = true;\n\t\t\tconst normalized = displaySegmentsToNormalizedTime(\n\t\t\t\tfillBlanks(segs, format),\n\t\t\t\tformat,\n\t\t\t\tincludeSeconds\n\t\t\t);\n\t\t\tonValueChange?.(toTimeString(alignNormalizedTimeToStep(normalized, step, includeSeconds)));\n\t\t},\n\t\t[format, includeSeconds, onValueChange, step, toTimeString]\n\t);\n\n\t// Commit: align to step, notify parent, and snap the display.\n\t// Called on blur so the user sees the rounded value when done typing.\n\tconst commitSegments = React.useCallback(\n\t\t(segs: DisplayTimeSegments) => {\n\t\t\tconst normalized = displaySegmentsToNormalizedTime(\n\t\t\t\tfillBlanks(segs, format),\n\t\t\t\tformat,\n\t\t\t\tincludeSeconds\n\t\t\t);\n\t\t\tconst aligned = alignNormalizedTimeToStep(normalized, step, includeSeconds);\n\t\t\tonValueChange?.(toTimeString(aligned));\n\t\t\tupdateSegments(\n\t\t\t\tsegmentsWithDefaults(\n\t\t\t\t\tnormalizedTimeToDisplaySegments(aligned, format, includeSeconds),\n\t\t\t\t\tformat\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t\t[format, includeSeconds, onValueChange, step, toTimeString, updateSegments]\n\t);\n\n\tconst focusSegment = React.useCallback((key: TimeSegmentKey | null) => {\n\t\tif (!key) return;\n\t\tconst ref = inputRefs.current[key];\n\t\tif (ref) {\n\t\t\tref.focus();\n\t\t\tref.select();\n\t\t}\n\t}, []);\n\n\t// Conventional two-digit entry: the first keystroke in a segment starts a\n\t// fresh value, the second appends to it, and a third starts over. (It\n\t// used to compute `ones digit of the display * 10 + digit`, so the\n\t// second digit of an entry usually saturated the segment instead of\n\t// completing it.)\n\tconst applyDigitInput = React.useCallback(\n\t\t(segmentKey: TimeSegmentKey, digit: number) => {\n\t\t\tconst current = fillBlanks(segmentsRef.current, format);\n\t\t\tconst inProgress = digitEntryRef.current;\n\t\t\tconst typed =\n\t\t\t\tinProgress && inProgress.key === segmentKey && inProgress.typed.length === 1\n\t\t\t\t\t? `${inProgress.typed}${digit}`\n\t\t\t\t\t: String(digit);\n\t\t\tdigitEntryRef.current = { key: segmentKey, typed };\n\t\t\tconst candidate = Number.parseInt(typed, 10);\n\t\t\tconst next: DisplayTimeSegments = { ...current };\n\t\t\tlet nextPeriod = next.period ?? 'AM';\n\n\t\t\tif (segmentKey === 'hours') {\n\t\t\t\tif (format === '24') {\n\t\t\t\t\tconst clamped = Math.min(Math.max(candidate, 0), HOURS_24_MAX);\n\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t} else {\n\t\t\t\t\tif (candidate === 0) {\n\t\t\t\t\t\tnextPeriod = 'AM';\n\t\t\t\t\t\tnext.hours = DEFAULT_12H;\n\t\t\t\t\t} else if (candidate > 12) {\n\t\t\t\t\t\tnextPeriod = determinePeriodFromHours(candidate);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(hoursToDisplay(candidate, '12').toString());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst clamped = Math.min(Math.max(candidate, 1), HOURS_12_MAX);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t\t\tnextPeriod = current.period ?? determinePeriodFromHours(candidate);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (segmentKey === 'minutes') {\n\t\t\t\tnext.minutes = ensureTwoDigits(Math.min(Math.max(candidate, 0), MINUTES_MAX).toString());\n\t\t\t} else if (segmentKey === 'seconds') {\n\t\t\t\tnext.seconds = ensureTwoDigits(Math.min(Math.max(candidate, 0), SECONDS_MAX).toString());\n\t\t\t}\n\n\t\t\tconst updated = { ...next, period: format === '12' ? nextPeriod : undefined };\n\t\t\tupdateSegments(updated);\n\t\t\temitAligned(updated);\n\t\t},\n\t\t[format, updateSegments, emitAligned]\n\t);\n\n\t// Fallback for paste / IME: parses the raw input string.\n\tconst handleNumericChange = React.useCallback(\n\t\t(key: TimeSegmentKey, rawValue: string) => {\n\t\t\tdigitEntryRef.current = null;\n\t\t\tconst sanitized = sanitizeNumeric(rawValue);\n\t\t\tconst next: DisplayTimeSegments = { ...fillBlanks(segmentsRef.current, format) };\n\t\t\tlet nextPeriod = next.period ?? 'AM';\n\n\t\t\tif (key === 'hours') {\n\t\t\t\tif (format === '24') {\n\t\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\t\tconst clamped = Number.isNaN(v) ? 0 : Math.min(Math.max(v, 0), HOURS_24_MAX);\n\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t} else {\n\t\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\t\tif (Number.isNaN(v)) {\n\t\t\t\t\t\tnext.hours = DEFAULT_12H;\n\t\t\t\t\t\tnextPeriod = next.period ?? 'AM';\n\t\t\t\t\t} else if (sanitized.length === 2 && v > 12) {\n\t\t\t\t\t\tnextPeriod = determinePeriodFromHours(v);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(hoursToDisplay(v, '12').toString());\n\t\t\t\t\t} else if (v === 0) {\n\t\t\t\t\t\tnextPeriod = 'AM';\n\t\t\t\t\t\tnext.hours = DEFAULT_12H;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst clamped = Math.min(Math.max(v, 1), HOURS_12_MAX);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t\t\tif (sanitized.length === 2) {\n\t\t\t\t\t\t\tnextPeriod = next.period ?? determinePeriodFromHours(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key === 'minutes') {\n\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\tconst clamped = Number.isNaN(v) ? 0 : Math.min(Math.max(v, 0), MINUTES_MAX);\n\t\t\t\tnext.minutes = ensureTwoDigits(clamped.toString());\n\t\t\t} else if (key === 'seconds') {\n\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\tconst clamped = Number.isNaN(v) ? 0 : Math.min(Math.max(v, 0), SECONDS_MAX);\n\t\t\t\tnext.seconds = ensureTwoDigits(clamped.toString());\n\t\t\t}\n\n\t\t\tconst updated = { ...next, period: format === '12' ? nextPeriod : undefined };\n\t\t\tupdateSegments(updated);\n\t\t\temitAligned(updated);\n\t\t},\n\t\t[format, updateSegments, emitAligned]\n\t);\n\n\tconst handlePeriodChange = React.useCallback(\n\t\t(period: TimePeriod) => {\n\t\t\tif (format !== '12') return;\n\t\t\tdigitEntryRef.current = null;\n\t\t\tcommitSegments({ ...fillBlanks(segmentsRef.current, format), period });\n\t\t},\n\t\t[commitSegments, format]\n\t);\n\n\t// On blur: commit the current segments (align to step + notify parent),\n\t// and end any two-digit entry that was in progress.\n\tconst handleBlur = React.useCallback(() => {\n\t\tdigitEntryRef.current = null;\n\t\tcommitSegments(segmentsRef.current);\n\t}, [commitSegments]);\n\n\t// Entering a segment starts a new two-digit entry.\n\tconst handleFocus = React.useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n\t\tdigitEntryRef.current = null;\n\t\tevent.target.select();\n\t}, []);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(event: React.KeyboardEvent<HTMLInputElement>, key: TimeSegmentKey) => {\n\t\t\tconst isDigitKey = event.key.length === 1 && /\\d/.test(event.key);\n\t\t\tif (isDigitKey && !event.metaKey && !event.ctrlKey && !event.altKey) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tapplyDigitInput(key, Number.parseInt(event.key, 10));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === 'ArrowRight') {\n\t\t\t\tfocusSegment(getNextKey(key, includeSeconds));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === 'ArrowLeft') {\n\t\t\t\tfocusSegment(getPreviousKey(key, includeSeconds));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === 'Backspace') {\n\t\t\t\tconst target = event.currentTarget;\n\t\t\t\tif (target.selectionStart === 0 && target.selectionEnd === 0) {\n\t\t\t\t\tfocusSegment(getPreviousKey(key, includeSeconds));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[applyDigitInput, focusSegment, includeSeconds]\n\t);\n\n\tconst periodToggleValue = React.useMemo<TimePeriod[] | undefined>(() => {\n\t\tif (format !== '12') return undefined;\n\t\treturn segments.period ? [segments.period] : undefined;\n\t}, [format, segments.period]);\n\n\tconst segmentLabels: Record<TimeSegmentKey, string> = {\n\t\thours: t.hours,\n\t\tminutes: t.minutes,\n\t\tseconds: t.seconds,\n\t};\n\n\tconst editor = (\n\t\t<div\n\t\t\tref={mode === 'inline' ? (ref as React.Ref<HTMLDivElement>) : undefined}\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center gap-space-md [&>.input--component]:w-auto [&>.input--component]:shrink-0',\n\t\t\t\tmode === 'inline' && ['time-picker--component', className]\n\t\t\t)}\n\t\t>\n\t\t\t{activeOrder.map((segmentKey, index) => (\n\t\t\t\t<React.Fragment key={segmentKey}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\tinputRefs.current[segmentKey] = node;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid={segmentKey === 'hours' && mode === 'inline' ? id : undefined}\n\t\t\t\t\t\tvalue={segments[segmentKey] ?? BLANK}\n\t\t\t\t\t\tonChange={(event) => handleNumericChange(segmentKey, event.target.value)}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyDown(event, segmentKey)}\n\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\tpattern=\"\\d*\"\n\t\t\t\t\t\tmaxLength={2}\n\t\t\t\t\t\tshowCharacterCount={false}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\taria-label={segmentLabels[segmentKey]}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tclassName={cn('time-picker--segment text-center', segmentWidthClasses[size])}\n\t\t\t\t\t/>\n\t\t\t\t\t{index < activeOrder.length - 1 && (\n\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">:</Text>\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t))}\n\n\t\t\t{format === '12' && (\n\t\t\t\t// A joined outline group with the same frame as the segments beside it;\n\t\t\t\t// the chosen half of the day reads like a selected PillRadioGroup pill.\n\t\t\t\t<ToggleGroup\n\t\t\t\t\tvalue={periodToggleValue}\n\t\t\t\t\tonValueChange={(values) => {\n\t\t\t\t\t\tconst period = values[0];\n\t\t\t\t\t\tif (!period) return;\n\t\t\t\t\t\thandlePeriodChange(period as TimePeriod);\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize={size === 'sm' ? 'sm' : 'default'}\n\t\t\t\t\tclassName=\"time-picker--period\"\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupItem value=\"AM\" aria-label={t.am} className={cn(formControlSizeClasses[size], periodItemClasses)}>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{t.am}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t<ToggleGroupItem value=\"PM\" aria-label={t.pm} className={cn(formControlSizeClasses[size], periodItemClasses)}>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{t.pm}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t</ToggleGroup>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (mode === 'inline') {\n\t\treturn editor;\n\t}\n\n\t// Read the trigger off the local segments rather than `value`, so an\n\t// uncontrolled call site still sees what it typed.\n\tconst isBlank = segments.hours === BLANK && segments.minutes === BLANK;\n\tconst triggerText = isBlank\n\t\t? (placeholder ?? t.placeholder)\n\t\t: formatNormalizedTimeForDisplay(\n\t\t\tdisplaySegmentsToNormalizedTime(fillBlanks(segments, format), format, includeSeconds),\n\t\t\tincludeSeconds,\n\t\t\tformat,\n\t\t\t{ am: t.am, pm: t.pm }\n\t\t);\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t<PopoverTrigger\n\t\t\t\tref={ref as React.Ref<HTMLButtonElement>}\n\t\t\t\tid={id}\n\t\t\t\taria-expanded={open}\n\t\t\t\taria-invalid={invalid}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'time-picker--component',\n\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t'justify-start',\n\t\t\t\t\tisBlank && 'text-muted-foreground',\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Clock className=\"size-icon shrink-0\" />\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t{triggerText}\n\t\t\t\t</Text>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent className=\"time-picker--panel w-auto\" align=\"start\">\n\t\t\t\t{editor}\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n});\n\nTimePicker.displayName = 'TimePicker';\n","/**\n * Single-date variant of <DatePicker>, moved out of date-picker.tsx\n * unchanged. Internal: date-picker.tsx is the only importer, and\n * date-pickers/index.ts does not re-export it.\n */\nimport { format } from 'date-fns';\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '../buttons';\nimport { Calendar } from '../../ui/calendar';\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger\n} from '../popover';\nimport { Separator } from '../display/separator';\nimport { FormField } from '../forms/form-field';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { DatePickerField } from './date-picker-field';\nimport { DatePickerFooter } from './date-picker-footer';\nimport { DatePickerHeader } from './date-picker-header';\nimport {\n\tcreateDateOutput,\n\tapplyTimeToDate,\n\tformatDateButtonText,\n\tcreateDefaultNormalizedTime,\n\tformatNormalizedTimeForDisplay,\n\tnormalizedTimeToString,\n\tparseTimeString,\n\treadableFormatIncludesTime,\n\talignNormalizedTimeToStep,\n\tgetDayPickerYearBounds\n} from './date-picker-helpers';\nimport type { NormalizedTime } from './date-picker-helpers';\nimport { pickerTriggerClasses, usePickerTriggerSize } from './date-picker.recipes';\nimport { formControlIconClasses } from '../forms/form-sizing';\nimport { resolvePickerButtonProps } from './date-picker-internals';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport type {\n\tSingleDatePickerProps,\n\tDateOutput\n} from './datepicker.types';\nimport { TimePicker } from './time-picker';\n\n// Single Date Picker Component\nexport function SingleDatePicker({\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tformat: dateFormat = 'yyyy-MM-dd',\n\treadableFormat = 'PPP',\n\tplaceholder,\n\tcloseOnSelect = true,\n\twithTime,\n\tdisabledDates,\n\tcalendarProps,\n\topen,\n\tsetOpen,\n\tt,\n\tdateFnsLocale,\n\tcaptionLayout,\n\tyearBounds,\n\trootRef,\n\t...baseProps\n}: SingleDatePickerProps & {\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\tt: typeof defaultDatePickerStrings;\n\tdateFnsLocale: DateFnsLocale;\n\tcaptionLayout: 'label' | 'dropdown';\n\tyearBounds: ReturnType<typeof getDayPickerYearBounds>;\n\t/** Forwarded from `DatePicker`, landing on this mode's root element. */\n\trootRef?: React.Ref<HTMLDivElement>;\n}) {\n\tconst size = usePickerTriggerSize(baseProps.size);\n\tconst generatedTriggerId = React.useId();\n\tconst triggerId = baseProps.id ?? generatedTriggerId;\n\tconst describedBy = `${triggerId}-description`;\n\tconst hasError = baseProps.error !== undefined && baseProps.error !== null && baseProps.error !== '';\n\tconst isInvalid = hasError || Boolean(baseProps.invalid);\n\tconst ariaDescribedBy = hasError ? describedBy : undefined;\n\tconst timeFormat = withTime?.format ?? '24';\n\tconst timeStep = withTime?.step ?? 60;\n\tconst includeSeconds = withTime?.showSeconds ?? false;\n\tconst readableHasTime = readableFormatIncludesTime(readableFormat);\n\tconst showTimeInButton = withTime?.showTimeInButton ?? !readableHasTime;\n\tconst [date, setDate] = React.useState<Date | undefined>(() => {\n\t\treturn value ?? defaultValue;\n\t});\n\n\t// `null` until a date exists to take a time from. A control with nothing\n\t// selected must not display a time, and seeding from the wall clock made\n\t// the popover open on \"now\" as though it had been chosen.\n\tconst [time, setTime] = React.useState<NormalizedTime | null>(() => {\n\t\tconst initial = value ?? defaultValue;\n\t\treturn initial ? createDefaultNormalizedTime(initial, includeSeconds, timeStep) : null;\n\t});\n\tconst previousValueRef = React.useRef<Date | undefined>(value ?? defaultValue ?? undefined);\n\tconst defaultInitializedRef = React.useRef(false);\n\tconst lastValueDefinedRef = React.useRef(value !== undefined);\n\n\t// Create output helper\n\tconst createOutput = React.useCallback(\n\t\t(selectedDate: Date | undefined, overrideTime?: NormalizedTime): DateOutput => {\n\t\t\tlet finalDate = selectedDate;\n\t\t\tconst effectiveTime = overrideTime ?? time;\n\t\t\tif (selectedDate && withTime?.enabled && effectiveTime) {\n\t\t\t\tconst applied = applyTimeToDate(selectedDate, effectiveTime);\n\t\t\t\tfinalDate = Number.isFinite(applied.getTime()) ? applied : undefined;\n\t\t\t}\n\t\t\treturn createDateOutput(finalDate, dateFormat, readableFormat, dateFnsLocale);\n\t\t},\n\t\t[dateFormat, readableFormat, dateFnsLocale, withTime, time]\n\t);\n\n\tReact.useEffect(() => {\n\t\tconst isTimeEnabled = Boolean(withTime?.enabled);\n\t\tconst wasValueDefined = lastValueDefinedRef.current;\n\t\tconst isValueDefined = value !== undefined;\n\n\t\tconst applyState = (baseDate: Date, emitChange: boolean) => {\n\t\t\tconst normalized = alignNormalizedTimeToStep(\n\t\t\t\tcreateDefaultNormalizedTime(baseDate, includeSeconds, timeStep),\n\t\t\t\ttimeStep,\n\t\t\t\tincludeSeconds\n\t\t\t);\n\t\t\tsetDate((current) => {\n\t\t\t\tconst currentTime = current?.getTime?.();\n\t\t\t\tconst nextTime = baseDate.getTime();\n\t\t\t\treturn currentTime !== nextTime ? baseDate : current;\n\t\t\t});\n\t\t\tsetTime((current) => {\n\t\t\t\tif (\n\t\t\t\t\tcurrent\n\t\t\t\t\t&& current.hours === normalized.hours\n\t\t\t\t\t&& current.minutes === normalized.minutes\n\t\t\t\t\t&& current.seconds === normalized.seconds\n\t\t\t\t) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn normalized;\n\t\t\t});\n\t\t\tpreviousValueRef.current = baseDate;\n\t\t\tdefaultInitializedRef.current = true;\n\t\t\tif (emitChange && isTimeEnabled) {\n\t\t\t\tconst applied = applyTimeToDate(baseDate, normalized);\n\t\t\t\tonValueChange?.(createDateOutput(applied, dateFormat, readableFormat, dateFnsLocale));\n\t\t\t}\n\t\t};\n\n\t\tif (!isTimeEnabled) {\n\t\t\tdefaultInitializedRef.current = false;\n\t\t\tpreviousValueRef.current = value ?? defaultValue ?? undefined;\n\t\t\tsetDate(value ?? defaultValue);\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tconst prev = previousValueRef.current;\n\t\tconst prevTime = prev?.getTime?.();\n\t\tconst valueTime = value?.getTime?.();\n\n\t\tif (!isValueDefined && wasValueDefined && defaultValue === undefined) {\n\t\t\tdefaultInitializedRef.current = false;\n\t\t\tpreviousValueRef.current = undefined;\n\t\t}\n\n\t\tif (value !== undefined && valueTime !== prevTime) {\n\t\t\tapplyState(value, false);\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (value === undefined && defaultValue !== undefined) {\n\t\t\tconst defaultMillis = defaultValue.getTime();\n\t\t\tif (prevTime !== defaultMillis || !defaultInitializedRef.current) {\n\t\t\t\tapplyState(defaultValue, false);\n\t\t\t}\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (value === undefined && defaultValue === undefined && !defaultInitializedRef.current) {\n\t\t\tdefaultInitializedRef.current = true;\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tlastValueDefinedRef.current = isValueDefined;\n\t}, [\n\t\twithTime?.enabled,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tincludeSeconds,\n\t\ttimeStep,\n\t\tonValueChange,\n\t\tdateFormat,\n\t\treadableFormat,\n\t\tdateFnsLocale,\n\t]);\n\n\tReact.useEffect(() => {\n\t\tif (!withTime?.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tsetTime((current) => {\n\t\t\tif (!current) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tconst aligned = alignNormalizedTimeToStep(current, timeStep, includeSeconds);\n\t\t\tif (\n\t\t\t\tcurrent.hours === aligned.hours &&\n\t\t\t\tcurrent.minutes === aligned.minutes &&\n\t\t\t\tcurrent.seconds === aligned.seconds\n\t\t\t) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn aligned;\n\t\t});\n\t}, [withTime?.enabled, timeStep, includeSeconds]);\n\n\t// Handle selection\n\tconst handleSelect = React.useCallback(\n\t\t(newDate: Date | undefined) => {\n\t\t\tsetDate(newDate);\n\t\t\tlet seededTime: NormalizedTime | undefined;\n\t\t\tif (withTime?.enabled && newDate) {\n\t\t\t\tdefaultInitializedRef.current = true;\n\t\t\t\tpreviousValueRef.current = newDate;\n\t\t\t\t// First date of an empty control: the time starts from that\n\t\t\t\t// date's own midnight rather than staying blank.\n\t\t\t\tif (!time) {\n\t\t\t\t\tseededTime = createDefaultNormalizedTime(newDate, includeSeconds, timeStep);\n\t\t\t\t\tsetTime(seededTime);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonValueChange?.(createOutput(newDate, seededTime));\n\t\t\tif (closeOnSelect && newDate) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onValueChange, createOutput, closeOnSelect, setOpen, withTime, time, includeSeconds, timeStep]\n\t);\n\n\t// Handle time change. <TimePicker> speaks 'HH:mm[:ss]' strings; this\n\t// variant keeps a NormalizedTime, so the two convert at the seam.\n\tconst handleTimeChange = React.useCallback(\n\t\t(next: string | null) => {\n\t\t\tconst nextTime = parseTimeString(next ?? undefined);\n\t\t\tif (!nextTime) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTime(nextTime);\n\t\t\tif (date) {\n\t\t\t\tonValueChange?.(createOutput(date, nextTime));\n\t\t\t}\n\t\t},\n\t\t[date, onValueChange, createOutput]\n\t);\n\n\tconst timeDisplay = React.useMemo(() => {\n\t\tif (!withTime?.enabled || !time) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn formatNormalizedTimeForDisplay(time, includeSeconds, timeFormat, {\n\t\t\tam: t.am,\n\t\t\tpm: t.pm,\n\t\t});\n\t}, [withTime?.enabled, time, includeSeconds, timeFormat, t]);\n\n\t// Button text\n\tconst buttonText = React.useMemo(\n\t\t() => formatDateButtonText(\n\t\t\tdate,\n\t\t\treadableFormat,\n\t\t\tplaceholder,\n\t\t\tt.selectDate,\n\t\t\tshowTimeInButton ? timeDisplay : undefined,\n\t\t\tdateFnsLocale\n\t\t),\n\t\t[date, readableFormat, placeholder, t, timeDisplay, showTimeInButton, dateFnsLocale]\n\t);\n\n\tconst footerSummary = React.useMemo(\n\t\t() => (date ? format(date, readableFormat, { locale: dateFnsLocale }) : undefined),\n\t\t[date, readableFormat, dateFnsLocale]\n\t);\n\n\treturn (\n\t\t<DatePickerField\n\t\t\trootRef={rootRef}\n\t\t\tclassName={baseProps.className}\n\t\t\tlabel={baseProps.label}\n\t\t\thint={baseProps.hint}\n\t\t\terror={baseProps.error}\n\t\t\ttriggerId={triggerId}\n\t\t\tdescribedById={describedBy}\n\t\t>\n\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\t\tconst resolved = resolvePickerButtonProps(baseProps.buttonTone, baseProps.buttonStyle);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tid={triggerId}\n\t\t\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\taria-invalid={isInvalid}\n\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tpickerTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t!date && 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CalendarIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t<PopoverContent\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"w-auto gap-0\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t{!!baseProps.header && <DatePickerHeader config={baseProps.header} />}\n\n\t\t\t\t\t{/* Calendar */}\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\tmode=\"single\"\n\t\t\t\t\t\tselected={date}\n\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\tdefaultMonth={date}\n\t\t\t\t\t\tnumberOfMonths={baseProps.numberOfMonths}\n\t\t\t\t\t\tshowOutsideDays={baseProps.showOutsideDays}\n\t\t\t\t\t\tdisabled={disabledDates ?? baseProps.disabled}\n\t\t\t\t\t\tlocale={dateFnsLocale}\n\t\t\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\t\t\tstartMonth={yearBounds.startMonth}\n\t\t\t\t\t\tendMonth={yearBounds.endMonth}\n\t\t\t\t\t\t{...calendarProps}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* Time Selection: an ordinary labelled field row, no decorative glyph. */}\n\t\t\t\t\t{!!withTime?.enabled && <>\n\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t<div className=\"date-picker--time p-surface\">\n\t\t\t\t\t\t\t\t<FormField label={t.startTime}>\n\t\t\t\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t\t\t\tvalue={time ? normalizedTimeToString(time, includeSeconds) : null}\n\t\t\t\t\t\t\t\t\t\tonValueChange={handleTimeChange}\n\t\t\t\t\t\t\t\t\t\tformat={timeFormat}\n\t\t\t\t\t\t\t\t\t\tprecision={includeSeconds ? 'seconds' : 'minutes'}\n\t\t\t\t\t\t\t\t\t\tstep={timeStep}\n\t\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t\t\t// Pinned: the popover's time row is deliberately\n\t\t\t\t\t\t\t\t\t\t// compact and must not grow with a consumer's\n\t\t\t\t\t\t\t\t\t\t// default control size.\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\t\thours: t.hours,\n\t\t\t\t\t\t\t\t\t\t\tminutes: t.minutes,\n\t\t\t\t\t\t\t\t\t\t\tseconds: t.seconds,\n\t\t\t\t\t\t\t\t\t\t\tam: t.am,\n\t\t\t\t\t\t\t\t\t\t\tpm: t.pm,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>}\n\n\t\t\t\t\t{/* Footer */}\n\t\t\t\t\t{!!baseProps.footer && (\n\t\t\t<DatePickerFooter\n\t\t\t\t\t\t\tconfig={baseProps.footer}\n\t\t\t\t\t\t\toutput={createOutput(date)}\n\t\t\t\t\t\t\thasSelection={!!date}\n\t\t\t\t\t\t\tautoSummary={footerSummary}\n\t\t\t\t\t\t/>\n\t\t)}\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\t\t</DatePickerField>\n\t);\n}\n","/**\n * Multiple-dates variant of <DatePicker>, moved out of date-picker.tsx\n * unchanged. Internal: date-picker.tsx is the only importer, and\n * date-pickers/index.ts does not re-export it.\n */\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '../buttons';\nimport { Calendar } from '../../ui/calendar';\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger\n} from '../popover';\nimport { Separator } from '../display/separator';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { DatePickerField } from './date-picker-field';\nimport { DatePickerFooter } from './date-picker-footer';\nimport { DatePickerHeader } from './date-picker-header';\nimport {\n\tcreateMultipleDatesOutput,\n\tgetMultipleDatesValidationMessage,\n\tformatMultipleDatesButtonText,\n\tgetDayPickerYearBounds\n} from './date-picker-helpers';\nimport { pickerTriggerClasses, usePickerTriggerSize } from './date-picker.recipes';\nimport { formControlIconClasses } from '../forms/form-sizing';\nimport { resolvePickerButtonProps } from './date-picker-internals';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport type {\n\tMultipleDatePickerProps,\n\tMultipleDatesOutput\n} from './datepicker.types';\n\n// Multiple Date Picker Component\nexport function MultipleDatePicker({\n\tvalue,\n\tdefaultValue,\n\t\tonValueChange,\n\t\tformat: dateFormat = 'yyyy-MM-dd',\n\t\treadableFormat = 'PPP',\n\t\tplaceholder,\n\t\tmin,\n\tmax,\n\trequired,\n\tcloseOnSelect = false,\n\tdisabledDates,\n\tcalendarProps,\n\topen,\n\tsetOpen,\n\tt,\n\tdateFnsLocale,\n\tcaptionLayout,\n\tyearBounds,\n\trootRef,\n\t...baseProps\n}: MultipleDatePickerProps & {\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\tt: typeof defaultDatePickerStrings;\n\tdateFnsLocale: DateFnsLocale;\n\tcaptionLayout: 'label' | 'dropdown';\n\tyearBounds: ReturnType<typeof getDayPickerYearBounds>;\n\t/** Forwarded from `DatePicker`, landing on this mode's root element. */\n\trootRef?: React.Ref<HTMLDivElement>;\n}) {\n\tconst size = usePickerTriggerSize(baseProps.size);\n\tconst generatedTriggerId = React.useId();\n\tconst triggerId = baseProps.id ?? generatedTriggerId;\n\tconst describedBy = `${triggerId}-description`;\n\tconst hasError = baseProps.error !== undefined && baseProps.error !== null && baseProps.error !== '';\n\tconst isInvalid = hasError || Boolean(baseProps.invalid);\n\tconst ariaDescribedBy = hasError ? describedBy : undefined;\n\tconst [dates, setDates] = React.useState<Date[]>(value ?? defaultValue ?? []);\n\n\t// Sync with controlled value\n\tReact.useEffect(() => {\n\t\tif (value !== undefined) {\n\t\t\tsetDates(value);\n\t\t}\n\t}, [value]);\n\n\t// Create output helper\n\tconst createOutput = React.useCallback(\n\t\t(dates: Date[]): MultipleDatesOutput =>\n\t\t\tcreateMultipleDatesOutput(dates, dateFormat, readableFormat, dateFnsLocale),\n\t\t[dateFormat, readableFormat, dateFnsLocale]\n\t);\n\n\t// Handle selection. `max` is enforced by the calendar, which is handed\n\t// the same `max` prop — the component is never given more dates than it\n\t// allows, so a guard here would be dead code.\n\tconst handleSelect = React.useCallback(\n\t\t(newDates?: Date[] | Date) => {\n\t\t\tconst selectedDates = Array.isArray(newDates) ? newDates : newDates ? [newDates] : [];\n\n\t\t\tsetDates(selectedDates);\n\t\t\tonValueChange?.(createOutput(selectedDates));\n\n\t\t\tif (closeOnSelect && selectedDates.length > 0) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onValueChange, createOutput, closeOnSelect, setOpen]\n\t);\n\n\t// Button text\n\tconst buttonText = React.useMemo(() =>\n\t\tformatMultipleDatesButtonText(dates, readableFormat, placeholder, t.selectDates, t, dateFnsLocale),\n\t\t[dates, readableFormat, placeholder, t, dateFnsLocale]\n\t);\n\n\t// Validation message\n\tconst validationMessage = React.useMemo(() =>\n\t\tgetMultipleDatesValidationMessage(dates, min, max, required, t),\n\t\t[dates, min, max, required, t]\n\t);\n\n\tconst footerSummary = React.useMemo(\n\t\t() => (dates.length > 0 ? t.datesSelected(dates.length) : undefined),\n\t\t[dates.length, t]\n\t);\n\n\treturn (\n\t\t<DatePickerField\n\t\t\trootRef={rootRef}\n\t\t\tclassName={baseProps.className}\n\t\t\tlabel={baseProps.label}\n\t\t\thint={baseProps.hint}\n\t\t\terror={baseProps.error}\n\t\t\ttriggerId={triggerId}\n\t\t\tdescribedById={describedBy}\n\t\t>\n\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\t\tconst resolved = resolvePickerButtonProps(baseProps.buttonTone, baseProps.buttonStyle);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tid={triggerId}\n\t\t\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\taria-invalid={isInvalid}\n\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tpickerTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\tdates.length === 0 && 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CalendarIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t<PopoverContent\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"w-auto gap-0\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t{!!baseProps.header && <DatePickerHeader config={baseProps.header} />}\n\n\t\t\t\t\t{/* Calendar */}\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\tmode=\"multiple\"\n\t\t\t\t\t\tselected={dates}\n\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\tdefaultMonth={dates[0]}\n\t\t\t\t\t\tnumberOfMonths={baseProps.numberOfMonths}\n\t\t\t\t\t\tshowOutsideDays={baseProps.showOutsideDays}\n\t\t\t\t\t\tdisabled={disabledDates ?? baseProps.disabled}\n\t\t\t\t\t\tlocale={dateFnsLocale}\n\t\t\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\t\t\tstartMonth={yearBounds.startMonth}\n\t\t\t\t\t\tendMonth={yearBounds.endMonth}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t{...calendarProps}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* Validation Message */}\n\t\t\t\t\t{!!validationMessage && <>\n\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t<div className=\"p-surface\">\n\t\t\t\t\t\t\t\t<Text type=\"secondary\">{validationMessage}</Text>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>}\n\n\t\t\t\t\t{/* Footer */}\n\t\t\t\t\t{!!baseProps.footer && (\n\t\t\t<DatePickerFooter\n\t\t\t\t\t\t\tconfig={baseProps.footer}\n\t\t\t\t\t\t\toutput={createOutput(dates)}\n\t\t\t\t\t\t\thasSelection={dates.length > 0}\n\t\t\t\t\t\t\tautoSummary={footerSummary}\n\t\t\t\t\t\t/>\n\t\t)}\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\n\t\t</DatePickerField>\n\t);\n}\n","/**\n * Date-range variant of <DatePicker>, moved out of date-picker.tsx\n * unchanged. Internal: date-picker.tsx is the only importer, and\n * date-pickers/index.ts does not re-export it.\n */\nimport { format } from 'date-fns';\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport * as React from 'react';\nimport type { DateRange } from 'react-day-picker';\n\nimport { Button } from '../buttons';\nimport { Calendar } from '../../ui/calendar';\nimport { useDatesConfig } from '../../../lib/ui-provider';\nimport { useIsMobile } from '../../../hooks/use-mobile';\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger\n} from '../popover';\nimport { Separator } from '../display/separator';\nimport { FormField } from '../forms/form-field';\nimport { Grid, Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { DatePickerField } from './date-picker-field';\nimport { DatePickerFooter } from './date-picker-footer';\nimport { DatePickerHeader } from './date-picker-header';\nimport {\n\tcreateDateRangeOutput,\n\tapplyTimeToDate,\n\tvalidateDateRange,\n\tgetRangeValidationMessage,\n\tformatRangeButtonText,\n\tcreateDefaultNormalizedTime,\n\tformatNormalizedTimeForDisplay,\n\tnormalizedTimeToString,\n\tparseTimeString,\n\treadableFormatIncludesTime,\n\talignNormalizedTimeToStep,\n\tgetDayPickerYearBounds\n} from './date-picker-helpers';\nimport type { NormalizedTime } from './date-picker-helpers';\nimport { pickerTriggerClasses, usePickerTriggerSize } from './date-picker.recipes';\nimport { formControlIconClasses } from '../forms/form-sizing';\nimport {\n\tresolvePickerButtonProps,\n\tgetDefaultPresets\n} from './date-picker-internals';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport type {\n\tRangeDatePickerProps,\n\tDateRangeOutput,\n\tPresetDateRange\n} from './datepicker.types';\nimport { TimePicker } from './time-picker';\n\n// Range Date Picker Component\nexport function RangeDatePicker({\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tformat: dateFormat = 'yyyy-MM-dd',\n\treadableFormat = 'PPP',\n\tplaceholder,\n\twithConfirm = false,\n\tmin,\n\tmax,\n\tcloseOnSelect = true,\n\twithTime,\n\tpresets: presetsProp,\n\tdisabledDates,\n\tcalendarProps,\n\topen,\n\tsetOpen,\n\tt,\n\tdateFnsLocale,\n\tcaptionLayout,\n\tyearBounds,\n\trootRef,\n\t...baseProps\n}: RangeDatePickerProps & {\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\tt: typeof defaultDatePickerStrings;\n\tdateFnsLocale: DateFnsLocale;\n\tcaptionLayout: 'label' | 'dropdown';\n\tyearBounds: ReturnType<typeof getDayPickerYearBounds>;\n\t/** Forwarded from `DatePicker`, landing on this mode's root element. */\n\trootRef?: React.Ref<HTMLDivElement>;\n}) {\n\tconst isMobile = useIsMobile();\n\tconst resolvedNumberOfMonths = baseProps.numberOfMonths ?? (isMobile ? 1 : 2);\n\t// Resolve the start-of-week so the \"This week\" preset honors the\n\t// consumer's <UIProvider config={{ dates: { weekStartsOn: 0 } }}> setting.\n\t// Library default is 1 (Monday).\n\tconst { weekStartsOn = 1 } = useDatesConfig();\n\tconst presets = presetsProp ?? getDefaultPresets(t, weekStartsOn);\n\tconst size = usePickerTriggerSize(baseProps.size);\n\tconst generatedTriggerId = React.useId();\n\tconst triggerId = baseProps.id ?? generatedTriggerId;\n\tconst describedBy = `${triggerId}-description`;\n\tconst hasError = baseProps.error !== undefined && baseProps.error !== null && baseProps.error !== '';\n\tconst isInvalid = hasError || Boolean(baseProps.invalid);\n\tconst ariaDescribedBy = hasError ? describedBy : undefined;\n\tconst timeFormat = withTime?.format ?? '24';\n\tconst timeStep = withTime?.step ?? 60;\n\tconst includeSeconds = withTime?.showSeconds ?? false;\n\tconst readableHasTime = readableFormatIncludesTime(readableFormat);\n\tconst showTimeInButton = withTime?.showTimeInButton ?? !readableHasTime;\n\tconst showTimeInSummary = withTime?.showTimeInSummary ?? !readableHasTime;\n\tconst initialRange = value ?? defaultValue;\n\tconst [range, setRange] = React.useState<DateRange | undefined>(initialRange);\n\t// `null` until each end has a date to take a time from — an end with\n\t// nothing selected must not show the wall clock as though it had been\n\t// chosen. See the matching note in date-picker-single.tsx.\n\tconst [startTime, setStartTime] = React.useState<NormalizedTime | null>(() =>\n\t\tinitialRange?.from\n\t\t\t? createDefaultNormalizedTime(initialRange.from, includeSeconds, timeStep)\n\t\t\t: null\n\t);\n\tconst [endTime, setEndTime] = React.useState<NormalizedTime | null>(() =>\n\t\tinitialRange?.to\n\t\t\t? createDefaultNormalizedTime(initialRange.to, includeSeconds, timeStep)\n\t\t\t: null\n\t);\n\tconst previousValueRef = React.useRef<DateRange | undefined>(value);\n\n\t// Validation message\n\tconst validationMessage = React.useMemo(() =>\n\t\tgetRangeValidationMessage(range, min, max, t),\n\t\t[range, min, max, t]\n\t);\n\n\tconst hasValidationMessage = validationMessage !== undefined && validationMessage !== null && validationMessage !== '';\n\tconst validationText = typeof validationMessage === 'string' ? validationMessage : '';\n\n\t// Sync with controlled value\n\tReact.useEffect(() => {\n\t\tif (value !== undefined) {\n\t\t\tsetRange(value);\n\t\t}\n\t}, [value]);\n\n\t// Sync time segments when external range changes\n\tReact.useEffect(() => {\n\t\tif (!withTime?.enabled) {\n\t\t\tpreviousValueRef.current = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst prev = previousValueRef.current;\n\t\tconst nextFrom = value?.from;\n\t\tconst nextTo = value?.to;\n\n\t\tif (nextFrom) {\n\t\t\tsetStartTime(createDefaultNormalizedTime(nextFrom, includeSeconds, timeStep));\n\t\t} else if (prev?.from) {\n\t\t\tsetStartTime(null);\n\t\t}\n\n\t\tif (nextTo) {\n\t\t\tsetEndTime(createDefaultNormalizedTime(nextTo, includeSeconds, timeStep));\n\t\t} else if (prev?.to) {\n\t\t\tsetEndTime(null);\n\t\t}\n\n\t\tpreviousValueRef.current = value;\n\t}, [value, withTime?.enabled, includeSeconds, timeStep]);\n\n\tReact.useEffect(() => {\n\t\tif (!withTime?.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tconst alignOrKeep = (current: NormalizedTime | null): NormalizedTime | null => {\n\t\t\tif (!current) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tconst aligned = alignNormalizedTimeToStep(current, timeStep, includeSeconds);\n\t\t\tif (\n\t\t\t\tcurrent.hours === aligned.hours &&\n\t\t\t\tcurrent.minutes === aligned.minutes &&\n\t\t\t\tcurrent.seconds === aligned.seconds\n\t\t\t) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn aligned;\n\t\t};\n\t\tsetStartTime(alignOrKeep);\n\t\tsetEndTime(alignOrKeep);\n\t}, [withTime?.enabled, timeStep, includeSeconds]);\n\n\t// Create output helper\n\tconst createOutput = React.useCallback(\n\t\t(currentRange: DateRange | undefined): DateRangeOutput => {\n\t\t\tlet finalRange = currentRange;\n\t\t\tif (currentRange && withTime?.enabled) {\n\t\t\t\t// An end with no time of its own keeps the time the date\n\t\t\t\t// already carries, rather than borrowing the wall clock.\n\t\t\t\tfinalRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tfrom: currentRange.from && startTime\n\t\t\t\t\t\t? applyTimeToDate(currentRange.from, startTime)\n\t\t\t\t\t\t: currentRange.from,\n\t\t\t\t\tto: currentRange.to && endTime\n\t\t\t\t\t\t? applyTimeToDate(currentRange.to, endTime)\n\t\t\t\t\t\t: currentRange.to,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn createDateRangeOutput(finalRange, dateFormat, readableFormat, dateFnsLocale);\n\t\t},\n\t\t[dateFormat, readableFormat, dateFnsLocale, withTime, startTime, endTime]\n\t);\n\n\t// <TimePicker> speaks 'HH:mm[:ss]' strings; this variant keeps a\n\t// NormalizedTime for each end, so the two convert at the seam.\n\tconst handleStartTimeChange = React.useCallback((next: string | null) => {\n\t\tconst parsed = parseTimeString(next ?? undefined);\n\t\tif (parsed) {\n\t\t\tsetStartTime(parsed);\n\t\t}\n\t}, []);\n\n\tconst handleEndTimeChange = React.useCallback((next: string | null) => {\n\t\tconst parsed = parseTimeString(next ?? undefined);\n\t\tif (parsed) {\n\t\t\tsetEndTime(parsed);\n\t\t}\n\t}, []);\n\n\t/**\n\t * react-day-picker completes a range on the *first* click, handing back\n\t * `{ from, to }` with both ends on the day just clicked. Taken at face\n\t * value that is a finished one-day range, which used to close the\n\t * popover before an end date could be chosen.\n\t *\n\t * So the two-click selection is driven from the clicked day instead:\n\t * the first click opens an incomplete range, the second closes it, and\n\t * a click on a finished range starts a new one. `triggerDate` is\n\t * undefined when a preset supplies a whole range, which is taken as-is.\n\t */\n\tconst resolveNextRange = React.useCallback(\n\t\t(\n\t\t\tdayPickerRange: DateRange | undefined,\n\t\t\ttriggerDate: Date | undefined,\n\t\t\tcurrent: DateRange | undefined\n\t\t): DateRange | undefined => {\n\t\t\tif (!triggerDate) {\n\t\t\t\treturn dayPickerRange;\n\t\t\t}\n\t\t\tif (!current?.from || current.to) {\n\t\t\t\treturn { from: triggerDate, to: undefined };\n\t\t\t}\n\t\t\treturn triggerDate < current.from\n\t\t\t\t? { from: triggerDate, to: current.from }\n\t\t\t\t: { from: current.from, to: triggerDate };\n\t\t},\n\t\t[]\n\t);\n\n\t// Handle selection\n\tconst handleSelect = React.useCallback(\n\t\t(dayPickerRange: DateRange | undefined, triggerDate?: Date) => {\n\t\t\tconst nextRange = resolveNextRange(dayPickerRange, triggerDate, range);\n\n\t\t\tsetRange(nextRange);\n\n\t\t\tif (withConfirm || withTime?.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// A range that breaks `min`/`max` is still reported and still\n\t\t\t// shown — with its validation message — rather than silently\n\t\t\t// discarded. Only a valid, complete range closes the popover.\n\t\t\tonValueChange?.(createOutput(nextRange));\n\n\t\t\tconst isComplete = Boolean(nextRange?.from && nextRange?.to);\n\t\t\tconst isValid = validateDateRange(nextRange, min, max).isValid;\n\t\t\tif (closeOnSelect && isComplete && isValid) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[range, resolveNextRange, withConfirm, withTime, onValueChange, createOutput, min, max, closeOnSelect, setOpen]\n\t);\n\n\t// Handle preset selection\n\tconst handlePresetSelect = React.useCallback(\n\t\t(preset: PresetDateRange) => {\n\t\t\tconst range = preset.getValue();\n\t\t\thandleSelect(range);\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\t// Handle confirm\n\tconst handleConfirm = React.useCallback(() => {\n\t\tonValueChange?.(createOutput(range));\n\t\tsetOpen(false);\n\t}, [range, onValueChange, createOutput, setOpen]);\n\n\tconst startTimeDisplay = React.useMemo(() => {\n\t\tif (!withTime?.enabled || !startTime) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn formatNormalizedTimeForDisplay(startTime, includeSeconds, timeFormat, {\n\t\t\tam: t.am,\n\t\t\tpm: t.pm,\n\t\t});\n\t}, [withTime?.enabled, startTime, includeSeconds, timeFormat, t]);\n\n\tconst endTimeDisplay = React.useMemo(() => {\n\t\tif (!withTime?.enabled || !endTime) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn formatNormalizedTimeForDisplay(endTime, includeSeconds, timeFormat, {\n\t\t\tam: t.am,\n\t\t\tpm: t.pm,\n\t\t});\n\t}, [withTime?.enabled, endTime, includeSeconds, timeFormat, t]);\n\n\t// Button text\n\tconst buttonText = React.useMemo(() => {\n\t\tif (withTime?.enabled && range?.from) {\n\t\t\tconst fromBase = format(range.from, readableFormat, { locale: dateFnsLocale });\n\t\t\tconst fromText = showTimeInButton && startTimeDisplay ? `${fromBase} ${startTimeDisplay}` : fromBase;\n\t\t\tif (range.to) {\n\t\t\t\tconst toBase = format(range.to, readableFormat, { locale: dateFnsLocale });\n\t\t\t\tconst toText = showTimeInButton && endTimeDisplay ? `${toBase} ${endTimeDisplay}` : toBase;\n\t\t\t\treturn `${fromText} - ${toText}`;\n\t\t\t}\n\t\t\treturn fromText;\n\t\t}\n\t\treturn formatRangeButtonText(range, readableFormat, placeholder, t.selectDateRange, dateFnsLocale);\n\t}, [withTime?.enabled, range, readableFormat, showTimeInButton, startTimeDisplay, endTimeDisplay, placeholder, t, dateFnsLocale]);\n\n\tconst footerSummary = React.useMemo(() => {\n\t\tif (!range?.from || !range?.to) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst fromBase = format(range.from, readableFormat, { locale: dateFnsLocale });\n\t\tconst toBase = format(range.to, readableFormat, { locale: dateFnsLocale });\n\t\tconst fromText = showTimeInSummary && startTimeDisplay ? `${fromBase} ${startTimeDisplay}` : fromBase;\n\t\tconst toText = showTimeInSummary && endTimeDisplay ? `${toBase} ${endTimeDisplay}` : toBase;\n\n\t\treturn `${fromText} - ${toText}`;\n\t}, [range, readableFormat, dateFnsLocale, showTimeInSummary, startTimeDisplay, endTimeDisplay]);\n\n\treturn (\n\t\t<DatePickerField\n\t\t\trootRef={rootRef}\n\t\t\tclassName={baseProps.className}\n\t\t\tlabel={baseProps.label}\n\t\t\thint={baseProps.hint}\n\t\t\terror={baseProps.error}\n\t\t\ttriggerId={triggerId}\n\t\t\tdescribedById={describedBy}\n\t\t>\n\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\t\tconst resolved = resolvePickerButtonProps(baseProps.buttonTone, baseProps.buttonStyle);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tid={triggerId}\n\t\t\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\taria-invalid={isInvalid}\n\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tpickerTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t!range && 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CalendarIcon className={cn(formControlIconClasses[size], 'shrink-0')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t<PopoverContent\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"w-auto gap-0\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t{!!baseProps.header && <DatePickerHeader config={baseProps.header} />}\n\n\t\t\t\t\t<div className=\"flex flex-col sm:flex-row\">\n\t\t\t\t\t\t{/* Preset grid on narrow surfaces; sidebar once horizontal space is available. */}\n\t\t\t\t\t\t{presets.length > 0 && (\n\t\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-space-2xs border-b border-border p-surface-xs sm:flex sm:min-w-30 sm:flex-col sm:border-r sm:border-b-0\">\n\t\t\t\t\t\t\t\t{presets.map((preset) => (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tkey={preset.label}\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => handlePresetSelect(preset)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{preset.label}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Calendar */}\n\t\t\t\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t\t\t\t<Calendar\n\t\t\t\t\t\t\t\tmode=\"range\"\n\t\t\t\t\t\t\t\tselected={range}\n\t\t\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\t\t\tdefaultMonth={range?.from}\n\t\t\t\t\t\t\t\tnumberOfMonths={resolvedNumberOfMonths}\n\t\t\t\t\t\t\t\tshowOutsideDays={baseProps.showOutsideDays}\n\t\t\t\t\t\t\t\tdisabled={disabledDates ?? baseProps.disabled}\n\t\t\t\t\t\t\t\tlocale={dateFnsLocale}\n\t\t\t\t\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\t\t\t\t\tstartMonth={yearBounds.startMonth}\n\t\t\t\t\t\t\t\tendMonth={yearBounds.endMonth}\n\t\t\t\t\t\t\t\t{...calendarProps}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'[--cell-size:1.875rem] sm:[--cell-size:calc(var(--height-action)*8/9*var(--density-scale))]',\n\t\t\t\t\t\t\t\t\tcalendarProps?.className,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{/* Summary, time and confirmation. Rendered only when one of them has\n\t\t\t\t\t\t\t something to show, so a footer-only picker gets no empty padded band. */}\n\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\tconst showSummary = !!range?.from && !baseProps.footer;\n\t\t\t\t\t\t\t\tconst showTime = !!withTime?.enabled && !!range?.from;\n\t\t\t\t\t\t\t\tconst showConfirm = !!(withConfirm || withTime?.enabled) && !baseProps.footer;\n\t\t\t\t\t\t\t\tif (!showSummary && !showTime && !hasValidationMessage && !showConfirm) return null;\n\t\t\t\t\t\t\t\treturn <>\n\t\t\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t\t\t<div className=\"date-picker--range-footer p-surface\">\n\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\">\n\t\t\t\t\t\t\t\t\t\t{showSummary && !!range?.from && (\n\t\t\t\t\t <Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"xl\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">{t.from}:</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{format(range.from, readableFormat, { locale: dateFnsLocale })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{showTimeInSummary && startTimeDisplay ? ` ${startTimeDisplay}` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!range.to && (\n\t\t\t\t\t\t <Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">{t.to}:</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{format(range.to, readableFormat, { locale: dateFnsLocale })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{showTimeInSummary && endTimeDisplay ? ` ${endTimeDisplay}` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t )}\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t )}\n\n\t\t\t\t\t\t\t\t\t\t{/* Time inputs: ordinary labelled field rows, no decorative glyph. */}\n\t\t\t\t\t\t\t\t\t\t{showTime && !!range?.from && (\n\t\t\t\t\t\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 2 }} gap=\"lg\">\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField label={t.startTime}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={startTime ? normalizedTimeToString(startTime, includeSeconds) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={handleStartTimeChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tformat={timeFormat}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprecision={includeSeconds ? 'seconds' : 'minutes'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep={timeStep}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Pinned: the time row is deliberately compact and\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// must not grow with a consumer's control size.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thours: t.hours,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminutes: t.minutes,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tseconds: t.seconds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tam: t.am,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm: t.pm,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!range.to && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<FormField label={t.endTime}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={endTime ? normalizedTimeToString(endTime, includeSeconds) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={handleEndTimeChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformat={timeFormat}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprecision={includeSeconds ? 'seconds' : 'minutes'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep={timeStep}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Pinned: the time row is deliberately compact and\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// must not grow with a consumer's control size.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thours: t.hours,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminutes: t.minutes,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tseconds: t.seconds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tam: t.am,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm: t.pm,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</Grid>\n\t\t\t\t )}\n\n\t\t\t\t\t\t\t\t\t\t{/* Validation */}\n\t\t\t\t\t\t\t\t\t\t<Text type=\"error\" content={validationText} hidden={!hasValidationMessage} />\n\n\t\t\t\t\t\t\t\t\t\t{/* Confirm button (only if no custom footer) */}\n\t\t\t\t\t\t\t\t\t\t{showConfirm && (\n\t\t\t\t\t <Button tone=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!range?.from || !range?.to || !!validationMessage}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{t.confirm}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t )}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>;\n\t\t\t\t\t\t\t})()}\n\n\t\t\t\t\t\t\t{/* Custom footer: it brings its own divider and surface inset, so it\n\t\t\t\t\t\t\t sits directly in the popover column like the other modes' footers. */}\n\t\t\t\t\t\t\t{!!baseProps.footer && (\n\t\t\t\t\t\t\t\t<DatePickerFooter\n\t\t\t\t\t\t\t\t\tconfig={baseProps.footer}\n\t\t\t\t\t\t\t\t\toutput={createOutput(range)}\n\t\t\t\t\t\t\t\t\thasSelection={!!(range?.from && range?.to)}\n\t\t\t\t\t\t\t\t\tautoSummary={footerSummary}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\n\t\t</DatePickerField>\n\t);\n}\n","import * as React from 'react';\n\nimport { useDatesConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport { getDayPickerYearBounds } from './date-picker-helpers';\nimport {\n\tisSingleMode,\n\tisMultipleMode,\n\tisRangeMode\n} from './date-picker-internals';\n// Ordered single → multiple → range, matching the dispatcher's branches.\nimport { SingleDatePicker } from './date-picker-single';\nimport { MultipleDatePicker } from './date-picker-multiple';\nimport { RangeDatePicker } from './date-picker-range';\nimport { useStrings } from '../../../lib/strings';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport { enUS } from 'date-fns/locale';\nimport type { DatePickerProps } from './datepicker.types';\n\nexport const DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(props, ref) {\n\tconst [open, setOpen] = React.useState(false);\n\tconst dates = useDatesConfig();\n\n\t// Resolve locale (date-fns Locale object). Defaults to enUS when the\n\t// consumer doesn't pass one.\n\tconst dateFnsLocale = props.locale ?? dates.locale ?? enUS;\n\n\tconst t = useStrings(defaultDatePickerStrings, props.strings);\n\n\t// Resolve year selection config\n\tconst captionLayout = React.useMemo(() => {\n\t\tif (props.enableYearDropdown || props.yearSelection?.enabled) {\n\t\t\treturn 'dropdown' as const;\n\t\t}\n\t\treturn 'label' as const;\n\t}, [props.enableYearDropdown, props.yearSelection]);\n\tconst yearBounds = React.useMemo(\n\t\t() => getDayPickerYearBounds(props.yearSelection),\n\t\t[props.yearSelection]\n\t);\n\n\t// Rule 24: the family's BEM hook is merged with the consumer's own\n\t// `className` and applied *after* the props spread, so a call-site\n\t// class composes with the hook instead of replacing it — and every\n\t// mode carries it, not just single.\n\tconst componentClassName = cn('date-picker--component', props.className);\n\n\t// Render based on mode\n\tif (isSingleMode(props)) {\n\t\treturn (\n\t\t\t<SingleDatePicker\n\t\t\t\t{...props}\n\t\t\t\trootRef={ref}\n\t\t\t\tclassName={componentClassName}\n\t\t\t\topen={open}\n\t\t\t\tsetOpen={setOpen}\n\t\t\t\tt={t}\n\t\t\t\tdateFnsLocale={dateFnsLocale}\n\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\tyearBounds={yearBounds}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isMultipleMode(props)) {\n\t\treturn (\n\t\t\t<MultipleDatePicker\n\t\t\t\t{...props}\n\t\t\t\trootRef={ref}\n\t\t\t\tclassName={componentClassName}\n\t\t\t\topen={open}\n\t\t\t\tsetOpen={setOpen}\n\t\t\t\tt={t}\n\t\t\t\tdateFnsLocale={dateFnsLocale}\n\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\tyearBounds={yearBounds}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isRangeMode(props)) {\n\t\treturn (\n\t\t\t<RangeDatePicker\n\t\t\t\t{...props}\n\t\t\t\trootRef={ref}\n\t\t\t\tclassName={componentClassName}\n\t\t\t\topen={open}\n\t\t\t\tsetOpen={setOpen}\n\t\t\t\tt={t}\n\t\t\t\tdateFnsLocale={dateFnsLocale}\n\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\tyearBounds={yearBounds}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n});\n\nDatePicker.displayName = 'DatePicker';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-DrdvPwF0.js","names":["isSimpleText","_Fragment","resolveComponentScale","useDatesConfig","useDensityConfig","cn","Text","Stack","Card","parseDateInput","Badge","Fragment$1","PlaceholderPattern","patternId","useId","className","VisuallyHidden","content","children","defaultDateBlockStrings","toneClassMap","variantClassMap","stackedSizeClass","inlineSizeClass","hasContent","value","isSimpleText$1","DateBlock","localeProp","sizeProp","stringsProp","ariaLabel","props","dates","size","defaultScale","locale","strings","useStrings","resolved","date","tones","tone","variants","variant","useBox","boxed","layout","resolvedTimePlacement","timePlacement","showsTime","time","formatOptions","weekday","format","weekdayFormat","day","dayFormat","month","monthFormat","year","yearFormat","machineValue","dateTime","resolvedAriaLabel","dateRow","showWeekday","showMonth","showYear","emptyLabel","tile","defaultContentBlockStrings","ContentBlock","forwardRef","surface","padding","headerClassName","contentClassName","footerClassName","defaultBooleanIndicatorStrings","isSimpleText","BooleanIndicator","isTrue","Icon","CheckCircle2","XCircle","badgeTone","trueTone","falseTone","label","DisplayLabel","badgeClassName","showIcon"],"sources":["../src/components/base/display/placeholder-pattern.tsx","../src/components/base/display/visually-hidden.tsx","../src/components/base/display/date-block.tsx","../src/components/base/display/content-block.strings.ts","../src/components/base/display/content-block.tsx","../src/components/base/display/boolean-indicator.tsx"],"sourcesContent":["/**\n * PlaceholderPattern — diagonal-stripe SVG fill suitable as a skeleton or\n * empty-region indicator. Uses a unique pattern id per instance so multiple\n * copies on the same page don't collide.\n */\nimport { useId } from 'react';\n\nimport { cn } from '../../../lib/utils';\nexport interface PlaceholderPatternProps {\n\tclassName?: string;\n}\n\nexport function PlaceholderPattern({ className }: PlaceholderPatternProps) {\n\tconst patternId = useId();\n\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn('placeholder-pattern--component', className)}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<pattern\n\t\t\t\t\tid={patternId}\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"10\"\n\t\t\t\t\theight=\"10\"\n\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M-3 13 15-5M-5 5l18-18M-1 21 17 3\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"0.75\"\n\t\t\t\t\t\tstrokeLinecap=\"square\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</pattern>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\tstroke=\"none\"\n\t\t\t\tfill={`url(#${patternId})`}\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n\nPlaceholderPattern.displayName = 'PlaceholderPattern';\n\n","/**\n * VisuallyHidden — hides content from sighted users while keeping it readable\n * by assistive tech (screen readers, voice). Use to label icon-only buttons,\n * give context to status changes, or expose extra structure for AT users.\n */\nimport * as React from 'react';\n\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport interface VisuallyHiddenProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport function VisuallyHidden({ children, className }: VisuallyHiddenProps) {\n\tconst content =\n\t\ttypeof children === 'string' || typeof children === 'number' || typeof children === 'bigint'\n\t\t\t? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"none\" className=\"text-inherit\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t)\n\t\t\t: children;\n\n\treturn (\n\t\t<span\n\t\t\tclassName={cn('visually-hidden--component', \n\t\t\t\t'absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0',\n\t\t\t\t'[clip:rect(0,0,0,0)]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{content}\n\t\t</span>\n\t);\n}\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n","/**\n * DateBlock — a semantic calendar tile for event, schedule, and timeline rows.\n *\n * The stacked layout owns a compact fixed-format tile; the inline layout is a\n * lower-emphasis date stamp. Both share locale resolution, machine-readable\n * `<time>` semantics, size/tone variants, optional year display, and flexible\n * time metadata (including time ranges supplied as consumer content).\n */\nimport { format, type Locale } from 'date-fns';\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react';\n\nimport {\n\tparseDateInput,\n\ttype DateInput,\n} from '../../primitives';\nimport { Text } from '../../typography';\nimport {\n\ttype ComponentScale,\n\tuseDatesConfig,\n\tuseDensityConfig,\n} from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport type { SemanticTone } from '../../../lib/component-vocabulary';\n\nexport type DateBlockLayout = 'stacked' | 'inline';\nexport type DateBlockTimePlacement = 'inline' | 'below' | 'hidden';\nexport type DateBlockTone = SemanticTone;\nexport type DateBlockVariant = 'default' | 'muted' | 'inverse';\nexport type DateBlockSize = ComponentScale;\n\nexport interface DateBlockStrings {\n\t/** Separator between the inline date and time metadata. */\n\tseparator: string;\n\t/** Accessible name used when `date` is empty or invalid. */\n\tunavailableLabel: string;\n}\n\nexport const defaultDateBlockStrings: DateBlockStrings = {\n\tseparator: '·',\n\tunavailableLabel: 'Date unavailable',\n};\n\nexport interface DateBlockProps\n\textends Omit<ComponentPropsWithoutRef<'time'>, 'children' | 'dateTime'> {\n\t/** Date instance, ISO string, unix timestamp, or an empty value. */\n\tdate?: DateInput;\n\t/** Time or time-range metadata, already formatted by the consumer. */\n\ttime?: ReactNode;\n\t/** Override the machine-readable value placed on the native `<time>`. */\n\tdateTime?: string;\n\t/** date-fns locale. Falls back to `<UIProvider config={{ dates: { locale } }}>`. */\n\tlocale?: Locale;\n\t/** Visual layout. @default \"stacked\" */\n\tlayout?: DateBlockLayout;\n\t/** Where time metadata renders. Defaults to `inline` for inline layout and `below` for stacked. */\n\ttimePlacement?: DateBlockTimePlacement;\n\t/** Semantic color treatment. @default \"neutral\" */\n\ttone?: DateBlockTone;\n\t/** Structural surface treatment. @default \"default\" */\n\tvariant?: DateBlockVariant;\n\t/** Structural scale. Falls back to `UIProvider.density.defaultScale`, then `md`. */\n\tsize?: DateBlockSize;\n\t/** Render a bounded surface. Defaults to `true` for stacked and `false` for inline. */\n\tboxed?: boolean;\n\t/** Show the weekday heading. @default true */\n\tshowWeekday?: boolean;\n\t/** Show the month label. @default true */\n\tshowMonth?: boolean;\n\t/** Show the year label for cross-year schedules and timelines. @default false */\n\tshowYear?: boolean;\n\t/** Visual fallback for an empty or invalid date. @default \"—\" */\n\temptyLabel?: ReactNode;\n\t/** date-fns day-of-month format. @default \"d\" */\n\tdayFormat?: string;\n\t/** date-fns weekday format. @default \"EEE\" */\n\tweekdayFormat?: string;\n\t/** date-fns month format. @default \"MMM\" */\n\tmonthFormat?: string;\n\t/** date-fns year format. @default \"yyyy\" */\n\tyearFormat?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<DateBlockStrings>;\n}\n\ninterface DateBlockToneClasses {\n\tframe: string;\n\t/** Content above the body. */\n\theader: string;\n\tprimary: string;\n\tsecondary: string;\n}\n\nconst toneClassMap: Record<DateBlockTone, DateBlockToneClasses> = {\n\tneutral: {\n\t\tframe: 'border-border bg-card',\n\t\theader: 'border-border/70 bg-muted/60 text-foreground',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\tsecondary: {\n\t\tframe: 'border-border bg-muted/30',\n\t\theader: 'border-border/70 bg-muted text-foreground',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\tprimary: {\n\t\tframe: 'border-primary/30 bg-primary/5',\n\t\theader: 'border-primary-accent/20 bg-primary/10 text-primary-accent',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\tdestructive: {\n\t\tframe: 'border-destructive/30 bg-destructive/5',\n\t\theader: 'border-destructive/20 bg-destructive/10 text-destructive',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\tinfo: {\n\t\tframe: 'border-info/30 bg-info/5',\n\t\theader: 'border-info/20 bg-info/10 text-info',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\tsuccess: {\n\t\tframe: 'border-success/30 bg-success/5',\n\t\theader: 'border-success/20 bg-success/10 text-success',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\twarning: {\n\t\tframe: 'border-warning/40 bg-warning/5',\n\t\theader: 'border-warning/20 bg-warning/10 text-warning-accent',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n};\n\nconst variantClassMap: Record<DateBlockVariant, DateBlockToneClasses> = {\n\tdefault: { frame: '', header: '', primary: '', secondary: '' },\n\tmuted: {\n\t\tframe: 'border-border bg-muted/30',\n\t\theader: 'border-border/70 bg-muted text-foreground',\n\t\tprimary: 'text-foreground',\n\t\tsecondary: 'text-muted-foreground',\n\t},\n\tinverse: {\n\t\tframe: 'border-inverse-border bg-inverse-background',\n\t\theader: 'border-inverse-border bg-inverse-surface text-inverse-muted',\n\t\tprimary: 'text-inverse-foreground',\n\t\tsecondary: 'text-inverse-muted',\n\t},\n};\n\nconst stackedSizeClass: Record<DateBlockSize, { frame: string; header: string; body: string }> = {\n\tsm: {\n\t\tframe: 'w-12',\n\t\theader: 'px-control-xs py-space-2xs',\n\t\tbody: 'min-h-control px-control-xs py-space-xs',\n\t},\n\tmd: {\n\t\tframe: 'w-14',\n\t\theader: 'px-control-sm py-space-xs',\n\t\tbody: 'min-h-control-lg px-control-sm py-space-sm',\n\t},\n\tlg: {\n\t\tframe: 'w-16',\n\t\theader: 'px-control py-space-sm',\n\t\tbody: 'min-h-control-lg px-control py-space-md',\n\t},\n};\n\nconst inlineSizeClass: Record<DateBlockSize, { gap: string; padding: string }> = {\n\tsm: { gap: 'gap-space-sm', padding: 'px-control-xs py-space-xs' },\n\tmd: { gap: 'gap-space-md', padding: 'px-control-sm py-space-sm' },\n\tlg: { gap: 'gap-space-lg', padding: 'px-control py-space-md' },\n};\n\nfunction hasContent(value: ReactNode): boolean {\n\treturn value !== null && value !== undefined && value !== '';\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport function DateBlock({\n\tdate,\n\ttime,\n\tdateTime,\n\tlocale: localeProp,\n\tlayout = 'stacked',\n\ttimePlacement,\n\ttone = 'neutral',\n\tvariant = 'default',\n\tsize: sizeProp,\n\tboxed,\n\tshowWeekday = true,\n\tshowMonth = true,\n\tshowYear = false,\n\temptyLabel = '—',\n\tdayFormat = 'd',\n\tweekdayFormat = 'EEE',\n\tmonthFormat = 'MMM',\n\tyearFormat = 'yyyy',\n\tclassName,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...props\n}: DateBlockProps) {\n\tconst dates = useDatesConfig();\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveComponentScale(sizeProp, defaultScale);\n\tconst locale = localeProp ?? dates.locale;\n\tconst strings = useStrings(defaultDateBlockStrings, stringsProp);\n\tconst resolved = parseDateInput(date);\n\tconst tones = toneClassMap[tone];\n\tconst variants = variantClassMap[variant];\n\tconst useBox = boxed ?? layout === 'stacked';\n\tconst resolvedTimePlacement = timePlacement ?? (layout === 'inline' ? 'inline' : 'below');\n\tconst showsTime = hasContent(time) && resolvedTimePlacement !== 'hidden';\n\tconst formatOptions = locale ? { locale } : undefined;\n\n\tconst weekday = resolved ? format(resolved, weekdayFormat, formatOptions) : null;\n\tconst day = resolved ? format(resolved, dayFormat, formatOptions) : null;\n\tconst month = resolved ? format(resolved, monthFormat, formatOptions) : null;\n\tconst year = resolved ? format(resolved, yearFormat, formatOptions) : null;\n\tconst machineValue = dateTime ?? (resolved ? format(resolved, 'yyyy-MM-dd') : undefined);\n\tconst resolvedAriaLabel = ariaLabel ?? (resolved ? undefined : strings.unavailableLabel);\n\n\tif (layout === 'inline') {\n\t\tconst dateRow = (\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'date-block--frame inline-flex min-w-0 items-center rounded-radius tabular-nums',\n\t\t\t\t\tinlineSizeClass[size].gap,\n\t\t\t\t\tuseBox && cn('border', inlineSizeClass[size].padding, tones.frame, variants.frame),\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{resolved ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!!showWeekday && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className={cn('date-block--weekday', tones.secondary, variants.secondary)}>\n\t\t\t\t\t\t\t\t{weekday}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\" className={cn('date-block--day', tones.primary, variants.primary)}>\n\t\t\t\t\t\t\t{day}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{(showMonth || showYear) && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className={cn('date-block--month-year', tones.secondary, variants.secondary)}>\n\t\t\t\t\t\t\t\t{[showMonth ? month : null, showYear ? year : null].filter(Boolean).join(' ')}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showsTime && resolvedTimePlacement === 'inline' && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className={cn(tones.secondary, variants.secondary)} aria-hidden>\n\t\t\t\t\t\t\t\t\t{strings.separator}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{isSimpleText(time) ? (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className={cn('date-block--time tabular-nums', tones.primary, variants.primary)}>\n\t\t\t\t\t\t\t\t\t\t{time}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t) : time}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\tisSimpleText(emptyLabel) ? (\n\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\" className={cn('date-block--empty', tones.secondary, variants.secondary)}>\n\t\t\t\t\t\t\t{emptyLabel}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : emptyLabel\n\t\t\t\t)}\n\t\t\t</span>\n\t\t);\n\n\t\treturn (\n\t\t\t<time\n\t\t\t\tdateTime={machineValue}\n\t\t\t\taria-label={resolvedAriaLabel}\n\t\t\t\tdata-layout={layout}\n\t\t\t\tdata-size={size}\n\t\t\t\tdata-tone={tone}\n\t\t\t\tdata-variant={variant}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'date-block--component inline-flex min-w-0',\n\t\t\t\t\tresolvedTimePlacement === 'below'\n\t\t\t\t\t\t? 'flex-col items-start gap-space-xs'\n\t\t\t\t\t\t: 'items-center',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{dateRow}\n\t\t\t\t{showsTime && resolvedTimePlacement === 'below' && (\n\t\t\t\t\tisSimpleText(time) ? (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className={cn('date-block--time tabular-nums', tones.secondary, variants.secondary)}>\n\t\t\t\t\t\t\t{time}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : time\n\t\t\t\t)}\n\t\t\t</time>\n\t\t);\n\t}\n\n\tconst tile = (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t'date-block--frame inline-flex shrink-0 flex-col overflow-hidden rounded-radius tabular-nums',\n\t\t\t\tstackedSizeClass[size].frame,\n\t\t\t\tuseBox && cn('border', tones.frame, variants.frame),\n\t\t\t)}\n\t\t>\n\t\t\t{resolved && showWeekday && (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\tlineHeight=\"tight\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'date-block--weekday block text-center',\n\t\t\t\t\t\tstackedSizeClass[size].header,\n\t\t\t\t\t\tuseBox ? cn('border-b', tones.header, variants.header) : cn(tones.secondary, variants.secondary),\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{weekday}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'date-block--body flex flex-col items-center justify-center gap-space-2xs text-center',\n\t\t\t\t\tstackedSizeClass[size].body,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{resolved ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize={size === 'sm' ? 'sm' : size === 'lg' ? 'lg' : 'base'}\n\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\tlineHeight=\"none\"\n\t\t\t\t\t\t\tclassName={cn('date-block--day', tones.primary, variants.primary)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{day}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{(showMonth || showYear) && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tlineHeight=\"tight\"\n\t\t\t\t\t\t\t\tclassName={cn('date-block--month-year', tones.secondary, variants.secondary)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{[showMonth ? month : null, showYear ? year : null].filter(Boolean).join(' ')}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\tisSimpleText(emptyLabel) ? (\n\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\" className={cn('date-block--empty', tones.secondary, variants.secondary)}>\n\t\t\t\t\t\t\t{emptyLabel}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t) : emptyLabel\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</span>\n\t);\n\n\treturn (\n\t\t<time\n\t\t\tdateTime={machineValue}\n\t\t\taria-label={resolvedAriaLabel}\n\t\t\tdata-layout={layout}\n\t\t\tdata-size={size}\n\t\t\tdata-tone={tone}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\t'date-block--component inline-flex',\n\t\t\t\tshowsTime && resolvedTimePlacement === 'inline'\n\t\t\t\t\t? 'flex-row items-center gap-space-sm'\n\t\t\t\t\t: 'flex-col items-center gap-space-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{tile}\n\t\t\t{showsTime && (\n\t\t\t\tisSimpleText(time) ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className={cn('date-block--time tabular-nums', tones.secondary, variants.secondary)}>\n\t\t\t\t\t\t{time}\n\t\t\t\t\t</Text>\n\t\t\t\t) : time\n\t\t\t)}\n\t\t</time>\n\t);\n}\n\nDateBlock.displayName = 'DateBlock';\n","export interface ContentBlockStrings {\n\tactionsLabel: string;\n\ttooltipLabel: string;\n}\n\nexport const defaultContentBlockStrings: ContentBlockStrings = {\n\tactionsLabel: 'Actions',\n\ttooltipLabel: 'More information',\n};\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { Card } from '../cards';\nimport type { ActionMenuAction } from '../action-menu';\nimport type { StructureGap } from '../structure';\nimport type { AlertTone } from '../feedback';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport type { CardSurface, ComponentScale } from '../../../lib/component-vocabulary';\nimport { cn } from '../../../lib/utils';\nimport { defaultContentBlockStrings, type ContentBlockStrings } from './content-block.strings';\nexport type ContentBlockPadding = ComponentScale;\nexport type ContentBlockSurface = CardSurface;\nexport type ContentBlockTitleSize = ComponentScale;\nexport interface ContentBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n\t/** Leading glyph on the title line, muted and shrink-proof. */\n\ticon?: ReactNode;\n\t/** Block title. */\n\ttitle?: ReactNode;\n\t/** Supporting sentence under the title. */\n\tdescription?: ReactNode;\n\t/** Content immediately after the title, before the tooltip affordance. */\n\ttitleSuffix?: ReactNode;\n\t/** Explanatory copy behind an info affordance on the title line. */\n\ttooltip?: ReactNode;\n\t/** Accessible name for the tooltip trigger. Defaults to the `tooltipLabel` string. */\n\ttooltipAriaLabel?: string;\n\t/** Full-width row above the title, inside the header. */\n\theaderStart?: ReactNode;\n\t/**\n\t * Single control at the end of the header, before the overflow menu.\n\t * Use `actions` instead for a list of commands.\n\t */\n\theaderAction?: ReactNode;\n\t/** Content at the end of the header, before `headerAction` and the overflow menu. */\n\theaderEnd?: ReactNode;\n\t/** Overflow menu at the far end of the header. */\n\tactions?: readonly ActionMenuAction[];\n\t/** Accessible name for the overflow trigger. Defaults to the `actionsLabel` string. */\n\tactionsLabel?: string;\n\t/** Content between the alert and `children`. */\n\tcontentTop?: ReactNode;\n\t/** Content after `children`. */\n\tcontentBottom?: ReactNode;\n\t/** Muted text in the footer band. Renders alongside `footerSlot`. */\n\tfooterText?: ReactNode;\n\t/** Full-width footer band under the content, for a single primary action. */\n\tfooterSlot?: ReactNode;\n\t/** Banner between the header and the content. */\n\talert?: ReactNode;\n\t/** Tone of the `alert` banner. */\n\talertTone?: AlertTone;\n\t/** Optional structural padding. Omit it to keep the block card-free. */\n\tpadding?: ContentBlockPadding;\n\t/** Optional surface chrome. Omit it to inherit the caller's surface. */\n\tsurface?: ContentBlockSurface;\n\t/** Title typography. Defaults to the compact title size. */\n\ttitleSize?: ContentBlockTitleSize;\n\t/** Draws a rule between the header and the content. */\n\theaderDivider?: boolean;\n\t/** Draws a rule between the content and the footer. */\n\tfooterDivider?: boolean;\n\t/** Merged onto the header region. */\n\theaderClassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\t/** Optional semantic spacing between direct content children. */\n\tcontentGap?: StructureGap;\n\t/** Merged onto the footer region. */\n\tfooterClassName?: string;\n\t/** Overrides the block's own copy (overflow-menu and tooltip labels). */\n\tstrings?: StringsProp<ContentBlockStrings>;\n}\n\n\n/**\n * Migration adapter only; Card owns all rendering, slots and surface recipes.\n * @deprecated Use Card with surface=\"flat\" and padding=\"none\" for unframed content.\n */\nexport const ContentBlock = forwardRef<HTMLDivElement, ContentBlockProps>(function ContentBlock({\n padding, surface, strings: stringsProp, className, headerClassName, contentClassName, footerClassName, ...props\n}, ref) {\n const strings = useStrings(defaultContentBlockStrings, stringsProp);\n return <Card\n {...props}\n ref={ref}\n surface={surface ?? 'flat'}\n padding={padding ?? (surface && surface !== 'flat' ? 'md' : 'none')}\n strings={strings}\n data-component=\"content-block\"\n data-slot=\"content-block\"\n data-padding={padding}\n className={cn('content-block--component', className)}\n headerClassName={cn('content-block--header', headerClassName)}\n contentClassName={cn('content-block--content', contentClassName)}\n footerClassName={cn('content-block--footer', footerClassName)}\n />;\n});\nContentBlock.displayName = 'ContentBlock';\nexport { defaultContentBlockStrings, type ContentBlockStrings } from './content-block.strings';\n","/**\n * BooleanIndicator — labelled yes/no chip showing the truth of a value with an\n * optional check/cross icon. Use for compact metadata grids where each row\n * answers a single boolean question. Strings overridable for i18n.\n */\nimport { CheckCircle2, XCircle } from 'lucide-react';\nimport React, { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { Badge, type BadgeTone } from '../badge';\nimport { Stack } from '../structure';\nimport { DisplayLabel, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nexport interface BooleanIndicatorStrings {\n\ttrue: string;\n\tfalse: string;\n}\n\nexport const defaultBooleanIndicatorStrings: BooleanIndicatorStrings = {\n\ttrue: 'Yes',\n\tfalse: 'No',\n};\n\nexport interface BooleanIndicatorProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n\t/** What the flag describes, rendered as the row's `DisplayLabel`. */\n\tlabel: React.ReactNode;\n\t/** The flag. `null` reads as unknown and uses the false presentation. Defaults to `false`. */\n\tvalue?: boolean | null;\n\t/** Shows the check/cross glyph beside the badge text. Defaults to `true`. */\n\tshowIcon?: boolean;\n\t/** Badge tone when `value` is true. Defaults to `success`. */\n\ttrueTone?: BadgeTone;\n\t/** Badge tone when `value` is false. Defaults to `secondary`. */\n\tfalseTone?: BadgeTone;\n\t/** Merged onto the badge. */\n\tbadgeClassName?: string;\n\t/** Overrides the yes/no copy. */\n\tstrings?: StringsProp<BooleanIndicatorStrings>;\n}\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const BooleanIndicator = forwardRef<HTMLDivElement, BooleanIndicatorProps>(function BooleanIndicator({\n\tlabel,\n\tvalue = false,\n\tshowIcon = true,\n\ttrueTone = 'success',\n\tfalseTone = 'secondary',\n\tclassName,\n\tbadgeClassName,\n\tstrings: stringsProp,\n\t...props\n}, ref) {\n\tconst strings = useStrings(defaultBooleanIndicatorStrings, stringsProp);\n\tconst isTrue = Boolean(value);\n\tconst Icon = isTrue ? CheckCircle2 : XCircle;\n\tconst badgeTone = isTrue ? trueTone : falseTone;\n\tconst content = isTrue ? strings.true : strings.false;\n\n\treturn (\n\t\t<Stack\n\t\t\tref={ref}\n\t\t\tdirection=\"horizontal\"\n\t\t\talign=\"center\"\n\t\t\tgap=\"md\"\n\t\t\tjustify=\"between\"\n\t\t\twrap={false}\n\t\t\tclassName={cn('boolean-indicator--component', \n\t\t\t\t'min-w-0 px-row-x py-row-y',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(label) ? <DisplayLabel className=\"min-w-0 wrap-anywhere\">{label}</DisplayLabel> : label}\n\t\t\t<Badge\n\t\t\t\ttone={badgeTone}\n\t\t\t\tclassName={cn('shrink-0 whitespace-nowrap', badgeClassName)}\n\t\t\t>\n\t\t\t\t{/*\n\t\t\t\t * `size-icon-sm` pairs with the badge's 12px label, matching the\n\t\t\t\t * rest of the package's badge icons. At `size-icon` the glyph\n\t\t\t\t * outgrew the text and pushed this badge to 26px, 4px taller\n\t\t\t\t * than every other badge in the library.\n\t\t\t\t */}\n\t\t\t\t{!!showIcon && <Icon className=\"size-icon-sm\" />}\n\t\t\t\t{isSimpleText(content) ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"none\" className=\"text-inherit\">\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</Text>\n\t\t\t\t) : content}\n\t\t\t</Badge>\n\t\t</Stack>\n\t);\n});\n\nBooleanIndicator.displayName = 'BooleanIndicator';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedback-C7nR0UtT.js","names":["Empty","EmptyHeader","EmptyMedia","EmptyTitle","EmptyDescription","EmptyContent","isSimpleText","EmptyPrimitive","EmptyHeaderPrimitive","EmptyMediaPrimitive","EmptyTitlePrimitive","EmptyDescriptionPrimitive","EmptyContentPrimitive","_Fragment","cn","Text","Button","Stack","Progress","ContentSkeleton","Fragment$1","Empty$1","props","className","EmptyHeader$1","emptyMediaVariants","cva","EmptyMedia$1","variant","EmptyTitle$1","EmptyDescription$1","EmptyContent$1","isSimpleText$1","value","Empty","EmptyHeader","EmptyMedia","EmptyTitle","ariaLevel","resolvedRole","role","headingLevel","children","EmptyDescription","EmptyContent","frameVariantClass","frameToneClass","isSimpleText","StateDisplayFrame","forwardRef","regionPrefix","componentClassName","tone","icon","title","description","action","details","LoadingState","resolvedProgress","progress","Loader2","label","skeleton","ErrorState","AlertCircle","onRetry","retryLabel"],"sources":["../src/components/ui/empty.tsx","../src/components/base/feedback/empty.tsx","../src/components/base/feedback/state-display.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n // No border style here: without preflight a bare `border-dashed` paints a\n // 3px currentColor frame. Callers that want a frame add a semantic border.\n \"flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"flex max-w-sm flex-col items-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-space-md flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"text-lg font-medium tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-sm/relaxed text-muted-foreground [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","/**\n * Tokenized low-level empty-state parts.\n *\n * Use the blocks `EmptyState` for an opinionated ready-made state. These\n * parts are for consumers that need to assemble their own media/content/action\n * anatomy without importing the internal shadcn primitive.\n */\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport {\n\tEmpty as EmptyPrimitive,\n\tEmptyContent as EmptyContentPrimitive,\n\tEmptyDescription as EmptyDescriptionPrimitive,\n\tEmptyHeader as EmptyHeaderPrimitive,\n\tEmptyMedia as EmptyMediaPrimitive,\n\tEmptyTitle as EmptyTitlePrimitive,\n} from '../../ui/empty';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport type EmptyProps = ComponentProps<typeof EmptyPrimitive>;\nexport type EmptyContentProps = ComponentProps<typeof EmptyContentPrimitive>;\nexport type EmptyDescriptionProps = ComponentProps<typeof EmptyDescriptionPrimitive>;\nexport type EmptyHeaderProps = ComponentProps<typeof EmptyHeaderPrimitive>;\nexport type EmptyMediaProps = ComponentProps<typeof EmptyMediaPrimitive>;\nexport interface EmptyTitleProps extends ComponentProps<typeof EmptyTitlePrimitive> {\n\t/** Accessible heading level used by the default `role=\"heading\"` output. */\n\theadingLevel?: 2 | 3 | 4 | 5 | 6;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\n/** Root layout for a consumer-blocks empty state. */\nexport function Empty({ className, ...props }: EmptyProps) {\n\treturn (\n\t\t<EmptyPrimitive\n\t\t\tclassName={cn('empty--component gap-space-lg rounded-radius p-surface', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/** Centered title and description stack. */\nexport function EmptyHeader({ className, ...props }: EmptyHeaderProps) {\n\treturn <EmptyHeaderPrimitive className={cn('empty-header--component gap-normal', className)} {...props} />;\n}\n\n/** Optional icon or illustration region. */\nexport function EmptyMedia({ className, ...props }: EmptyMediaProps) {\n\treturn <EmptyMediaPrimitive className={cn('empty-media--component mb-space-sm', className)} {...props} />;\n}\n\n/** Empty-state heading calibrated to the admin typography scale. */\nexport function EmptyTitle({ className, headingLevel = 3, role, 'aria-level': ariaLevel, children, ...props }: EmptyTitleProps) {\n\tconst resolvedRole = role ?? 'heading';\n\treturn (\n\t\t<EmptyTitlePrimitive\n\t\t\trole={resolvedRole}\n\t\t\taria-level={ariaLevel ?? (resolvedRole === 'heading' ? headingLevel : undefined)}\n\t\t\tclassName={cn('empty-title--component tracking-normal', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"base\" weight=\"semibold\" lineHeight=\"tight\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</EmptyTitlePrimitive>\n\t);\n}\n\n/** Supporting explanation for the absence of content. */\nexport function EmptyDescription({ className, children, ...props }: EmptyDescriptionProps) {\n\treturn (\n\t\t<EmptyDescriptionPrimitive className={cn('empty-description--component', className)} {...props}>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text tag=\"span\" type=\"secondary\" lineHeight=\"relaxed\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</EmptyDescriptionPrimitive>\n\t);\n}\n\n/** Actions or next-step content rendered below the explanation. */\nexport function EmptyContent({ className, children, ...props }: EmptyContentProps) {\n\treturn (\n\t\t<EmptyContentPrimitive className={cn('empty-content--component gap-space-md', className)} {...props}>\n\t\t\t{isSimpleText(children) ? <Text>{children}</Text> : children}\n\t\t</EmptyContentPrimitive>\n\t);\n}\n\nEmpty.displayName = 'Empty';\nEmptyHeader.displayName = 'EmptyHeader';\nEmptyMedia.displayName = 'EmptyMedia';\nEmptyTitle.displayName = 'EmptyTitle';\nEmptyDescription.displayName = 'EmptyDescription';\nEmptyContent.displayName = 'EmptyContent';\n","/**\n * Shared async-state presentations for bounded admin surfaces.\n *\n * `inline` is a compact, chrome-free status for menus, table regions, and\n * existing panels. `panel` owns one deliberate frame so consumers do not\n * have to recreate card padding around loading and error states. Loading and\n * error use the same icon/message/action grid, which keeps transitions between\n * states visually stable.\n */\nimport { AlertCircle, Loader2 } from 'lucide-react';\nimport {\n\tforwardRef,\n\ttype ComponentPropsWithoutRef,\n\ttype ReactNode,\n} from 'react';\n\nimport { Button } from '../buttons';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { Progress } from './progress';\nimport { ContentSkeleton } from '../skeleton/skeleton';\n\ntype DivProps = ComponentPropsWithoutRef<'div'>;\ntype StateDisplayVariant = 'inline' | 'panel';\ntype StateDisplayTone = 'neutral' | 'destructive';\n\ninterface StateDisplayFrameProps extends Omit<DivProps, 'title'> {\n\tcomponentClassName: string;\n\t/** `inline` is chrome-free; `panel` owns one framed surface. */\n\tvariant: StateDisplayVariant;\n\ttone: StateDisplayTone;\n\t/** Leading glyph beside the message. */\n\ticon: ReactNode;\n\t/** Heading above the description. */\n\ttitle?: ReactNode;\n\t/** Supporting copy under the label. */\n\tdescription?: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\tdetails?: ReactNode;\n}\n\nconst frameVariantClass: Record<StateDisplayVariant, string> = {\n\tinline: 'w-full max-w-full py-row-y',\n\tpanel: 'w-full rounded-radius border p-surface',\n};\n\nconst frameToneClass: Record<StateDisplayTone, string> = {\n\tneutral: 'border-border bg-card',\n\tdestructive: 'border-destructive/30 bg-destructive/5',\n};\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nconst StateDisplayFrame = forwardRef<HTMLDivElement, StateDisplayFrameProps>(\n\tfunction StateDisplayFrame({\n\t\tcomponentClassName,\n\t\tvariant,\n\t\ttone,\n\t\ticon,\n\t\ttitle,\n\t\tdescription,\n\t\taction,\n\t\tdetails,\n\t\tclassName,\n\t\t...props\n\t}, ref) {\n\t\tconst regionPrefix = componentClassName.replace('--component', '');\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-variant={variant}\n\t\t\t\tdata-tone={tone}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tcomponentClassName,\n\t\t\t\t\t'grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-x-space-sm',\n\t\t\t\t\t'sm:grid-cols-[auto_minmax(0,1fr)_auto]',\n\t\t\t\t\tframeVariantClass[variant],\n\t\t\t\t\tvariant === 'panel' && frameToneClass[tone],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t`${regionPrefix}--icon`,\n\t\t\t\t\t\t'mt-space-2xs inline-flex size-icon shrink-0 items-center justify-center',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t\t{(title !== undefined || description !== undefined) && (\n\t\t\t\t\t<div className={cn(`${regionPrefix}--message`, 'grid min-w-0', variant === 'inline' ? 'gap-dense' : 'gap-normal')}>\n\t\t\t\t\t\t{title !== undefined && (\n\t\t\t\t\t\t\tisSimpleText(title) ? (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\" className={cn(`${regionPrefix}--title`, 'block min-w-0')}>\n\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : <div className={cn(`${regionPrefix}--title`, 'min-w-0')}>{title}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description !== undefined && (\n\t\t\t\t\t\t\tisSimpleText(description) ? (\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize={variant === 'inline' ? 'xs' : undefined}\n\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\tclassName={cn(`${regionPrefix}--description`, 'block min-w-0')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div className={cn(`${regionPrefix}--description`, 'min-w-0')}>\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{action !== undefined && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`${regionPrefix}--action`,\n\t\t\t\t\t\t\t'col-start-2 row-start-2 mt-space-sm justify-self-start',\n\t\t\t\t\t\t\t'sm:col-start-3 sm:row-start-1 sm:mt-0 sm:justify-self-end sm:self-start',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{action}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{details !== undefined && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`${regionPrefix}--details`,\n\t\t\t\t\t\t\t'col-start-2 col-end-[-1] mt-space-md',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{details}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\nStateDisplayFrame.displayName = 'StateDisplayFrame';\n\nexport type LoadingStateVariant = StateDisplayVariant;\n\nexport interface LoadingStateProps extends DivProps {\n\t/** Primary line of the state message. */\n\tlabel?: ReactNode;\n\t/** Supporting copy under the label. */\n\tdescription?: ReactNode;\n\t/** Completion percentage, 0-100, for determinate loading. */\n\tprogress?: number;\n\t/** `inline` (default) for a chrome-free status inside an existing region; `panel` for one framed surface. */\n\tvariant?: LoadingStateVariant;\n\t/** Renders placeholder bars instead of a message. */\n\tskeleton?: boolean | ReactNode;\n\t/** How many skeleton bars to draw. */\n\tlines?: number;\n\t/** Leading glyph beside the message. Defaults to a spinning loader. */\n\ticon?: ReactNode;\n}\n\nexport const LoadingState = forwardRef<HTMLDivElement, LoadingStateProps>(\n\tfunction LoadingState({\n\t\tlabel,\n\t\tdescription,\n\t\tprogress,\n\t\tvariant = 'inline',\n\t\tskeleton = false,\n\t\tlines = 3,\n\t\ticon,\n\t\tclassName,\n\t\t...props\n\t}, ref) {\n\t\tconst resolvedProgress = typeof progress === 'number'\n\t\t\t? Math.min(100, Math.max(0, progress))\n\t\t\t: undefined;\n\t\tconst details = resolvedProgress !== undefined || skeleton\n\t\t\t? (\n\t\t\t\t<>\n\t\t\t\t\t{resolvedProgress !== undefined && (\n\t\t\t\t\t\t<Progress\n\t\t\t\t\t\t\tvalue={resolvedProgress}\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tshowValue={false}\n\t\t\t\t\t\t\taria-label={typeof label === 'string' ? label : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{skeleton === true ? <ContentSkeleton lines={lines} /> : skeleton}\n\t\t\t\t</>\n\t\t\t)\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<StateDisplayFrame\n\t\t\t\tref={ref}\n\t\t\t\trole=\"status\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tcomponentClassName=\"loading-state--component\"\n\t\t\t\tvariant={variant}\n\t\t\t\ttone=\"neutral\"\n\t\t\t\ticon={icon ?? (\n\t\t\t\t\t<Loader2 className=\"size-icon animate-spin text-muted-foreground\" />\n\t\t\t\t)}\n\t\t\t\ttitle={label}\n\t\t\t\tdescription={description}\n\t\t\t\tdetails={details}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nLoadingState.displayName = 'LoadingState';\n\nexport type ErrorStateVariant = StateDisplayVariant;\n\nexport interface ErrorStateProps extends Omit<DivProps, 'title'> {\n\t/** Heading above the description. */\n\ttitle?: ReactNode;\n\t/** Supporting copy under the label. */\n\tdescription?: ReactNode;\n\t/** Control offered alongside the message. */\n\taction?: ReactNode;\n\t/** Renders a retry button (with `retryLabel`) that calls this. Ignored when `action` is set. */\n\tonRetry?: () => void;\n\t/** Copy for the retry action in the error state. */\n\tretryLabel?: ReactNode;\n\t/** `panel` (default) for one framed surface; `inline` for a chrome-free status inside an existing region. */\n\tvariant?: ErrorStateVariant;\n\t/** Leading glyph beside the message. Defaults to an alert icon. */\n\ticon?: ReactNode;\n}\n\nexport const ErrorState = forwardRef<HTMLDivElement, ErrorStateProps>(\n\tfunction ErrorState({\n\t\ttitle,\n\t\tdescription,\n\t\taction,\n\t\tonRetry,\n\t\tretryLabel,\n\t\tvariant = 'panel',\n\t\ticon,\n\t\tclassName,\n\t\t...props\n\t}, ref) {\n\t\t// Retrying recovers; it destroys nothing. The default (neutral outline)\n\t\t// button keeps red for the failure itself, not the way out of it.\n\t\tconst retryAction = action ?? (onRetry && retryLabel ? (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tsize={variant === 'inline' ? 'sm' : undefined}\n\t\t\t\tonClick={onRetry}\n\t\t\t>\n\t\t\t\t{retryLabel}\n\t\t\t</Button>\n\t\t) : undefined);\n\n\t\treturn (\n\t\t\t<StateDisplayFrame\n\t\t\t\tref={ref}\n\t\t\t\trole=\"alert\"\n\t\t\t\tcomponentClassName=\"error-state--component\"\n\t\t\t\tvariant={variant}\n\t\t\t\ttone=\"destructive\"\n\t\t\t\ticon={icon ?? <AlertCircle className=\"size-icon text-destructive\" />}\n\t\t\t\ttitle={title}\n\t\t\t\tdescription={description}\n\t\t\t\taction={retryAction}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nErrorState.displayName = 'ErrorState';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-affordance-recipes-CkOCdE2y.js","names":["affordanceGeometry","fieldAffordanceRecipes","selectToggleRecipes"],"sources":["../src/lib/field-affordance-recipes.ts"],"sourcesContent":["import { affordanceGeometry } from './affordance-geometry.generated';\n\n/** Field affordances have one target/clearance owner. Primitives own behavior. */\nexport const fieldAffordanceRecipes = {\n\t/** Content-sized targets for a chip/reaction that already owns its chrome. */\n\tinline: 'box-border m-0 inline-flex shrink-0 items-center justify-center rounded-inner border-0 bg-transparent p-0 font-sans outline-none transition-[color,box-shadow]',\n\ttarget: 'box-border border-0 bg-transparent font-sans inline-flex size-control-clear shrink-0 items-center justify-center rounded-inner p-0 outline-none transition-[color,box-shadow]',\n\tfocus: 'focus-visible:z-10 focus-visible:border-input focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\tclear: 'text-muted-foreground hover:text-foreground',\n\ttoggle: 'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n\ticon: 'size-control-clear-icon shrink-0 max-h-full max-w-full',\n\tcentered: 'absolute top-1/2 -translate-y-1/2',\n\tclearEnd: affordanceGeometry.clearEnd,\n\tclearPadding: affordanceGeometry.clearPadding,\n\ttogglePadding: affordanceGeometry.togglePadding,\n\ttextareaCountPadding: affordanceGeometry.textareaCountPadding,\n\tmeasuredPadding: affordanceGeometry.measuredPadding,\n\tmeasuredStartPadding: affordanceGeometry.measuredStartPadding,\n\tpairedClearPadding: affordanceGeometry.pairedClearPadding,\n\tpairedIconPadding: affordanceGeometry.pairedIconPadding,\n\tpairedAddonPadding: affordanceGeometry.pairedAddonPadding,\n\tpairedCountPadding: affordanceGeometry.pairedCountPadding,\n} as const;\n\n/**\n * Select-like toggles share one chevron geometry: the glyph scales with the\n * control size, and the toggle track is offset by half the difference between\n * its 1.375rem target and the glyph, so the chevron centres where a Select\n * trigger draws its own (inside the 1px border plus the control padding).\n * Written from the root tokens so scoped density and spacing apply.\n */\nexport const selectToggleRecipes = {\n\ticon: { sm: 'size-icon-sm', md: 'size-icon', lg: 'size-icon-lg' },\n\ttrack: {\n\t\tsm: 'end-[calc(var(--control-x)*0.8333333*var(--space-scale)+1px-(1.375rem*var(--density-scale)-var(--icon)*0.75)/2)]',\n\t\tmd: 'end-[calc(var(--control-x)*var(--space-scale)+1px-(1.375rem*var(--density-scale)-var(--icon))/2)]',\n\t\tlg: 'end-[calc(var(--control-x)*var(--space-scale)+1px-(1.375rem*var(--density-scale)-var(--icon)*1.25)/2)]',\n\t},\n\t/**\n\t * Text clearance for an editable field with the toggle track: the track offset,\n\t * the whole 1.375rem target (not only its glyph) and the spaced copy gap, so a\n\t * value never runs under the target at any density or spacing.\n\t */\n\tpadding: {\n\t\tsm: 'pe-[calc((var(--control-x)*0.8333333+0.375rem)*var(--space-scale)+1px+(1.375rem*var(--density-scale)+var(--icon)*0.75)/2)]',\n\t\tmd: 'pe-[calc((var(--control-x)+0.375rem)*var(--space-scale)+1px+(1.375rem*var(--density-scale)+var(--icon))/2)]',\n\t\tlg: 'pe-[calc((var(--control-x)+0.375rem)*var(--space-scale)+1px+(1.375rem*var(--density-scale)+var(--icon)*1.25)/2)]',\n\t},\n\t/** The same clearance when a clear target precedes the toggle in the track. */\n\tclearPadding: {\n\t\tsm: 'pe-[calc((var(--control-x)*0.8333333+0.625rem)*var(--space-scale)+1px+(4.125rem*var(--density-scale)+var(--icon)*0.75)/2)]',\n\t\tmd: 'pe-[calc((var(--control-x)+0.625rem)*var(--space-scale)+1px+(4.125rem*var(--density-scale)+var(--icon))/2)]',\n\t\tlg: 'pe-[calc((var(--control-x)+0.625rem)*var(--space-scale)+1px+(4.125rem*var(--density-scale)+var(--icon)*1.25)/2)]',\n\t},\n} as const satisfies Record<string, Record<'sm' | 'md' | 'lg', string>>;\n"],"mappings":";;AAGA,IAAaC,IAAyB;CAErC,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACP,QAAQ;CACR,MAAM;CACN,UAAU;CACV,UAAUD,EAAmB;CAC7B,cAAcA,EAAmB;CACjC,eAAeA,EAAmB;CAClC,sBAAsBA,EAAmB;CACzC,iBAAiBA,EAAmB;CACpC,sBAAsBA,EAAmB;CACzC,oBAAoBA,EAAmB;CACvC,mBAAmBA,EAAmB;CACtC,oBAAoBA,EAAmB;CACvC,oBAAoBA,EAAmB;AACxC,GASaE,IAAsB;CAClC,MAAM;EAAE,IAAI;EAAgB,IAAI;EAAa,IAAI;CAAe;CAChE,OAAO;EACN,IAAI;EACJ,IAAI;EACJ,IAAI;CACL;CAMA,SAAS;EACR,IAAI;EACJ,IAAI;EACJ,IAAI;CACL;CAEA,cAAc;EACb,IAAI;EACJ,IAAI;EACJ,IAAI;CACL;AACD"}
@@ -1,11 +0,0 @@
1
- //#region src/lib/field-state-recipes.ts
2
- var e = {
3
- focus: "focus-visible:border-input focus-visible:ring-ring focus-visible:ring-2",
4
- invalid: "aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive",
5
- groupFocus: "has-[[data-slot=input-group-control]:focus-visible]:border-input has-[[data-slot=input-group-control]:focus-visible]:ring-ring has-[[data-slot=input-group-control]:focus-visible]:ring-2",
6
- groupInvalid: "has-[[data-slot][aria-invalid=true]]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:has-[[data-slot=input-group-control]:focus-visible]:ring-destructive"
7
- };
8
- //#endregion
9
- export { e as t };
10
-
11
- //# sourceMappingURL=field-state-recipes-C-MFBX_8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-state-recipes-C-MFBX_8.js","names":["fieldStateRecipes"],"sources":["../src/lib/field-state-recipes.ts"],"sourcesContent":["/** Native fields and field-shaped triggers share one frame-state contract.\n * Validation marks the frame; editable values retain the semantic foreground.\n * Compound fields apply the same state to their outer frame, never each child.\n * A focused invalid field keeps the destructive meaning at full strength, so focus\n * stays visible where the soft invalid halo would otherwise mask the focus ring.\n */\nexport const fieldStateRecipes = {\n\tfocus: 'focus-visible:border-input focus-visible:ring-ring focus-visible:ring-2',\n\tinvalid: 'aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive',\n\tgroupFocus: 'has-[[data-slot=input-group-control]:focus-visible]:border-input has-[[data-slot=input-group-control]:focus-visible]:ring-ring has-[[data-slot=input-group-control]:focus-visible]:ring-2',\n\tgroupInvalid: 'has-[[data-slot][aria-invalid=true]]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:has-[[data-slot=input-group-control]:focus-visible]:ring-destructive',\n} as const;\n"],"mappings":";AAMA,IAAaA,IAAoB;CAChC,OAAO;CACP,SAAS;CACT,YAAY;CACZ,cAAc;AACf"}