@servicetitan/anvil2 3.16.1 → 3.18.0

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 (395) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/{AiMark-BfmK30vL.js → AiMark-Ca7WmL-9.js} +114 -33
  3. package/dist/AiMark-Ca7WmL-9.js.map +1 -0
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-lLo1N7Tj.js → Alert-BOqBFMUV.js} +3 -3
  6. package/dist/{Alert-lLo1N7Tj.js.map → Alert-BOqBFMUV.js.map} +1 -1
  7. package/dist/Alert.js +1 -1
  8. package/dist/{Announcement-PfnsVVz1.js → Announcement-AN9HnhZ-.js} +2 -2
  9. package/dist/{Announcement-PfnsVVz1.js.map → Announcement-AN9HnhZ-.js.map} +1 -1
  10. package/dist/Announcement.js +1 -1
  11. package/dist/{AnvilProvider-DagOuc9c.js → AnvilProvider-BVTxXzoS.js} +3 -3
  12. package/dist/{AnvilProvider-DagOuc9c.js.map → AnvilProvider-BVTxXzoS.js.map} +1 -1
  13. package/dist/AnvilProvider.js +1 -1
  14. package/dist/{Breadcrumbs-RdL4Fvmu.js → Breadcrumbs-1MCqy-gU.js} +2 -2
  15. package/dist/{Breadcrumbs-RdL4Fvmu.js.map → Breadcrumbs-1MCqy-gU.js.map} +1 -1
  16. package/dist/Breadcrumbs.js +1 -1
  17. package/dist/{Button-Dn6-01xl.js → Button-B_E6ybA-.js} +3 -3
  18. package/dist/{Button-Dn6-01xl.js.map → Button-B_E6ybA-.js.map} +1 -1
  19. package/dist/Button.js +1 -1
  20. package/dist/{ButtonToggle-BSU8GBxr.js → ButtonToggle-D0eXySEM.js} +2 -2
  21. package/dist/{ButtonToggle-BSU8GBxr.js.map → ButtonToggle-D0eXySEM.js.map} +1 -1
  22. package/dist/ButtonToggle.js +1 -1
  23. package/dist/{luxon-wpz4A-OQ.js → Calendar-BcsuV4Xv.js} +1761 -3
  24. package/dist/Calendar-BcsuV4Xv.js.map +1 -0
  25. package/dist/{Calendar-DoLRAWLp.js → Calendar-oBRbQqnG.js} +2 -2
  26. package/dist/{Calendar-DoLRAWLp.js.map → Calendar-oBRbQqnG.js.map} +1 -1
  27. package/dist/Calendar.js +2 -2
  28. package/dist/{Checkbox-U-kuWhgc.js → Checkbox-BCaUzwF_.js} +2 -2
  29. package/dist/{Checkbox-U-kuWhgc.js.map → Checkbox-BCaUzwF_.js.map} +1 -1
  30. package/dist/{Checkbox-CVxbe-iN.js → Checkbox-BocPrjKC.js} +4 -4
  31. package/dist/{Checkbox-CVxbe-iN.js.map → Checkbox-BocPrjKC.js.map} +1 -1
  32. package/dist/Checkbox.js +1 -1
  33. package/dist/{Chip-2OydLs66.js → Chip-BWqgUX71.js} +11 -24
  34. package/dist/Chip-BWqgUX71.js.map +1 -0
  35. package/dist/Chip.js +1 -1
  36. package/dist/Combobox.js +1 -1
  37. package/dist/{DataTable-DIXP9-Bx.js → DataTableEditColumnsDrawer-C7OHRsJU.js} +1373 -289
  38. package/dist/DataTableEditColumnsDrawer-C7OHRsJU.js.map +1 -0
  39. package/dist/{DataTable.css → DataTableEditColumnsDrawer.css} +90 -33
  40. package/dist/{DateFieldRange-X2jdOTYY.js → DateFieldRange-BPcsS6TW.js} +6 -7
  41. package/dist/{DateFieldRange-X2jdOTYY.js.map → DateFieldRange-BPcsS6TW.js.map} +1 -1
  42. package/dist/DateFieldRange.js +1 -1
  43. package/dist/{DateFieldSingle-BJ16tpOz.js → DateFieldSingle-BRMhe0OM.js} +6 -7
  44. package/dist/{DateFieldSingle-BJ16tpOz.js.map → DateFieldSingle-BRMhe0OM.js.map} +1 -1
  45. package/dist/DateFieldSingle.js +1 -1
  46. package/dist/{DateFieldYearless-CMm8vtz_.js → DateFieldYearless-NOgDKzrJ.js} +6 -6
  47. package/dist/{DateFieldYearless-CMm8vtz_.js.map → DateFieldYearless-NOgDKzrJ.js.map} +1 -1
  48. package/dist/DateFieldYearless.js +1 -1
  49. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js → DateFieldYearlessRange-ChvypgXC.js} +5 -5
  50. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js.map → DateFieldYearlessRange-ChvypgXC.js.map} +1 -1
  51. package/dist/DateFieldYearlessRange.js +1 -1
  52. package/dist/{DaysOfTheWeek-BHXxs0Bo.js → DaysOfTheWeek-nYitIKnQ.js} +4 -4
  53. package/dist/{DaysOfTheWeek-BHXxs0Bo.js.map → DaysOfTheWeek-nYitIKnQ.js.map} +1 -1
  54. package/dist/DaysOfTheWeek.js +1 -1
  55. package/dist/Details-B2F3auTX.js +216 -0
  56. package/dist/Details-B2F3auTX.js.map +1 -0
  57. package/dist/{Details-BxqP-5vp.js → Details-DQ-_Mg4o.js} +3 -3
  58. package/dist/{Details-BxqP-5vp.js.map → Details-DQ-_Mg4o.js.map} +1 -1
  59. package/dist/Details.css +92 -68
  60. package/dist/Details.js +1 -1
  61. package/dist/Details2.css +137 -0
  62. package/dist/{Dialog-_tHqOsbr.js → Dialog-BgWoV2on.js} +10 -7
  63. package/dist/Dialog-BgWoV2on.js.map +1 -0
  64. package/dist/Dialog.js +1 -1
  65. package/dist/{DialogCancelButton-C0r8hJ8Z.js → DialogCancelButton-CplrFu69.js} +2 -2
  66. package/dist/{DialogCancelButton-C0r8hJ8Z.js.map → DialogCancelButton-CplrFu69.js.map} +1 -1
  67. package/dist/Dnd.js +2 -2
  68. package/dist/{DndHandleButton-BRlodkDO.js → DndHandleButton-BJqj2hc0.js} +6 -4
  69. package/dist/DndHandleButton-BJqj2hc0.js.map +1 -0
  70. package/dist/DndSort.js +2 -2
  71. package/dist/{Drawer-D-ThWNp0.js → Drawer-BVBLtGn_.js} +12 -9
  72. package/dist/Drawer-BVBLtGn_.js.map +1 -0
  73. package/dist/Drawer.js +1 -1
  74. package/dist/DrillDown.css +41 -34
  75. package/dist/DrillDown.js +1 -1
  76. package/dist/DrillDown.module-BFE5BcJB.js +28 -0
  77. package/dist/DrillDown.module-BFE5BcJB.js.map +1 -0
  78. package/dist/{EditCard-B6l2vhBS.js → EditCard-hivZDPZh.js} +3 -3
  79. package/dist/{EditCard-B6l2vhBS.js.map → EditCard-hivZDPZh.js.map} +1 -1
  80. package/dist/EditCard.js +1 -1
  81. package/dist/{FieldLabel-ThEmUiAq.js → FieldLabel-Cn559Brf.js} +8 -58
  82. package/dist/FieldLabel-Cn559Brf.js.map +1 -0
  83. package/dist/FieldLabel.css +1 -12
  84. package/dist/FieldLabel.js +1 -1
  85. package/dist/FieldMessage.js +1 -1
  86. package/dist/{FilterBar-CGsDg6Hy.js → FilterBar-COd38Ent.js} +7 -7
  87. package/dist/{FilterBar-CGsDg6Hy.js.map → FilterBar-COd38Ent.js.map} +1 -1
  88. package/dist/FilterBar.js +1 -1
  89. package/dist/InlineMarkdown-CL1tKR01.js +87 -0
  90. package/dist/InlineMarkdown-CL1tKR01.js.map +1 -0
  91. package/dist/InlineMarkdown.css +12 -0
  92. package/dist/{InputMask-BQigi5oW.js → InputMask-DICWdeiF.js} +3 -3
  93. package/dist/{InputMask-BQigi5oW.js.map → InputMask-DICWdeiF.js.map} +1 -1
  94. package/dist/InputMask.js +1 -1
  95. package/dist/{ListView-YJscfG4x.js → ListView-BeGBn5Vk.js} +87 -108
  96. package/dist/ListView-BeGBn5Vk.js.map +1 -0
  97. package/dist/ListView.js +1 -1
  98. package/dist/{Listbox-CD9ZptSZ.js → Listbox-n1CmJ2gh.js} +2 -2
  99. package/dist/{Listbox-CD9ZptSZ.js.map → Listbox-n1CmJ2gh.js.map} +1 -1
  100. package/dist/Listbox.js +1 -1
  101. package/dist/{Menu-Da2OEN0o.js → Menu-DqP7YQgE.js} +2 -2
  102. package/dist/{Menu-Da2OEN0o.js.map → Menu-DqP7YQgE.js.map} +1 -1
  103. package/dist/Menu.js +1 -1
  104. package/dist/{MenuFooter-D__gg92C.js → MenuFooter-Dzhv0EfD.js} +2 -2
  105. package/dist/{MenuFooter-D__gg92C.js.map → MenuFooter-Dzhv0EfD.js.map} +1 -1
  106. package/dist/MultiSelectField.js +1 -1
  107. package/dist/{MultiSelectFieldSync-Cq5sena6.js → MultiSelectFieldSync-CWsOdu-o.js} +45 -63
  108. package/dist/MultiSelectFieldSync-CWsOdu-o.js.map +1 -0
  109. package/dist/MultiSelectFieldSync.css +107 -69
  110. package/dist/MultiSelectMenu.js +1 -1
  111. package/dist/{MultiSelectMenuSync-BhNXsgAN.js → MultiSelectMenuSync-AVcf8ZUZ.js} +17 -30
  112. package/dist/MultiSelectMenuSync-AVcf8ZUZ.js.map +1 -0
  113. package/dist/{useNumberField-CXFYUZ_n.js → NumberField-DjOvcCa1.js} +251 -5
  114. package/dist/NumberField-DjOvcCa1.js.map +1 -0
  115. package/dist/NumberField.js +1 -1
  116. package/dist/{Page-ZSHNJs7z.js → Page-_dh-JesM.js} +134 -85
  117. package/dist/Page-_dh-JesM.js.map +1 -0
  118. package/dist/Page.css +85 -80
  119. package/dist/Page.js +1 -1
  120. package/dist/{Pagination-Bsl99RRI.js → Pagination-CsSpaTCs.js} +5 -5
  121. package/dist/{Pagination-Bsl99RRI.js.map → Pagination-CsSpaTCs.js.map} +1 -1
  122. package/dist/Pagination.js +1 -1
  123. package/dist/{Popover-CIh1CsoJ.js → Popover-CEKl0WY3.js} +4 -4
  124. package/dist/{Popover-CIh1CsoJ.js.map → Popover-CEKl0WY3.js.map} +1 -1
  125. package/dist/Popover.js +1 -1
  126. package/dist/{ProgressBar-zPKYv4Il.js → ProgressBar-ubCKKewC.js} +3 -3
  127. package/dist/{ProgressBar-zPKYv4Il.js.map → ProgressBar-ubCKKewC.js.map} +1 -1
  128. package/dist/ProgressBar.js +1 -1
  129. package/dist/{Radio-C1VnatcL.js → Radio-DkB6zFsS.js} +2 -2
  130. package/dist/{Radio-C1VnatcL.js.map → Radio-DkB6zFsS.js.map} +1 -1
  131. package/dist/{Radio-BYowelK2.js → Radio-q1Vp_ZQG.js} +4 -4
  132. package/dist/{Radio-BYowelK2.js.map → Radio-q1Vp_ZQG.js.map} +1 -1
  133. package/dist/Radio.js +1 -1
  134. package/dist/{RichTextEditor-DcAVqd2d.js → RichTextEditor-BHt6sWMA.js} +11 -11
  135. package/dist/{RichTextEditor-DcAVqd2d.js.map → RichTextEditor-BHt6sWMA.js.map} +1 -1
  136. package/dist/RichTextEditor.js +1 -1
  137. package/dist/{SavedFiltersButton-BLvi8j1T.js → SavedFiltersButton-Cl58iHZe.js} +10 -10
  138. package/dist/{SavedFiltersButton-BLvi8j1T.js.map → SavedFiltersButton-Cl58iHZe.js.map} +1 -1
  139. package/dist/SavedFiltersButton.js +1 -1
  140. package/dist/{SearchField-ChoNtw8w.js → SearchField-Bk-Ltu4v.js} +2 -2
  141. package/dist/{SearchField-ChoNtw8w.js.map → SearchField-Bk-Ltu4v.js.map} +1 -1
  142. package/dist/{SearchField-DX8hZyo2.js → SearchField-INVftpNM.js} +2 -2
  143. package/dist/{SearchField-DX8hZyo2.js.map → SearchField-INVftpNM.js.map} +1 -1
  144. package/dist/SearchField.js +1 -1
  145. package/dist/{SegmentedControl-BHVJmmTH.js → SegmentedControl-BCqWq65N.js} +3 -3
  146. package/dist/{SegmentedControl-BHVJmmTH.js.map → SegmentedControl-BCqWq65N.js.map} +1 -1
  147. package/dist/SegmentedControl.js +1 -1
  148. package/dist/{SelectCard-DrmMU_GD.js → SelectCard-DeAUW1bL.js} +3 -3
  149. package/dist/{SelectCard-DrmMU_GD.js.map → SelectCard-DeAUW1bL.js.map} +1 -1
  150. package/dist/SelectCard.js +1 -1
  151. package/dist/SelectField.js +1 -1
  152. package/dist/{SelectFieldLabel-BxsKvfqo.js → SelectFieldLabel-DaXwIFZj.js} +2 -2
  153. package/dist/{SelectFieldLabel-BxsKvfqo.js.map → SelectFieldLabel-DaXwIFZj.js.map} +1 -1
  154. package/dist/{SelectFieldSync-CeazN-gI.js → SelectFieldSync-DpZL4wDo.js} +48 -69
  155. package/dist/SelectFieldSync-DpZL4wDo.js.map +1 -0
  156. package/dist/SelectMenu.js +1 -1
  157. package/dist/{SelectMenuSync-CPpE6vUG.js → SelectMenuSync-Klna2oqs.js} +17 -36
  158. package/dist/SelectMenuSync-Klna2oqs.js.map +1 -0
  159. package/dist/{SelectOptions-BDAu_9dv.js → SelectOptions-DGYYFU8i.js} +2 -2
  160. package/dist/{SelectOptions-BDAu_9dv.js.map → SelectOptions-DGYYFU8i.js.map} +1 -1
  161. package/dist/{SelectTrigger-B4OUTO9S.js → SelectTrigger-DKY7rpZn.js} +2 -2
  162. package/dist/{SelectTrigger-B4OUTO9S.js.map → SelectTrigger-DKY7rpZn.js.map} +1 -1
  163. package/dist/SelectTrigger.js +1 -1
  164. package/dist/{SelectTriggerBase-BTWSaiQ-.js → SelectTriggerBase-DUYq_L-6.js} +6 -6
  165. package/dist/{SelectTriggerBase-BTWSaiQ-.js.map → SelectTriggerBase-DUYq_L-6.js.map} +1 -1
  166. package/dist/SelectTriggerBase.css +94 -56
  167. package/dist/SelectTriggerBase.module-C-NmZbg4.js +41 -0
  168. package/dist/SelectTriggerBase.module-C-NmZbg4.js.map +1 -0
  169. package/dist/{Stepper-l_P6VPOv.js → Stepper-D3SHXfX1.js} +3 -3
  170. package/dist/{Stepper-l_P6VPOv.js.map → Stepper-D3SHXfX1.js.map} +1 -1
  171. package/dist/Stepper.js +1 -1
  172. package/dist/{Switch-1iNdXTik.js → Switch-C9yQgF4w.js} +2 -2
  173. package/dist/{Switch-1iNdXTik.js.map → Switch-C9yQgF4w.js.map} +1 -1
  174. package/dist/Switch.js +1 -1
  175. package/dist/{Tab-DR5YYXkq.js → Tab-CXwVQ5-G.js} +11 -7
  176. package/dist/Tab-CXwVQ5-G.js.map +1 -0
  177. package/dist/Tab.js +1 -1
  178. package/dist/Table.js +1 -1
  179. package/dist/{Text-rihxXHSe.js → Text-D4SWT4u-.js} +2 -2
  180. package/dist/{Text-rihxXHSe.js.map → Text-D4SWT4u-.js.map} +1 -1
  181. package/dist/Text.js +1 -1
  182. package/dist/{TextField-vuS7xeo-.js → TextField-CKXSxube.js} +5 -5
  183. package/dist/{TextField-vuS7xeo-.js.map → TextField-CKXSxube.js.map} +1 -1
  184. package/dist/{TextField-Bxd-Qzoi.js → TextField-DmdT2k0w.js} +2 -2
  185. package/dist/{TextField-Bxd-Qzoi.js.map → TextField-DmdT2k0w.js.map} +1 -1
  186. package/dist/TextField.css +38 -23
  187. package/dist/TextField.js +1 -1
  188. package/dist/TextField.module-B3y6caP9.js +25 -0
  189. package/dist/TextField.module-B3y6caP9.js.map +1 -0
  190. package/dist/{Textarea-ppapJUwh.js → Textarea-Dv__veBJ.js} +11 -11
  191. package/dist/{Textarea-ppapJUwh.js.map → Textarea-Dv__veBJ.js.map} +1 -1
  192. package/dist/Textarea.css +26 -11
  193. package/dist/Textarea.js +1 -1
  194. package/dist/{ThemeProvider-DW-Mflv6.js → ThemeProvider-DS2aL89d.js} +2 -2
  195. package/dist/{ThemeProvider-DW-Mflv6.js.map → ThemeProvider-DS2aL89d.js.map} +1 -1
  196. package/dist/ThemeProvider.css +6 -4
  197. package/dist/ThemeProvider.js +1 -1
  198. package/dist/ThemeProvider.module-BkKwAw2f.js +8 -0
  199. package/dist/ThemeProvider.module-BkKwAw2f.js.map +1 -0
  200. package/dist/{TimeField-Hwt_oRbg.js → TimeField-De9qBimk.js} +49 -11
  201. package/dist/TimeField-De9qBimk.js.map +1 -0
  202. package/dist/TimeField.js +1 -1
  203. package/dist/{TimezoneMessage-BrKB_psP.js → TimezoneMessage-DEJX87S3.js} +2 -2
  204. package/dist/{TimezoneMessage-BrKB_psP.js.map → TimezoneMessage-DEJX87S3.js.map} +1 -1
  205. package/dist/Toast.js +2 -2
  206. package/dist/{Toaster-dVGVVcat.js → Toaster-BlwTxTLf.js} +2 -2
  207. package/dist/{Toaster-dVGVVcat.js.map → Toaster-BlwTxTLf.js.map} +1 -1
  208. package/dist/{Toaster-SqkX0Kes.js → Toaster-sO16N9b5.js} +26 -14
  209. package/dist/Toaster-sO16N9b5.js.map +1 -0
  210. package/dist/{Toolbar-DGHZpFi9.js → Toolbar-BhrHuIN7.js} +7 -7
  211. package/dist/{Toolbar-DGHZpFi9.js.map → Toolbar-BhrHuIN7.js.map} +1 -1
  212. package/dist/{Toolbar-CMulzswf.js → Toolbar-Buq2zze0.js} +6 -6
  213. package/dist/{Toolbar-CMulzswf.js.map → Toolbar-Buq2zze0.js.map} +1 -1
  214. package/dist/Toolbar.js +2 -2
  215. package/dist/{ToolbarButtonToggle-T8YnSJ5x.js → ToolbarButtonToggle-CNIaqVWl.js} +3 -3
  216. package/dist/{ToolbarButtonToggle-T8YnSJ5x.js.map → ToolbarButtonToggle-CNIaqVWl.js.map} +1 -1
  217. package/dist/{Tooltip-C_VcYS9P.js → Tooltip-CsTkZqMg.js} +3 -3
  218. package/dist/{Tooltip-C_VcYS9P.js.map → Tooltip-CsTkZqMg.js.map} +1 -1
  219. package/dist/Tooltip.js +1 -1
  220. package/dist/TreeSelectField.js +1 -1
  221. package/dist/{TreeSelectFieldSync-DT6uZ3Ca.js → TreeSelectFieldSync-B7w31kbz.js} +23 -23
  222. package/dist/{TreeSelectFieldSync-DT6uZ3Ca.js.map → TreeSelectFieldSync-B7w31kbz.js.map} +1 -1
  223. package/dist/TreeSelectFieldSync.css +57 -34
  224. package/dist/TreeSelectMenu.js +1 -1
  225. package/dist/{TreeSelectMenuSync-D2TvKxP-.js → TreeSelectMenuSync-EjxlvDZp.js} +5 -5
  226. package/dist/{TreeSelectMenuSync-D2TvKxP-.js.map → TreeSelectMenuSync-EjxlvDZp.js.map} +1 -1
  227. package/dist/{TypeaheadTextField-DgazozK7.js → TypeaheadTextField-DTOkaJda.js} +3 -3
  228. package/dist/{TypeaheadTextField-DgazozK7.js.map → TypeaheadTextField-DTOkaJda.js.map} +1 -1
  229. package/dist/TypeaheadTextField.js +1 -1
  230. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js → YearlessDateInputWithPicker-DJUQypnF.js} +4 -4
  231. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js.map → YearlessDateInputWithPicker-DJUQypnF.js.map} +1 -1
  232. package/dist/assets/icons/st/gnav_messages_active.svg +1 -0
  233. package/dist/assets/icons/st/gnav_messages_inactive.svg +1 -0
  234. package/dist/assets/icons/st.ts +2 -0
  235. package/dist/beta.js +19 -18
  236. package/dist/beta.js.map +1 -1
  237. package/dist/{bulkActionTypes-SukoplGV.js → bulkActionTypes-bznuvizE.js} +2 -2
  238. package/dist/{bulkActionTypes-SukoplGV.js.map → bulkActionTypes-bznuvizE.js.map} +1 -1
  239. package/dist/{filter-state-D3-SYfuy.js → filter-state-DxwL15y1.js} +25 -25
  240. package/dist/{filter-state-D3-SYfuy.js.map → filter-state-DxwL15y1.js.map} +1 -1
  241. package/dist/{index-C2dOrf4N.js → index-Bn56UnMm.js} +2 -2
  242. package/dist/{index-C2dOrf4N.js.map → index-Bn56UnMm.js.map} +1 -1
  243. package/dist/{index-Bldaza5t.js → index-CyN5oapA.js} +2 -2
  244. package/dist/{index-Bldaza5t.js.map → index-CyN5oapA.js.map} +1 -1
  245. package/dist/index-DfZCfS0S.js +36 -0
  246. package/dist/index-DfZCfS0S.js.map +1 -0
  247. package/dist/{index.esm-C2ZhC_8d.js → index.esm-CQXMoq5w.js} +2 -2
  248. package/dist/{index.esm-C2ZhC_8d.js.map → index.esm-CQXMoq5w.js.map} +1 -1
  249. package/dist/index.js +171 -127
  250. package/dist/index.js.map +1 -1
  251. package/dist/index2.css +78 -73
  252. package/dist/{portalScopeClassNames-DA28LrXe.js → portalScopeClassNames-CMdDYHE0.js} +2 -2
  253. package/dist/{portalScopeClassNames-DA28LrXe.js.map → portalScopeClassNames-CMdDYHE0.js.map} +1 -1
  254. package/dist/{react-ORV84FjM.js → react-CG1BUt2y.js} +5 -38
  255. package/dist/react-CG1BUt2y.js.map +1 -0
  256. package/dist/src/beta/components/Details/Details.d.ts +25 -0
  257. package/dist/src/beta/components/Details/DetailsSummary.d.ts +121 -0
  258. package/dist/src/beta/components/Details/index.d.ts +4 -0
  259. package/dist/src/beta/components/Details/internal/DetailsArrow.d.ts +11 -0
  260. package/dist/src/beta/components/Details/internal/DetailsSummaryCells.d.ts +5 -0
  261. package/dist/src/beta/components/Page/Page.d.ts +1 -0
  262. package/dist/src/beta/components/Page/PageSidebar.d.ts +12 -0
  263. package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +31 -4
  264. package/dist/src/beta/components/Table/DataTable/DataTableEditColumnsDrawer.d.ts +18 -0
  265. package/dist/src/beta/components/Table/DataTable/index.d.ts +1 -0
  266. package/dist/src/beta/components/Table/DataTable/internal/DataTableAddRow.d.ts +11 -0
  267. package/dist/src/beta/components/Table/DataTable/internal/DataTableBulkActionBar.d.ts +23 -0
  268. package/dist/src/beta/components/Table/DataTable/internal/DataTableFilterToolbar.d.ts +12 -0
  269. package/dist/src/beta/components/Table/DataTable/internal/DataTablePagination.d.ts +3 -3
  270. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/EditColumnsDrawer.d.ts +29 -0
  271. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/columnLayout.d.ts +43 -0
  272. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/toEditColumnsSection.d.ts +7 -0
  273. package/dist/src/beta/components/Table/DataTable/internal/context/tabbables/CellTabbablesQueue.d.ts +23 -0
  274. package/dist/src/beta/components/Table/DataTable/parts.d.ts +17 -0
  275. package/dist/src/beta/components/Table/DataTable/types.d.ts +256 -2
  276. package/dist/src/beta/components/Table/types.d.ts +6 -0
  277. package/dist/src/beta/components/deprecatedReexports/MultiSelectField.d.ts +4 -4
  278. package/dist/src/beta/components/deprecatedReexports/MultiSelectMenu.d.ts +4 -4
  279. package/dist/src/beta/components/deprecatedReexports/SelectField.d.ts +4 -4
  280. package/dist/src/beta/components/deprecatedReexports/SelectMenu.d.ts +4 -4
  281. package/dist/src/beta/components/index.d.ts +1 -0
  282. package/dist/src/components/DrillDown/DrillDownHeader.d.ts +11 -2
  283. package/dist/src/components/DrillDown/index.d.ts +1 -1
  284. package/dist/src/components/DrillDown/internal/DrillDownContext.d.ts +7 -2
  285. package/dist/src/components/DrillDown/internal/useDrillDownContextState.d.ts +6 -3
  286. package/dist/src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
  287. package/dist/src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
  288. package/dist/src/components/MultiSelectField/internal/types.d.ts +0 -1
  289. package/dist/src/components/Page/Page.d.ts +1 -0
  290. package/dist/src/components/Page/PageSidebar.d.ts +12 -0
  291. package/dist/src/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
  292. package/dist/src/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
  293. package/dist/src/hooks/usePrefersReducedMotion/index.d.ts +2 -0
  294. package/dist/src/hooks/usePrefersReducedMotion/prefersReducedMotion.d.ts +6 -0
  295. package/dist/src/hooks/usePrefersReducedMotion/useReducedMotion.d.ts +5 -0
  296. package/dist/src/internal/components/InlineMarkdown/InlineMarkdown.d.ts +8 -1
  297. package/dist/src/internal/components/InlineMarkdown/index.d.ts +1 -1
  298. package/dist/src/internal/components/Popover/Popover.d.ts +10 -5
  299. package/dist/src/internal/components/Popover/internal/verticalPlacement.d.ts +9 -0
  300. package/dist/src/internal/contexts/DisableConditionalUnmountWarningContext.d.ts +6 -0
  301. package/dist/src/internal/contexts/SuppressPanelSwapWarningContext.d.ts +13 -0
  302. package/dist/src/internal/functions/inlineMarkdown.d.ts +5 -2
  303. package/dist/src/internal/functions/stripInlineMarkdown.d.ts +4 -2
  304. package/dist/src/internal/hooks/index.d.ts +1 -0
  305. package/dist/src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.d.ts +9 -1
  306. package/dist/src/internal/hooks/useSelectOrchestration.d.ts +0 -1
  307. package/dist/src/internal/hooks/useWarnOnConditionalUnmount/index.d.ts +1 -0
  308. package/dist/src/internal/hooks/useWarnOnConditionalUnmount/useWarnOnConditionalUnmount.d.ts +1 -0
  309. package/dist/src/internal/testing/keepMutationObserversAlive.d.ts +9 -0
  310. package/dist/src/internal/types/selectFieldInternalTypes.d.ts +0 -1
  311. package/dist/src/internal/utils/inlineMarkdownRegex.d.ts +5 -0
  312. package/dist/stripInlineMarkdown-BV12XXzl.js +35 -0
  313. package/dist/stripInlineMarkdown-BV12XXzl.js.map +1 -0
  314. package/dist/{syncFilterUtils-SMop8ckR.js → syncFilterUtils-BNbAB0jz.js} +110 -39
  315. package/dist/syncFilterUtils-BNbAB0jz.js.map +1 -0
  316. package/dist/token/core/component-variables.scss +52 -49
  317. package/dist/token/core/component.d.ts +2 -0
  318. package/dist/token/core/component.js +66 -49
  319. package/dist/token/core/component.scss +42 -40
  320. package/dist/token/core/semantic-variables.scss +2 -0
  321. package/dist/token/core/semantic.d.ts +1 -0
  322. package/dist/token/core/semantic.js +13 -0
  323. package/dist/token/core/semantic.scss +1 -0
  324. package/dist/token.js +82 -49
  325. package/dist/token.js.map +1 -1
  326. package/dist/{treeSync-B38r1dRQ.js → treeSync-BELsX1gY.js} +3 -3
  327. package/dist/{treeSync-B38r1dRQ.js.map → treeSync-BELsX1gY.js.map} +1 -1
  328. package/dist/{use-reduced-motion-yYB9Tb0D.js → use-reduced-motion-CUshwaEW.js} +2 -2
  329. package/dist/{use-reduced-motion-yYB9Tb0D.js.map → use-reduced-motion-CUshwaEW.js.map} +1 -1
  330. package/dist/{useDrillDownContext-D5_NjqY4.js → useDrillDownContext-BLDjyNEt.js} +2 -2
  331. package/dist/{useDrillDownContext-D5_NjqY4.js.map → useDrillDownContext-BLDjyNEt.js.map} +1 -1
  332. package/dist/{useDrilldown-BOeeNUsy.js → useDrilldown-B8pIhfWa.js} +55 -22
  333. package/dist/{useDrilldown-BOeeNUsy.js.map → useDrilldown-B8pIhfWa.js.map} +1 -1
  334. package/dist/{useInfiniteCombobox-ynkeFngn.js → useInfiniteCombobox-ZZalag0-.js} +4 -4
  335. package/dist/{useInfiniteCombobox-ynkeFngn.js.map → useInfiniteCombobox-ZZalag0-.js.map} +1 -1
  336. package/dist/{useInitialFocus-CGybEc6x.js → useInitialFocus-KdirjHEb.js} +51 -16
  337. package/dist/useInitialFocus-KdirjHEb.js.map +1 -0
  338. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js → useInvalidateOnOptionsChange-ChrPmbtS.js} +6 -6
  339. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js.map → useInvalidateOnOptionsChange-ChrPmbtS.js.map} +1 -1
  340. package/dist/{usePopoverTransitionStates-CDXCdyKa.js → usePopoverTransitionStates-B1opfxxn.js} +1 -2
  341. package/dist/{usePopoverTransitionStates-CDXCdyKa.js.map → usePopoverTransitionStates-B1opfxxn.js.map} +1 -1
  342. package/dist/{usePrefersReducedMotion-DR9B_D6w.js → usePrefersReducedMotion-BLoVFiJL.js} +11 -3
  343. package/dist/usePrefersReducedMotion-BLoVFiJL.js.map +1 -0
  344. package/dist/usePrefersReducedMotion.js +2 -1
  345. package/dist/usePrefersReducedMotion.js.map +1 -1
  346. package/dist/{utils-CM48ODEJ.js → utils-DwLrXpmt.js} +2 -2
  347. package/dist/{utils-CM48ODEJ.js.map → utils-DwLrXpmt.js.map} +1 -1
  348. package/package.json +4 -4
  349. package/dist/AiMark-BfmK30vL.js.map +0 -1
  350. package/dist/Calendar-IzXG1aJw.js +0 -1761
  351. package/dist/Calendar-IzXG1aJw.js.map +0 -1
  352. package/dist/Chip-2OydLs66.js.map +0 -1
  353. package/dist/DataTable-DIXP9-Bx.js.map +0 -1
  354. package/dist/Dialog-_tHqOsbr.js.map +0 -1
  355. package/dist/DndHandleButton-BRlodkDO.js.map +0 -1
  356. package/dist/Drawer-D-ThWNp0.js.map +0 -1
  357. package/dist/DrillDown.module-1VBKDZRA.js +0 -27
  358. package/dist/DrillDown.module-1VBKDZRA.js.map +0 -1
  359. package/dist/FieldLabel-ThEmUiAq.js.map +0 -1
  360. package/dist/Lato.css +0 -24
  361. package/dist/ListView-YJscfG4x.js.map +0 -1
  362. package/dist/MultiSelectFieldSync-Cq5sena6.js.map +0 -1
  363. package/dist/MultiSelectMenuSync-BhNXsgAN.js.map +0 -1
  364. package/dist/NumberField-CxmJx4gs.js +0 -252
  365. package/dist/NumberField-CxmJx4gs.js.map +0 -1
  366. package/dist/Page-ZSHNJs7z.js.map +0 -1
  367. package/dist/SelectFieldSync-CeazN-gI.js.map +0 -1
  368. package/dist/SelectMenuSync-CPpE6vUG.js.map +0 -1
  369. package/dist/SelectTriggerBase.module-Dt4-6YvC.js +0 -40
  370. package/dist/SelectTriggerBase.module-Dt4-6YvC.js.map +0 -1
  371. package/dist/Tab-DR5YYXkq.js.map +0 -1
  372. package/dist/TextField.module-DklyLNKz.js +0 -25
  373. package/dist/TextField.module-DklyLNKz.js.map +0 -1
  374. package/dist/ThemeProvider.module-B9qgsQ8S.js +0 -8
  375. package/dist/ThemeProvider.module-B9qgsQ8S.js.map +0 -1
  376. package/dist/TimeField-Hwt_oRbg.js.map +0 -1
  377. package/dist/Toaster-SqkX0Kes.js.map +0 -1
  378. package/dist/app-css.379821199ec8105f2efd.bundle.css +0 -57579
  379. package/dist/bugfix-71.1orion.css +0 -491
  380. package/dist/design-system.859a127fc3b66175f0f0.bundle.css +0 -34599
  381. package/dist/drag_indicator-BRHAPLSJ.js +0 -6
  382. package/dist/drag_indicator-BRHAPLSJ.js.map +0 -1
  383. package/dist/favicon.ico +0 -0
  384. package/dist/kendo-css.ed976099efbbcc8b0639.bundle.css +0 -20601
  385. package/dist/luxon-wpz4A-OQ.js.map +0 -1
  386. package/dist/main.e26f249642be9a4bd747.bundle.css +0 -50386
  387. package/dist/react-ORV84FjM.js.map +0 -1
  388. package/dist/stripInlineMarkdown-BhYLEiXu.js +0 -25
  389. package/dist/stripInlineMarkdown-BhYLEiXu.js.map +0 -1
  390. package/dist/sui.a9dc22e36a27b7ea1ee8.bundle.css +0 -41149
  391. package/dist/syncFilterUtils-SMop8ckR.js.map +0 -1
  392. package/dist/useInitialFocus-CGybEc6x.js.map +0 -1
  393. package/dist/useNumberField-CXFYUZ_n.js.map +0 -1
  394. package/dist/usePrefersReducedMotion-DR9B_D6w.js.map +0 -1
  395. package/dist/vite.svg +0 -1
@@ -1,4 +1,23 @@
1
- // these aren't really private, but nor are they really useful to document
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { createContext, useContext, forwardRef, useRef, useCallback, useEffect, useState, useMemo, useId } from 'react';
3
+ import { B as Button } from './Button-B_E6ybA-.js';
4
+ import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
5
+ import { S as SvgKeyboardArrowUp } from './keyboard_arrow_up-CxzK6LAl.js';
6
+ import { S as SvgKeyboardArrowLeft } from './keyboard_arrow_left-CiE1n99w.js';
7
+ import { c as cx } from './index-De1g9FRV.js';
8
+ import { S as SvgKeyboardArrowRight } from './keyboard_arrow_right-DMloHg_F.js';
9
+ import { S as SrOnly } from './SrOnly-pnf8ajnh.js';
10
+ import { u as useSwipe } from './useSwipe-Cp-CJxLU.js';
11
+ import { G as Grid } from './Grid-BPCDtqoT.js';
12
+ import { S as SelectCard } from './SelectCard-DeAUW1bL.js';
13
+ import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
14
+ import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
15
+ import { u as useVirtualizer } from './index-DXeGMe23.js';
16
+ import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
17
+ import { u as usePrevious } from './usePrevious-Bvq-5auG.js';
18
+ import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
19
+
20
+ import './Calendar.css';// these aren't really private, but nor are they really useful to document
2
21
 
3
22
  /**
4
23
  * @private
@@ -8127,5 +8146,1744 @@ function friendlyDateTime(dateTimeish) {
8127
8146
  }
8128
8147
  }
8129
8148
 
8130
- export { DateTime as D, Info as I };
8131
- //# sourceMappingURL=luxon-wpz4A-OQ.js.map
8149
+ const CalendarContext = createContext(null);
8150
+ function useCalendar() {
8151
+ const context = useContext(CalendarContext);
8152
+ if (!context) {
8153
+ throw new Error("useCalendar must be used within a <Calendar>");
8154
+ }
8155
+ return context;
8156
+ }
8157
+
8158
+ const isSameDay = (d1, d2) => {
8159
+ if (!d1 || !d2) return void 0;
8160
+ try {
8161
+ if (d1.hasSame(d2, "month") && d1.hasSame(d2, "year") && d1.hasSame(d2, "day")) {
8162
+ return true;
8163
+ }
8164
+ return false;
8165
+ } catch {
8166
+ return false;
8167
+ }
8168
+ };
8169
+ const isSameMonth = (d1, d2) => {
8170
+ if (!d1 || !d2) return void 0;
8171
+ if (d1.hasSame(d2, "month") && d1.hasSame(d2, "year")) return true;
8172
+ return false;
8173
+ };
8174
+ const isUnavailableDate = (n, unavailable, timeZone) => {
8175
+ const tmpSet = /* @__PURE__ */ new Set();
8176
+ unavailable.dates?.forEach((date) => {
8177
+ tmpSet.add(toDateString(DateTime.fromISO(date, { zone: timeZone })));
8178
+ });
8179
+ if (unavailable.daysOfWeek?.has(n.weekday)) {
8180
+ return true;
8181
+ }
8182
+ const dateISO = n.toISO();
8183
+ if (!dateISO) return;
8184
+ return tmpSet.has(
8185
+ toDateString(DateTime.fromISO(dateISO, { zone: timeZone }))
8186
+ );
8187
+ };
8188
+ const isBeyondMinDate = (n, minDate) => minDate && minDate.toMillis() > n.toMillis();
8189
+ const isBeyondMaxDate = (n, maxDate) => maxDate && maxDate.toMillis() < n.toMillis();
8190
+ const normalizeDate = (date, defaultTimeZone) => {
8191
+ return DateTime.fromISO(date, { zone: defaultTimeZone }).startOf("day");
8192
+ };
8193
+ const toDateString = (date) => date.startOf("day").toISO();
8194
+ function rangeUpdater(value, newDate, setValue, onSelection) {
8195
+ if (value.start && isSameDay(value.start, newDate) && !value.end) {
8196
+ setValue((prev) => {
8197
+ return { ...prev, end: newDate };
8198
+ });
8199
+ onSelection?.({
8200
+ value: {
8201
+ start: toDateString(value.start) ?? void 0,
8202
+ end: toDateString(newDate) ?? void 0
8203
+ }
8204
+ });
8205
+ return;
8206
+ }
8207
+ if (!value.start && !value.end || value.start && value.end || value.start && !value.end && value.start.startOf("day").toMillis() > newDate.startOf("day").toMillis()) {
8208
+ setValue({ start: newDate, end: null });
8209
+ onSelection?.({
8210
+ value: {
8211
+ start: toDateString(newDate) ?? void 0,
8212
+ end: void 0
8213
+ }
8214
+ });
8215
+ return;
8216
+ }
8217
+ if (value.start && !value.end && value.start.startOf("day").toMillis() < newDate.startOf("day").toMillis()) {
8218
+ setValue((prev) => {
8219
+ return { ...prev, end: newDate };
8220
+ });
8221
+ onSelection?.({
8222
+ value: {
8223
+ start: toDateString(value.start) ?? void 0,
8224
+ end: toDateString(newDate) ?? void 0
8225
+ }
8226
+ });
8227
+ return;
8228
+ }
8229
+ if (!value.start && value.end) {
8230
+ setValue((prev) => {
8231
+ return { ...prev, start: newDate };
8232
+ });
8233
+ onSelection?.({
8234
+ value: {
8235
+ start: toDateString(newDate) ?? void 0,
8236
+ end: toDateString(value.end) ?? void 0
8237
+ }
8238
+ });
8239
+ return;
8240
+ }
8241
+ }
8242
+ const getDateMetadata = (date, dateMetadata) => {
8243
+ if (!dateMetadata) return void 0;
8244
+ const dateString = date.toISODate();
8245
+ return dateString ? dateMetadata.get(dateString) : void 0;
8246
+ };
8247
+
8248
+ const CalendarNow = forwardRef(
8249
+ (props, ref) => {
8250
+ const { onClick, onClickFixed, ...rest } = props;
8251
+ const {
8252
+ setFocusedDate,
8253
+ setSelectedMonth,
8254
+ setSelectedYear,
8255
+ value,
8256
+ setValue,
8257
+ defaultTimeZone,
8258
+ unavailable,
8259
+ onSelection,
8260
+ minDate,
8261
+ maxDate,
8262
+ controlled,
8263
+ range
8264
+ } = useCalendar();
8265
+ const nToday = DateTime.fromISO(DateTime.now().toISO(), {
8266
+ zone: defaultTimeZone
8267
+ }).startOf("day");
8268
+ const onClickHandler = (e) => {
8269
+ onClickFixed?.(e);
8270
+ setFocusedDate(nToday);
8271
+ setSelectedMonth(nToday.month);
8272
+ setSelectedYear(nToday.year);
8273
+ if (!range) {
8274
+ onSelection?.({
8275
+ value: toDateString(nToday) ?? void 0
8276
+ });
8277
+ if (!controlled) {
8278
+ setValue(nToday);
8279
+ }
8280
+ return;
8281
+ }
8282
+ rangeUpdater(value, nToday, setValue, onSelection);
8283
+ };
8284
+ const isDisabled = isBeyondMaxDate(nToday, maxDate) || isBeyondMinDate(nToday, minDate) || isUnavailableDate(nToday, unavailable, defaultTimeZone);
8285
+ return /* @__PURE__ */ jsx(
8286
+ Button,
8287
+ {
8288
+ ref,
8289
+ onClick: onClickHandler,
8290
+ appearance: "ghost",
8291
+ disabled: isDisabled,
8292
+ "data-anv": "calendar-now",
8293
+ size: "small",
8294
+ ...rest,
8295
+ children: "Today"
8296
+ }
8297
+ );
8298
+ }
8299
+ );
8300
+ CalendarNow.displayName = "CalendarNowButton";
8301
+
8302
+ const CalendarYearButton = forwardRef((props, ref) => {
8303
+ const { calendarSelectionState, ...rest } = props;
8304
+ const { selectedYear, locale } = useCalendar();
8305
+ const currentYear = DateTime.fromObject({ year: selectedYear }).setLocale(locale).toLocaleString({ year: "numeric" });
8306
+ return /* @__PURE__ */ jsx(
8307
+ Button,
8308
+ {
8309
+ ref,
8310
+ appearance: "ghost",
8311
+ size: "small",
8312
+ icon: {
8313
+ after: calendarSelectionState === "year" ? SvgKeyboardArrowUp : SvgKeyboardArrowDown
8314
+ },
8315
+ ...rest,
8316
+ children: currentYear
8317
+ }
8318
+ );
8319
+ });
8320
+ CalendarYearButton.displayName = "CalendarYearButton";
8321
+
8322
+ const calendar = "_calendar_uesx5_1";
8323
+ const grid = "_grid_uesx5_18";
8324
+ const header = "_header_uesx5_23";
8325
+ const controller = "_controller_uesx5_46";
8326
+ const spacer = "_spacer_uesx5_62";
8327
+ const cell = "_cell_uesx5_77";
8328
+ const weekday = "_weekday_uesx5_122";
8329
+ const range = "_range_uesx5_165";
8330
+ const overflow = "_overflow_uesx5_171";
8331
+ const selected = "_selected_uesx5_175";
8332
+ const pip = "_pip_uesx5_257";
8333
+ const styles$1 = {
8334
+ calendar: calendar,
8335
+ grid: grid,
8336
+ header: header,
8337
+ controller: controller,
8338
+ "controller-button": "_controller-button_uesx5_55",
8339
+ spacer: spacer,
8340
+ "day-grid": "_day-grid_uesx5_66",
8341
+ cell: cell,
8342
+ weekday: weekday,
8343
+ "month-selection": "_month-selection_uesx5_136",
8344
+ "selection-checkbox": "_selection-checkbox_uesx5_136",
8345
+ "selection-card": "_selection-card_uesx5_146",
8346
+ "year-selector": "_year-selector_uesx5_158",
8347
+ "range-first": "_range-first_uesx5_165",
8348
+ "range-last": "_range-last_uesx5_165",
8349
+ range: range,
8350
+ overflow: overflow,
8351
+ selected: selected,
8352
+ "is-unavailable": "_is-unavailable_uesx5_184",
8353
+ "hover-last": "_hover-last_uesx5_209",
8354
+ "has-metadata": "_has-metadata_uesx5_252",
8355
+ pip: pip,
8356
+ "range-fill": "_range-fill_uesx5_270",
8357
+ "range-disabled": "_range-disabled_uesx5_281"
8358
+ };
8359
+
8360
+ const CalendarPrev = forwardRef(
8361
+ (props, ref) => {
8362
+ const { onClick, className, ...rest } = props;
8363
+ const {
8364
+ focusedDate,
8365
+ setFocusedDate,
8366
+ minDate,
8367
+ setSelectedMonth,
8368
+ setSelectedYear
8369
+ } = useCalendar();
8370
+ const isDisabled = minDate != null && focusedDate.minus({ month: 1 }).endOf("month") < minDate;
8371
+ const onClickHandler = (e) => {
8372
+ if (isDisabled) return;
8373
+ onClick?.(e);
8374
+ const targetMonth = focusedDate.minus({ month: 1 }).endOf("month");
8375
+ const targetDate = focusedDate.minus({ month: 1 });
8376
+ const isCrossingYearBoundary = focusedDate.month === 1 && targetDate.month === 12;
8377
+ if (minDate !== null) {
8378
+ if (targetDate.toMillis() >= minDate?.toMillis()) {
8379
+ setFocusedDate(targetDate);
8380
+ setSelectedMonth(targetDate.month);
8381
+ if (isCrossingYearBoundary) {
8382
+ setSelectedYear(targetDate.year);
8383
+ }
8384
+ return;
8385
+ }
8386
+ if (!isSameMonth(targetMonth, focusedDate)) {
8387
+ setFocusedDate(minDate);
8388
+ setSelectedMonth(minDate.month);
8389
+ if (isCrossingYearBoundary) {
8390
+ setSelectedYear(minDate.year);
8391
+ }
8392
+ }
8393
+ return;
8394
+ }
8395
+ setFocusedDate(targetDate);
8396
+ setSelectedMonth(targetDate.month);
8397
+ if (isCrossingYearBoundary) {
8398
+ setSelectedYear(targetDate.year);
8399
+ }
8400
+ };
8401
+ return /* @__PURE__ */ jsx(
8402
+ Button,
8403
+ {
8404
+ ref,
8405
+ onClick: onClickHandler,
8406
+ className: cx(styles$1["controller-button"], className),
8407
+ appearance: "ghost",
8408
+ size: "small",
8409
+ icon: SvgKeyboardArrowLeft,
8410
+ "data-anv": "calendar-prev",
8411
+ "aria-label": "Previous Month",
8412
+ ...rest,
8413
+ "aria-disabled": isDisabled || void 0
8414
+ }
8415
+ );
8416
+ }
8417
+ );
8418
+ CalendarPrev.displayName = "CalendarPrevButton";
8419
+
8420
+ const CalendarNext = forwardRef(
8421
+ (props, ref) => {
8422
+ const { onClick, className, ...rest } = props;
8423
+ const {
8424
+ focusedDate,
8425
+ setFocusedDate,
8426
+ maxDate,
8427
+ setSelectedMonth,
8428
+ setSelectedYear
8429
+ } = useCalendar();
8430
+ const isDisabled = maxDate != null && focusedDate.plus({ month: 1 }).startOf("month") > maxDate;
8431
+ const onClickHandler = (e) => {
8432
+ if (isDisabled) return;
8433
+ onClick?.(e);
8434
+ const targetMonth = focusedDate.plus({ month: 1 }).startOf("month");
8435
+ const targetDate = focusedDate.plus({ month: 1 });
8436
+ const isCrossingYearBoundary = focusedDate.month === 12 && targetDate.month === 1;
8437
+ if (maxDate !== null) {
8438
+ if (targetDate.toMillis() <= maxDate?.toMillis()) {
8439
+ setFocusedDate(targetDate);
8440
+ setSelectedMonth(targetDate.month);
8441
+ if (isCrossingYearBoundary) {
8442
+ setSelectedYear(targetDate.year);
8443
+ }
8444
+ return;
8445
+ }
8446
+ if (!isSameMonth(targetMonth, focusedDate)) {
8447
+ setFocusedDate(maxDate);
8448
+ setSelectedMonth(maxDate.month);
8449
+ if (isCrossingYearBoundary) {
8450
+ setSelectedYear(maxDate.year);
8451
+ }
8452
+ }
8453
+ return;
8454
+ }
8455
+ setFocusedDate(targetDate);
8456
+ setSelectedMonth(targetDate.month);
8457
+ if (isCrossingYearBoundary) {
8458
+ setSelectedYear(targetDate.year);
8459
+ }
8460
+ };
8461
+ return /* @__PURE__ */ jsx(
8462
+ Button,
8463
+ {
8464
+ onClick: onClickHandler,
8465
+ appearance: "ghost",
8466
+ size: "small",
8467
+ className: cx(styles$1["controller-button"], className),
8468
+ icon: SvgKeyboardArrowRight,
8469
+ "aria-label": "Next Month",
8470
+ "data-anv": "calendar-next",
8471
+ ref,
8472
+ ...rest,
8473
+ "aria-disabled": isDisabled || void 0
8474
+ }
8475
+ );
8476
+ }
8477
+ );
8478
+ CalendarNext.displayName = "CalendarNextButton";
8479
+
8480
+ const CalendarMonthButton = forwardRef((props, ref) => {
8481
+ const { calendarSelectionState, onClick, ...rest } = props;
8482
+ const { selectedMonth, locale } = useCalendar();
8483
+ const currentMonth = DateTime.fromObject({ month: selectedMonth }).setLocale(locale).toFormat("MMM");
8484
+ return /* @__PURE__ */ jsx(
8485
+ Button,
8486
+ {
8487
+ ref,
8488
+ appearance: "ghost",
8489
+ size: "small",
8490
+ onClick,
8491
+ icon: {
8492
+ after: calendarSelectionState === "month" ? SvgKeyboardArrowUp : SvgKeyboardArrowDown
8493
+ },
8494
+ ...rest,
8495
+ children: currentMonth
8496
+ }
8497
+ );
8498
+ });
8499
+ CalendarMonthButton.displayName = "CalendarMonthButton";
8500
+
8501
+ const CalendarDay = forwardRef(
8502
+ (props, ref) => {
8503
+ const { className, date, ...rest } = props;
8504
+ const context = useCalendar();
8505
+ const {
8506
+ disableAutofocus,
8507
+ value,
8508
+ setValue,
8509
+ focusedDate,
8510
+ setFocusedDate,
8511
+ hoveredDate,
8512
+ setHoveredDate,
8513
+ onSelection,
8514
+ locale,
8515
+ minDate,
8516
+ maxDate,
8517
+ unavailable,
8518
+ defaultTimeZone,
8519
+ controlled,
8520
+ id: uid,
8521
+ range,
8522
+ dateFormat,
8523
+ startDay,
8524
+ setSelectedMonth,
8525
+ setSelectedYear,
8526
+ dateMetadata
8527
+ } = context;
8528
+ const initialized = useRef(false);
8529
+ const futureDateSelection = useCallback(
8530
+ (targetDate) => {
8531
+ if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {
8532
+ return;
8533
+ }
8534
+ if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
8535
+ let nextFocusDate = targetDate.plus({ days: 1 });
8536
+ for (let i = 0; i < 365; i++) {
8537
+ if (maxDate !== null && nextFocusDate.toMillis() > maxDate?.toMillis()) {
8538
+ break;
8539
+ }
8540
+ if (isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)) {
8541
+ nextFocusDate = nextFocusDate.plus({ days: 1 });
8542
+ } else {
8543
+ setFocusedDate(nextFocusDate);
8544
+ break;
8545
+ }
8546
+ }
8547
+ return;
8548
+ }
8549
+ setFocusedDate(targetDate);
8550
+ if (targetDate.month !== focusedDate.month) {
8551
+ setSelectedMonth(targetDate.month);
8552
+ if (targetDate.year !== focusedDate.year) {
8553
+ setSelectedYear(targetDate.year);
8554
+ }
8555
+ }
8556
+ },
8557
+ // eslint-disable-next-line react-hooks/exhaustive-deps
8558
+ [maxDate, setFocusedDate, defaultTimeZone, unavailable]
8559
+ );
8560
+ const pastDateSelection = (targetDate) => {
8561
+ if (minDate !== null && targetDate.toMillis() < minDate?.toMillis()) {
8562
+ return;
8563
+ }
8564
+ if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
8565
+ let prevFocusDate = targetDate.minus({ days: 1 });
8566
+ for (let i = 0; i < 365; i++) {
8567
+ if (minDate !== null && prevFocusDate.toMillis() < minDate?.toMillis()) {
8568
+ break;
8569
+ }
8570
+ if (isUnavailableDate(prevFocusDate, unavailable, defaultTimeZone)) {
8571
+ prevFocusDate = prevFocusDate.minus({ days: 1 });
8572
+ } else {
8573
+ setFocusedDate(prevFocusDate);
8574
+ break;
8575
+ }
8576
+ }
8577
+ return;
8578
+ }
8579
+ setFocusedDate(targetDate);
8580
+ if (targetDate.month !== focusedDate.month) {
8581
+ setSelectedMonth(targetDate.month);
8582
+ if (targetDate.year !== focusedDate.year) {
8583
+ setSelectedYear(targetDate.year);
8584
+ }
8585
+ }
8586
+ };
8587
+ const isSelectedDate = (date2, compareDate) => {
8588
+ if (!range) {
8589
+ return isSameDay(date2, value);
8590
+ }
8591
+ if (value.start && value.end) {
8592
+ return date2.toMillis() >= value.start.startOf("day").toMillis() && date2.toMillis() <= value.end.endOf("day").toMillis();
8593
+ }
8594
+ return isSameDay(date2, value.start);
8595
+ };
8596
+ const isRange = (date2) => {
8597
+ if (!range) {
8598
+ return false;
8599
+ }
8600
+ if (value.start && value.end) {
8601
+ return date2.toMillis() >= value.start.startOf("day").toMillis() && date2.toMillis() <= value.end.endOf("day").toMillis() && !isSameDay(value.start, date2) && !isSameDay(value.end, date2);
8602
+ }
8603
+ return false;
8604
+ };
8605
+ const onKeyDownHandler = (e) => {
8606
+ switch (e.code) {
8607
+ case "Space":
8608
+ case "Enter":
8609
+ e.preventDefault();
8610
+ if (!range) {
8611
+ if (!controlled) {
8612
+ setValue(isSameDay(value, focusedDate) ? null : focusedDate);
8613
+ }
8614
+ onSelection?.({
8615
+ value: isSameDay(value, focusedDate) ? void 0 : focusedDate.setZone(defaultTimeZone).startOf("day").toISO() ?? void 0
8616
+ });
8617
+ break;
8618
+ }
8619
+ rangeUpdater(value, focusedDate, setValue, onSelection);
8620
+ break;
8621
+ case "ArrowLeft":
8622
+ e.preventDefault();
8623
+ pastDateSelection(focusedDate.minus({ days: 1 }));
8624
+ break;
8625
+ case "ArrowRight":
8626
+ e.preventDefault();
8627
+ futureDateSelection(focusedDate.plus({ days: 1 }));
8628
+ break;
8629
+ case "ArrowUp":
8630
+ e.preventDefault();
8631
+ pastDateSelection(focusedDate.minus({ days: 7 }));
8632
+ break;
8633
+ case "ArrowDown":
8634
+ e.preventDefault();
8635
+ futureDateSelection(focusedDate.plus({ days: 7 }));
8636
+ break;
8637
+ case "PageUp":
8638
+ e.preventDefault();
8639
+ if (e.shiftKey) {
8640
+ pastDateSelection(focusedDate.minus({ years: 1 }));
8641
+ break;
8642
+ }
8643
+ pastDateSelection(focusedDate.minus({ months: 1 }));
8644
+ break;
8645
+ case "PageDown":
8646
+ e.preventDefault();
8647
+ if (e.shiftKey) {
8648
+ futureDateSelection(focusedDate.plus({ years: 1 }));
8649
+ break;
8650
+ }
8651
+ futureDateSelection(focusedDate.plus({ months: 1 }));
8652
+ break;
8653
+ }
8654
+ };
8655
+ let startDayIndex = 6;
8656
+ switch (startDay) {
8657
+ case "Monday":
8658
+ startDayIndex = 0;
8659
+ break;
8660
+ case "Sunday":
8661
+ default:
8662
+ startDayIndex = 6;
8663
+ }
8664
+ const weekdaysArr = [];
8665
+ for (let i = 0; i < 7; i++) {
8666
+ const dayIndex = (startDayIndex + i) % 7;
8667
+ weekdaysArr.push(Info.weekdays("narrow", { locale })[dayIndex]);
8668
+ }
8669
+ const firstDay = focusedDate.startOf("month");
8670
+ if (firstDay.weekday !== startDayIndex + 1) {
8671
+ for (let i = 1; i < 8; i++) {
8672
+ const prevDay = firstDay.minus({ days: i });
8673
+ if (prevDay.weekday === startDayIndex + 1) break;
8674
+ }
8675
+ }
8676
+ const onClickHandler = (d) => {
8677
+ setFocusedDate(d);
8678
+ if (!range) {
8679
+ onSelection?.({
8680
+ value: toDateString(d.setZone(defaultTimeZone)) ?? void 0
8681
+ });
8682
+ if (!controlled) {
8683
+ setValue(d);
8684
+ }
8685
+ return;
8686
+ }
8687
+ rangeUpdater(value, d, setValue, onSelection);
8688
+ };
8689
+ const onFocusHandler = (d) => {
8690
+ setHoveredDate(d);
8691
+ };
8692
+ const onBlurHandler = () => {
8693
+ setHoveredDate(void 0);
8694
+ };
8695
+ const onMouseEnterHandler = (d) => {
8696
+ setHoveredDate(d);
8697
+ };
8698
+ useEffect(() => {
8699
+ if (!initialized.current) {
8700
+ initialized.current = true;
8701
+ return;
8702
+ }
8703
+ if (!isSameDay(date, focusedDate)) return;
8704
+ requestAnimationFrame(() => {
8705
+ const dateId = `${uid}-${focusedDate.toISODate()}`;
8706
+ const targetElement = document.getElementById(dateId) || document.activeElement?.shadowRoot?.getElementById(dateId);
8707
+ const deepActiveEl = document.activeElement?.shadowRoot?.activeElement ?? document.activeElement;
8708
+ const isDayFocused = !!deepActiveEl?.id?.startsWith(`${uid}-`);
8709
+ if (!disableAutofocus || isDayFocused) {
8710
+ targetElement?.focus();
8711
+ }
8712
+ });
8713
+ }, [focusedDate, uid, disableAutofocus]);
8714
+ useEffect(() => {
8715
+ if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;
8716
+ futureDateSelection(focusedDate.plus({ days: 1 }));
8717
+ }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);
8718
+ const isDisabled = !isSameMonth(date, focusedDate) || isBeyondMinDate(date, minDate) || isBeyondMaxDate(date, maxDate) || isUnavailableDate(date, unavailable, defaultTimeZone);
8719
+ const isUnavailable = isUnavailableDate(date, unavailable, defaultTimeZone);
8720
+ const hasMetadata = getDateMetadata(date, dateMetadata);
8721
+ const hoverRange = range && hoveredDate && value.start && !value.end && date.toMillis() > value.start.toMillis() && date.toMillis() <= hoveredDate.toMillis();
8722
+ const cellCx = cx(styles$1["cell"], {
8723
+ [styles$1["selected"]]: !isUnavailable && isSelectedDate(date),
8724
+ [styles$1["range-first"]]: range && value.start && (value.end || hoveredDate) && isSameDay(date, value.start),
8725
+ [styles$1["range-last"]]: range && (value.start && value.end && isSameDay(date, value.end) || hoverRange && isSameDay(date, hoveredDate)),
8726
+ [styles$1["range"]]: isRange(date) || hoverRange,
8727
+ [styles$1["is-unavailable"]]: isUnavailable,
8728
+ [styles$1["overflow"]]: !isSameMonth(date, focusedDate),
8729
+ [styles$1["hover-last"]]: hoverRange && isSameDay(date, hoveredDate),
8730
+ [styles$1["has-metadata"]]: hasMetadata
8731
+ });
8732
+ const isMinDate = minDate !== null && date.toMillis() <= minDate?.toMillis();
8733
+ const isMaxDate = maxDate !== null && date.toMillis() >= maxDate?.toMillis();
8734
+ return /* @__PURE__ */ jsxs("td", { role: "gridcell", ...rest, ref, children: [
8735
+ !isUnavailable && (isRange(date) || hoverRange) ? /* @__PURE__ */ jsx(
8736
+ "div",
8737
+ {
8738
+ role: "presentation",
8739
+ className: cx(styles$1["range-fill"], {
8740
+ [styles$1["range-disabled"]]: isDisabled,
8741
+ [styles$1["hover-last"]]: hoverRange && isSameDay(date, hoveredDate)
8742
+ })
8743
+ }
8744
+ ) : null,
8745
+ /* @__PURE__ */ jsxs(
8746
+ "button",
8747
+ {
8748
+ onClick: () => onClickHandler(date),
8749
+ onFocus: () => onFocusHandler(date),
8750
+ onBlur: () => onBlurHandler(),
8751
+ className: cellCx,
8752
+ onKeyDown: onKeyDownHandler,
8753
+ onMouseEnter: () => onMouseEnterHandler(date),
8754
+ tabIndex: disableAutofocus ? -1 : isSameDay(date, focusedDate) ? 0 : -1,
8755
+ disabled: isDisabled ? true : void 0,
8756
+ "aria-label": `${date.toLocaleString(dateFormat)}${isSelectedDate(date) ? " selected" : ""}${hasMetadata ? `, ${hasMetadata}` : ""}${isMinDate ? ", You are on the first available date" : ""}${isMaxDate ? ", You are on the last available date" : ""}`,
8757
+ id: `${uid}-${date.toISODate()}`,
8758
+ children: [
8759
+ date.day,
8760
+ hasMetadata && /* @__PURE__ */ jsx("span", { className: styles$1["pip"], "aria-hidden": "true" })
8761
+ ]
8762
+ }
8763
+ )
8764
+ ] }, date.toISODate());
8765
+ }
8766
+ );
8767
+ CalendarDay.displayName = "CalendarDay";
8768
+
8769
+ const CalendarWeek = forwardRef(
8770
+ (props, ref) => {
8771
+ const { className, week, ...rest } = props;
8772
+ const context = useCalendar();
8773
+ const {
8774
+ focusedDate,
8775
+ setFocusedDate,
8776
+ locale,
8777
+ maxDate,
8778
+ unavailable,
8779
+ defaultTimeZone,
8780
+ id: uid,
8781
+ startDay
8782
+ } = context;
8783
+ const initialized = useRef(false);
8784
+ const futureDateSelection = useCallback(
8785
+ (targetDate) => {
8786
+ if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {
8787
+ return;
8788
+ }
8789
+ if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
8790
+ let nextFocusDate = targetDate.plus({ days: 1 });
8791
+ for (let i = 0; i < 365; i++) {
8792
+ if (maxDate !== null && nextFocusDate.toMillis() > maxDate?.toMillis()) {
8793
+ break;
8794
+ }
8795
+ if (isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)) {
8796
+ nextFocusDate = nextFocusDate.plus({ days: 1 });
8797
+ } else {
8798
+ setFocusedDate(nextFocusDate);
8799
+ break;
8800
+ }
8801
+ }
8802
+ return;
8803
+ }
8804
+ setFocusedDate(targetDate);
8805
+ },
8806
+ [maxDate, setFocusedDate, defaultTimeZone, unavailable]
8807
+ );
8808
+ let startDayIndex = 6;
8809
+ switch (startDay) {
8810
+ case "Monday":
8811
+ startDayIndex = 0;
8812
+ break;
8813
+ case "Sunday":
8814
+ default:
8815
+ startDayIndex = 6;
8816
+ }
8817
+ const weekdaysArr = [];
8818
+ for (let i = 0; i < 7; i++) {
8819
+ const dayIndex = (startDayIndex + i) % 7;
8820
+ weekdaysArr.push(Info.weekdays("narrow", { locale })[dayIndex]);
8821
+ }
8822
+ const firstDay = focusedDate.startOf("month");
8823
+ if (firstDay.weekday !== startDayIndex + 1) {
8824
+ for (let i = 1; i < 8; i++) {
8825
+ const prevDay = firstDay.minus({ days: i });
8826
+ if (prevDay.weekday === startDayIndex + 1) break;
8827
+ }
8828
+ }
8829
+ useEffect(() => {
8830
+ if (!initialized.current) return;
8831
+ setTimeout(() => {
8832
+ const targetElement = document.getElementById(
8833
+ `${uid}-${focusedDate.toISODate()}`
8834
+ );
8835
+ targetElement?.focus();
8836
+ }, 100);
8837
+ }, [focusedDate, uid]);
8838
+ useEffect(() => {
8839
+ if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;
8840
+ futureDateSelection(focusedDate.plus({ days: 1 }));
8841
+ }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);
8842
+ return /* @__PURE__ */ jsx("tr", { ...rest, ref, children: week.map((n) => {
8843
+ return /* @__PURE__ */ jsx(CalendarDay, { date: n }, n.toISODate());
8844
+ }) });
8845
+ }
8846
+ );
8847
+ CalendarWeek.displayName = "CalendarWeek";
8848
+
8849
+ const CalendarMonth = forwardRef(
8850
+ (props, ref) => {
8851
+ const { className, ...rest } = props;
8852
+ const context = useCalendar();
8853
+ const {
8854
+ value,
8855
+ focusedDate,
8856
+ setFocusedDate,
8857
+ setHoveredDate,
8858
+ locale,
8859
+ minDate,
8860
+ maxDate,
8861
+ unavailable,
8862
+ defaultTimeZone,
8863
+ id: uid,
8864
+ range,
8865
+ dateFormat,
8866
+ startDay
8867
+ } = context;
8868
+ const initialized = useRef(false);
8869
+ const ViewCX = cx(styles$1["grid"], className);
8870
+ const futureDateSelection = useCallback(
8871
+ (targetDate) => {
8872
+ if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {
8873
+ return;
8874
+ }
8875
+ if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
8876
+ let nextFocusDate = targetDate.plus({ days: 1 });
8877
+ for (let i = 0; i < 365; i++) {
8878
+ if (maxDate !== null && nextFocusDate.toMillis() > maxDate?.toMillis()) {
8879
+ break;
8880
+ }
8881
+ if (isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)) {
8882
+ nextFocusDate = nextFocusDate.plus({ days: 1 });
8883
+ } else {
8884
+ setFocusedDate(nextFocusDate);
8885
+ break;
8886
+ }
8887
+ }
8888
+ return;
8889
+ }
8890
+ setFocusedDate(targetDate);
8891
+ },
8892
+ [maxDate, setFocusedDate, defaultTimeZone, unavailable]
8893
+ );
8894
+ let startDayIndex = 6;
8895
+ switch (startDay) {
8896
+ case "Monday":
8897
+ startDayIndex = 0;
8898
+ break;
8899
+ case "Sunday":
8900
+ default:
8901
+ startDayIndex = 6;
8902
+ }
8903
+ const weekdaysArr = [];
8904
+ for (let i = 0; i < 7; i++) {
8905
+ const dayIndex = (startDayIndex + i) % 7;
8906
+ weekdaysArr.push(Info.weekdays("narrow", { locale })[dayIndex]);
8907
+ }
8908
+ const firstDay = focusedDate.startOf("month");
8909
+ const lastDay = focusedDate.endOf("month");
8910
+ const monthArr = Array.from(new Array(firstDay.daysInMonth)).map((_, i) => {
8911
+ return firstDay.plus({ days: i });
8912
+ });
8913
+ const prevArr = [];
8914
+ if (firstDay.weekday !== startDayIndex + 1) {
8915
+ for (let i = 1; i < 8; i++) {
8916
+ const prevDay = firstDay.minus({ days: i });
8917
+ prevArr.push(prevDay);
8918
+ if (prevDay.weekday === startDayIndex + 1) break;
8919
+ }
8920
+ }
8921
+ prevArr.reverse();
8922
+ const nextArr = Array.from(new Array(14)).map((_, i) => {
8923
+ return lastDay.plus({ days: i + 1 });
8924
+ });
8925
+ const fullArr = [...prevArr, ...monthArr, ...nextArr];
8926
+ const splitArr = [...Array(Math.ceil(fullArr.length / 7))].map((_, i) => fullArr.slice(7 * i, 7 + 7 * i)).slice(0, 6);
8927
+ const onMouseLeaveHandler = () => {
8928
+ setHoveredDate(void 0);
8929
+ };
8930
+ const onSwipe = (dir) => {
8931
+ if (dir === "left") {
8932
+ const targetMonth = focusedDate.plus({ month: 1 });
8933
+ if (isBeyondMinDate(targetMonth, minDate) || isBeyondMaxDate(targetMonth, maxDate))
8934
+ return;
8935
+ setFocusedDate(targetMonth);
8936
+ return;
8937
+ }
8938
+ if (dir === "right") {
8939
+ const targetMonth = focusedDate.minus({ month: 1 });
8940
+ if (isBeyondMinDate(targetMonth, minDate) || isBeyondMaxDate(targetMonth, maxDate))
8941
+ return;
8942
+ setFocusedDate(targetMonth);
8943
+ return;
8944
+ }
8945
+ };
8946
+ const { direction, ...touchProps } = useSwipe(onSwipe);
8947
+ useEffect(() => {
8948
+ if (!initialized.current) return;
8949
+ setTimeout(() => {
8950
+ const targetElement = document.getElementById(
8951
+ `${uid}-${focusedDate.toISODate()}`
8952
+ );
8953
+ targetElement?.focus();
8954
+ }, 100);
8955
+ }, [focusedDate, uid]);
8956
+ useEffect(() => {
8957
+ if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;
8958
+ futureDateSelection(focusedDate.plus({ days: 1 }));
8959
+ }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);
8960
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
8961
+ /* @__PURE__ */ jsxs(
8962
+ "table",
8963
+ {
8964
+ ref,
8965
+ "data-anv": "calendar-month",
8966
+ onFocus: () => {
8967
+ initialized.current = true;
8968
+ },
8969
+ onBlur: () => {
8970
+ initialized.current = false;
8971
+ },
8972
+ className: ViewCX,
8973
+ onMouseLeave: onMouseLeaveHandler,
8974
+ role: "grid",
8975
+ ...rest,
8976
+ ...touchProps,
8977
+ children: [
8978
+ /* @__PURE__ */ jsxs("thead", { "aria-hidden": true, className: styles$1["weekdays"], children: [
8979
+ /* @__PURE__ */ jsx("tr", { children: weekdaysArr.map((weekday, i) => {
8980
+ return /* @__PURE__ */ jsx(
8981
+ "th",
8982
+ {
8983
+ scope: "col",
8984
+ className: styles$1["weekday"],
8985
+ children: weekday
8986
+ },
8987
+ `${weekday}${i}`
8988
+ );
8989
+ }) }),
8990
+ /* @__PURE__ */ jsx("tr", { className: styles$1["spacer"], children: /* @__PURE__ */ jsx("td", { colSpan: 7 }) })
8991
+ ] }),
8992
+ /* @__PURE__ */ jsx(
8993
+ "tbody",
8994
+ {
8995
+ className: styles$1["day-grid"],
8996
+ children: splitArr.map((week, i) => {
8997
+ return /* @__PURE__ */ jsx(CalendarWeek, { week }, i);
8998
+ })
8999
+ },
9000
+ focusedDate.startOf("month").toMillis()
9001
+ )
9002
+ ]
9003
+ }
9004
+ ),
9005
+ range && value ? /* @__PURE__ */ jsx(SrOnly, { "aria-live": "polite", children: `Range starts at ${value.start && value.start.toLocaleString(dateFormat)}, ${value.end ? `ends at ${value.end.toLocaleString(dateFormat)}` : "select an end date"}` }) : null
9006
+ ] });
9007
+ }
9008
+ );
9009
+ CalendarMonth.displayName = "CalendarMonth";
9010
+
9011
+ const styles = {
9012
+ "year-selector": "_year-selector_1jh12_1",
9013
+ "year-grid": "_year-grid_1jh12_17",
9014
+ "year-item": "_year-item_1jh12_25",
9015
+ "pseudo-focused": "_pseudo-focused_1jh12_29"
9016
+ };
9017
+
9018
+ const useYearSelectorKeys = ({
9019
+ columns,
9020
+ scrollToYear,
9021
+ initialFocus,
9022
+ onSelect,
9023
+ onConfirm,
9024
+ pseudoFocused,
9025
+ setPseudoFocused,
9026
+ min,
9027
+ max,
9028
+ disabled,
9029
+ required
9030
+ }) => {
9031
+ const listRef = useRef(null);
9032
+ useEffect(() => {
9033
+ const list = listRef.current;
9034
+ const handleKeyDown = (e) => {
9035
+ if (pseudoFocused === null) return;
9036
+ if ([
9037
+ "ArrowLeft",
9038
+ "ArrowRight",
9039
+ "ArrowUp",
9040
+ "ArrowDown",
9041
+ "Home",
9042
+ "PageUp",
9043
+ "PageDown",
9044
+ "Enter",
9045
+ " ",
9046
+ "Backspace",
9047
+ "Delete"
9048
+ ].includes(e.key)) {
9049
+ e.preventDefault();
9050
+ if (e.key === "ArrowLeft" || e.key === "ArrowRight" || e.key === "ArrowUp" || e.key === "ArrowDown") {
9051
+ const newYear = e.key === "ArrowLeft" || e.key === "ArrowUp" ? pseudoFocused - 1 : pseudoFocused + 1;
9052
+ const clampedYear = Math.min(Math.max(newYear, min), max);
9053
+ scrollToYear(newYear, { focus: true });
9054
+ setPseudoFocused(newYear);
9055
+ if (!disabled) {
9056
+ onSelect(clampedYear);
9057
+ }
9058
+ return;
9059
+ }
9060
+ if (!required && (e.key === "Backspace" || e.key === "Delete")) {
9061
+ onSelect(null);
9062
+ return;
9063
+ }
9064
+ if (e.key === "PageUp" || e.key === "PageDown") {
9065
+ const newYear = e.key === "PageUp" ? min : max;
9066
+ scrollToYear(newYear, { focus: true });
9067
+ setPseudoFocused(newYear);
9068
+ if (!disabled) {
9069
+ onSelect(newYear);
9070
+ }
9071
+ return;
9072
+ }
9073
+ if (e.key === "Home") {
9074
+ scrollToYear(initialFocus, { focus: true });
9075
+ setPseudoFocused(initialFocus);
9076
+ if (!disabled) {
9077
+ onSelect(initialFocus);
9078
+ }
9079
+ return;
9080
+ }
9081
+ if (e.key === "Enter" || e.key === " ") {
9082
+ if (!disabled) {
9083
+ onConfirm();
9084
+ }
9085
+ return;
9086
+ }
9087
+ }
9088
+ };
9089
+ list?.addEventListener("keydown", handleKeyDown);
9090
+ return () => {
9091
+ list?.removeEventListener("keydown", handleKeyDown);
9092
+ };
9093
+ }, [
9094
+ pseudoFocused,
9095
+ columns,
9096
+ scrollToYear,
9097
+ onSelect,
9098
+ min,
9099
+ max,
9100
+ initialFocus,
9101
+ disabled,
9102
+ setPseudoFocused,
9103
+ required,
9104
+ onConfirm
9105
+ ]);
9106
+ return { listRef };
9107
+ };
9108
+
9109
+ const YearItem = ({
9110
+ year,
9111
+ onChange,
9112
+ selected,
9113
+ pseudoFocused,
9114
+ disabled,
9115
+ onFocus,
9116
+ ...rest
9117
+ }) => {
9118
+ return /* @__PURE__ */ jsx(
9119
+ SelectCard,
9120
+ {
9121
+ disabled,
9122
+ id: year,
9123
+ onChange: !disabled ? () => onChange(year) : () => {
9124
+ },
9125
+ onMouseDown: (e) => e.preventDefault(),
9126
+ checked: selected,
9127
+ checkboxProps: {
9128
+ tabIndex: -1,
9129
+ onFocus,
9130
+ ...pseudoFocused && { "data-interactive": "focus-visible" }
9131
+ },
9132
+ flexGrow: 1,
9133
+ className: cx(styles["year-item"], {
9134
+ [styles["pseudo-focused"]]: pseudoFocused
9135
+ }),
9136
+ "data-year": year,
9137
+ tabIndex: -1,
9138
+ ...rest,
9139
+ children: year
9140
+ }
9141
+ );
9142
+ };
9143
+
9144
+ const DEFAULT_MIN = 1900;
9145
+ const DEFAULT_MAX = 2200;
9146
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
9147
+ const YearSelector = forwardRef(
9148
+ ({
9149
+ min = DEFAULT_MIN,
9150
+ max = DEFAULT_MAX,
9151
+ value: valueProp,
9152
+ defaultValue: defaultValueProp,
9153
+ onChange,
9154
+ onConfirm,
9155
+ startingYear = currentYear,
9156
+ columns: columnsProp,
9157
+ className,
9158
+ required = false,
9159
+ disabled = false,
9160
+ ariaLabel = "Year selection",
9161
+ rootProps
9162
+ }, ref) => {
9163
+ const columns = Math.max(columnsProp ?? 2, 1);
9164
+ const [value, setValue] = useOptionallyControlledState({
9165
+ controlledValue: valueProp,
9166
+ defaultValue: defaultValueProp ?? null,
9167
+ onChange
9168
+ });
9169
+ const previousValue = usePrevious(value);
9170
+ const initialFocusYear = value ?? startingYear;
9171
+ const [pseudoFocused, setPseudoFocused] = useState(initialFocusYear);
9172
+ const handleChange = (year) => {
9173
+ if (!required && value === year) {
9174
+ setValue(null);
9175
+ return;
9176
+ }
9177
+ setValue(year);
9178
+ if (year !== null) {
9179
+ setPseudoFocused(year);
9180
+ }
9181
+ };
9182
+ const handleItemChange = (year) => {
9183
+ handleChange(year);
9184
+ onConfirm?.(year);
9185
+ };
9186
+ const gap = 12;
9187
+ const rowHeight = 58;
9188
+ const rowCount = Math.ceil((max - min + 1) / columns);
9189
+ const initialOffset = (initialFocusYear - min) * (rowHeight + gap) / columns + gap / 2;
9190
+ const rowVirtualizer = useVirtualizer({
9191
+ count: rowCount,
9192
+ getScrollElement: () => parentRef.current,
9193
+ estimateSize: () => rowHeight,
9194
+ gap,
9195
+ initialOffset,
9196
+ paddingEnd: gap / 2
9197
+ });
9198
+ const scrollToYear = useCallback(
9199
+ (year, { focus } = {}) => {
9200
+ const index = Math.floor((year - min) / columns);
9201
+ rowVirtualizer.scrollToIndex(index, { align: "center" });
9202
+ if (focus) {
9203
+ setPseudoFocused(year);
9204
+ }
9205
+ },
9206
+ [min, columns, rowVirtualizer, setPseudoFocused]
9207
+ );
9208
+ const parentRef = useRef(null);
9209
+ const { listRef } = useYearSelectorKeys({
9210
+ columns,
9211
+ scrollToYear,
9212
+ initialFocus: initialFocusYear,
9213
+ onSelect: handleChange,
9214
+ onConfirm: () => onConfirm?.(value),
9215
+ min,
9216
+ max,
9217
+ disabled,
9218
+ pseudoFocused,
9219
+ setPseudoFocused,
9220
+ required
9221
+ });
9222
+ useEffect(() => {
9223
+ if (value !== null && previousValue !== value) {
9224
+ scrollToYear(value, { focus: true });
9225
+ }
9226
+ }, [value, previousValue, scrollToYear, listRef]);
9227
+ const jointRef = useMergeRefs([parentRef, listRef, ref]);
9228
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
9229
+ "div",
9230
+ {
9231
+ ref: jointRef,
9232
+ "aria-label": ariaLabel,
9233
+ tabIndex: 0,
9234
+ className: cx(styles["year-selector"], className),
9235
+ role: "spinbutton",
9236
+ "aria-valuenow": value ?? void 0,
9237
+ "aria-valuemin": min,
9238
+ "aria-valuemax": max,
9239
+ "aria-valuetext": value ? `${value}` : "No year selected",
9240
+ "data-test": rowVirtualizer.options.paddingEnd,
9241
+ style: {
9242
+ maxHeight: `${rowVirtualizer.getTotalSize() + 8}px`
9243
+ },
9244
+ ...rootProps,
9245
+ children: /* @__PURE__ */ jsx(
9246
+ "div",
9247
+ {
9248
+ style: {
9249
+ height: `${rowVirtualizer.getTotalSize()}px`,
9250
+ width: "100%",
9251
+ position: "relative"
9252
+ },
9253
+ children: rowVirtualizer.getVirtualItems().map((virtualItem) => {
9254
+ const years = Array.from(
9255
+ { length: columns },
9256
+ (_, i) => virtualItem.index * columns + i + min
9257
+ );
9258
+ return /* @__PURE__ */ jsx(
9259
+ "div",
9260
+ {
9261
+ "data-testid": "v-row",
9262
+ className: styles["year-grid"],
9263
+ style: {
9264
+ transform: `translateY(${virtualItem.start}px)`,
9265
+ gridTemplateColumns: `repeat(${columns}, 1fr)`
9266
+ },
9267
+ children: years.map((year) => {
9268
+ if (year > max) return /* @__PURE__ */ jsx("div", {}, year);
9269
+ return /* @__PURE__ */ jsx(
9270
+ YearItem,
9271
+ {
9272
+ disabled,
9273
+ year,
9274
+ onChange: handleItemChange,
9275
+ selected: value === year,
9276
+ pseudoFocused: pseudoFocused === year,
9277
+ onFocus: () => {
9278
+ listRef.current?.focus();
9279
+ setPseudoFocused(year);
9280
+ }
9281
+ },
9282
+ year
9283
+ );
9284
+ })
9285
+ },
9286
+ virtualItem.key
9287
+ );
9288
+ })
9289
+ }
9290
+ )
9291
+ }
9292
+ ) });
9293
+ }
9294
+ );
9295
+ YearSelector.displayName = "YearSelector";
9296
+
9297
+ const CalendarMonthSelection = forwardRef(({ onMonthSelection, ...props }, ref) => {
9298
+ const { defaultTimeZone, maxDate, minDate, selectedMonth, selectedYear } = useCalendar();
9299
+ const monthSelectionRef = useRef(null);
9300
+ const combinedRef = useMergeRefs([ref, monthSelectionRef]);
9301
+ const currentDate = useMemo(
9302
+ () => DateTime.fromObject({ year: selectedYear, month: selectedMonth }).setZone(defaultTimeZone).startOf("day"),
9303
+ [defaultTimeZone, selectedYear, selectedMonth]
9304
+ );
9305
+ const dates = useMemo(
9306
+ () => Array.from({ length: 12 }, (_, i) => {
9307
+ const date = DateTime.fromObject({
9308
+ year: selectedYear,
9309
+ month: 1
9310
+ }).plus({
9311
+ month: i
9312
+ });
9313
+ const disabled = minDate && date < minDate && !date.hasSame(minDate, "month") || maxDate && date > maxDate && !date.hasSame(maxDate, "month");
9314
+ return {
9315
+ month: date.month,
9316
+ disabled: disabled ?? false
9317
+ };
9318
+ }),
9319
+ [maxDate, minDate, selectedYear]
9320
+ );
9321
+ const classes = cx(styles$1["month-selection"], props.className);
9322
+ const preventBlur = useCallback((e) => {
9323
+ e.preventDefault();
9324
+ }, []);
9325
+ const [focusedIndex, setFocusedIndex] = useState(selectedMonth - 1);
9326
+ useEffect(() => {
9327
+ if (minDate || maxDate) {
9328
+ let index = dates.findIndex(({ month }) => month === selectedMonth);
9329
+ while (dates[index].disabled && index < 11) {
9330
+ index++;
9331
+ }
9332
+ setFocusedIndex(index);
9333
+ } else {
9334
+ setFocusedIndex(selectedMonth - 1);
9335
+ }
9336
+ }, [selectedMonth, minDate, maxDate, dates]);
9337
+ const handleKeyDown = useCallback(
9338
+ (e) => {
9339
+ const target = e.target;
9340
+ const cards = monthSelectionRef.current?.querySelectorAll(
9341
+ "input[type='checkbox']"
9342
+ );
9343
+ if (!cards || cards.length === 0) {
9344
+ return;
9345
+ }
9346
+ const cardArray = Array.from(cards);
9347
+ const currentIndex = cardArray.indexOf(target);
9348
+ if (currentIndex === -1) return;
9349
+ const updateFocusedIndex = (index) => {
9350
+ e.preventDefault();
9351
+ cardArray[index].focus();
9352
+ setFocusedIndex(index);
9353
+ };
9354
+ let newIndex;
9355
+ switch (e.key) {
9356
+ case "ArrowLeft":
9357
+ newIndex = currentIndex > 0 ? currentIndex - 1 : 11;
9358
+ while (dates[newIndex].disabled) {
9359
+ newIndex = newIndex > 0 ? newIndex - 1 : 11;
9360
+ }
9361
+ updateFocusedIndex(newIndex);
9362
+ break;
9363
+ case "ArrowRight":
9364
+ newIndex = currentIndex < 11 ? currentIndex + 1 : 0;
9365
+ while (dates[newIndex].disabled) {
9366
+ newIndex = newIndex < 11 ? newIndex + 1 : 0;
9367
+ }
9368
+ updateFocusedIndex(newIndex);
9369
+ break;
9370
+ case "ArrowUp":
9371
+ if (currentIndex < 3) {
9372
+ newIndex = currentIndex + 9;
9373
+ } else {
9374
+ newIndex = currentIndex - 3;
9375
+ }
9376
+ while (dates[newIndex].disabled) {
9377
+ if (newIndex > 2) {
9378
+ newIndex -= 3;
9379
+ } else {
9380
+ newIndex += 9;
9381
+ }
9382
+ }
9383
+ updateFocusedIndex(newIndex);
9384
+ break;
9385
+ case "ArrowDown":
9386
+ if (currentIndex > 8) {
9387
+ newIndex = currentIndex - 9;
9388
+ } else {
9389
+ newIndex = currentIndex + 3;
9390
+ }
9391
+ while (dates[newIndex].disabled) {
9392
+ if (newIndex < 9) {
9393
+ newIndex += 3;
9394
+ } else {
9395
+ newIndex -= 9;
9396
+ }
9397
+ }
9398
+ updateFocusedIndex(newIndex);
9399
+ break;
9400
+ case "Enter":
9401
+ case " ":
9402
+ e.preventDefault();
9403
+ if (!dates[currentIndex].disabled) {
9404
+ onMonthSelection(dates[currentIndex].month);
9405
+ }
9406
+ break;
9407
+ }
9408
+ },
9409
+ [dates, onMonthSelection]
9410
+ );
9411
+ return /* @__PURE__ */ jsx(
9412
+ "div",
9413
+ {
9414
+ ref: combinedRef,
9415
+ "data-anv": "calendar-month-selection",
9416
+ className: classes,
9417
+ ...props,
9418
+ children: /* @__PURE__ */ jsx("div", { role: "grid", "aria-label": "Calendar month selection", children: /* @__PURE__ */ jsx(
9419
+ Grid,
9420
+ {
9421
+ templateColumns: "repeat(3, minmax(0, 1fr))",
9422
+ gap: 3,
9423
+ onKeyDown: handleKeyDown,
9424
+ role: "row",
9425
+ children: dates.map(({ month, disabled }, index) => /* @__PURE__ */ jsx("div", { role: "gridcell", children: /* @__PURE__ */ jsx(
9426
+ SelectCard,
9427
+ {
9428
+ id: month.toString(),
9429
+ disabled,
9430
+ onMouseDown: preventBlur,
9431
+ onChange: () => onMonthSelection(month),
9432
+ checked: selectedMonth === month && selectedYear === currentDate.year,
9433
+ checkboxProps: {
9434
+ className: styles$1["selection-checkbox"],
9435
+ tabIndex: focusedIndex === index ? 0 : -1
9436
+ },
9437
+ className: styles$1["selection-card"],
9438
+ children: DateTime.fromObject({ month }).toFormat("MMMM")
9439
+ }
9440
+ ) }, month.toString()))
9441
+ }
9442
+ ) })
9443
+ }
9444
+ );
9445
+ });
9446
+ CalendarMonthSelection.displayName = "CalendarMonthSelection";
9447
+
9448
+ const CalendarBetaPropsContext = createContext({});
9449
+
9450
+ const useCalendarBetaProps = () => {
9451
+ return useContext(CalendarBetaPropsContext);
9452
+ };
9453
+
9454
+ const FOCUSED_DATE_DEPRECATION_MESSAGE = "[Anvil2 Calendar] The `focusedDate` prop is deprecated and will be removed in a future major release. Use `defaultFocusedDate` to set the initially visible month instead.";
9455
+ const toolbarFocusStates = ["month", "year", "next", "prev", "now"];
9456
+ const Calendar = Object.assign(
9457
+ forwardRef(function CalendarInner(props, ref) {
9458
+ const uid = useId();
9459
+ const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
9460
+ const {
9461
+ children,
9462
+ focusedDate: focusProp,
9463
+ defaultFocusedDate,
9464
+ locale = Intl.DateTimeFormat().resolvedOptions().locale,
9465
+ defaultTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone,
9466
+ startDay = "Sunday",
9467
+ minDate,
9468
+ maxDate,
9469
+ unavailable = {
9470
+ dates: [],
9471
+ daysOfWeek: []
9472
+ },
9473
+ id,
9474
+ style,
9475
+ value: iValue,
9476
+ defaultValue: iDefaultValue,
9477
+ onSelection,
9478
+ range,
9479
+ className,
9480
+ _disableAutofocus,
9481
+ _disableFocus,
9482
+ ...remainingProps
9483
+ } = componentProps;
9484
+ useEffect(() => {
9485
+ if (focusProp !== void 0) {
9486
+ warnOnce(FOCUSED_DATE_DEPRECATION_MESSAGE);
9487
+ }
9488
+ }, [focusProp]);
9489
+ const { dateMetadata, onMonthView } = useCalendarBetaProps();
9490
+ const calendarRef = useRef(null);
9491
+ const combinedRef = useMergeRefs([ref, calendarRef]);
9492
+ const lastIValue = useRef(iValue);
9493
+ const yearButtonRef = useRef(null);
9494
+ const monthButtonRef = useRef(null);
9495
+ const headerRef = useRef(null);
9496
+ const [toolbarFocus, setToolbarFocus] = useState(toolbarFocusStates[0]);
9497
+ const [calendarWidth, setCalendarWidth] = useState(
9498
+ void 0
9499
+ );
9500
+ const [calendarSelectionState, setCalendarSelectionState] = useState("day");
9501
+ const visibleHeaderButtons = useMemo(() => {
9502
+ if (calendarSelectionState !== "day") {
9503
+ return toolbarFocusStates.slice(0, 2);
9504
+ }
9505
+ return toolbarFocusStates;
9506
+ }, [calendarSelectionState]);
9507
+ useEffect(() => {
9508
+ if (!calendarRef.current || style?.width != null) return;
9509
+ const resizeObserver = new ResizeObserver((entries) => {
9510
+ for (const entry of entries) {
9511
+ const width = entry.contentRect.width;
9512
+ if (calendarSelectionState === "day" && width > 100) {
9513
+ setCalendarWidth(width);
9514
+ }
9515
+ }
9516
+ });
9517
+ resizeObserver.observe(calendarRef.current);
9518
+ return () => {
9519
+ resizeObserver.disconnect();
9520
+ };
9521
+ }, [calendarSelectionState, style?.width]);
9522
+ const styleCombined = {
9523
+ width: calendarWidth,
9524
+ ...style,
9525
+ ...layoutStyles
9526
+ };
9527
+ const classNameCombined = cx(styles$1["calendar"], className);
9528
+ const { nDate, nDefaultDate, nToday } = useMemo(
9529
+ () => ({
9530
+ nDate: iValue ? typeof iValue === "string" ? normalizeDate(iValue, defaultTimeZone) : {
9531
+ start: iValue.start ? normalizeDate(iValue.start, defaultTimeZone) : null,
9532
+ end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null
9533
+ } : null,
9534
+ nDefaultDate: iDefaultValue ? typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) : {
9535
+ start: iDefaultValue.start ? normalizeDate(iDefaultValue.start, defaultTimeZone) : null,
9536
+ end: iDefaultValue?.end ? normalizeDate(iDefaultValue.end, defaultTimeZone) : null
9537
+ } : null,
9538
+ nToday: typeof iValue === "string" ? normalizeDate(DateTime.now().toISO(), defaultTimeZone) : {
9539
+ start: normalizeDate(DateTime.now().toISO(), defaultTimeZone),
9540
+ end: normalizeDate(DateTime.now().toISO(), defaultTimeZone)
9541
+ }
9542
+ }),
9543
+ [iValue, iDefaultValue, defaultTimeZone]
9544
+ );
9545
+ const [value, setValue] = useState(nDate ?? nDefaultDate ?? nToday);
9546
+ const getInitialDate = useMemo(() => {
9547
+ if (defaultFocusedDate) {
9548
+ return normalizeDate(defaultFocusedDate, defaultTimeZone);
9549
+ }
9550
+ if (iDefaultValue) {
9551
+ const date = typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) : normalizeDate(
9552
+ iDefaultValue.start ?? iDefaultValue.end ?? "",
9553
+ defaultTimeZone
9554
+ );
9555
+ return date;
9556
+ }
9557
+ if (!DateTime.isDateTime(nDate) && !DateTime.isDateTime(nDefaultDate) && !DateTime.isDateTime(nToday)) {
9558
+ return nDate?.start ?? nDefaultDate?.start ?? nToday?.start;
9559
+ }
9560
+ return nDate ?? nDefaultDate ?? nToday;
9561
+ }, [
9562
+ defaultFocusedDate,
9563
+ iDefaultValue,
9564
+ nDate,
9565
+ nDefaultDate,
9566
+ nToday,
9567
+ defaultTimeZone
9568
+ ]);
9569
+ const initialDate = getInitialDate ?? DateTime.now();
9570
+ const [focusedDate, setFocusedDate] = useState(initialDate);
9571
+ const [hoveredDate, setHoveredDate] = useState();
9572
+ const [selectedMonth, setSelectedMonth] = useState(
9573
+ initialDate.month
9574
+ );
9575
+ const [selectedYear, setSelectedYear] = useState(
9576
+ initialDate.year
9577
+ );
9578
+ const currentVisibleMonth = useMemo(() => {
9579
+ return {
9580
+ year: focusedDate?.year ?? selectedYear,
9581
+ month: focusedDate?.month ?? selectedMonth
9582
+ };
9583
+ }, [focusedDate?.month, focusedDate?.year, selectedYear, selectedMonth]);
9584
+ useEffect(
9585
+ () => onMonthView?.(currentVisibleMonth),
9586
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- omit onMonthView from deps because we don't want to trigger infinite re-renders
9587
+ [currentVisibleMonth]
9588
+ );
9589
+ useEffect(() => {
9590
+ if (!focusProp && !defaultFocusedDate) return;
9591
+ if (focusProp) {
9592
+ setFocusedDate(normalizeDate(focusProp, defaultTimeZone));
9593
+ } else if (defaultFocusedDate) {
9594
+ setFocusedDate(normalizeDate(defaultFocusedDate, defaultTimeZone));
9595
+ setSelectedMonth(
9596
+ normalizeDate(defaultFocusedDate, defaultTimeZone).month
9597
+ );
9598
+ setSelectedYear(
9599
+ normalizeDate(defaultFocusedDate, defaultTimeZone).year
9600
+ );
9601
+ }
9602
+ }, [focusProp, defaultFocusedDate]);
9603
+ useEffect(() => {
9604
+ if (!iValue) {
9605
+ lastIValue.current = iValue;
9606
+ return;
9607
+ }
9608
+ if (typeof iValue === "string") {
9609
+ setValue(normalizeDate(iValue, defaultTimeZone));
9610
+ setFocusedDate(normalizeDate(iValue, defaultTimeZone));
9611
+ } else if (iValue.end && (typeof lastIValue.current !== "object" || lastIValue?.current?.end !== iValue.end)) {
9612
+ setValue({
9613
+ start: iValue.start ? normalizeDate(iValue.start, defaultTimeZone) : null,
9614
+ end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null
9615
+ });
9616
+ setFocusedDate(normalizeDate(iValue.end, defaultTimeZone));
9617
+ } else if (iValue.start && (typeof lastIValue.current !== "object" || lastIValue?.current?.start !== iValue.start)) {
9618
+ setFocusedDate(normalizeDate(iValue.start, defaultTimeZone));
9619
+ }
9620
+ lastIValue.current = iValue;
9621
+ }, [iValue]);
9622
+ const normalizedMinDate = useMemo(
9623
+ () => minDate ? normalizeDate(minDate, defaultTimeZone) : null,
9624
+ [minDate, defaultTimeZone]
9625
+ );
9626
+ const normalizedMaxDate = useMemo(
9627
+ () => maxDate ? normalizeDate(maxDate, defaultTimeZone) : null,
9628
+ [maxDate, defaultTimeZone]
9629
+ );
9630
+ const dateMetadataMap = useMemo(() => {
9631
+ if (!dateMetadata) return void 0;
9632
+ return new Map(dateMetadata.map((item) => [item.date, item.context]));
9633
+ }, [dateMetadata]);
9634
+ const providerValue = useMemo(() => {
9635
+ const format = {
9636
+ weekday: "long",
9637
+ month: "long",
9638
+ day: "2-digit",
9639
+ year: "numeric"
9640
+ };
9641
+ return {
9642
+ disableAutofocus: _disableAutofocus ?? false,
9643
+ focusedDate,
9644
+ setFocusedDate,
9645
+ selectedMonth,
9646
+ setSelectedMonth,
9647
+ selectedYear,
9648
+ setSelectedYear,
9649
+ hoveredDate,
9650
+ setHoveredDate,
9651
+ value,
9652
+ setValue,
9653
+ defaultTimeZone,
9654
+ id: id ?? uid,
9655
+ onSelection,
9656
+ controlled: !!iValue,
9657
+ range,
9658
+ minDate: normalizedMinDate,
9659
+ maxDate: normalizedMaxDate,
9660
+ unavailable: {
9661
+ dates: new Set(unavailable.dates),
9662
+ daysOfWeek: new Set(unavailable.daysOfWeek)
9663
+ },
9664
+ locale,
9665
+ dateFormat: format,
9666
+ startDay,
9667
+ dateMetadata: dateMetadataMap
9668
+ };
9669
+ }, [
9670
+ focusedDate,
9671
+ selectedMonth,
9672
+ selectedYear,
9673
+ hoveredDate,
9674
+ id,
9675
+ locale,
9676
+ normalizedMaxDate,
9677
+ normalizedMinDate,
9678
+ iValue,
9679
+ onSelection,
9680
+ range,
9681
+ defaultTimeZone,
9682
+ uid,
9683
+ unavailable,
9684
+ value,
9685
+ startDay,
9686
+ dateMetadataMap,
9687
+ _disableAutofocus
9688
+ ]);
9689
+ const handleHeaderKeyDown = useCallback(
9690
+ (e) => {
9691
+ switch (e.key) {
9692
+ case "ArrowDown": {
9693
+ e.preventDefault();
9694
+ if (calendarSelectionState === "day") {
9695
+ const focusedDayId = `${id ?? uid}-${focusedDate?.toISODate()}`;
9696
+ const root = e.currentTarget.getRootNode() ?? document;
9697
+ root.getElementById(focusedDayId)?.focus();
9698
+ }
9699
+ break;
9700
+ }
9701
+ case "ArrowLeft":
9702
+ e.preventDefault();
9703
+ setToolbarFocus((previousToolbarFocus) => {
9704
+ const newToolbarFocus = previousToolbarFocus === visibleHeaderButtons[0] ? visibleHeaderButtons[visibleHeaderButtons.length - 1] : visibleHeaderButtons[visibleHeaderButtons.indexOf(previousToolbarFocus) - 1] ?? visibleHeaderButtons[visibleHeaderButtons.length - 1];
9705
+ const button = headerRef.current?.querySelector(
9706
+ `[data-calendar-header-button-name="${newToolbarFocus}"]`
9707
+ );
9708
+ if (button && "focus" in button && typeof button.focus === "function") {
9709
+ button.focus();
9710
+ }
9711
+ return newToolbarFocus;
9712
+ });
9713
+ break;
9714
+ case "ArrowRight":
9715
+ e.preventDefault();
9716
+ setToolbarFocus((previousToolbarFocus) => {
9717
+ const newToolbarFocus = previousToolbarFocus === visibleHeaderButtons[visibleHeaderButtons.length - 1] ? visibleHeaderButtons[0] : visibleHeaderButtons[visibleHeaderButtons.indexOf(previousToolbarFocus) + 1] ?? visibleHeaderButtons[0];
9718
+ const button = headerRef.current?.querySelector(
9719
+ `[data-calendar-header-button-name="${newToolbarFocus}"]`
9720
+ );
9721
+ if (button && "focus" in button && typeof button.focus === "function") {
9722
+ button.focus();
9723
+ }
9724
+ return newToolbarFocus;
9725
+ });
9726
+ }
9727
+ },
9728
+ [visibleHeaderButtons, calendarSelectionState, focusedDate, id, uid]
9729
+ );
9730
+ const handleMonthSelection = useCallback(
9731
+ (month) => {
9732
+ monthButtonRef.current?.focus();
9733
+ setToolbarFocus(toolbarFocusStates[0]);
9734
+ setSelectedMonth(month);
9735
+ setFocusedDate(
9736
+ DateTime.fromObject(
9737
+ {
9738
+ year: focusedDate?.year ?? 1,
9739
+ month,
9740
+ day: 1
9741
+ },
9742
+ { zone: defaultTimeZone }
9743
+ ).startOf("day")
9744
+ );
9745
+ setCalendarSelectionState("day");
9746
+ },
9747
+ // eslint-disable-next-line react-hooks/exhaustive-deps
9748
+ [focusedDate]
9749
+ );
9750
+ const handleYearSelection = useCallback(
9751
+ (year) => {
9752
+ if (year === null) return;
9753
+ yearButtonRef.current?.focus();
9754
+ setToolbarFocus(toolbarFocusStates[1]);
9755
+ setSelectedYear(year);
9756
+ setFocusedDate(
9757
+ DateTime.fromObject(
9758
+ {
9759
+ year,
9760
+ month: focusedDate?.month ?? 1,
9761
+ day: 1
9762
+ },
9763
+ { zone: defaultTimeZone }
9764
+ ).startOf("day")
9765
+ );
9766
+ setCalendarSelectionState("day");
9767
+ },
9768
+ // eslint-disable-next-line react-hooks/exhaustive-deps
9769
+ [focusedDate?.month]
9770
+ );
9771
+ return /* @__PURE__ */ jsx(CalendarContext.Provider, { value: providerValue, children: /* @__PURE__ */ jsxs(
9772
+ "div",
9773
+ {
9774
+ ref: combinedRef,
9775
+ id: id ?? uid,
9776
+ style: styleCombined,
9777
+ className: classNameCombined,
9778
+ "data-anv": "calendar",
9779
+ ...remainingProps,
9780
+ children: [
9781
+ /* @__PURE__ */ jsx("div", { className: styles$1["header"], children: /* @__PURE__ */ jsxs(
9782
+ "span",
9783
+ {
9784
+ ref: headerRef,
9785
+ "aria-label": "Calendar navigation",
9786
+ role: "toolbar",
9787
+ tabIndex: -1,
9788
+ onKeyDown: handleHeaderKeyDown,
9789
+ className: styles$1["controller"],
9790
+ children: [
9791
+ /* @__PURE__ */ jsx(
9792
+ CalendarMonthButton,
9793
+ {
9794
+ ref: monthButtonRef,
9795
+ tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[0] ? 0 : -1,
9796
+ "data-calendar-header-button": true,
9797
+ "data-calendar-header-button-name": toolbarFocusStates[0],
9798
+ calendarSelectionState,
9799
+ onClick: () => {
9800
+ setCalendarSelectionState(
9801
+ (prev) => prev === "month" ? "day" : "month"
9802
+ );
9803
+ setToolbarFocus(toolbarFocusStates[0]);
9804
+ }
9805
+ }
9806
+ ),
9807
+ /* @__PURE__ */ jsx(
9808
+ CalendarYearButton,
9809
+ {
9810
+ ref: yearButtonRef,
9811
+ tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[1] ? 0 : -1,
9812
+ "data-calendar-header-button": true,
9813
+ "data-calendar-header-button-name": toolbarFocusStates[1],
9814
+ calendarSelectionState,
9815
+ onClick: () => {
9816
+ setCalendarSelectionState(
9817
+ (prev) => prev === "year" ? "day" : "year"
9818
+ );
9819
+ setToolbarFocus(toolbarFocusStates[1]);
9820
+ }
9821
+ }
9822
+ ),
9823
+ calendarSelectionState === "day" && /* @__PURE__ */ jsxs(Fragment, { children: [
9824
+ /* @__PURE__ */ jsx(
9825
+ CalendarPrev,
9826
+ {
9827
+ tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[2] ? 0 : -1,
9828
+ "data-calendar-header-button": true,
9829
+ "data-calendar-header-button-name": toolbarFocusStates[2],
9830
+ onClick: () => setToolbarFocus(toolbarFocusStates[2])
9831
+ }
9832
+ ),
9833
+ /* @__PURE__ */ jsx(
9834
+ CalendarNext,
9835
+ {
9836
+ tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[3] ? 0 : -1,
9837
+ "data-calendar-header-button": true,
9838
+ "data-calendar-header-button-name": toolbarFocusStates[3],
9839
+ onClick: () => setToolbarFocus(toolbarFocusStates[3])
9840
+ }
9841
+ ),
9842
+ /* @__PURE__ */ jsx(
9843
+ CalendarNow,
9844
+ {
9845
+ tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[4] ? 0 : -1,
9846
+ "data-calendar-header-button": true,
9847
+ "data-calendar-header-button-name": toolbarFocusStates[4],
9848
+ onClickFixed: () => setToolbarFocus(toolbarFocusStates[4])
9849
+ }
9850
+ )
9851
+ ] })
9852
+ ]
9853
+ }
9854
+ ) }),
9855
+ calendarSelectionState === "day" && /* @__PURE__ */ jsx(CalendarMonth, {}),
9856
+ calendarSelectionState === "month" && /* @__PURE__ */ jsx(CalendarMonthSelection, { onMonthSelection: handleMonthSelection }),
9857
+ calendarSelectionState === "year" && /* @__PURE__ */ jsx("div", { className: styles$1["year-selector"], children: /* @__PURE__ */ jsx(
9858
+ YearSelector,
9859
+ {
9860
+ onConfirm: handleYearSelection,
9861
+ required: true,
9862
+ defaultValue: selectedYear,
9863
+ min: normalizedMinDate?.year,
9864
+ max: normalizedMaxDate?.year
9865
+ }
9866
+ ) })
9867
+ ]
9868
+ }
9869
+ ) });
9870
+ }),
9871
+ {
9872
+ /** Selects today and moves it into view. */
9873
+ Now: CalendarNow,
9874
+ /** Displays the current month grid. */
9875
+ Month: CalendarMonth,
9876
+ /** Moves the calendar to the next month. */
9877
+ Next: CalendarNext,
9878
+ /** Moves the calendar to the previous month. */
9879
+ Prev: CalendarPrev,
9880
+ /** Opens or closes month selection. */
9881
+ MonthButton: CalendarMonthButton,
9882
+ /** Opens or closes year selection. */
9883
+ YearButton: CalendarYearButton
9884
+ }
9885
+ );
9886
+ Calendar.displayName = "Calendar";
9887
+
9888
+ export { CalendarBetaPropsContext as C, DateTime as D, Calendar as a, CalendarNow as b, CalendarYearButton as c, CalendarPrev as d, CalendarNext as e, CalendarMonthButton as f, CalendarMonth as g, useCalendarBetaProps as u };
9889
+ //# sourceMappingURL=Calendar-BcsuV4Xv.js.map