@servicetitan/anvil2 3.16.1 → 3.17.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 (288) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{AiMark-BfmK30vL.js → AiMark-CYXbKuCA.js} +2 -2
  3. package/dist/{AiMark-BfmK30vL.js.map → AiMark-CYXbKuCA.js.map} +1 -1
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-lLo1N7Tj.js → Alert-CYpl0czJ.js} +3 -3
  6. package/dist/{Alert-lLo1N7Tj.js.map → Alert-CYpl0czJ.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/{Breadcrumbs-RdL4Fvmu.js → Breadcrumbs-C0CXs9Ma.js} +2 -2
  12. package/dist/{Breadcrumbs-RdL4Fvmu.js.map → Breadcrumbs-C0CXs9Ma.js.map} +1 -1
  13. package/dist/Breadcrumbs.js +1 -1
  14. package/dist/{Button-Dn6-01xl.js → Button-B_E6ybA-.js} +3 -3
  15. package/dist/{Button-Dn6-01xl.js.map → Button-B_E6ybA-.js.map} +1 -1
  16. package/dist/Button.js +1 -1
  17. package/dist/{ButtonToggle-BSU8GBxr.js → ButtonToggle-D0eXySEM.js} +2 -2
  18. package/dist/{ButtonToggle-BSU8GBxr.js.map → ButtonToggle-D0eXySEM.js.map} +1 -1
  19. package/dist/ButtonToggle.js +1 -1
  20. package/dist/{luxon-wpz4A-OQ.js → Calendar-BAIyDHX9.js} +1761 -3
  21. package/dist/Calendar-BAIyDHX9.js.map +1 -0
  22. package/dist/{Calendar-DoLRAWLp.js → Calendar-C_NPqjx3.js} +2 -2
  23. package/dist/{Calendar-DoLRAWLp.js.map → Calendar-C_NPqjx3.js.map} +1 -1
  24. package/dist/Calendar.js +2 -2
  25. package/dist/{Checkbox-U-kuWhgc.js → Checkbox-4Ow8rCbD.js} +2 -2
  26. package/dist/{Checkbox-U-kuWhgc.js.map → Checkbox-4Ow8rCbD.js.map} +1 -1
  27. package/dist/{Checkbox-CVxbe-iN.js → Checkbox-f1vutjn0.js} +3 -3
  28. package/dist/{Checkbox-CVxbe-iN.js.map → Checkbox-f1vutjn0.js.map} +1 -1
  29. package/dist/Checkbox.js +1 -1
  30. package/dist/{Chip-2OydLs66.js → Chip-AIF0WiNS.js} +2 -2
  31. package/dist/{Chip-2OydLs66.js.map → Chip-AIF0WiNS.js.map} +1 -1
  32. package/dist/Chip.js +1 -1
  33. package/dist/Combobox.js +1 -1
  34. package/dist/{DataTable-DIXP9-Bx.js → DataTableEditColumnsDrawer-DRgJgso9.js} +1288 -263
  35. package/dist/DataTableEditColumnsDrawer-DRgJgso9.js.map +1 -0
  36. package/dist/{DataTable.css → DataTableEditColumnsDrawer.css} +41 -0
  37. package/dist/{DateFieldRange-X2jdOTYY.js → DateFieldRange-D9PA985Z.js} +6 -7
  38. package/dist/{DateFieldRange-X2jdOTYY.js.map → DateFieldRange-D9PA985Z.js.map} +1 -1
  39. package/dist/DateFieldRange.js +1 -1
  40. package/dist/{DateFieldSingle-BJ16tpOz.js → DateFieldSingle-CMLojOb3.js} +6 -7
  41. package/dist/{DateFieldSingle-BJ16tpOz.js.map → DateFieldSingle-CMLojOb3.js.map} +1 -1
  42. package/dist/DateFieldSingle.js +1 -1
  43. package/dist/{DateFieldYearless-CMm8vtz_.js → DateFieldYearless-B5IyR75v.js} +4 -4
  44. package/dist/{DateFieldYearless-CMm8vtz_.js.map → DateFieldYearless-B5IyR75v.js.map} +1 -1
  45. package/dist/DateFieldYearless.js +1 -1
  46. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js → DateFieldYearlessRange-8yXILjx7.js} +3 -3
  47. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js.map → DateFieldYearlessRange-8yXILjx7.js.map} +1 -1
  48. package/dist/DateFieldYearlessRange.js +1 -1
  49. package/dist/{DaysOfTheWeek-BHXxs0Bo.js → DaysOfTheWeek-Cxp5VdYK.js} +3 -3
  50. package/dist/{DaysOfTheWeek-BHXxs0Bo.js.map → DaysOfTheWeek-Cxp5VdYK.js.map} +1 -1
  51. package/dist/DaysOfTheWeek.js +1 -1
  52. package/dist/{Dialog-_tHqOsbr.js → Dialog-KDAJphrA.js} +8 -7
  53. package/dist/Dialog-KDAJphrA.js.map +1 -0
  54. package/dist/Dialog.js +1 -1
  55. package/dist/{DialogCancelButton-C0r8hJ8Z.js → DialogCancelButton-CplrFu69.js} +2 -2
  56. package/dist/{DialogCancelButton-C0r8hJ8Z.js.map → DialogCancelButton-CplrFu69.js.map} +1 -1
  57. package/dist/Dnd.js +2 -2
  58. package/dist/{DndHandleButton-BRlodkDO.js → DndHandleButton-BJqj2hc0.js} +6 -4
  59. package/dist/DndHandleButton-BJqj2hc0.js.map +1 -0
  60. package/dist/DndSort.js +2 -2
  61. package/dist/{Drawer-D-ThWNp0.js → Drawer-C7E2NNnH.js} +9 -8
  62. package/dist/Drawer-C7E2NNnH.js.map +1 -0
  63. package/dist/Drawer.js +1 -1
  64. package/dist/DrillDown.css +41 -34
  65. package/dist/DrillDown.js +1 -1
  66. package/dist/DrillDown.module-BFE5BcJB.js +28 -0
  67. package/dist/DrillDown.module-BFE5BcJB.js.map +1 -0
  68. package/dist/{EditCard-B6l2vhBS.js → EditCard-CutlsXfK.js} +3 -3
  69. package/dist/{EditCard-B6l2vhBS.js.map → EditCard-CutlsXfK.js.map} +1 -1
  70. package/dist/EditCard.js +1 -1
  71. package/dist/{FieldLabel-ThEmUiAq.js → FieldLabel-DYcUS3A4.js} +2 -2
  72. package/dist/{FieldLabel-ThEmUiAq.js.map → FieldLabel-DYcUS3A4.js.map} +1 -1
  73. package/dist/FieldLabel.js +1 -1
  74. package/dist/{FilterBar-CGsDg6Hy.js → FilterBar-DbDfZph-.js} +7 -7
  75. package/dist/{FilterBar-CGsDg6Hy.js.map → FilterBar-DbDfZph-.js.map} +1 -1
  76. package/dist/FilterBar.js +1 -1
  77. package/dist/{InputMask-BQigi5oW.js → InputMask-BxdQc1ld.js} +3 -3
  78. package/dist/{InputMask-BQigi5oW.js.map → InputMask-BxdQc1ld.js.map} +1 -1
  79. package/dist/InputMask.js +1 -1
  80. package/dist/{ListView-YJscfG4x.js → ListView-BVanVvBk.js} +87 -108
  81. package/dist/ListView-BVanVvBk.js.map +1 -0
  82. package/dist/ListView.js +1 -1
  83. package/dist/{Listbox-CD9ZptSZ.js → Listbox-BR0YQIee.js} +2 -2
  84. package/dist/{Listbox-CD9ZptSZ.js.map → Listbox-BR0YQIee.js.map} +1 -1
  85. package/dist/Listbox.js +1 -1
  86. package/dist/{Menu-Da2OEN0o.js → Menu-DqP7YQgE.js} +2 -2
  87. package/dist/{Menu-Da2OEN0o.js.map → Menu-DqP7YQgE.js.map} +1 -1
  88. package/dist/Menu.js +1 -1
  89. package/dist/{MenuFooter-D__gg92C.js → MenuFooter-Dzhv0EfD.js} +2 -2
  90. package/dist/{MenuFooter-D__gg92C.js.map → MenuFooter-Dzhv0EfD.js.map} +1 -1
  91. package/dist/MultiSelectField.js +1 -1
  92. package/dist/{MultiSelectFieldSync-Cq5sena6.js → MultiSelectFieldSync-9253tott.js} +7 -7
  93. package/dist/{MultiSelectFieldSync-Cq5sena6.js.map → MultiSelectFieldSync-9253tott.js.map} +1 -1
  94. package/dist/MultiSelectMenu.js +1 -1
  95. package/dist/{MultiSelectMenuSync-BhNXsgAN.js → MultiSelectMenuSync-BUJbWN2I.js} +5 -5
  96. package/dist/{MultiSelectMenuSync-BhNXsgAN.js.map → MultiSelectMenuSync-BUJbWN2I.js.map} +1 -1
  97. package/dist/{useNumberField-CXFYUZ_n.js → NumberField-DhxywJVp.js} +251 -5
  98. package/dist/NumberField-DhxywJVp.js.map +1 -0
  99. package/dist/NumberField.js +1 -1
  100. package/dist/{Page-ZSHNJs7z.js → Page-D_KL2tdK.js} +14 -13
  101. package/dist/{Page-ZSHNJs7z.js.map → Page-D_KL2tdK.js.map} +1 -1
  102. package/dist/Page.js +1 -1
  103. package/dist/{Pagination-Bsl99RRI.js → Pagination-DYpUtMha.js} +5 -5
  104. package/dist/{Pagination-Bsl99RRI.js.map → Pagination-DYpUtMha.js.map} +1 -1
  105. package/dist/Pagination.js +1 -1
  106. package/dist/{Popover-CIh1CsoJ.js → Popover-B2ix8Ji4.js} +2 -2
  107. package/dist/{Popover-CIh1CsoJ.js.map → Popover-B2ix8Ji4.js.map} +1 -1
  108. package/dist/Popover.js +1 -1
  109. package/dist/{ProgressBar-zPKYv4Il.js → ProgressBar-CjoOuJCi.js} +2 -2
  110. package/dist/{ProgressBar-zPKYv4Il.js.map → ProgressBar-CjoOuJCi.js.map} +1 -1
  111. package/dist/ProgressBar.js +1 -1
  112. package/dist/{Radio-C1VnatcL.js → Radio-Bz36_d0V.js} +2 -2
  113. package/dist/{Radio-C1VnatcL.js.map → Radio-Bz36_d0V.js.map} +1 -1
  114. package/dist/{Radio-BYowelK2.js → Radio-DOD1d9Vw.js} +3 -3
  115. package/dist/{Radio-BYowelK2.js.map → Radio-DOD1d9Vw.js.map} +1 -1
  116. package/dist/Radio.js +1 -1
  117. package/dist/{RichTextEditor-DcAVqd2d.js → RichTextEditor-BORVXVDw.js} +11 -11
  118. package/dist/{RichTextEditor-DcAVqd2d.js.map → RichTextEditor-BORVXVDw.js.map} +1 -1
  119. package/dist/RichTextEditor.js +1 -1
  120. package/dist/{SavedFiltersButton-BLvi8j1T.js → SavedFiltersButton-vq_Kt4Qc.js} +10 -10
  121. package/dist/{SavedFiltersButton-BLvi8j1T.js.map → SavedFiltersButton-vq_Kt4Qc.js.map} +1 -1
  122. package/dist/SavedFiltersButton.js +1 -1
  123. package/dist/{SegmentedControl-BHVJmmTH.js → SegmentedControl-BCqWq65N.js} +3 -3
  124. package/dist/{SegmentedControl-BHVJmmTH.js.map → SegmentedControl-BCqWq65N.js.map} +1 -1
  125. package/dist/SegmentedControl.js +1 -1
  126. package/dist/{SelectCard-DrmMU_GD.js → SelectCard-CJwetC1k.js} +3 -3
  127. package/dist/{SelectCard-DrmMU_GD.js.map → SelectCard-CJwetC1k.js.map} +1 -1
  128. package/dist/SelectCard.js +1 -1
  129. package/dist/SelectField.js +1 -1
  130. package/dist/{SelectFieldLabel-BxsKvfqo.js → SelectFieldLabel-BTKqybZm.js} +2 -2
  131. package/dist/{SelectFieldLabel-BxsKvfqo.js.map → SelectFieldLabel-BTKqybZm.js.map} +1 -1
  132. package/dist/{SelectFieldSync-CeazN-gI.js → SelectFieldSync-CoUi-BYw.js} +6 -6
  133. package/dist/{SelectFieldSync-CeazN-gI.js.map → SelectFieldSync-CoUi-BYw.js.map} +1 -1
  134. package/dist/SelectMenu.js +1 -1
  135. package/dist/{SelectMenuSync-CPpE6vUG.js → SelectMenuSync-CvXx-6uU.js} +5 -5
  136. package/dist/{SelectMenuSync-CPpE6vUG.js.map → SelectMenuSync-CvXx-6uU.js.map} +1 -1
  137. package/dist/{SelectOptions-BDAu_9dv.js → SelectOptions-CGRUCyf4.js} +2 -2
  138. package/dist/{SelectOptions-BDAu_9dv.js.map → SelectOptions-CGRUCyf4.js.map} +1 -1
  139. package/dist/{SelectTrigger-B4OUTO9S.js → SelectTrigger-CRbl804u.js} +2 -2
  140. package/dist/{SelectTrigger-B4OUTO9S.js.map → SelectTrigger-CRbl804u.js.map} +1 -1
  141. package/dist/SelectTrigger.js +1 -1
  142. package/dist/{SelectTriggerBase-BTWSaiQ-.js → SelectTriggerBase-BRUW_Zgc.js} +4 -4
  143. package/dist/{SelectTriggerBase-BTWSaiQ-.js.map → SelectTriggerBase-BRUW_Zgc.js.map} +1 -1
  144. package/dist/{Stepper-l_P6VPOv.js → Stepper-D3SHXfX1.js} +3 -3
  145. package/dist/{Stepper-l_P6VPOv.js.map → Stepper-D3SHXfX1.js.map} +1 -1
  146. package/dist/Stepper.js +1 -1
  147. package/dist/{Switch-1iNdXTik.js → Switch-rPPL4yEa.js} +2 -2
  148. package/dist/{Switch-1iNdXTik.js.map → Switch-rPPL4yEa.js.map} +1 -1
  149. package/dist/Switch.js +1 -1
  150. package/dist/{Tab-DR5YYXkq.js → Tab-CXwVQ5-G.js} +11 -7
  151. package/dist/Tab-CXwVQ5-G.js.map +1 -0
  152. package/dist/Tab.js +1 -1
  153. package/dist/Table.js +1 -1
  154. package/dist/{Text-rihxXHSe.js → Text-BRbkPr5s.js} +2 -2
  155. package/dist/{Text-rihxXHSe.js.map → Text-BRbkPr5s.js.map} +1 -1
  156. package/dist/Text.js +1 -1
  157. package/dist/{TextField-vuS7xeo-.js → TextField-B9hivHsD.js} +3 -3
  158. package/dist/{TextField-vuS7xeo-.js.map → TextField-B9hivHsD.js.map} +1 -1
  159. package/dist/{TextField-Bxd-Qzoi.js → TextField-DGRVg_Cw.js} +2 -2
  160. package/dist/{TextField-Bxd-Qzoi.js.map → TextField-DGRVg_Cw.js.map} +1 -1
  161. package/dist/TextField.js +1 -1
  162. package/dist/{Textarea-ppapJUwh.js → Textarea-DNqfV8rJ.js} +3 -3
  163. package/dist/{Textarea-ppapJUwh.js.map → Textarea-DNqfV8rJ.js.map} +1 -1
  164. package/dist/Textarea.js +1 -1
  165. package/dist/{TimeField-Hwt_oRbg.js → TimeField-DldMBNAj.js} +5 -5
  166. package/dist/{TimeField-Hwt_oRbg.js.map → TimeField-DldMBNAj.js.map} +1 -1
  167. package/dist/TimeField.js +1 -1
  168. package/dist/{TimezoneMessage-BrKB_psP.js → TimezoneMessage-CgVNxYpM.js} +2 -2
  169. package/dist/{TimezoneMessage-BrKB_psP.js.map → TimezoneMessage-CgVNxYpM.js.map} +1 -1
  170. package/dist/Toast.js +2 -2
  171. package/dist/{Toaster-dVGVVcat.js → Toaster-Bcy9XN3c.js} +2 -2
  172. package/dist/{Toaster-dVGVVcat.js.map → Toaster-Bcy9XN3c.js.map} +1 -1
  173. package/dist/{Toaster-SqkX0Kes.js → Toaster-C66ra4BK.js} +6 -8
  174. package/dist/Toaster-C66ra4BK.js.map +1 -0
  175. package/dist/{Toolbar-CMulzswf.js → Toolbar-Br-5yBxq.js} +5 -5
  176. package/dist/{Toolbar-CMulzswf.js.map → Toolbar-Br-5yBxq.js.map} +1 -1
  177. package/dist/{Toolbar-DGHZpFi9.js → Toolbar-DgPah7M3.js} +5 -5
  178. package/dist/{Toolbar-DGHZpFi9.js.map → Toolbar-DgPah7M3.js.map} +1 -1
  179. package/dist/Toolbar.js +2 -2
  180. package/dist/{ToolbarButtonToggle-T8YnSJ5x.js → ToolbarButtonToggle-BDfoHeie.js} +2 -2
  181. package/dist/{ToolbarButtonToggle-T8YnSJ5x.js.map → ToolbarButtonToggle-BDfoHeie.js.map} +1 -1
  182. package/dist/TreeSelectField.js +1 -1
  183. package/dist/{TreeSelectFieldSync-DT6uZ3Ca.js → TreeSelectFieldSync-1psUeqtG.js} +6 -6
  184. package/dist/{TreeSelectFieldSync-DT6uZ3Ca.js.map → TreeSelectFieldSync-1psUeqtG.js.map} +1 -1
  185. package/dist/TreeSelectMenu.js +1 -1
  186. package/dist/{TreeSelectMenuSync-D2TvKxP-.js → TreeSelectMenuSync-DIPSYUnE.js} +4 -4
  187. package/dist/{TreeSelectMenuSync-D2TvKxP-.js.map → TreeSelectMenuSync-DIPSYUnE.js.map} +1 -1
  188. package/dist/{TypeaheadTextField-DgazozK7.js → TypeaheadTextField-Di9ulOBl.js} +3 -3
  189. package/dist/{TypeaheadTextField-DgazozK7.js.map → TypeaheadTextField-Di9ulOBl.js.map} +1 -1
  190. package/dist/TypeaheadTextField.js +1 -1
  191. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js → YearlessDateInputWithPicker-CQ2-6Uj4.js} +3 -3
  192. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js.map → YearlessDateInputWithPicker-CQ2-6Uj4.js.map} +1 -1
  193. package/dist/assets/icons/st/gnav_messages_active.svg +1 -0
  194. package/dist/assets/icons/st/gnav_messages_inactive.svg +1 -0
  195. package/dist/assets/icons/st.ts +2 -0
  196. package/dist/beta.js +17 -17
  197. package/dist/{bulkActionTypes-SukoplGV.js → bulkActionTypes-B71ZHjVu.js} +2 -2
  198. package/dist/{bulkActionTypes-SukoplGV.js.map → bulkActionTypes-B71ZHjVu.js.map} +1 -1
  199. package/dist/{filter-state-D3-SYfuy.js → filter-state-Lw9qL0zP.js} +23 -23
  200. package/dist/{filter-state-D3-SYfuy.js.map → filter-state-Lw9qL0zP.js.map} +1 -1
  201. package/dist/{index-C2dOrf4N.js → index-B3WhDZeI.js} +2 -2
  202. package/dist/{index-C2dOrf4N.js.map → index-B3WhDZeI.js.map} +1 -1
  203. package/dist/{index-Bldaza5t.js → index-CyN5oapA.js} +2 -2
  204. package/dist/{index-Bldaza5t.js.map → index-CyN5oapA.js.map} +1 -1
  205. package/dist/index-DfZCfS0S.js +36 -0
  206. package/dist/index-DfZCfS0S.js.map +1 -0
  207. package/dist/{index.esm-C2ZhC_8d.js → index.esm-CQXMoq5w.js} +2 -2
  208. package/dist/{index.esm-C2ZhC_8d.js.map → index.esm-CQXMoq5w.js.map} +1 -1
  209. package/dist/index.js +55 -53
  210. package/dist/index.js.map +1 -1
  211. package/dist/{react-ORV84FjM.js → react-CG1BUt2y.js} +5 -38
  212. package/dist/react-CG1BUt2y.js.map +1 -0
  213. package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +31 -4
  214. package/dist/src/beta/components/Table/DataTable/DataTableEditColumnsDrawer.d.ts +18 -0
  215. package/dist/src/beta/components/Table/DataTable/index.d.ts +1 -0
  216. package/dist/src/beta/components/Table/DataTable/internal/DataTableAddRow.d.ts +11 -0
  217. package/dist/src/beta/components/Table/DataTable/internal/DataTableBulkActionBar.d.ts +23 -0
  218. package/dist/src/beta/components/Table/DataTable/internal/DataTableFilterToolbar.d.ts +12 -0
  219. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/EditColumnsDrawer.d.ts +29 -0
  220. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/columnLayout.d.ts +43 -0
  221. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/toEditColumnsSection.d.ts +7 -0
  222. package/dist/src/beta/components/Table/DataTable/parts.d.ts +17 -0
  223. package/dist/src/beta/components/Table/DataTable/types.d.ts +245 -2
  224. package/dist/src/beta/components/Table/types.d.ts +6 -0
  225. package/dist/src/components/DrillDown/DrillDownHeader.d.ts +11 -2
  226. package/dist/src/components/DrillDown/index.d.ts +1 -1
  227. package/dist/src/components/DrillDown/internal/DrillDownContext.d.ts +7 -2
  228. package/dist/src/components/DrillDown/internal/useDrillDownContextState.d.ts +6 -3
  229. package/dist/src/hooks/usePrefersReducedMotion/index.d.ts +2 -0
  230. package/dist/src/hooks/usePrefersReducedMotion/prefersReducedMotion.d.ts +6 -0
  231. package/dist/src/hooks/usePrefersReducedMotion/useReducedMotion.d.ts +5 -0
  232. package/dist/{stripInlineMarkdown-BhYLEiXu.js → stripInlineMarkdown-B6lAJb4-.js} +2 -2
  233. package/dist/{stripInlineMarkdown-BhYLEiXu.js.map → stripInlineMarkdown-B6lAJb4-.js.map} +1 -1
  234. package/dist/{syncFilterUtils-SMop8ckR.js → syncFilterUtils-DnhuqY1S.js} +4 -4
  235. package/dist/{syncFilterUtils-SMop8ckR.js.map → syncFilterUtils-DnhuqY1S.js.map} +1 -1
  236. package/dist/token/core/component-variables.scss +49 -49
  237. package/dist/token/core/component.js +49 -49
  238. package/dist/token/core/component.scss +40 -40
  239. package/dist/token.js +49 -49
  240. package/dist/token.js.map +1 -1
  241. package/dist/{treeSync-B38r1dRQ.js → treeSync-BDwht_1r.js} +3 -3
  242. package/dist/{treeSync-B38r1dRQ.js.map → treeSync-BDwht_1r.js.map} +1 -1
  243. package/dist/{use-reduced-motion-yYB9Tb0D.js → use-reduced-motion-CUshwaEW.js} +2 -2
  244. package/dist/{use-reduced-motion-yYB9Tb0D.js.map → use-reduced-motion-CUshwaEW.js.map} +1 -1
  245. package/dist/{useDrillDownContext-D5_NjqY4.js → useDrillDownContext-BLDjyNEt.js} +2 -2
  246. package/dist/{useDrillDownContext-D5_NjqY4.js.map → useDrillDownContext-BLDjyNEt.js.map} +1 -1
  247. package/dist/{useDrilldown-BOeeNUsy.js → useDrilldown-CGdhHs8L.js} +54 -21
  248. package/dist/{useDrilldown-BOeeNUsy.js.map → useDrilldown-CGdhHs8L.js.map} +1 -1
  249. package/dist/{useInfiniteCombobox-ynkeFngn.js → useInfiniteCombobox-Db0kaxCj.js} +4 -4
  250. package/dist/{useInfiniteCombobox-ynkeFngn.js.map → useInfiniteCombobox-Db0kaxCj.js.map} +1 -1
  251. package/dist/{useInitialFocus-CGybEc6x.js → useInitialFocus-fBiTU9l8.js} +7 -4
  252. package/dist/useInitialFocus-fBiTU9l8.js.map +1 -0
  253. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js → useInvalidateOnOptionsChange-PweyDORd.js} +4 -4
  254. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js.map → useInvalidateOnOptionsChange-PweyDORd.js.map} +1 -1
  255. package/dist/{usePrefersReducedMotion-DR9B_D6w.js → usePrefersReducedMotion-BLoVFiJL.js} +11 -3
  256. package/dist/usePrefersReducedMotion-BLoVFiJL.js.map +1 -0
  257. package/dist/usePrefersReducedMotion.js +2 -1
  258. package/dist/usePrefersReducedMotion.js.map +1 -1
  259. package/package.json +3 -3
  260. package/dist/Calendar-IzXG1aJw.js +0 -1761
  261. package/dist/Calendar-IzXG1aJw.js.map +0 -1
  262. package/dist/DataTable-DIXP9-Bx.js.map +0 -1
  263. package/dist/Dialog-_tHqOsbr.js.map +0 -1
  264. package/dist/DndHandleButton-BRlodkDO.js.map +0 -1
  265. package/dist/Drawer-D-ThWNp0.js.map +0 -1
  266. package/dist/DrillDown.module-1VBKDZRA.js +0 -27
  267. package/dist/DrillDown.module-1VBKDZRA.js.map +0 -1
  268. package/dist/Lato.css +0 -24
  269. package/dist/ListView-YJscfG4x.js.map +0 -1
  270. package/dist/NumberField-CxmJx4gs.js +0 -252
  271. package/dist/NumberField-CxmJx4gs.js.map +0 -1
  272. package/dist/Tab-DR5YYXkq.js.map +0 -1
  273. package/dist/Toaster-SqkX0Kes.js.map +0 -1
  274. package/dist/app-css.379821199ec8105f2efd.bundle.css +0 -57579
  275. package/dist/bugfix-71.1orion.css +0 -491
  276. package/dist/design-system.859a127fc3b66175f0f0.bundle.css +0 -34599
  277. package/dist/drag_indicator-BRHAPLSJ.js +0 -6
  278. package/dist/drag_indicator-BRHAPLSJ.js.map +0 -1
  279. package/dist/favicon.ico +0 -0
  280. package/dist/kendo-css.ed976099efbbcc8b0639.bundle.css +0 -20601
  281. package/dist/luxon-wpz4A-OQ.js.map +0 -1
  282. package/dist/main.e26f249642be9a4bd747.bundle.css +0 -50386
  283. package/dist/react-ORV84FjM.js.map +0 -1
  284. package/dist/sui.a9dc22e36a27b7ea1ee8.bundle.css +0 -41149
  285. package/dist/useInitialFocus-CGybEc6x.js.map +0 -1
  286. package/dist/useNumberField-CXFYUZ_n.js.map +0 -1
  287. package/dist/usePrefersReducedMotion-DR9B_D6w.js.map +0 -1
  288. package/dist/vite.svg +0 -1
@@ -1,1761 +0,0 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { D as DateTime, I as Info } from './luxon-wpz4A-OQ.js';
3
- import { createContext, useContext, forwardRef, useRef, useCallback, useEffect, useState, useMemo, useId } from 'react';
4
- import { B as Button } from './Button-Dn6-01xl.js';
5
- import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
6
- import { S as SvgKeyboardArrowUp } from './keyboard_arrow_up-CxzK6LAl.js';
7
- import { S as SvgKeyboardArrowLeft } from './keyboard_arrow_left-CiE1n99w.js';
8
- import { c as cx } from './index-De1g9FRV.js';
9
- import { S as SvgKeyboardArrowRight } from './keyboard_arrow_right-DMloHg_F.js';
10
- import { S as SrOnly } from './SrOnly-pnf8ajnh.js';
11
- import { u as useSwipe } from './useSwipe-Cp-CJxLU.js';
12
- import { G as Grid } from './Grid-BPCDtqoT.js';
13
- import { S as SelectCard } from './SelectCard-DrmMU_GD.js';
14
- import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
15
- import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
16
- import { u as useVirtualizer } from './index-DXeGMe23.js';
17
- import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
18
- import { u as usePrevious } from './usePrevious-Bvq-5auG.js';
19
- import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
20
-
21
- import './Calendar.css';const CalendarContext = createContext(null);
22
- function useCalendar() {
23
- const context = useContext(CalendarContext);
24
- if (!context) {
25
- throw new Error("useCalendar must be used within a <Calendar>");
26
- }
27
- return context;
28
- }
29
-
30
- const isSameDay = (d1, d2) => {
31
- if (!d1 || !d2) return void 0;
32
- try {
33
- if (d1.hasSame(d2, "month") && d1.hasSame(d2, "year") && d1.hasSame(d2, "day")) {
34
- return true;
35
- }
36
- return false;
37
- } catch {
38
- return false;
39
- }
40
- };
41
- const isSameMonth = (d1, d2) => {
42
- if (!d1 || !d2) return void 0;
43
- if (d1.hasSame(d2, "month") && d1.hasSame(d2, "year")) return true;
44
- return false;
45
- };
46
- const isUnavailableDate = (n, unavailable, timeZone) => {
47
- const tmpSet = /* @__PURE__ */ new Set();
48
- unavailable.dates?.forEach((date) => {
49
- tmpSet.add(toDateString(DateTime.fromISO(date, { zone: timeZone })));
50
- });
51
- if (unavailable.daysOfWeek?.has(n.weekday)) {
52
- return true;
53
- }
54
- const dateISO = n.toISO();
55
- if (!dateISO) return;
56
- return tmpSet.has(
57
- toDateString(DateTime.fromISO(dateISO, { zone: timeZone }))
58
- );
59
- };
60
- const isBeyondMinDate = (n, minDate) => minDate && minDate.toMillis() > n.toMillis();
61
- const isBeyondMaxDate = (n, maxDate) => maxDate && maxDate.toMillis() < n.toMillis();
62
- const normalizeDate = (date, defaultTimeZone) => {
63
- return DateTime.fromISO(date, { zone: defaultTimeZone }).startOf("day");
64
- };
65
- const toDateString = (date) => date.startOf("day").toISO();
66
- function rangeUpdater(value, newDate, setValue, onSelection) {
67
- if (value.start && isSameDay(value.start, newDate) && !value.end) {
68
- setValue((prev) => {
69
- return { ...prev, end: newDate };
70
- });
71
- onSelection?.({
72
- value: {
73
- start: toDateString(value.start) ?? void 0,
74
- end: toDateString(newDate) ?? void 0
75
- }
76
- });
77
- return;
78
- }
79
- if (!value.start && !value.end || value.start && value.end || value.start && !value.end && value.start.startOf("day").toMillis() > newDate.startOf("day").toMillis()) {
80
- setValue({ start: newDate, end: null });
81
- onSelection?.({
82
- value: {
83
- start: toDateString(newDate) ?? void 0,
84
- end: void 0
85
- }
86
- });
87
- return;
88
- }
89
- if (value.start && !value.end && value.start.startOf("day").toMillis() < newDate.startOf("day").toMillis()) {
90
- setValue((prev) => {
91
- return { ...prev, end: newDate };
92
- });
93
- onSelection?.({
94
- value: {
95
- start: toDateString(value.start) ?? void 0,
96
- end: toDateString(newDate) ?? void 0
97
- }
98
- });
99
- return;
100
- }
101
- if (!value.start && value.end) {
102
- setValue((prev) => {
103
- return { ...prev, start: newDate };
104
- });
105
- onSelection?.({
106
- value: {
107
- start: toDateString(newDate) ?? void 0,
108
- end: toDateString(value.end) ?? void 0
109
- }
110
- });
111
- return;
112
- }
113
- }
114
- const getDateMetadata = (date, dateMetadata) => {
115
- if (!dateMetadata) return void 0;
116
- const dateString = date.toISODate();
117
- return dateString ? dateMetadata.get(dateString) : void 0;
118
- };
119
-
120
- const CalendarNow = forwardRef(
121
- (props, ref) => {
122
- const { onClick, onClickFixed, ...rest } = props;
123
- const {
124
- setFocusedDate,
125
- setSelectedMonth,
126
- setSelectedYear,
127
- value,
128
- setValue,
129
- defaultTimeZone,
130
- unavailable,
131
- onSelection,
132
- minDate,
133
- maxDate,
134
- controlled,
135
- range
136
- } = useCalendar();
137
- const nToday = DateTime.fromISO(DateTime.now().toISO(), {
138
- zone: defaultTimeZone
139
- }).startOf("day");
140
- const onClickHandler = (e) => {
141
- onClickFixed?.(e);
142
- setFocusedDate(nToday);
143
- setSelectedMonth(nToday.month);
144
- setSelectedYear(nToday.year);
145
- if (!range) {
146
- onSelection?.({
147
- value: toDateString(nToday) ?? void 0
148
- });
149
- if (!controlled) {
150
- setValue(nToday);
151
- }
152
- return;
153
- }
154
- rangeUpdater(value, nToday, setValue, onSelection);
155
- };
156
- const isDisabled = isBeyondMaxDate(nToday, maxDate) || isBeyondMinDate(nToday, minDate) || isUnavailableDate(nToday, unavailable, defaultTimeZone);
157
- return /* @__PURE__ */ jsx(
158
- Button,
159
- {
160
- ref,
161
- onClick: onClickHandler,
162
- appearance: "ghost",
163
- disabled: isDisabled,
164
- "data-anv": "calendar-now",
165
- size: "small",
166
- ...rest,
167
- children: "Today"
168
- }
169
- );
170
- }
171
- );
172
- CalendarNow.displayName = "CalendarNowButton";
173
-
174
- const CalendarYearButton = forwardRef((props, ref) => {
175
- const { calendarSelectionState, ...rest } = props;
176
- const { selectedYear, locale } = useCalendar();
177
- const currentYear = DateTime.fromObject({ year: selectedYear }).setLocale(locale).toLocaleString({ year: "numeric" });
178
- return /* @__PURE__ */ jsx(
179
- Button,
180
- {
181
- ref,
182
- appearance: "ghost",
183
- size: "small",
184
- icon: {
185
- after: calendarSelectionState === "year" ? SvgKeyboardArrowUp : SvgKeyboardArrowDown
186
- },
187
- ...rest,
188
- children: currentYear
189
- }
190
- );
191
- });
192
- CalendarYearButton.displayName = "CalendarYearButton";
193
-
194
- const calendar = "_calendar_uesx5_1";
195
- const grid = "_grid_uesx5_18";
196
- const header = "_header_uesx5_23";
197
- const controller = "_controller_uesx5_46";
198
- const spacer = "_spacer_uesx5_62";
199
- const cell = "_cell_uesx5_77";
200
- const weekday = "_weekday_uesx5_122";
201
- const range = "_range_uesx5_165";
202
- const overflow = "_overflow_uesx5_171";
203
- const selected = "_selected_uesx5_175";
204
- const pip = "_pip_uesx5_257";
205
- const styles$1 = {
206
- calendar: calendar,
207
- grid: grid,
208
- header: header,
209
- controller: controller,
210
- "controller-button": "_controller-button_uesx5_55",
211
- spacer: spacer,
212
- "day-grid": "_day-grid_uesx5_66",
213
- cell: cell,
214
- weekday: weekday,
215
- "month-selection": "_month-selection_uesx5_136",
216
- "selection-checkbox": "_selection-checkbox_uesx5_136",
217
- "selection-card": "_selection-card_uesx5_146",
218
- "year-selector": "_year-selector_uesx5_158",
219
- "range-first": "_range-first_uesx5_165",
220
- "range-last": "_range-last_uesx5_165",
221
- range: range,
222
- overflow: overflow,
223
- selected: selected,
224
- "is-unavailable": "_is-unavailable_uesx5_184",
225
- "hover-last": "_hover-last_uesx5_209",
226
- "has-metadata": "_has-metadata_uesx5_252",
227
- pip: pip,
228
- "range-fill": "_range-fill_uesx5_270",
229
- "range-disabled": "_range-disabled_uesx5_281"
230
- };
231
-
232
- const CalendarPrev = forwardRef(
233
- (props, ref) => {
234
- const { onClick, className, ...rest } = props;
235
- const {
236
- focusedDate,
237
- setFocusedDate,
238
- minDate,
239
- setSelectedMonth,
240
- setSelectedYear
241
- } = useCalendar();
242
- const isDisabled = minDate != null && focusedDate.minus({ month: 1 }).endOf("month") < minDate;
243
- const onClickHandler = (e) => {
244
- if (isDisabled) return;
245
- onClick?.(e);
246
- const targetMonth = focusedDate.minus({ month: 1 }).endOf("month");
247
- const targetDate = focusedDate.minus({ month: 1 });
248
- const isCrossingYearBoundary = focusedDate.month === 1 && targetDate.month === 12;
249
- if (minDate !== null) {
250
- if (targetDate.toMillis() >= minDate?.toMillis()) {
251
- setFocusedDate(targetDate);
252
- setSelectedMonth(targetDate.month);
253
- if (isCrossingYearBoundary) {
254
- setSelectedYear(targetDate.year);
255
- }
256
- return;
257
- }
258
- if (!isSameMonth(targetMonth, focusedDate)) {
259
- setFocusedDate(minDate);
260
- setSelectedMonth(minDate.month);
261
- if (isCrossingYearBoundary) {
262
- setSelectedYear(minDate.year);
263
- }
264
- }
265
- return;
266
- }
267
- setFocusedDate(targetDate);
268
- setSelectedMonth(targetDate.month);
269
- if (isCrossingYearBoundary) {
270
- setSelectedYear(targetDate.year);
271
- }
272
- };
273
- return /* @__PURE__ */ jsx(
274
- Button,
275
- {
276
- ref,
277
- onClick: onClickHandler,
278
- className: cx(styles$1["controller-button"], className),
279
- appearance: "ghost",
280
- size: "small",
281
- icon: SvgKeyboardArrowLeft,
282
- "data-anv": "calendar-prev",
283
- "aria-label": "Previous Month",
284
- ...rest,
285
- "aria-disabled": isDisabled || void 0
286
- }
287
- );
288
- }
289
- );
290
- CalendarPrev.displayName = "CalendarPrevButton";
291
-
292
- const CalendarNext = forwardRef(
293
- (props, ref) => {
294
- const { onClick, className, ...rest } = props;
295
- const {
296
- focusedDate,
297
- setFocusedDate,
298
- maxDate,
299
- setSelectedMonth,
300
- setSelectedYear
301
- } = useCalendar();
302
- const isDisabled = maxDate != null && focusedDate.plus({ month: 1 }).startOf("month") > maxDate;
303
- const onClickHandler = (e) => {
304
- if (isDisabled) return;
305
- onClick?.(e);
306
- const targetMonth = focusedDate.plus({ month: 1 }).startOf("month");
307
- const targetDate = focusedDate.plus({ month: 1 });
308
- const isCrossingYearBoundary = focusedDate.month === 12 && targetDate.month === 1;
309
- if (maxDate !== null) {
310
- if (targetDate.toMillis() <= maxDate?.toMillis()) {
311
- setFocusedDate(targetDate);
312
- setSelectedMonth(targetDate.month);
313
- if (isCrossingYearBoundary) {
314
- setSelectedYear(targetDate.year);
315
- }
316
- return;
317
- }
318
- if (!isSameMonth(targetMonth, focusedDate)) {
319
- setFocusedDate(maxDate);
320
- setSelectedMonth(maxDate.month);
321
- if (isCrossingYearBoundary) {
322
- setSelectedYear(maxDate.year);
323
- }
324
- }
325
- return;
326
- }
327
- setFocusedDate(targetDate);
328
- setSelectedMonth(targetDate.month);
329
- if (isCrossingYearBoundary) {
330
- setSelectedYear(targetDate.year);
331
- }
332
- };
333
- return /* @__PURE__ */ jsx(
334
- Button,
335
- {
336
- onClick: onClickHandler,
337
- appearance: "ghost",
338
- size: "small",
339
- className: cx(styles$1["controller-button"], className),
340
- icon: SvgKeyboardArrowRight,
341
- "aria-label": "Next Month",
342
- "data-anv": "calendar-next",
343
- ref,
344
- ...rest,
345
- "aria-disabled": isDisabled || void 0
346
- }
347
- );
348
- }
349
- );
350
- CalendarNext.displayName = "CalendarNextButton";
351
-
352
- const CalendarMonthButton = forwardRef((props, ref) => {
353
- const { calendarSelectionState, onClick, ...rest } = props;
354
- const { selectedMonth, locale } = useCalendar();
355
- const currentMonth = DateTime.fromObject({ month: selectedMonth }).setLocale(locale).toFormat("MMM");
356
- return /* @__PURE__ */ jsx(
357
- Button,
358
- {
359
- ref,
360
- appearance: "ghost",
361
- size: "small",
362
- onClick,
363
- icon: {
364
- after: calendarSelectionState === "month" ? SvgKeyboardArrowUp : SvgKeyboardArrowDown
365
- },
366
- ...rest,
367
- children: currentMonth
368
- }
369
- );
370
- });
371
- CalendarMonthButton.displayName = "CalendarMonthButton";
372
-
373
- const CalendarDay = forwardRef(
374
- (props, ref) => {
375
- const { className, date, ...rest } = props;
376
- const context = useCalendar();
377
- const {
378
- disableAutofocus,
379
- value,
380
- setValue,
381
- focusedDate,
382
- setFocusedDate,
383
- hoveredDate,
384
- setHoveredDate,
385
- onSelection,
386
- locale,
387
- minDate,
388
- maxDate,
389
- unavailable,
390
- defaultTimeZone,
391
- controlled,
392
- id: uid,
393
- range,
394
- dateFormat,
395
- startDay,
396
- setSelectedMonth,
397
- setSelectedYear,
398
- dateMetadata
399
- } = context;
400
- const initialized = useRef(false);
401
- const futureDateSelection = useCallback(
402
- (targetDate) => {
403
- if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {
404
- return;
405
- }
406
- if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
407
- let nextFocusDate = targetDate.plus({ days: 1 });
408
- for (let i = 0; i < 365; i++) {
409
- if (maxDate !== null && nextFocusDate.toMillis() > maxDate?.toMillis()) {
410
- break;
411
- }
412
- if (isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)) {
413
- nextFocusDate = nextFocusDate.plus({ days: 1 });
414
- } else {
415
- setFocusedDate(nextFocusDate);
416
- break;
417
- }
418
- }
419
- return;
420
- }
421
- setFocusedDate(targetDate);
422
- if (targetDate.month !== focusedDate.month) {
423
- setSelectedMonth(targetDate.month);
424
- if (targetDate.year !== focusedDate.year) {
425
- setSelectedYear(targetDate.year);
426
- }
427
- }
428
- },
429
- // eslint-disable-next-line react-hooks/exhaustive-deps
430
- [maxDate, setFocusedDate, defaultTimeZone, unavailable]
431
- );
432
- const pastDateSelection = (targetDate) => {
433
- if (minDate !== null && targetDate.toMillis() < minDate?.toMillis()) {
434
- return;
435
- }
436
- if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
437
- let prevFocusDate = targetDate.minus({ days: 1 });
438
- for (let i = 0; i < 365; i++) {
439
- if (minDate !== null && prevFocusDate.toMillis() < minDate?.toMillis()) {
440
- break;
441
- }
442
- if (isUnavailableDate(prevFocusDate, unavailable, defaultTimeZone)) {
443
- prevFocusDate = prevFocusDate.minus({ days: 1 });
444
- } else {
445
- setFocusedDate(prevFocusDate);
446
- break;
447
- }
448
- }
449
- return;
450
- }
451
- setFocusedDate(targetDate);
452
- if (targetDate.month !== focusedDate.month) {
453
- setSelectedMonth(targetDate.month);
454
- if (targetDate.year !== focusedDate.year) {
455
- setSelectedYear(targetDate.year);
456
- }
457
- }
458
- };
459
- const isSelectedDate = (date2, compareDate) => {
460
- if (!range) {
461
- return isSameDay(date2, value);
462
- }
463
- if (value.start && value.end) {
464
- return date2.toMillis() >= value.start.startOf("day").toMillis() && date2.toMillis() <= value.end.endOf("day").toMillis();
465
- }
466
- return isSameDay(date2, value.start);
467
- };
468
- const isRange = (date2) => {
469
- if (!range) {
470
- return false;
471
- }
472
- if (value.start && value.end) {
473
- return date2.toMillis() >= value.start.startOf("day").toMillis() && date2.toMillis() <= value.end.endOf("day").toMillis() && !isSameDay(value.start, date2) && !isSameDay(value.end, date2);
474
- }
475
- return false;
476
- };
477
- const onKeyDownHandler = (e) => {
478
- switch (e.code) {
479
- case "Space":
480
- case "Enter":
481
- e.preventDefault();
482
- if (!range) {
483
- if (!controlled) {
484
- setValue(isSameDay(value, focusedDate) ? null : focusedDate);
485
- }
486
- onSelection?.({
487
- value: isSameDay(value, focusedDate) ? void 0 : focusedDate.setZone(defaultTimeZone).startOf("day").toISO() ?? void 0
488
- });
489
- break;
490
- }
491
- rangeUpdater(value, focusedDate, setValue, onSelection);
492
- break;
493
- case "ArrowLeft":
494
- e.preventDefault();
495
- pastDateSelection(focusedDate.minus({ days: 1 }));
496
- break;
497
- case "ArrowRight":
498
- e.preventDefault();
499
- futureDateSelection(focusedDate.plus({ days: 1 }));
500
- break;
501
- case "ArrowUp":
502
- e.preventDefault();
503
- pastDateSelection(focusedDate.minus({ days: 7 }));
504
- break;
505
- case "ArrowDown":
506
- e.preventDefault();
507
- futureDateSelection(focusedDate.plus({ days: 7 }));
508
- break;
509
- case "PageUp":
510
- e.preventDefault();
511
- if (e.shiftKey) {
512
- pastDateSelection(focusedDate.minus({ years: 1 }));
513
- break;
514
- }
515
- pastDateSelection(focusedDate.minus({ months: 1 }));
516
- break;
517
- case "PageDown":
518
- e.preventDefault();
519
- if (e.shiftKey) {
520
- futureDateSelection(focusedDate.plus({ years: 1 }));
521
- break;
522
- }
523
- futureDateSelection(focusedDate.plus({ months: 1 }));
524
- break;
525
- }
526
- };
527
- let startDayIndex = 6;
528
- switch (startDay) {
529
- case "Monday":
530
- startDayIndex = 0;
531
- break;
532
- case "Sunday":
533
- default:
534
- startDayIndex = 6;
535
- }
536
- const weekdaysArr = [];
537
- for (let i = 0; i < 7; i++) {
538
- const dayIndex = (startDayIndex + i) % 7;
539
- weekdaysArr.push(Info.weekdays("narrow", { locale })[dayIndex]);
540
- }
541
- const firstDay = focusedDate.startOf("month");
542
- if (firstDay.weekday !== startDayIndex + 1) {
543
- for (let i = 1; i < 8; i++) {
544
- const prevDay = firstDay.minus({ days: i });
545
- if (prevDay.weekday === startDayIndex + 1) break;
546
- }
547
- }
548
- const onClickHandler = (d) => {
549
- setFocusedDate(d);
550
- if (!range) {
551
- onSelection?.({
552
- value: toDateString(d.setZone(defaultTimeZone)) ?? void 0
553
- });
554
- if (!controlled) {
555
- setValue(d);
556
- }
557
- return;
558
- }
559
- rangeUpdater(value, d, setValue, onSelection);
560
- };
561
- const onFocusHandler = (d) => {
562
- setHoveredDate(d);
563
- };
564
- const onBlurHandler = () => {
565
- setHoveredDate(void 0);
566
- };
567
- const onMouseEnterHandler = (d) => {
568
- setHoveredDate(d);
569
- };
570
- useEffect(() => {
571
- if (!initialized.current) {
572
- initialized.current = true;
573
- return;
574
- }
575
- if (!isSameDay(date, focusedDate)) return;
576
- requestAnimationFrame(() => {
577
- const dateId = `${uid}-${focusedDate.toISODate()}`;
578
- const targetElement = document.getElementById(dateId) || document.activeElement?.shadowRoot?.getElementById(dateId);
579
- const deepActiveEl = document.activeElement?.shadowRoot?.activeElement ?? document.activeElement;
580
- const isDayFocused = !!deepActiveEl?.id?.startsWith(`${uid}-`);
581
- if (!disableAutofocus || isDayFocused) {
582
- targetElement?.focus();
583
- }
584
- });
585
- }, [focusedDate, uid, disableAutofocus]);
586
- useEffect(() => {
587
- if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;
588
- futureDateSelection(focusedDate.plus({ days: 1 }));
589
- }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);
590
- const isDisabled = !isSameMonth(date, focusedDate) || isBeyondMinDate(date, minDate) || isBeyondMaxDate(date, maxDate) || isUnavailableDate(date, unavailable, defaultTimeZone);
591
- const isUnavailable = isUnavailableDate(date, unavailable, defaultTimeZone);
592
- const hasMetadata = getDateMetadata(date, dateMetadata);
593
- const hoverRange = range && hoveredDate && value.start && !value.end && date.toMillis() > value.start.toMillis() && date.toMillis() <= hoveredDate.toMillis();
594
- const cellCx = cx(styles$1["cell"], {
595
- [styles$1["selected"]]: !isUnavailable && isSelectedDate(date),
596
- [styles$1["range-first"]]: range && value.start && (value.end || hoveredDate) && isSameDay(date, value.start),
597
- [styles$1["range-last"]]: range && (value.start && value.end && isSameDay(date, value.end) || hoverRange && isSameDay(date, hoveredDate)),
598
- [styles$1["range"]]: isRange(date) || hoverRange,
599
- [styles$1["is-unavailable"]]: isUnavailable,
600
- [styles$1["overflow"]]: !isSameMonth(date, focusedDate),
601
- [styles$1["hover-last"]]: hoverRange && isSameDay(date, hoveredDate),
602
- [styles$1["has-metadata"]]: hasMetadata
603
- });
604
- const isMinDate = minDate !== null && date.toMillis() <= minDate?.toMillis();
605
- const isMaxDate = maxDate !== null && date.toMillis() >= maxDate?.toMillis();
606
- return /* @__PURE__ */ jsxs("td", { role: "gridcell", ...rest, ref, children: [
607
- !isUnavailable && (isRange(date) || hoverRange) ? /* @__PURE__ */ jsx(
608
- "div",
609
- {
610
- role: "presentation",
611
- className: cx(styles$1["range-fill"], {
612
- [styles$1["range-disabled"]]: isDisabled,
613
- [styles$1["hover-last"]]: hoverRange && isSameDay(date, hoveredDate)
614
- })
615
- }
616
- ) : null,
617
- /* @__PURE__ */ jsxs(
618
- "button",
619
- {
620
- onClick: () => onClickHandler(date),
621
- onFocus: () => onFocusHandler(date),
622
- onBlur: () => onBlurHandler(),
623
- className: cellCx,
624
- onKeyDown: onKeyDownHandler,
625
- onMouseEnter: () => onMouseEnterHandler(date),
626
- tabIndex: disableAutofocus ? -1 : isSameDay(date, focusedDate) ? 0 : -1,
627
- disabled: isDisabled ? true : void 0,
628
- "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" : ""}`,
629
- id: `${uid}-${date.toISODate()}`,
630
- children: [
631
- date.day,
632
- hasMetadata && /* @__PURE__ */ jsx("span", { className: styles$1["pip"], "aria-hidden": "true" })
633
- ]
634
- }
635
- )
636
- ] }, date.toISODate());
637
- }
638
- );
639
- CalendarDay.displayName = "CalendarDay";
640
-
641
- const CalendarWeek = forwardRef(
642
- (props, ref) => {
643
- const { className, week, ...rest } = props;
644
- const context = useCalendar();
645
- const {
646
- focusedDate,
647
- setFocusedDate,
648
- locale,
649
- maxDate,
650
- unavailable,
651
- defaultTimeZone,
652
- id: uid,
653
- startDay
654
- } = context;
655
- const initialized = useRef(false);
656
- const futureDateSelection = useCallback(
657
- (targetDate) => {
658
- if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {
659
- return;
660
- }
661
- if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
662
- let nextFocusDate = targetDate.plus({ days: 1 });
663
- for (let i = 0; i < 365; i++) {
664
- if (maxDate !== null && nextFocusDate.toMillis() > maxDate?.toMillis()) {
665
- break;
666
- }
667
- if (isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)) {
668
- nextFocusDate = nextFocusDate.plus({ days: 1 });
669
- } else {
670
- setFocusedDate(nextFocusDate);
671
- break;
672
- }
673
- }
674
- return;
675
- }
676
- setFocusedDate(targetDate);
677
- },
678
- [maxDate, setFocusedDate, defaultTimeZone, unavailable]
679
- );
680
- let startDayIndex = 6;
681
- switch (startDay) {
682
- case "Monday":
683
- startDayIndex = 0;
684
- break;
685
- case "Sunday":
686
- default:
687
- startDayIndex = 6;
688
- }
689
- const weekdaysArr = [];
690
- for (let i = 0; i < 7; i++) {
691
- const dayIndex = (startDayIndex + i) % 7;
692
- weekdaysArr.push(Info.weekdays("narrow", { locale })[dayIndex]);
693
- }
694
- const firstDay = focusedDate.startOf("month");
695
- if (firstDay.weekday !== startDayIndex + 1) {
696
- for (let i = 1; i < 8; i++) {
697
- const prevDay = firstDay.minus({ days: i });
698
- if (prevDay.weekday === startDayIndex + 1) break;
699
- }
700
- }
701
- useEffect(() => {
702
- if (!initialized.current) return;
703
- setTimeout(() => {
704
- const targetElement = document.getElementById(
705
- `${uid}-${focusedDate.toISODate()}`
706
- );
707
- targetElement?.focus();
708
- }, 100);
709
- }, [focusedDate, uid]);
710
- useEffect(() => {
711
- if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;
712
- futureDateSelection(focusedDate.plus({ days: 1 }));
713
- }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);
714
- return /* @__PURE__ */ jsx("tr", { ...rest, ref, children: week.map((n) => {
715
- return /* @__PURE__ */ jsx(CalendarDay, { date: n }, n.toISODate());
716
- }) });
717
- }
718
- );
719
- CalendarWeek.displayName = "CalendarWeek";
720
-
721
- const CalendarMonth = forwardRef(
722
- (props, ref) => {
723
- const { className, ...rest } = props;
724
- const context = useCalendar();
725
- const {
726
- value,
727
- focusedDate,
728
- setFocusedDate,
729
- setHoveredDate,
730
- locale,
731
- minDate,
732
- maxDate,
733
- unavailable,
734
- defaultTimeZone,
735
- id: uid,
736
- range,
737
- dateFormat,
738
- startDay
739
- } = context;
740
- const initialized = useRef(false);
741
- const ViewCX = cx(styles$1["grid"], className);
742
- const futureDateSelection = useCallback(
743
- (targetDate) => {
744
- if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {
745
- return;
746
- }
747
- if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {
748
- let nextFocusDate = targetDate.plus({ days: 1 });
749
- for (let i = 0; i < 365; i++) {
750
- if (maxDate !== null && nextFocusDate.toMillis() > maxDate?.toMillis()) {
751
- break;
752
- }
753
- if (isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)) {
754
- nextFocusDate = nextFocusDate.plus({ days: 1 });
755
- } else {
756
- setFocusedDate(nextFocusDate);
757
- break;
758
- }
759
- }
760
- return;
761
- }
762
- setFocusedDate(targetDate);
763
- },
764
- [maxDate, setFocusedDate, defaultTimeZone, unavailable]
765
- );
766
- let startDayIndex = 6;
767
- switch (startDay) {
768
- case "Monday":
769
- startDayIndex = 0;
770
- break;
771
- case "Sunday":
772
- default:
773
- startDayIndex = 6;
774
- }
775
- const weekdaysArr = [];
776
- for (let i = 0; i < 7; i++) {
777
- const dayIndex = (startDayIndex + i) % 7;
778
- weekdaysArr.push(Info.weekdays("narrow", { locale })[dayIndex]);
779
- }
780
- const firstDay = focusedDate.startOf("month");
781
- const lastDay = focusedDate.endOf("month");
782
- const monthArr = Array.from(new Array(firstDay.daysInMonth)).map((_, i) => {
783
- return firstDay.plus({ days: i });
784
- });
785
- const prevArr = [];
786
- if (firstDay.weekday !== startDayIndex + 1) {
787
- for (let i = 1; i < 8; i++) {
788
- const prevDay = firstDay.minus({ days: i });
789
- prevArr.push(prevDay);
790
- if (prevDay.weekday === startDayIndex + 1) break;
791
- }
792
- }
793
- prevArr.reverse();
794
- const nextArr = Array.from(new Array(14)).map((_, i) => {
795
- return lastDay.plus({ days: i + 1 });
796
- });
797
- const fullArr = [...prevArr, ...monthArr, ...nextArr];
798
- const splitArr = [...Array(Math.ceil(fullArr.length / 7))].map((_, i) => fullArr.slice(7 * i, 7 + 7 * i)).slice(0, 6);
799
- const onMouseLeaveHandler = () => {
800
- setHoveredDate(void 0);
801
- };
802
- const onSwipe = (dir) => {
803
- if (dir === "left") {
804
- const targetMonth = focusedDate.plus({ month: 1 });
805
- if (isBeyondMinDate(targetMonth, minDate) || isBeyondMaxDate(targetMonth, maxDate))
806
- return;
807
- setFocusedDate(targetMonth);
808
- return;
809
- }
810
- if (dir === "right") {
811
- const targetMonth = focusedDate.minus({ month: 1 });
812
- if (isBeyondMinDate(targetMonth, minDate) || isBeyondMaxDate(targetMonth, maxDate))
813
- return;
814
- setFocusedDate(targetMonth);
815
- return;
816
- }
817
- };
818
- const { direction, ...touchProps } = useSwipe(onSwipe);
819
- useEffect(() => {
820
- if (!initialized.current) return;
821
- setTimeout(() => {
822
- const targetElement = document.getElementById(
823
- `${uid}-${focusedDate.toISODate()}`
824
- );
825
- targetElement?.focus();
826
- }, 100);
827
- }, [focusedDate, uid]);
828
- useEffect(() => {
829
- if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;
830
- futureDateSelection(focusedDate.plus({ days: 1 }));
831
- }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);
832
- return /* @__PURE__ */ jsxs(Fragment, { children: [
833
- /* @__PURE__ */ jsxs(
834
- "table",
835
- {
836
- ref,
837
- "data-anv": "calendar-month",
838
- onFocus: () => {
839
- initialized.current = true;
840
- },
841
- onBlur: () => {
842
- initialized.current = false;
843
- },
844
- className: ViewCX,
845
- onMouseLeave: onMouseLeaveHandler,
846
- role: "grid",
847
- ...rest,
848
- ...touchProps,
849
- children: [
850
- /* @__PURE__ */ jsxs("thead", { "aria-hidden": true, className: styles$1["weekdays"], children: [
851
- /* @__PURE__ */ jsx("tr", { children: weekdaysArr.map((weekday, i) => {
852
- return /* @__PURE__ */ jsx(
853
- "th",
854
- {
855
- scope: "col",
856
- className: styles$1["weekday"],
857
- children: weekday
858
- },
859
- `${weekday}${i}`
860
- );
861
- }) }),
862
- /* @__PURE__ */ jsx("tr", { className: styles$1["spacer"], children: /* @__PURE__ */ jsx("td", { colSpan: 7 }) })
863
- ] }),
864
- /* @__PURE__ */ jsx(
865
- "tbody",
866
- {
867
- className: styles$1["day-grid"],
868
- children: splitArr.map((week, i) => {
869
- return /* @__PURE__ */ jsx(CalendarWeek, { week }, i);
870
- })
871
- },
872
- focusedDate.startOf("month").toMillis()
873
- )
874
- ]
875
- }
876
- ),
877
- 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
878
- ] });
879
- }
880
- );
881
- CalendarMonth.displayName = "CalendarMonth";
882
-
883
- const styles = {
884
- "year-selector": "_year-selector_1jh12_1",
885
- "year-grid": "_year-grid_1jh12_17",
886
- "year-item": "_year-item_1jh12_25",
887
- "pseudo-focused": "_pseudo-focused_1jh12_29"
888
- };
889
-
890
- const useYearSelectorKeys = ({
891
- columns,
892
- scrollToYear,
893
- initialFocus,
894
- onSelect,
895
- onConfirm,
896
- pseudoFocused,
897
- setPseudoFocused,
898
- min,
899
- max,
900
- disabled,
901
- required
902
- }) => {
903
- const listRef = useRef(null);
904
- useEffect(() => {
905
- const list = listRef.current;
906
- const handleKeyDown = (e) => {
907
- if (pseudoFocused === null) return;
908
- if ([
909
- "ArrowLeft",
910
- "ArrowRight",
911
- "ArrowUp",
912
- "ArrowDown",
913
- "Home",
914
- "PageUp",
915
- "PageDown",
916
- "Enter",
917
- " ",
918
- "Backspace",
919
- "Delete"
920
- ].includes(e.key)) {
921
- e.preventDefault();
922
- if (e.key === "ArrowLeft" || e.key === "ArrowRight" || e.key === "ArrowUp" || e.key === "ArrowDown") {
923
- const newYear = e.key === "ArrowLeft" || e.key === "ArrowUp" ? pseudoFocused - 1 : pseudoFocused + 1;
924
- const clampedYear = Math.min(Math.max(newYear, min), max);
925
- scrollToYear(newYear, { focus: true });
926
- setPseudoFocused(newYear);
927
- if (!disabled) {
928
- onSelect(clampedYear);
929
- }
930
- return;
931
- }
932
- if (!required && (e.key === "Backspace" || e.key === "Delete")) {
933
- onSelect(null);
934
- return;
935
- }
936
- if (e.key === "PageUp" || e.key === "PageDown") {
937
- const newYear = e.key === "PageUp" ? min : max;
938
- scrollToYear(newYear, { focus: true });
939
- setPseudoFocused(newYear);
940
- if (!disabled) {
941
- onSelect(newYear);
942
- }
943
- return;
944
- }
945
- if (e.key === "Home") {
946
- scrollToYear(initialFocus, { focus: true });
947
- setPseudoFocused(initialFocus);
948
- if (!disabled) {
949
- onSelect(initialFocus);
950
- }
951
- return;
952
- }
953
- if (e.key === "Enter" || e.key === " ") {
954
- if (!disabled) {
955
- onConfirm();
956
- }
957
- return;
958
- }
959
- }
960
- };
961
- list?.addEventListener("keydown", handleKeyDown);
962
- return () => {
963
- list?.removeEventListener("keydown", handleKeyDown);
964
- };
965
- }, [
966
- pseudoFocused,
967
- columns,
968
- scrollToYear,
969
- onSelect,
970
- min,
971
- max,
972
- initialFocus,
973
- disabled,
974
- setPseudoFocused,
975
- required,
976
- onConfirm
977
- ]);
978
- return { listRef };
979
- };
980
-
981
- const YearItem = ({
982
- year,
983
- onChange,
984
- selected,
985
- pseudoFocused,
986
- disabled,
987
- onFocus,
988
- ...rest
989
- }) => {
990
- return /* @__PURE__ */ jsx(
991
- SelectCard,
992
- {
993
- disabled,
994
- id: year,
995
- onChange: !disabled ? () => onChange(year) : () => {
996
- },
997
- onMouseDown: (e) => e.preventDefault(),
998
- checked: selected,
999
- checkboxProps: {
1000
- tabIndex: -1,
1001
- onFocus,
1002
- ...pseudoFocused && { "data-interactive": "focus-visible" }
1003
- },
1004
- flexGrow: 1,
1005
- className: cx(styles["year-item"], {
1006
- [styles["pseudo-focused"]]: pseudoFocused
1007
- }),
1008
- "data-year": year,
1009
- tabIndex: -1,
1010
- ...rest,
1011
- children: year
1012
- }
1013
- );
1014
- };
1015
-
1016
- const DEFAULT_MIN = 1900;
1017
- const DEFAULT_MAX = 2200;
1018
- const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
1019
- const YearSelector = forwardRef(
1020
- ({
1021
- min = DEFAULT_MIN,
1022
- max = DEFAULT_MAX,
1023
- value: valueProp,
1024
- defaultValue: defaultValueProp,
1025
- onChange,
1026
- onConfirm,
1027
- startingYear = currentYear,
1028
- columns: columnsProp,
1029
- className,
1030
- required = false,
1031
- disabled = false,
1032
- ariaLabel = "Year selection",
1033
- rootProps
1034
- }, ref) => {
1035
- const columns = Math.max(columnsProp ?? 2, 1);
1036
- const [value, setValue] = useOptionallyControlledState({
1037
- controlledValue: valueProp,
1038
- defaultValue: defaultValueProp ?? null,
1039
- onChange
1040
- });
1041
- const previousValue = usePrevious(value);
1042
- const initialFocusYear = value ?? startingYear;
1043
- const [pseudoFocused, setPseudoFocused] = useState(initialFocusYear);
1044
- const handleChange = (year) => {
1045
- if (!required && value === year) {
1046
- setValue(null);
1047
- return;
1048
- }
1049
- setValue(year);
1050
- if (year !== null) {
1051
- setPseudoFocused(year);
1052
- }
1053
- };
1054
- const handleItemChange = (year) => {
1055
- handleChange(year);
1056
- onConfirm?.(year);
1057
- };
1058
- const gap = 12;
1059
- const rowHeight = 58;
1060
- const rowCount = Math.ceil((max - min + 1) / columns);
1061
- const initialOffset = (initialFocusYear - min) * (rowHeight + gap) / columns + gap / 2;
1062
- const rowVirtualizer = useVirtualizer({
1063
- count: rowCount,
1064
- getScrollElement: () => parentRef.current,
1065
- estimateSize: () => rowHeight,
1066
- gap,
1067
- initialOffset,
1068
- paddingEnd: gap / 2
1069
- });
1070
- const scrollToYear = useCallback(
1071
- (year, { focus } = {}) => {
1072
- const index = Math.floor((year - min) / columns);
1073
- rowVirtualizer.scrollToIndex(index, { align: "center" });
1074
- if (focus) {
1075
- setPseudoFocused(year);
1076
- }
1077
- },
1078
- [min, columns, rowVirtualizer, setPseudoFocused]
1079
- );
1080
- const parentRef = useRef(null);
1081
- const { listRef } = useYearSelectorKeys({
1082
- columns,
1083
- scrollToYear,
1084
- initialFocus: initialFocusYear,
1085
- onSelect: handleChange,
1086
- onConfirm: () => onConfirm?.(value),
1087
- min,
1088
- max,
1089
- disabled,
1090
- pseudoFocused,
1091
- setPseudoFocused,
1092
- required
1093
- });
1094
- useEffect(() => {
1095
- if (value !== null && previousValue !== value) {
1096
- scrollToYear(value, { focus: true });
1097
- }
1098
- }, [value, previousValue, scrollToYear, listRef]);
1099
- const jointRef = useMergeRefs([parentRef, listRef, ref]);
1100
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
1101
- "div",
1102
- {
1103
- ref: jointRef,
1104
- "aria-label": ariaLabel,
1105
- tabIndex: 0,
1106
- className: cx(styles["year-selector"], className),
1107
- role: "spinbutton",
1108
- "aria-valuenow": value ?? void 0,
1109
- "aria-valuemin": min,
1110
- "aria-valuemax": max,
1111
- "aria-valuetext": value ? `${value}` : "No year selected",
1112
- "data-test": rowVirtualizer.options.paddingEnd,
1113
- style: {
1114
- maxHeight: `${rowVirtualizer.getTotalSize() + 8}px`
1115
- },
1116
- ...rootProps,
1117
- children: /* @__PURE__ */ jsx(
1118
- "div",
1119
- {
1120
- style: {
1121
- height: `${rowVirtualizer.getTotalSize()}px`,
1122
- width: "100%",
1123
- position: "relative"
1124
- },
1125
- children: rowVirtualizer.getVirtualItems().map((virtualItem) => {
1126
- const years = Array.from(
1127
- { length: columns },
1128
- (_, i) => virtualItem.index * columns + i + min
1129
- );
1130
- return /* @__PURE__ */ jsx(
1131
- "div",
1132
- {
1133
- "data-testid": "v-row",
1134
- className: styles["year-grid"],
1135
- style: {
1136
- transform: `translateY(${virtualItem.start}px)`,
1137
- gridTemplateColumns: `repeat(${columns}, 1fr)`
1138
- },
1139
- children: years.map((year) => {
1140
- if (year > max) return /* @__PURE__ */ jsx("div", {}, year);
1141
- return /* @__PURE__ */ jsx(
1142
- YearItem,
1143
- {
1144
- disabled,
1145
- year,
1146
- onChange: handleItemChange,
1147
- selected: value === year,
1148
- pseudoFocused: pseudoFocused === year,
1149
- onFocus: () => {
1150
- listRef.current?.focus();
1151
- setPseudoFocused(year);
1152
- }
1153
- },
1154
- year
1155
- );
1156
- })
1157
- },
1158
- virtualItem.key
1159
- );
1160
- })
1161
- }
1162
- )
1163
- }
1164
- ) });
1165
- }
1166
- );
1167
- YearSelector.displayName = "YearSelector";
1168
-
1169
- const CalendarMonthSelection = forwardRef(({ onMonthSelection, ...props }, ref) => {
1170
- const { defaultTimeZone, maxDate, minDate, selectedMonth, selectedYear } = useCalendar();
1171
- const monthSelectionRef = useRef(null);
1172
- const combinedRef = useMergeRefs([ref, monthSelectionRef]);
1173
- const currentDate = useMemo(
1174
- () => DateTime.fromObject({ year: selectedYear, month: selectedMonth }).setZone(defaultTimeZone).startOf("day"),
1175
- [defaultTimeZone, selectedYear, selectedMonth]
1176
- );
1177
- const dates = useMemo(
1178
- () => Array.from({ length: 12 }, (_, i) => {
1179
- const date = DateTime.fromObject({
1180
- year: selectedYear,
1181
- month: 1
1182
- }).plus({
1183
- month: i
1184
- });
1185
- const disabled = minDate && date < minDate && !date.hasSame(minDate, "month") || maxDate && date > maxDate && !date.hasSame(maxDate, "month");
1186
- return {
1187
- month: date.month,
1188
- disabled: disabled ?? false
1189
- };
1190
- }),
1191
- [maxDate, minDate, selectedYear]
1192
- );
1193
- const classes = cx(styles$1["month-selection"], props.className);
1194
- const preventBlur = useCallback((e) => {
1195
- e.preventDefault();
1196
- }, []);
1197
- const [focusedIndex, setFocusedIndex] = useState(selectedMonth - 1);
1198
- useEffect(() => {
1199
- if (minDate || maxDate) {
1200
- let index = dates.findIndex(({ month }) => month === selectedMonth);
1201
- while (dates[index].disabled && index < 11) {
1202
- index++;
1203
- }
1204
- setFocusedIndex(index);
1205
- } else {
1206
- setFocusedIndex(selectedMonth - 1);
1207
- }
1208
- }, [selectedMonth, minDate, maxDate, dates]);
1209
- const handleKeyDown = useCallback(
1210
- (e) => {
1211
- const target = e.target;
1212
- const cards = monthSelectionRef.current?.querySelectorAll(
1213
- "input[type='checkbox']"
1214
- );
1215
- if (!cards || cards.length === 0) {
1216
- return;
1217
- }
1218
- const cardArray = Array.from(cards);
1219
- const currentIndex = cardArray.indexOf(target);
1220
- if (currentIndex === -1) return;
1221
- const updateFocusedIndex = (index) => {
1222
- e.preventDefault();
1223
- cardArray[index].focus();
1224
- setFocusedIndex(index);
1225
- };
1226
- let newIndex;
1227
- switch (e.key) {
1228
- case "ArrowLeft":
1229
- newIndex = currentIndex > 0 ? currentIndex - 1 : 11;
1230
- while (dates[newIndex].disabled) {
1231
- newIndex = newIndex > 0 ? newIndex - 1 : 11;
1232
- }
1233
- updateFocusedIndex(newIndex);
1234
- break;
1235
- case "ArrowRight":
1236
- newIndex = currentIndex < 11 ? currentIndex + 1 : 0;
1237
- while (dates[newIndex].disabled) {
1238
- newIndex = newIndex < 11 ? newIndex + 1 : 0;
1239
- }
1240
- updateFocusedIndex(newIndex);
1241
- break;
1242
- case "ArrowUp":
1243
- if (currentIndex < 3) {
1244
- newIndex = currentIndex + 9;
1245
- } else {
1246
- newIndex = currentIndex - 3;
1247
- }
1248
- while (dates[newIndex].disabled) {
1249
- if (newIndex > 2) {
1250
- newIndex -= 3;
1251
- } else {
1252
- newIndex += 9;
1253
- }
1254
- }
1255
- updateFocusedIndex(newIndex);
1256
- break;
1257
- case "ArrowDown":
1258
- if (currentIndex > 8) {
1259
- newIndex = currentIndex - 9;
1260
- } else {
1261
- newIndex = currentIndex + 3;
1262
- }
1263
- while (dates[newIndex].disabled) {
1264
- if (newIndex < 9) {
1265
- newIndex += 3;
1266
- } else {
1267
- newIndex -= 9;
1268
- }
1269
- }
1270
- updateFocusedIndex(newIndex);
1271
- break;
1272
- case "Enter":
1273
- case " ":
1274
- e.preventDefault();
1275
- if (!dates[currentIndex].disabled) {
1276
- onMonthSelection(dates[currentIndex].month);
1277
- }
1278
- break;
1279
- }
1280
- },
1281
- [dates, onMonthSelection]
1282
- );
1283
- return /* @__PURE__ */ jsx(
1284
- "div",
1285
- {
1286
- ref: combinedRef,
1287
- "data-anv": "calendar-month-selection",
1288
- className: classes,
1289
- ...props,
1290
- children: /* @__PURE__ */ jsx("div", { role: "grid", "aria-label": "Calendar month selection", children: /* @__PURE__ */ jsx(
1291
- Grid,
1292
- {
1293
- templateColumns: "repeat(3, minmax(0, 1fr))",
1294
- gap: 3,
1295
- onKeyDown: handleKeyDown,
1296
- role: "row",
1297
- children: dates.map(({ month, disabled }, index) => /* @__PURE__ */ jsx("div", { role: "gridcell", children: /* @__PURE__ */ jsx(
1298
- SelectCard,
1299
- {
1300
- id: month.toString(),
1301
- disabled,
1302
- onMouseDown: preventBlur,
1303
- onChange: () => onMonthSelection(month),
1304
- checked: selectedMonth === month && selectedYear === currentDate.year,
1305
- checkboxProps: {
1306
- className: styles$1["selection-checkbox"],
1307
- tabIndex: focusedIndex === index ? 0 : -1
1308
- },
1309
- className: styles$1["selection-card"],
1310
- children: DateTime.fromObject({ month }).toFormat("MMMM")
1311
- }
1312
- ) }, month.toString()))
1313
- }
1314
- ) })
1315
- }
1316
- );
1317
- });
1318
- CalendarMonthSelection.displayName = "CalendarMonthSelection";
1319
-
1320
- const CalendarBetaPropsContext = createContext({});
1321
-
1322
- const useCalendarBetaProps = () => {
1323
- return useContext(CalendarBetaPropsContext);
1324
- };
1325
-
1326
- 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.";
1327
- const toolbarFocusStates = ["month", "year", "next", "prev", "now"];
1328
- const Calendar = Object.assign(
1329
- forwardRef(function CalendarInner(props, ref) {
1330
- const uid = useId();
1331
- const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
1332
- const {
1333
- children,
1334
- focusedDate: focusProp,
1335
- defaultFocusedDate,
1336
- locale = Intl.DateTimeFormat().resolvedOptions().locale,
1337
- defaultTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone,
1338
- startDay = "Sunday",
1339
- minDate,
1340
- maxDate,
1341
- unavailable = {
1342
- dates: [],
1343
- daysOfWeek: []
1344
- },
1345
- id,
1346
- style,
1347
- value: iValue,
1348
- defaultValue: iDefaultValue,
1349
- onSelection,
1350
- range,
1351
- className,
1352
- _disableAutofocus,
1353
- _disableFocus,
1354
- ...remainingProps
1355
- } = componentProps;
1356
- useEffect(() => {
1357
- if (focusProp !== void 0) {
1358
- warnOnce(FOCUSED_DATE_DEPRECATION_MESSAGE);
1359
- }
1360
- }, [focusProp]);
1361
- const { dateMetadata, onMonthView } = useCalendarBetaProps();
1362
- const calendarRef = useRef(null);
1363
- const combinedRef = useMergeRefs([ref, calendarRef]);
1364
- const lastIValue = useRef(iValue);
1365
- const yearButtonRef = useRef(null);
1366
- const monthButtonRef = useRef(null);
1367
- const headerRef = useRef(null);
1368
- const [toolbarFocus, setToolbarFocus] = useState(toolbarFocusStates[0]);
1369
- const [calendarWidth, setCalendarWidth] = useState(
1370
- void 0
1371
- );
1372
- const [calendarSelectionState, setCalendarSelectionState] = useState("day");
1373
- const visibleHeaderButtons = useMemo(() => {
1374
- if (calendarSelectionState !== "day") {
1375
- return toolbarFocusStates.slice(0, 2);
1376
- }
1377
- return toolbarFocusStates;
1378
- }, [calendarSelectionState]);
1379
- useEffect(() => {
1380
- if (!calendarRef.current || style?.width != null) return;
1381
- const resizeObserver = new ResizeObserver((entries) => {
1382
- for (const entry of entries) {
1383
- const width = entry.contentRect.width;
1384
- if (calendarSelectionState === "day" && width > 100) {
1385
- setCalendarWidth(width);
1386
- }
1387
- }
1388
- });
1389
- resizeObserver.observe(calendarRef.current);
1390
- return () => {
1391
- resizeObserver.disconnect();
1392
- };
1393
- }, [calendarSelectionState, style?.width]);
1394
- const styleCombined = {
1395
- width: calendarWidth,
1396
- ...style,
1397
- ...layoutStyles
1398
- };
1399
- const classNameCombined = cx(styles$1["calendar"], className);
1400
- const { nDate, nDefaultDate, nToday } = useMemo(
1401
- () => ({
1402
- nDate: iValue ? typeof iValue === "string" ? normalizeDate(iValue, defaultTimeZone) : {
1403
- start: iValue.start ? normalizeDate(iValue.start, defaultTimeZone) : null,
1404
- end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null
1405
- } : null,
1406
- nDefaultDate: iDefaultValue ? typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) : {
1407
- start: iDefaultValue.start ? normalizeDate(iDefaultValue.start, defaultTimeZone) : null,
1408
- end: iDefaultValue?.end ? normalizeDate(iDefaultValue.end, defaultTimeZone) : null
1409
- } : null,
1410
- nToday: typeof iValue === "string" ? normalizeDate(DateTime.now().toISO(), defaultTimeZone) : {
1411
- start: normalizeDate(DateTime.now().toISO(), defaultTimeZone),
1412
- end: normalizeDate(DateTime.now().toISO(), defaultTimeZone)
1413
- }
1414
- }),
1415
- [iValue, iDefaultValue, defaultTimeZone]
1416
- );
1417
- const [value, setValue] = useState(nDate ?? nDefaultDate ?? nToday);
1418
- const getInitialDate = useMemo(() => {
1419
- if (defaultFocusedDate) {
1420
- return normalizeDate(defaultFocusedDate, defaultTimeZone);
1421
- }
1422
- if (iDefaultValue) {
1423
- const date = typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) : normalizeDate(
1424
- iDefaultValue.start ?? iDefaultValue.end ?? "",
1425
- defaultTimeZone
1426
- );
1427
- return date;
1428
- }
1429
- if (!DateTime.isDateTime(nDate) && !DateTime.isDateTime(nDefaultDate) && !DateTime.isDateTime(nToday)) {
1430
- return nDate?.start ?? nDefaultDate?.start ?? nToday?.start;
1431
- }
1432
- return nDate ?? nDefaultDate ?? nToday;
1433
- }, [
1434
- defaultFocusedDate,
1435
- iDefaultValue,
1436
- nDate,
1437
- nDefaultDate,
1438
- nToday,
1439
- defaultTimeZone
1440
- ]);
1441
- const initialDate = getInitialDate ?? DateTime.now();
1442
- const [focusedDate, setFocusedDate] = useState(initialDate);
1443
- const [hoveredDate, setHoveredDate] = useState();
1444
- const [selectedMonth, setSelectedMonth] = useState(
1445
- initialDate.month
1446
- );
1447
- const [selectedYear, setSelectedYear] = useState(
1448
- initialDate.year
1449
- );
1450
- const currentVisibleMonth = useMemo(() => {
1451
- return {
1452
- year: focusedDate?.year ?? selectedYear,
1453
- month: focusedDate?.month ?? selectedMonth
1454
- };
1455
- }, [focusedDate?.month, focusedDate?.year, selectedYear, selectedMonth]);
1456
- useEffect(
1457
- () => onMonthView?.(currentVisibleMonth),
1458
- // eslint-disable-next-line react-hooks/exhaustive-deps -- omit onMonthView from deps because we don't want to trigger infinite re-renders
1459
- [currentVisibleMonth]
1460
- );
1461
- useEffect(() => {
1462
- if (!focusProp && !defaultFocusedDate) return;
1463
- if (focusProp) {
1464
- setFocusedDate(normalizeDate(focusProp, defaultTimeZone));
1465
- } else if (defaultFocusedDate) {
1466
- setFocusedDate(normalizeDate(defaultFocusedDate, defaultTimeZone));
1467
- setSelectedMonth(
1468
- normalizeDate(defaultFocusedDate, defaultTimeZone).month
1469
- );
1470
- setSelectedYear(
1471
- normalizeDate(defaultFocusedDate, defaultTimeZone).year
1472
- );
1473
- }
1474
- }, [focusProp, defaultFocusedDate]);
1475
- useEffect(() => {
1476
- if (!iValue) {
1477
- lastIValue.current = iValue;
1478
- return;
1479
- }
1480
- if (typeof iValue === "string") {
1481
- setValue(normalizeDate(iValue, defaultTimeZone));
1482
- setFocusedDate(normalizeDate(iValue, defaultTimeZone));
1483
- } else if (iValue.end && (typeof lastIValue.current !== "object" || lastIValue?.current?.end !== iValue.end)) {
1484
- setValue({
1485
- start: iValue.start ? normalizeDate(iValue.start, defaultTimeZone) : null,
1486
- end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null
1487
- });
1488
- setFocusedDate(normalizeDate(iValue.end, defaultTimeZone));
1489
- } else if (iValue.start && (typeof lastIValue.current !== "object" || lastIValue?.current?.start !== iValue.start)) {
1490
- setFocusedDate(normalizeDate(iValue.start, defaultTimeZone));
1491
- }
1492
- lastIValue.current = iValue;
1493
- }, [iValue]);
1494
- const normalizedMinDate = useMemo(
1495
- () => minDate ? normalizeDate(minDate, defaultTimeZone) : null,
1496
- [minDate, defaultTimeZone]
1497
- );
1498
- const normalizedMaxDate = useMemo(
1499
- () => maxDate ? normalizeDate(maxDate, defaultTimeZone) : null,
1500
- [maxDate, defaultTimeZone]
1501
- );
1502
- const dateMetadataMap = useMemo(() => {
1503
- if (!dateMetadata) return void 0;
1504
- return new Map(dateMetadata.map((item) => [item.date, item.context]));
1505
- }, [dateMetadata]);
1506
- const providerValue = useMemo(() => {
1507
- const format = {
1508
- weekday: "long",
1509
- month: "long",
1510
- day: "2-digit",
1511
- year: "numeric"
1512
- };
1513
- return {
1514
- disableAutofocus: _disableAutofocus ?? false,
1515
- focusedDate,
1516
- setFocusedDate,
1517
- selectedMonth,
1518
- setSelectedMonth,
1519
- selectedYear,
1520
- setSelectedYear,
1521
- hoveredDate,
1522
- setHoveredDate,
1523
- value,
1524
- setValue,
1525
- defaultTimeZone,
1526
- id: id ?? uid,
1527
- onSelection,
1528
- controlled: !!iValue,
1529
- range,
1530
- minDate: normalizedMinDate,
1531
- maxDate: normalizedMaxDate,
1532
- unavailable: {
1533
- dates: new Set(unavailable.dates),
1534
- daysOfWeek: new Set(unavailable.daysOfWeek)
1535
- },
1536
- locale,
1537
- dateFormat: format,
1538
- startDay,
1539
- dateMetadata: dateMetadataMap
1540
- };
1541
- }, [
1542
- focusedDate,
1543
- selectedMonth,
1544
- selectedYear,
1545
- hoveredDate,
1546
- id,
1547
- locale,
1548
- normalizedMaxDate,
1549
- normalizedMinDate,
1550
- iValue,
1551
- onSelection,
1552
- range,
1553
- defaultTimeZone,
1554
- uid,
1555
- unavailable,
1556
- value,
1557
- startDay,
1558
- dateMetadataMap,
1559
- _disableAutofocus
1560
- ]);
1561
- const handleHeaderKeyDown = useCallback(
1562
- (e) => {
1563
- switch (e.key) {
1564
- case "ArrowDown": {
1565
- e.preventDefault();
1566
- if (calendarSelectionState === "day") {
1567
- const focusedDayId = `${id ?? uid}-${focusedDate?.toISODate()}`;
1568
- const root = e.currentTarget.getRootNode() ?? document;
1569
- root.getElementById(focusedDayId)?.focus();
1570
- }
1571
- break;
1572
- }
1573
- case "ArrowLeft":
1574
- e.preventDefault();
1575
- setToolbarFocus((previousToolbarFocus) => {
1576
- const newToolbarFocus = previousToolbarFocus === visibleHeaderButtons[0] ? visibleHeaderButtons[visibleHeaderButtons.length - 1] : visibleHeaderButtons[visibleHeaderButtons.indexOf(previousToolbarFocus) - 1] ?? visibleHeaderButtons[visibleHeaderButtons.length - 1];
1577
- const button = headerRef.current?.querySelector(
1578
- `[data-calendar-header-button-name="${newToolbarFocus}"]`
1579
- );
1580
- if (button && "focus" in button && typeof button.focus === "function") {
1581
- button.focus();
1582
- }
1583
- return newToolbarFocus;
1584
- });
1585
- break;
1586
- case "ArrowRight":
1587
- e.preventDefault();
1588
- setToolbarFocus((previousToolbarFocus) => {
1589
- const newToolbarFocus = previousToolbarFocus === visibleHeaderButtons[visibleHeaderButtons.length - 1] ? visibleHeaderButtons[0] : visibleHeaderButtons[visibleHeaderButtons.indexOf(previousToolbarFocus) + 1] ?? visibleHeaderButtons[0];
1590
- const button = headerRef.current?.querySelector(
1591
- `[data-calendar-header-button-name="${newToolbarFocus}"]`
1592
- );
1593
- if (button && "focus" in button && typeof button.focus === "function") {
1594
- button.focus();
1595
- }
1596
- return newToolbarFocus;
1597
- });
1598
- }
1599
- },
1600
- [visibleHeaderButtons, calendarSelectionState, focusedDate, id, uid]
1601
- );
1602
- const handleMonthSelection = useCallback(
1603
- (month) => {
1604
- monthButtonRef.current?.focus();
1605
- setToolbarFocus(toolbarFocusStates[0]);
1606
- setSelectedMonth(month);
1607
- setFocusedDate(
1608
- DateTime.fromObject(
1609
- {
1610
- year: focusedDate?.year ?? 1,
1611
- month,
1612
- day: 1
1613
- },
1614
- { zone: defaultTimeZone }
1615
- ).startOf("day")
1616
- );
1617
- setCalendarSelectionState("day");
1618
- },
1619
- // eslint-disable-next-line react-hooks/exhaustive-deps
1620
- [focusedDate]
1621
- );
1622
- const handleYearSelection = useCallback(
1623
- (year) => {
1624
- if (year === null) return;
1625
- yearButtonRef.current?.focus();
1626
- setToolbarFocus(toolbarFocusStates[1]);
1627
- setSelectedYear(year);
1628
- setFocusedDate(
1629
- DateTime.fromObject(
1630
- {
1631
- year,
1632
- month: focusedDate?.month ?? 1,
1633
- day: 1
1634
- },
1635
- { zone: defaultTimeZone }
1636
- ).startOf("day")
1637
- );
1638
- setCalendarSelectionState("day");
1639
- },
1640
- // eslint-disable-next-line react-hooks/exhaustive-deps
1641
- [focusedDate?.month]
1642
- );
1643
- return /* @__PURE__ */ jsx(CalendarContext.Provider, { value: providerValue, children: /* @__PURE__ */ jsxs(
1644
- "div",
1645
- {
1646
- ref: combinedRef,
1647
- id: id ?? uid,
1648
- style: styleCombined,
1649
- className: classNameCombined,
1650
- "data-anv": "calendar",
1651
- ...remainingProps,
1652
- children: [
1653
- /* @__PURE__ */ jsx("div", { className: styles$1["header"], children: /* @__PURE__ */ jsxs(
1654
- "span",
1655
- {
1656
- ref: headerRef,
1657
- "aria-label": "Calendar navigation",
1658
- role: "toolbar",
1659
- tabIndex: -1,
1660
- onKeyDown: handleHeaderKeyDown,
1661
- className: styles$1["controller"],
1662
- children: [
1663
- /* @__PURE__ */ jsx(
1664
- CalendarMonthButton,
1665
- {
1666
- ref: monthButtonRef,
1667
- tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[0] ? 0 : -1,
1668
- "data-calendar-header-button": true,
1669
- "data-calendar-header-button-name": toolbarFocusStates[0],
1670
- calendarSelectionState,
1671
- onClick: () => {
1672
- setCalendarSelectionState(
1673
- (prev) => prev === "month" ? "day" : "month"
1674
- );
1675
- setToolbarFocus(toolbarFocusStates[0]);
1676
- }
1677
- }
1678
- ),
1679
- /* @__PURE__ */ jsx(
1680
- CalendarYearButton,
1681
- {
1682
- ref: yearButtonRef,
1683
- tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[1] ? 0 : -1,
1684
- "data-calendar-header-button": true,
1685
- "data-calendar-header-button-name": toolbarFocusStates[1],
1686
- calendarSelectionState,
1687
- onClick: () => {
1688
- setCalendarSelectionState(
1689
- (prev) => prev === "year" ? "day" : "year"
1690
- );
1691
- setToolbarFocus(toolbarFocusStates[1]);
1692
- }
1693
- }
1694
- ),
1695
- calendarSelectionState === "day" && /* @__PURE__ */ jsxs(Fragment, { children: [
1696
- /* @__PURE__ */ jsx(
1697
- CalendarPrev,
1698
- {
1699
- tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[2] ? 0 : -1,
1700
- "data-calendar-header-button": true,
1701
- "data-calendar-header-button-name": toolbarFocusStates[2],
1702
- onClick: () => setToolbarFocus(toolbarFocusStates[2])
1703
- }
1704
- ),
1705
- /* @__PURE__ */ jsx(
1706
- CalendarNext,
1707
- {
1708
- tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[3] ? 0 : -1,
1709
- "data-calendar-header-button": true,
1710
- "data-calendar-header-button-name": toolbarFocusStates[3],
1711
- onClick: () => setToolbarFocus(toolbarFocusStates[3])
1712
- }
1713
- ),
1714
- /* @__PURE__ */ jsx(
1715
- CalendarNow,
1716
- {
1717
- tabIndex: _disableFocus ? -1 : toolbarFocus === toolbarFocusStates[4] ? 0 : -1,
1718
- "data-calendar-header-button": true,
1719
- "data-calendar-header-button-name": toolbarFocusStates[4],
1720
- onClickFixed: () => setToolbarFocus(toolbarFocusStates[4])
1721
- }
1722
- )
1723
- ] })
1724
- ]
1725
- }
1726
- ) }),
1727
- calendarSelectionState === "day" && /* @__PURE__ */ jsx(CalendarMonth, {}),
1728
- calendarSelectionState === "month" && /* @__PURE__ */ jsx(CalendarMonthSelection, { onMonthSelection: handleMonthSelection }),
1729
- calendarSelectionState === "year" && /* @__PURE__ */ jsx("div", { className: styles$1["year-selector"], children: /* @__PURE__ */ jsx(
1730
- YearSelector,
1731
- {
1732
- onConfirm: handleYearSelection,
1733
- required: true,
1734
- defaultValue: selectedYear,
1735
- min: normalizedMinDate?.year,
1736
- max: normalizedMaxDate?.year
1737
- }
1738
- ) })
1739
- ]
1740
- }
1741
- ) });
1742
- }),
1743
- {
1744
- /** Selects today and moves it into view. */
1745
- Now: CalendarNow,
1746
- /** Displays the current month grid. */
1747
- Month: CalendarMonth,
1748
- /** Moves the calendar to the next month. */
1749
- Next: CalendarNext,
1750
- /** Moves the calendar to the previous month. */
1751
- Prev: CalendarPrev,
1752
- /** Opens or closes month selection. */
1753
- MonthButton: CalendarMonthButton,
1754
- /** Opens or closes year selection. */
1755
- YearButton: CalendarYearButton
1756
- }
1757
- );
1758
- Calendar.displayName = "Calendar";
1759
-
1760
- export { CalendarBetaPropsContext as C, Calendar as a, CalendarNow as b, CalendarYearButton as c, CalendarPrev as d, CalendarNext as e, CalendarMonthButton as f, CalendarMonth as g, useCalendarBetaProps as u };
1761
- //# sourceMappingURL=Calendar-IzXG1aJw.js.map