@servicetitan/anvil2 1.33.0 → 1.34.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 (252) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/{Alert-D4O5XFXo.js → Alert-C9KfIA7s.js} +2 -2
  3. package/dist/{Alert-D4O5XFXo.js.map → Alert-C9KfIA7s.js.map} +1 -1
  4. package/dist/{Alert-BcjnX40X-DK8meb2Z.js → Alert-Dgaqfx1H-B6i-eGef.js} +5 -5
  5. package/dist/{Alert-BcjnX40X-DK8meb2Z.js.map → Alert-Dgaqfx1H-B6i-eGef.js.map} +1 -1
  6. package/dist/Alert.js +1 -1
  7. package/dist/{Announcement-D30SgkZg.js → Announcement-9GxUBtDn.js} +4 -4
  8. package/dist/{Announcement-D30SgkZg.js.map → Announcement-9GxUBtDn.js.map} +1 -1
  9. package/dist/Announcement.js +1 -1
  10. package/dist/{AnvilProvider-CuvqXRaZ.js → AnvilProvider-cP12DycW.js} +2 -2
  11. package/dist/{AnvilProvider-CuvqXRaZ.js.map → AnvilProvider-cP12DycW.js.map} +1 -1
  12. package/dist/AnvilProvider.js +1 -1
  13. package/dist/{Avatar-CuFvRBu5.js → Avatar-BpSF02VE.js} +3 -3
  14. package/dist/{Avatar-CuFvRBu5.js.map → Avatar-BpSF02VE.js.map} +1 -1
  15. package/dist/Avatar.js +1 -1
  16. package/dist/{Badge-DsZf3iVG.js → Badge-9kD_vUsd.js} +2 -2
  17. package/dist/{Badge-DsZf3iVG.js.map → Badge-9kD_vUsd.js.map} +1 -1
  18. package/dist/Badge.js +1 -1
  19. package/dist/{Breadcrumbs-B7Rs-8sE.js → Breadcrumbs-C3lqgwOX.js} +5 -5
  20. package/dist/{Breadcrumbs-B7Rs-8sE.js.map → Breadcrumbs-C3lqgwOX.js.map} +1 -1
  21. package/dist/Breadcrumbs.js +1 -1
  22. package/dist/{Button-BTnyx-np.js → Button-Cj9mSXot.js} +2 -2
  23. package/dist/{Button-BTnyx-np.js.map → Button-Cj9mSXot.js.map} +1 -1
  24. package/dist/{Button-CEDmdZ-2-DJVJnigb.js → Button-DbVpPjA8-CRQ01IJx.js} +3 -3
  25. package/dist/{Button-CEDmdZ-2-DJVJnigb.js.map → Button-DbVpPjA8-CRQ01IJx.js.map} +1 -1
  26. package/dist/Button.js +1 -1
  27. package/dist/{ButtonCompound-BeUo4_Zv-psxZY03N.js → ButtonCompound-Agrm0TFv-BH9CzNcb.js} +2 -2
  28. package/dist/{ButtonCompound-BeUo4_Zv-psxZY03N.js.map → ButtonCompound-Agrm0TFv-BH9CzNcb.js.map} +1 -1
  29. package/dist/{ButtonCompound-BfrxUIu5.js → ButtonCompound-B7W5e4vE.js} +2 -2
  30. package/dist/{ButtonCompound-BfrxUIu5.js.map → ButtonCompound-B7W5e4vE.js.map} +1 -1
  31. package/dist/ButtonCompound.js +1 -1
  32. package/dist/{ButtonLink-DBWcE6OF-BtCzzomr.js → ButtonLink-CnaMCnXx-B4b-kiOn.js} +3 -3
  33. package/dist/{ButtonLink-DBWcE6OF-BtCzzomr.js.map → ButtonLink-CnaMCnXx-B4b-kiOn.js.map} +1 -1
  34. package/dist/{ButtonLink-DFMrEFSO.js → ButtonLink-DhnsPaEF.js} +2 -2
  35. package/dist/{ButtonLink-DFMrEFSO.js.map → ButtonLink-DhnsPaEF.js.map} +1 -1
  36. package/dist/ButtonLink.js +1 -1
  37. package/dist/{ButtonToggle-DZTrcapf-CMEhOep1.js → ButtonToggle-SIeaI8eo-BKc_4h00.js} +3 -3
  38. package/dist/{ButtonToggle-DZTrcapf-CMEhOep1.js.map → ButtonToggle-SIeaI8eo-BKc_4h00.js.map} +1 -1
  39. package/dist/{ButtonToggle-kryR_Zc2.js → ButtonToggle-gSoPbnCA.js} +2 -2
  40. package/dist/{ButtonToggle-kryR_Zc2.js.map → ButtonToggle-gSoPbnCA.js.map} +1 -1
  41. package/dist/ButtonToggle.js +1 -1
  42. package/dist/{Calendar-ch54N6OS-0vxeSJFt.js → Calendar-C3dudrjk-nI60sdlM.js} +759 -215
  43. package/dist/{Calendar-ch54N6OS-0vxeSJFt.js.map → Calendar-C3dudrjk-nI60sdlM.js.map} +1 -1
  44. package/dist/{Calendar-ch54N6OS.css → Calendar-C3dudrjk.css} +58 -39
  45. package/dist/Calendar-rS4d2fR0.js +57 -0
  46. package/dist/Calendar-rS4d2fR0.js.map +1 -0
  47. package/dist/Calendar.js +1 -1
  48. package/dist/{Card-DUNBw8AX.js → Card-Ca29zzJd.js} +2 -2
  49. package/dist/{Card-DUNBw8AX.js.map → Card-Ca29zzJd.js.map} +1 -1
  50. package/dist/{Card-DukbBYaA-C2a2vYKk.js → Card-Ct_7fGY7-31Vi9Yzf.js} +3 -3
  51. package/dist/{Card-DukbBYaA-C2a2vYKk.js.map → Card-Ct_7fGY7-31Vi9Yzf.js.map} +1 -1
  52. package/dist/Card.js +1 -1
  53. package/dist/{Checkbox-ZLz_xJx9-CxqouREp.js → Checkbox-DyE0R-K8-C3EVQN9m.js} +4 -4
  54. package/dist/{Checkbox-ZLz_xJx9-CxqouREp.js.map → Checkbox-DyE0R-K8-C3EVQN9m.js.map} +1 -1
  55. package/dist/{Checkbox-C4JF-LvE.js → Checkbox-j9WXnNWd.js} +2 -2
  56. package/dist/{Checkbox-C4JF-LvE.js.map → Checkbox-j9WXnNWd.js.map} +1 -1
  57. package/dist/Checkbox.js +1 -1
  58. package/dist/{Chip-jA27WjrF.js → Chip-05TrhwYw.js} +2 -2
  59. package/dist/{Chip-jA27WjrF.js.map → Chip-05TrhwYw.js.map} +1 -1
  60. package/dist/{Chip-BQOzhPQv-C01SLYdN.js → Chip-Cew3VCIu-CqIWxD9_.js} +5 -5
  61. package/dist/{Chip-BQOzhPQv-C01SLYdN.js.map → Chip-Cew3VCIu-CqIWxD9_.js.map} +1 -1
  62. package/dist/Chip.js +1 -1
  63. package/dist/{Combobox-VCa5Qplb.js → Combobox-zE9tn7wn.js} +13 -15
  64. package/dist/Combobox-zE9tn7wn.js.map +1 -0
  65. package/dist/Combobox.js +1 -1
  66. package/dist/{DateField-Ex0bquMB.js → DateField-DQZoanDf.js} +9 -7
  67. package/dist/DateField-DQZoanDf.js.map +1 -0
  68. package/dist/DateField.js +1 -1
  69. package/dist/{DaysOfTheWeek-CQqCFF2f.js → DaysOfTheWeek-AlDsOFtf.js} +4 -4
  70. package/dist/{DaysOfTheWeek-CQqCFF2f.js.map → DaysOfTheWeek-AlDsOFtf.js.map} +1 -1
  71. package/dist/DaysOfTheWeek.js +1 -1
  72. package/dist/{Details-Cb6t_xKu.js → Details-DM9iP_t8.js} +3 -3
  73. package/dist/{Details-Cb6t_xKu.js.map → Details-DM9iP_t8.js.map} +1 -1
  74. package/dist/Details.js +1 -1
  75. package/dist/{Dialog-QtgPY3ji.js → Dialog-DUDe5yhJ.js} +4 -4
  76. package/dist/{Dialog-QtgPY3ji.js.map → Dialog-DUDe5yhJ.js.map} +1 -1
  77. package/dist/Dialog.js +1 -1
  78. package/dist/{Divider-AD1Jb85d.js → Divider-BkObIjoj.js} +18 -18
  79. package/dist/{Divider-AD1Jb85d.js.map → Divider-BkObIjoj.js.map} +1 -1
  80. package/dist/Divider.css +35 -34
  81. package/dist/Divider.js +1 -1
  82. package/dist/Dnd.d.ts +2 -0
  83. package/dist/Dnd.js +2 -0
  84. package/dist/Dnd.js.map +1 -0
  85. package/dist/{DndSort-BVcdqJLB.js → DndSort-CYFyN62U.js} +60 -136
  86. package/dist/DndSort-CYFyN62U.js.map +1 -0
  87. package/dist/DndSort.css +19 -129
  88. package/dist/DndSort.js +1 -1
  89. package/dist/{Drawer-18QCWW4F.js → Drawer-D_dklfpD.js} +2 -2
  90. package/dist/{Drawer-18QCWW4F.js.map → Drawer-D_dklfpD.js.map} +1 -1
  91. package/dist/Drawer.js +1 -1
  92. package/dist/{EditCard-WV9NqvY2.js → EditCard-f4J7t7CJ.js} +6 -6
  93. package/dist/{EditCard-WV9NqvY2.js.map → EditCard-f4J7t7CJ.js.map} +1 -1
  94. package/dist/EditCard.js +1 -1
  95. package/dist/{Flex-Dvn6ix9U.js → Flex-BJR2T0Jm.js} +2 -2
  96. package/dist/{Flex-Dvn6ix9U.js.map → Flex-BJR2T0Jm.js.map} +1 -1
  97. package/dist/{Flex-CLu2TnzF-aW2OhBYv.js → Flex-D3J8BIR_-C2zh0Ijz.js} +3 -3
  98. package/dist/{Flex-CLu2TnzF-aW2OhBYv.js.map → Flex-D3J8BIR_-C2zh0Ijz.js.map} +1 -1
  99. package/dist/Flex.js +1 -1
  100. package/dist/{Grid-Ck2zeDY5.js → Grid-UUtdRKEw.js} +11 -14
  101. package/dist/Grid-UUtdRKEw.js.map +1 -0
  102. package/dist/Grid-fAy_LSLI.js +14 -0
  103. package/dist/Grid-fAy_LSLI.js.map +1 -0
  104. package/dist/Grid.css +28 -2
  105. package/dist/Grid.js +1 -1
  106. package/dist/{HammerProvider-C9QySDSZ-3uQ0NgD4.js → HammerProvider-BEJW4XcH-DqSojvnV.js} +3 -3
  107. package/dist/{HammerProvider-C9QySDSZ-3uQ0NgD4.js.map → HammerProvider-BEJW4XcH-DqSojvnV.js.map} +1 -1
  108. package/dist/{Icon-DS8qT4VL.js → Icon-B-yv1NsA.js} +2 -2
  109. package/dist/{Icon-DS8qT4VL.js.map → Icon-B-yv1NsA.js.map} +1 -1
  110. package/dist/{Icon-DuwR7O2z-C_rTZRSc.js → Icon-BBWg60pO-Dja0R43O.js} +3 -3
  111. package/dist/{Icon-DuwR7O2z-C_rTZRSc.js.map → Icon-BBWg60pO-Dja0R43O.js.map} +1 -1
  112. package/dist/Icon.js +1 -1
  113. package/dist/{InputMask-CAaKh5xX-n62jt7dp.js → InputMask-AKOc3b38-zx_7dK4s.js} +2 -2
  114. package/dist/{InputMask-CAaKh5xX-n62jt7dp.js.map → InputMask-AKOc3b38-zx_7dK4s.js.map} +1 -1
  115. package/dist/{InputMask-txxn_qIf.js → InputMask-BwZzy1ro.js} +2 -2
  116. package/dist/{InputMask-txxn_qIf.js.map → InputMask-BwZzy1ro.js.map} +1 -1
  117. package/dist/InputMask.js +1 -1
  118. package/dist/{Link-DTjA-qJZ.js → Link-Bi-vl2qx.js} +2 -2
  119. package/dist/{Link-DTjA-qJZ.js.map → Link-Bi-vl2qx.js.map} +1 -1
  120. package/dist/{Link-DIyZHRIV-DPk42hgW.js → Link-DOoU15kC-wEaJlH49.js} +4 -4
  121. package/dist/{Link-DIyZHRIV-DPk42hgW.js.map → Link-DOoU15kC-wEaJlH49.js.map} +1 -1
  122. package/dist/Link.js +1 -1
  123. package/dist/{ListView-DNwkCrxf.js → ListView-CR2XpWrO.js} +4 -4
  124. package/dist/{ListView-DNwkCrxf.js.map → ListView-CR2XpWrO.js.map} +1 -1
  125. package/dist/ListView.js +1 -1
  126. package/dist/{Listbox-eNhS0Wmx.js → Listbox-Ct0GfHqX.js} +2 -2
  127. package/dist/{Listbox-eNhS0Wmx.js.map → Listbox-Ct0GfHqX.js.map} +1 -1
  128. package/dist/{Listbox-DlKyRbri-Dc3ny9gH.js → Listbox-NoAVDANI-Cqjqgppx.js} +5 -5
  129. package/dist/{Listbox-DlKyRbri-Dc3ny9gH.js.map → Listbox-NoAVDANI-Cqjqgppx.js.map} +1 -1
  130. package/dist/Listbox.js +1 -1
  131. package/dist/{LocalizationProvider-BrxC1a2D-BuTo3KlY.js → LocalizationProvider-FkvhW-le-eTJyO1sx.js} +2 -2
  132. package/dist/{LocalizationProvider-BrxC1a2D-BuTo3KlY.js.map → LocalizationProvider-FkvhW-le-eTJyO1sx.js.map} +1 -1
  133. package/dist/LocalizationProvider.js +1 -1
  134. package/dist/{Menu-DvVci7Qr.js → Menu-Br7c8XAk.js} +5 -5
  135. package/dist/{Menu-DvVci7Qr.js.map → Menu-Br7c8XAk.js.map} +1 -1
  136. package/dist/Menu.js +1 -1
  137. package/dist/{Overflow-DDsq_uUA.js → Overflow-TPQZMkIA.js} +2 -2
  138. package/dist/{Overflow-DDsq_uUA.js.map → Overflow-TPQZMkIA.js.map} +1 -1
  139. package/dist/{Overflow-D6S5X1N4-C7YfnaOv.js → Overflow-urnuIZpA-1Bv74Mt5.js} +4 -4
  140. package/dist/{Overflow-D6S5X1N4-C7YfnaOv.js.map → Overflow-urnuIZpA-1Bv74Mt5.js.map} +1 -1
  141. package/dist/Overflow.js +1 -1
  142. package/dist/{Page-BFVfMExj.js → Page-DHMLtw2u.js} +15 -16
  143. package/dist/Page-DHMLtw2u.js.map +1 -0
  144. package/dist/Page.js +1 -1
  145. package/dist/{Popover-CbeghwZg--83MWVgP.js → Popover-B_iz3Kor-VlCc73xa.js} +5 -5
  146. package/dist/{Popover-CbeghwZg--83MWVgP.js.map → Popover-B_iz3Kor-VlCc73xa.js.map} +1 -1
  147. package/dist/{Popover-BbcT-mFU.js → Popover-DFODumkN.js} +2 -2
  148. package/dist/{Popover-BbcT-mFU.js.map → Popover-DFODumkN.js.map} +1 -1
  149. package/dist/Popover.js +1 -1
  150. package/dist/{ProgressBar-OtKoZ_jO.js → ProgressBar-CIgdJEaT.js} +2 -2
  151. package/dist/{ProgressBar-OtKoZ_jO.js.map → ProgressBar-CIgdJEaT.js.map} +1 -1
  152. package/dist/{ProgressBar-DojG9LHF-nlymvlXw.js → ProgressBar-DVZ4c_tz-lVWWEGJ-.js} +38 -31
  153. package/dist/ProgressBar-DVZ4c_tz-lVWWEGJ-.js.map +1 -0
  154. package/dist/{ProgressBar-DojG9LHF.css → ProgressBar-DVZ4c_tz.css} +54 -54
  155. package/dist/ProgressBar.js +1 -1
  156. package/dist/{Radio-BWK27b7p.js → Radio-C2pokxpu.js} +2 -2
  157. package/dist/{Radio-BWK27b7p.js.map → Radio-C2pokxpu.js.map} +1 -1
  158. package/dist/{Radio-BbohS64t-Ch6NvYfF.js → Radio-Dcpe43rP-C__1V-Nc.js} +5 -5
  159. package/dist/{Radio-BbohS64t-Ch6NvYfF.js.map → Radio-Dcpe43rP-C__1V-Nc.js.map} +1 -1
  160. package/dist/Radio.js +1 -1
  161. package/dist/{SearchField-DFYsJWmm.js → SearchField-D9PIWHKX.js} +3 -3
  162. package/dist/{SearchField-DFYsJWmm.js.map → SearchField-D9PIWHKX.js.map} +1 -1
  163. package/dist/SearchField.js +1 -1
  164. package/dist/{SegmentedControl-CcFyiME6.js → SegmentedControl-CYX3cgAa.js} +2 -2
  165. package/dist/{SegmentedControl-CcFyiME6.js.map → SegmentedControl-CYX3cgAa.js.map} +1 -1
  166. package/dist/SegmentedControl.js +1 -1
  167. package/dist/{SelectCardGroup-4MngIOom.js → SelectCard-DUYy3aEL-BVXjCaxz.js} +31 -37
  168. package/dist/SelectCard-DUYy3aEL-BVXjCaxz.js.map +1 -0
  169. package/dist/{SelectCardGroup.css → SelectCard-DUYy3aEL.css} +8 -7
  170. package/dist/SelectCard.js +1 -1
  171. package/dist/SelectCardGroup-ztR701IS.js +21 -0
  172. package/dist/SelectCardGroup-ztR701IS.js.map +1 -0
  173. package/dist/{SideNav-DRlSz_Rw.js → SideNav-bUPGgIKo.js} +3 -3
  174. package/dist/SideNav-bUPGgIKo.js.map +1 -0
  175. package/dist/SideNav.js +1 -1
  176. package/dist/{Skeleton-CS6m62xI.js → Skeleton-DCglZF0L.js} +2 -2
  177. package/dist/{Skeleton-CS6m62xI.js.map → Skeleton-DCglZF0L.js.map} +1 -1
  178. package/dist/Skeleton.js +1 -1
  179. package/dist/{Stepper-CuQn-jSf.js → Stepper-Cg4uBRuW.js} +5 -5
  180. package/dist/{Stepper-CuQn-jSf.js.map → Stepper-Cg4uBRuW.js.map} +1 -1
  181. package/dist/Stepper.js +1 -1
  182. package/dist/{Switch-DhiVhUgr.js → Switch-D_Cvuhz8.js} +3 -3
  183. package/dist/{Switch-DhiVhUgr.js.map → Switch-D_Cvuhz8.js.map} +1 -1
  184. package/dist/Switch.js +1 -1
  185. package/dist/{Tab-1vRtlOFk.js → Tab-BOYJ49rW.js} +3 -3
  186. package/dist/{Tab-1vRtlOFk.js.map → Tab-BOYJ49rW.js.map} +1 -1
  187. package/dist/Tab.js +1 -1
  188. package/dist/{Text-66f6OgUp.js → Text-BNygzvON.js} +2 -2
  189. package/dist/{Text-66f6OgUp.js.map → Text-BNygzvON.js.map} +1 -1
  190. package/dist/{Text-BCRKWTMM-B3ftA79H.js → Text-hQPAQBGP-CEIjvHcA.js} +3 -3
  191. package/dist/{Text-BCRKWTMM-B3ftA79H.js.map → Text-hQPAQBGP-CEIjvHcA.js.map} +1 -1
  192. package/dist/Text.js +1 -1
  193. package/dist/{TextField-Djr02a3D.js → TextField-34U2OcQ4.js} +2 -2
  194. package/dist/{TextField-Djr02a3D.js.map → TextField-34U2OcQ4.js.map} +1 -1
  195. package/dist/{TextField-DtlCGV8B-BPoNBGYn.js → TextField-Cii-Ei9K-Dkia66j2.js} +3 -3
  196. package/dist/{TextField-DtlCGV8B-BPoNBGYn.js.map → TextField-Cii-Ei9K-Dkia66j2.js.map} +1 -1
  197. package/dist/TextField.js +1 -1
  198. package/dist/{Textarea-DjqGI_N0.js → Textarea-CYWnwdau.js} +3 -3
  199. package/dist/{Textarea-DjqGI_N0.js.map → Textarea-CYWnwdau.js.map} +1 -1
  200. package/dist/Textarea.js +1 -1
  201. package/dist/{ThemeProvider-DrK12Ru--CcKMzgE3.js → ThemeProvider-BIeaAmWx-B782UArj.js} +3 -3
  202. package/dist/{ThemeProvider-DrK12Ru--CcKMzgE3.js.map → ThemeProvider-BIeaAmWx-B782UArj.js.map} +1 -1
  203. package/dist/{ThemeProvider-CPGnKr9R.js → ThemeProvider-CkgwRESr.js} +2 -2
  204. package/dist/{ThemeProvider-CPGnKr9R.js.map → ThemeProvider-CkgwRESr.js.map} +1 -1
  205. package/dist/ThemeProvider.js +1 -1
  206. package/dist/Toast.js +1 -1
  207. package/dist/{Toolbar-DiUrfZ4O.js → Toolbar-9qQBNIEv.js} +10 -10
  208. package/dist/{Toolbar-DiUrfZ4O.js.map → Toolbar-9qQBNIEv.js.map} +1 -1
  209. package/dist/Toolbar.js +1 -1
  210. package/dist/{Tooltip-DE8tqyR3.js → Tooltip-C1l9sOpR.js} +2 -2
  211. package/dist/{Tooltip-DE8tqyR3.js.map → Tooltip-C1l9sOpR.js.map} +1 -1
  212. package/dist/Tooltip.js +1 -1
  213. package/dist/components/Calendar/Calendar.d.ts +9 -3
  214. package/dist/components/Dnd/index.d.ts +1 -0
  215. package/dist/components/Flex/Flex.d.ts +6 -0
  216. package/dist/components/Grid/Grid.d.ts +3 -1
  217. package/dist/components/index.d.ts +1 -0
  218. package/dist/index-BOekhwqw-Taf40KX_.js +106 -0
  219. package/dist/index-BOekhwqw-Taf40KX_.js.map +1 -0
  220. package/dist/index-BOekhwqw.css +121 -0
  221. package/dist/index.js +54 -53
  222. package/dist/index.js.map +1 -1
  223. package/dist/keyboard_arrow_up-CxzK6LAl.js +6 -0
  224. package/dist/keyboard_arrow_up-CxzK6LAl.js.map +1 -0
  225. package/dist/{toast-BRfZ2rPu.js → toast-VLrmyQji.js} +2 -2
  226. package/dist/{toast-BRfZ2rPu.js.map → toast-VLrmyQji.js.map} +1 -1
  227. package/dist/{useLayoutPropsUtil-3B2XYWSr-5ZanZ8Ew.js → useLayoutPropsUtil-GT5myWCm-Cgn7OEq9.js} +2 -2
  228. package/dist/useLayoutPropsUtil-GT5myWCm-Cgn7OEq9.js.map +1 -0
  229. package/dist/useLinkStyles.js +1 -1
  230. package/package.json +3 -3
  231. package/dist/Calendar-DFbt6fWP.js +0 -38
  232. package/dist/Calendar-DFbt6fWP.js.map +0 -1
  233. package/dist/Combobox-VCa5Qplb.js.map +0 -1
  234. package/dist/DateField-Ex0bquMB.js.map +0 -1
  235. package/dist/DndSort-BVcdqJLB.js.map +0 -1
  236. package/dist/Grid-Ck2zeDY5.js.map +0 -1
  237. package/dist/Page-BFVfMExj.js.map +0 -1
  238. package/dist/ProgressBar-DojG9LHF-nlymvlXw.js.map +0 -1
  239. package/dist/SelectCardGroup-4MngIOom.js.map +0 -1
  240. package/dist/SideNav-DRlSz_Rw.js.map +0 -1
  241. package/dist/useLayoutPropsUtil-3B2XYWSr-5ZanZ8Ew.js.map +0 -1
  242. /package/dist/{Alert-BcjnX40X.css → Alert-Dgaqfx1H.css} +0 -0
  243. /package/dist/{Card-DukbBYaA.css → Card-Ct_7fGY7.css} +0 -0
  244. /package/dist/{Chip-BQOzhPQv.css → Chip-Cew3VCIu.css} +0 -0
  245. /package/dist/{Flex-CLu2TnzF.css → Flex-D3J8BIR_.css} +0 -0
  246. /package/dist/{Icon-DuwR7O2z.css → Icon-BBWg60pO.css} +0 -0
  247. /package/dist/{Link-DIyZHRIV.css → Link-DOoU15kC.css} +0 -0
  248. /package/dist/{Overflow-D6S5X1N4.css → Overflow-urnuIZpA.css} +0 -0
  249. /package/dist/{Popover-CbeghwZg.css → Popover-B_iz3Kor.css} +0 -0
  250. /package/dist/{Radio-BbohS64t.css → Radio-Dcpe43rP.css} +0 -0
  251. /package/dist/{Text-BCRKWTMM.css → Text-hQPAQBGP.css} +0 -0
  252. /package/dist/{ThemeProvider-DrK12Ru-.css → ThemeProvider-BIeaAmWx.css} +0 -0
@@ -1,13 +1,18 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { forwardRef, useRef, useCallback, useEffect, useId, useState, useMemo, createContext, useContext } from 'react';
4
- import { B as Button } from './Button-CEDmdZ-2-DJVJnigb.js';
3
+ import { forwardRef, useRef, useCallback, useEffect, useState, useId, useMemo, createContext, useContext, useLayoutEffect } from 'react';
5
4
  import { c as cx } from './index-tZvMCc77.js';
6
5
  import { S as SrOnly } from './SrOnly-BXm1DGl3-BJVodjQp.js';
7
6
  import { u as useSwipe } from './useSwipe-DIUHs7T5-DIUHs7T5.js';
8
- import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-3B2XYWSr-5ZanZ8Ew.js';
7
+ import { G as Grid } from './Grid-UUtdRKEw.js';
8
+ import { a as SelectCard } from './SelectCard-DUYy3aEL-BVXjCaxz.js';
9
+ import { u as useMergeRefs } from './useMergeRefs-Bde85AWI-Bde85AWI.js';
10
+ import { B as Button } from './Button-DbVpPjA8-CRQ01IJx.js';
11
+ import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
12
+ import { S as SvgKeyboardArrowUp } from './keyboard_arrow_up-CxzK6LAl.js';
13
+ import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-GT5myWCm-Cgn7OEq9.js';
9
14
 
10
- import './Calendar-ch54N6OS.css';// these aren't really private, but nor are they really useful to document
15
+ import './Calendar-C3dudrjk.css';// these aren't really private, but nor are they really useful to document
11
16
 
12
17
  /**
13
18
  * @private
@@ -7990,41 +7995,73 @@ function friendlyDateTime(dateTimeish) {
7990
7995
  }
7991
7996
  }
7992
7997
 
7993
- const SvgKeyboardArrowRight = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M9.29 15.88 13.17 12 9.29 8.12a.996.996 0 1 1 1.41-1.41l4.59 4.59c.39.39.39 1.02 0 1.41L10.7 17.3a.996.996 0 0 1-1.41 0c-.38-.39-.39-1.03 0-1.42z" }));
7994
-
7995
7998
  const SvgKeyboardArrowLeft = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M14.71 15.88 10.83 12l3.88-3.88a.996.996 0 1 0-1.41-1.41L8.71 11.3a.996.996 0 0 0 0 1.41l4.59 4.59c.39.39 1.02.39 1.41 0 .38-.39.39-1.03 0-1.42z" }));
7996
7999
 
7997
- const calendar = "_calendar_1qrj0_3";
7998
- const header = "_header_1qrj0_16";
7999
- const heading = "_heading_1qrj0_41";
8000
- const controller = "_controller_1qrj0_47";
8001
- const spacer = "_spacer_1qrj0_55";
8002
- const cell = "_cell_1qrj0_68";
8003
- const overflow = "_overflow_1qrj0_99";
8004
- const weekday = "_weekday_1qrj0_105";
8005
- const range = "_range_1qrj0_130";
8006
- const selected = "_selected_1qrj0_140";
8000
+ const SvgKeyboardArrowRight = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M9.29 15.88 13.17 12 9.29 8.12a.996.996 0 1 1 1.41-1.41l4.59 4.59c.39.39.39 1.02 0 1.41L10.7 17.3a.996.996 0 0 1-1.41 0c-.38-.39-.39-1.03 0-1.42z" }));
8001
+
8002
+ const calendar = "_calendar_otkxo_3";
8003
+ const header = "_header_otkxo_16";
8004
+ const controller = "_controller_otkxo_47";
8005
+ const spacer = "_spacer_otkxo_54";
8006
+ const cell = "_cell_otkxo_67";
8007
+ const overflow = "_overflow_otkxo_98";
8008
+ const weekday = "_weekday_otkxo_104";
8009
+ const range = "_range_otkxo_149";
8010
+ const selected = "_selected_otkxo_159";
8007
8011
  const styles = {
8008
8012
  calendar: calendar,
8009
8013
  header: header,
8010
- heading: heading,
8011
8014
  controller: controller,
8012
8015
  spacer: spacer,
8013
- "day-grid": "_day-grid_1qrj0_58",
8016
+ "day-grid": "_day-grid_otkxo_57",
8014
8017
  cell: cell,
8015
8018
  overflow: overflow,
8016
8019
  weekday: weekday,
8017
- "range-first": "_range-first_1qrj0_130",
8018
- "range-last": "_range-last_1qrj0_130",
8020
+ "month-selection": "_month-selection_otkxo_116",
8021
+ "selection-checkbox": "_selection-checkbox_otkxo_116",
8022
+ "year-selection": "_year-selection_otkxo_117",
8023
+ "selection-card": "_selection-card_otkxo_126",
8024
+ "range-first": "_range-first_otkxo_149",
8025
+ "range-last": "_range-last_otkxo_149",
8019
8026
  range: range,
8020
8027
  selected: selected,
8021
- "is-unavailable": "_is-unavailable_1qrj0_148",
8022
- "hover-last": "_hover-last_1qrj0_206",
8023
- "range-fill": "_range-fill_1qrj0_210",
8024
- "range-disabled": "_range-disabled_1qrj0_220",
8025
- "controller-button": "_controller-button_1qrj0_228"
8028
+ "is-unavailable": "_is-unavailable_otkxo_167",
8029
+ "hover-last": "_hover-last_otkxo_225",
8030
+ "range-fill": "_range-fill_otkxo_229",
8031
+ "range-disabled": "_range-disabled_otkxo_239",
8032
+ "controller-button": "_controller-button_otkxo_247"
8026
8033
  };
8027
8034
 
8035
+ const CalendarContext = createContext(null);
8036
+ function useCalendar() {
8037
+ const context = useContext(CalendarContext);
8038
+ if (!context) {
8039
+ throw new Error("useCalendar must be used within a <Calendar>");
8040
+ }
8041
+ return context;
8042
+ }
8043
+
8044
+ const CalendarMonthButton = forwardRef((props, ref) => {
8045
+ const { calendarSelectionState, onClick, ...rest } = props;
8046
+ const { selectedMonth, locale } = useCalendar();
8047
+ const currentMonth = DateTime.fromObject({ month: selectedMonth }).setLocale(locale).toFormat("MMM");
8048
+ return /* @__PURE__ */ jsx(
8049
+ Button,
8050
+ {
8051
+ ref,
8052
+ appearance: "ghost",
8053
+ size: "small",
8054
+ onClick,
8055
+ icon: {
8056
+ after: calendarSelectionState === "month" ? SvgKeyboardArrowUp : SvgKeyboardArrowDown
8057
+ },
8058
+ ...rest,
8059
+ children: currentMonth
8060
+ }
8061
+ );
8062
+ });
8063
+ CalendarMonthButton.displayName = "CalendarMonthButton";
8064
+
8028
8065
  const isSameDay = (d1, d2) => {
8029
8066
  if (!d1 || !d2) return void 0;
8030
8067
  try {
@@ -8121,81 +8158,201 @@ function rangeUpdater(value, newDate, setValue, onSelection) {
8121
8158
  }
8122
8159
  }
8123
8160
 
8124
- const CalendarPrev = forwardRef(
8125
- (props, ref) => {
8126
- const { onClick, className, ...rest } = props;
8127
- const { focusedDate, setFocusedDate, minDate } = useCalendar();
8128
- const onClickHandler = (e) => {
8129
- onClick?.(e);
8130
- const targetMonth = focusedDate.minus({ month: 1 }).endOf("month");
8131
- const targetDate = focusedDate.minus({ month: 1 });
8132
- if (minDate !== null) {
8133
- if (targetDate.toMillis() >= minDate?.toMillis()) {
8134
- setFocusedDate(targetDate);
8135
- return;
8136
- }
8137
- if (!isSameMonth(targetMonth, focusedDate)) {
8138
- setFocusedDate(minDate);
8161
+ const CalendarNextButton = forwardRef((props, ref) => {
8162
+ const { onClick, className, ...rest } = props;
8163
+ const {
8164
+ focusedDate,
8165
+ setFocusedDate,
8166
+ maxDate,
8167
+ setSelectedMonth,
8168
+ setSelectedYear
8169
+ } = useCalendar();
8170
+ const [disabled, setDisabled] = useState(false);
8171
+ useEffect(() => {
8172
+ setDisabled(
8173
+ maxDate != null && focusedDate.plus({ month: 1 }).startOf("month") > maxDate
8174
+ );
8175
+ }, [maxDate, focusedDate]);
8176
+ const onClickHandler = (e) => {
8177
+ onClick?.(e);
8178
+ const targetMonth = focusedDate.plus({ month: 1 }).startOf("month");
8179
+ const targetDate = focusedDate.plus({ month: 1 });
8180
+ const isCrossingYearBoundary = focusedDate.month === 12 && targetDate.month === 1;
8181
+ if (maxDate !== null) {
8182
+ if (targetDate.toMillis() <= maxDate?.toMillis()) {
8183
+ setFocusedDate(targetDate);
8184
+ setSelectedMonth(targetDate.month);
8185
+ if (isCrossingYearBoundary) {
8186
+ setSelectedYear(targetDate.year);
8139
8187
  }
8140
8188
  return;
8141
8189
  }
8142
- setFocusedDate(targetDate);
8143
- };
8144
- return /* @__PURE__ */ jsx(
8145
- Button,
8146
- {
8147
- ref,
8148
- onClick: onClickHandler,
8149
- className: cx(styles["controller-button"], className),
8150
- appearance: "ghost",
8151
- size: "small",
8152
- icon: SvgKeyboardArrowLeft,
8153
- "data-anv": "calendar-prev",
8154
- "aria-label": "Previous Month",
8155
- ...rest
8190
+ if (!isSameMonth(targetMonth, focusedDate)) {
8191
+ setFocusedDate(maxDate);
8192
+ setSelectedMonth(maxDate.month);
8193
+ if (isCrossingYearBoundary) {
8194
+ setSelectedYear(maxDate.year);
8195
+ }
8196
+ }
8197
+ return;
8198
+ }
8199
+ setFocusedDate(targetDate);
8200
+ setSelectedMonth(targetDate.month);
8201
+ if (isCrossingYearBoundary) {
8202
+ setSelectedYear(targetDate.year);
8203
+ }
8204
+ };
8205
+ return /* @__PURE__ */ jsx(
8206
+ Button,
8207
+ {
8208
+ onClick: onClickHandler,
8209
+ appearance: "ghost",
8210
+ size: "small",
8211
+ className: cx(styles["controller-button"], className),
8212
+ icon: SvgKeyboardArrowRight,
8213
+ "aria-label": "Next Month",
8214
+ "data-anv": "calendar-next",
8215
+ ref,
8216
+ ...rest,
8217
+ disabled
8218
+ }
8219
+ );
8220
+ });
8221
+ CalendarNextButton.displayName = "CalendarNextButton";
8222
+
8223
+ const CalendarNowButton = forwardRef((props, ref) => {
8224
+ const { onClick, ...rest } = props;
8225
+ const {
8226
+ setFocusedDate,
8227
+ setSelectedMonth,
8228
+ setSelectedYear,
8229
+ value,
8230
+ setValue,
8231
+ defaultTimeZone,
8232
+ unavailableDates,
8233
+ unavailable,
8234
+ onSelection,
8235
+ minDate,
8236
+ maxDate,
8237
+ controlled,
8238
+ range
8239
+ } = useCalendar();
8240
+ const nToday = DateTime.fromISO(DateTime.now().toISO(), {
8241
+ zone: defaultTimeZone
8242
+ }).startOf("day");
8243
+ const onClickHandler = () => {
8244
+ setFocusedDate(nToday);
8245
+ setSelectedMonth(nToday.month);
8246
+ setSelectedYear(nToday.year);
8247
+ if (!range) {
8248
+ onSelection?.({
8249
+ value: toDateString(nToday) ?? void 0
8250
+ });
8251
+ if (!controlled) {
8252
+ setValue(nToday);
8156
8253
  }
8254
+ return;
8255
+ }
8256
+ rangeUpdater(value, nToday, setValue, onSelection);
8257
+ };
8258
+ const isDisabled = isBeyondMaxDate(nToday, maxDate) || isBeyondMinDate(nToday, minDate) || isUnavailableDate(nToday, unavailableDates, unavailable, defaultTimeZone);
8259
+ return /* @__PURE__ */ jsx(
8260
+ Button,
8261
+ {
8262
+ ref,
8263
+ onClick: onClickHandler,
8264
+ appearance: "ghost",
8265
+ disabled: isDisabled,
8266
+ "data-anv": "calendar-now",
8267
+ size: "small",
8268
+ ...rest,
8269
+ children: "Today"
8270
+ }
8271
+ );
8272
+ });
8273
+ CalendarNowButton.displayName = "CalendarNowButton";
8274
+
8275
+ const CalendarPrevButton = forwardRef((props, ref) => {
8276
+ const { onClick, className, ...rest } = props;
8277
+ const {
8278
+ focusedDate,
8279
+ setFocusedDate,
8280
+ minDate,
8281
+ setSelectedMonth,
8282
+ setSelectedYear
8283
+ } = useCalendar();
8284
+ const [disabled, setDisabled] = useState(false);
8285
+ useEffect(() => {
8286
+ setDisabled(
8287
+ minDate != null && focusedDate.minus({ month: 1 }).endOf("month") < minDate
8157
8288
  );
8158
- }
8159
- );
8160
- CalendarPrev.displayName = "CalendarPrev";
8161
-
8162
- const CalendarNext = forwardRef(
8163
- (props, ref) => {
8164
- const { onClick, className, ...rest } = props;
8165
- const { focusedDate, setFocusedDate, maxDate } = useCalendar();
8166
- const onClickHandler = (e) => {
8167
- onClick?.(e);
8168
- const targetMonth = focusedDate.plus({ month: 1 }).startOf("month");
8169
- const targetDate = focusedDate.plus({ month: 1 });
8170
- if (maxDate !== null) {
8171
- if (targetDate.toMillis() <= maxDate?.toMillis()) {
8172
- setFocusedDate(targetDate);
8173
- return;
8174
- }
8175
- if (!isSameMonth(targetMonth, focusedDate)) {
8176
- setFocusedDate(maxDate);
8289
+ }, [minDate, focusedDate]);
8290
+ const onClickHandler = (e) => {
8291
+ onClick?.(e);
8292
+ const targetMonth = focusedDate.minus({ month: 1 }).endOf("month");
8293
+ const targetDate = focusedDate.minus({ month: 1 });
8294
+ const isCrossingYearBoundary = focusedDate.month === 1 && targetDate.month === 12;
8295
+ if (minDate !== null) {
8296
+ if (targetDate.toMillis() >= minDate?.toMillis()) {
8297
+ setFocusedDate(targetDate);
8298
+ setSelectedMonth(targetDate.month);
8299
+ if (isCrossingYearBoundary) {
8300
+ setSelectedYear(targetDate.year);
8177
8301
  }
8178
8302
  return;
8179
8303
  }
8180
- setFocusedDate(targetDate);
8181
- };
8182
- return /* @__PURE__ */ jsx(
8183
- Button,
8184
- {
8185
- onClick: onClickHandler,
8186
- appearance: "ghost",
8187
- size: "small",
8188
- className: cx(styles["controller-button"], className),
8189
- icon: SvgKeyboardArrowRight,
8190
- "aria-label": "Next Month",
8191
- "data-anv": "calendar-next",
8192
- ref,
8193
- ...rest
8304
+ if (!isSameMonth(targetMonth, focusedDate)) {
8305
+ setFocusedDate(minDate);
8306
+ setSelectedMonth(minDate.month);
8307
+ if (isCrossingYearBoundary) {
8308
+ setSelectedYear(minDate.year);
8309
+ }
8194
8310
  }
8195
- );
8196
- }
8197
- );
8198
- CalendarNext.displayName = "CalendarNext";
8311
+ return;
8312
+ }
8313
+ setFocusedDate(targetDate);
8314
+ setSelectedMonth(targetDate.month);
8315
+ if (isCrossingYearBoundary) {
8316
+ setSelectedYear(targetDate.year);
8317
+ }
8318
+ };
8319
+ return /* @__PURE__ */ jsx(
8320
+ Button,
8321
+ {
8322
+ ref,
8323
+ onClick: onClickHandler,
8324
+ className: cx(styles["controller-button"], className),
8325
+ appearance: "ghost",
8326
+ size: "small",
8327
+ icon: SvgKeyboardArrowLeft,
8328
+ "data-anv": "calendar-prev",
8329
+ "aria-label": "Previous Month",
8330
+ ...rest,
8331
+ disabled
8332
+ }
8333
+ );
8334
+ });
8335
+ CalendarPrevButton.displayName = "CalendarPrevButton";
8336
+
8337
+ const CalendarYearButton = forwardRef((props, ref) => {
8338
+ const { calendarSelectionState, ...rest } = props;
8339
+ const { selectedYear, locale } = useCalendar();
8340
+ const currentYear = DateTime.fromObject({ year: selectedYear }).setLocale(locale).toLocaleString({ year: "numeric" });
8341
+ return /* @__PURE__ */ jsx(
8342
+ Button,
8343
+ {
8344
+ ref,
8345
+ appearance: "ghost",
8346
+ size: "small",
8347
+ icon: {
8348
+ after: calendarSelectionState === "year" ? SvgKeyboardArrowUp : SvgKeyboardArrowDown
8349
+ },
8350
+ ...rest,
8351
+ children: currentYear
8352
+ }
8353
+ );
8354
+ });
8355
+ CalendarYearButton.displayName = "CalendarYearButton";
8199
8356
 
8200
8357
  const CalendarDay = forwardRef(
8201
8358
  (props, ref) => {
@@ -8219,7 +8376,9 @@ const CalendarDay = forwardRef(
8219
8376
  id: uid,
8220
8377
  range,
8221
8378
  dateFormat,
8222
- startDay
8379
+ startDay,
8380
+ setSelectedMonth,
8381
+ setSelectedYear
8223
8382
  } = context;
8224
8383
  const initialized = useRef(false);
8225
8384
  const futureDateSelection = useCallback(
@@ -8253,7 +8412,14 @@ const CalendarDay = forwardRef(
8253
8412
  return;
8254
8413
  }
8255
8414
  setFocusedDate(targetDate);
8415
+ if (targetDate.month !== focusedDate.month) {
8416
+ setSelectedMonth(targetDate.month);
8417
+ if (targetDate.year !== focusedDate.year) {
8418
+ setSelectedYear(targetDate.year);
8419
+ }
8420
+ }
8256
8421
  },
8422
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- we don't need to re-render when the selected month or year changes
8257
8423
  [maxDate, setFocusedDate, defaultTimeZone, unavailableDates, unavailable]
8258
8424
  );
8259
8425
  const pastDateSelection = (targetDate) => {
@@ -8286,6 +8452,12 @@ const CalendarDay = forwardRef(
8286
8452
  return;
8287
8453
  }
8288
8454
  setFocusedDate(targetDate);
8455
+ if (targetDate.month !== focusedDate.month) {
8456
+ setSelectedMonth(targetDate.month);
8457
+ if (targetDate.year !== focusedDate.year) {
8458
+ setSelectedYear(targetDate.year);
8459
+ }
8460
+ }
8289
8461
  };
8290
8462
  const isSelectedDate = (date2, compareDate) => {
8291
8463
  if (!range) {
@@ -8311,7 +8483,9 @@ const CalendarDay = forwardRef(
8311
8483
  case "Enter":
8312
8484
  e.preventDefault();
8313
8485
  if (!range) {
8314
- !controlled && setValue(isSameDay(value, focusedDate) ? null : focusedDate);
8486
+ if (!controlled) {
8487
+ setValue(isSameDay(value, focusedDate) ? null : focusedDate);
8488
+ }
8315
8489
  onSelection?.({
8316
8490
  value: isSameDay(value, focusedDate) ? void 0 : focusedDate.setZone(defaultTimeZone).startOf("day").toISO() ?? void 0
8317
8491
  });
@@ -8380,7 +8554,9 @@ const CalendarDay = forwardRef(
8380
8554
  onSelection?.({
8381
8555
  value: toDateString(d.setZone(defaultTimeZone)) ?? void 0
8382
8556
  });
8383
- !controlled && setValue(d);
8557
+ if (!controlled) {
8558
+ setValue(d);
8559
+ }
8384
8560
  return;
8385
8561
  }
8386
8562
  rangeUpdater(value, d, setValue, onSelection);
@@ -8771,60 +8947,288 @@ const CalendarMonth = forwardRef(
8771
8947
  );
8772
8948
  CalendarMonth.displayName = "CalendarMonth";
8773
8949
 
8774
- const CalendarNow = forwardRef(
8775
- (props, ref) => {
8776
- const { onClick, ...rest } = props;
8777
- const {
8778
- setFocusedDate,
8779
- value,
8780
- setValue,
8781
- defaultTimeZone,
8782
- unavailableDates,
8783
- unavailable,
8784
- onSelection,
8785
- minDate,
8786
- maxDate,
8787
- controlled,
8788
- range
8789
- } = useCalendar();
8790
- const nToday = DateTime.fromISO(DateTime.now().toISO(), {
8791
- zone: defaultTimeZone
8792
- }).startOf("day");
8793
- const onClickHandler = (e) => {
8794
- setFocusedDate(nToday);
8795
- if (!range) {
8796
- onSelection?.({
8797
- value: toDateString(nToday) ?? void 0
8798
- });
8799
- !controlled && setValue(nToday);
8950
+ const CalendarMonthSelection = forwardRef(({ onMonthSelection, ...props }, ref) => {
8951
+ const { defaultTimeZone, maxDate, minDate, selectedMonth, selectedYear } = useCalendar();
8952
+ const monthSelectionRef = useRef(null);
8953
+ const combinedRef = useMergeRefs([ref, monthSelectionRef]);
8954
+ const currentDate = useMemo(
8955
+ () => DateTime.fromObject({ year: selectedYear, month: selectedMonth }).setZone(defaultTimeZone).startOf("day"),
8956
+ [defaultTimeZone, selectedYear, selectedMonth]
8957
+ );
8958
+ const dates = useMemo(
8959
+ () => Array.from({ length: 12 }, (_, i) => {
8960
+ const date = DateTime.fromObject({
8961
+ year: selectedYear,
8962
+ month: 1
8963
+ }).plus({
8964
+ month: i
8965
+ });
8966
+ const disabled = minDate && date < minDate || maxDate && date > maxDate;
8967
+ return {
8968
+ month: date.month,
8969
+ disabled: disabled ?? false
8970
+ };
8971
+ }),
8972
+ [maxDate, minDate, selectedYear]
8973
+ );
8974
+ const classes = cx(styles["month-selection"], props.className);
8975
+ const [focusedIndex, setFocusedIndex] = useState(selectedMonth - 1);
8976
+ useEffect(() => {
8977
+ if (minDate || maxDate) {
8978
+ let index = dates.findIndex(({ month }) => month === selectedMonth);
8979
+ while (dates[index].disabled && index < 11) {
8980
+ index++;
8981
+ }
8982
+ setFocusedIndex(index);
8983
+ } else {
8984
+ setFocusedIndex(selectedMonth - 1);
8985
+ }
8986
+ }, [selectedMonth, minDate, maxDate, dates]);
8987
+ const handleKeyDown = useCallback(
8988
+ (e) => {
8989
+ const target = e.target;
8990
+ const cards = monthSelectionRef.current?.querySelectorAll(
8991
+ "input[type='checkbox']"
8992
+ );
8993
+ if (!cards || cards.length === 0) {
8800
8994
  return;
8801
8995
  }
8802
- rangeUpdater(value, nToday, setValue, onSelection);
8996
+ const cardArray = Array.from(cards);
8997
+ const currentIndex = cardArray.indexOf(target);
8998
+ if (currentIndex === -1) return;
8999
+ const updateFocusedIndex = (index) => {
9000
+ e.preventDefault();
9001
+ cardArray[index].focus();
9002
+ setFocusedIndex(index);
9003
+ };
9004
+ let newIndex;
9005
+ switch (e.key) {
9006
+ case "ArrowLeft":
9007
+ newIndex = currentIndex > 0 ? currentIndex - 1 : 11;
9008
+ while (dates[newIndex].disabled) {
9009
+ newIndex = newIndex > 0 ? newIndex - 1 : 11;
9010
+ }
9011
+ updateFocusedIndex(newIndex);
9012
+ break;
9013
+ case "ArrowRight":
9014
+ newIndex = currentIndex < 11 ? currentIndex + 1 : 0;
9015
+ while (dates[newIndex].disabled) {
9016
+ newIndex = newIndex < 11 ? newIndex + 1 : 0;
9017
+ }
9018
+ updateFocusedIndex(newIndex);
9019
+ break;
9020
+ case "ArrowUp":
9021
+ if (currentIndex < 3) {
9022
+ newIndex = currentIndex + 9;
9023
+ } else {
9024
+ newIndex = currentIndex - 3;
9025
+ }
9026
+ while (dates[newIndex].disabled) {
9027
+ if (newIndex > 2) {
9028
+ newIndex -= 3;
9029
+ } else {
9030
+ newIndex += 9;
9031
+ }
9032
+ }
9033
+ updateFocusedIndex(newIndex);
9034
+ break;
9035
+ case "ArrowDown":
9036
+ if (currentIndex > 8) {
9037
+ newIndex = currentIndex - 9;
9038
+ } else {
9039
+ newIndex = currentIndex + 3;
9040
+ }
9041
+ while (dates[newIndex].disabled) {
9042
+ if (newIndex < 9) {
9043
+ newIndex += 3;
9044
+ } else {
9045
+ newIndex -= 9;
9046
+ }
9047
+ }
9048
+ updateFocusedIndex(newIndex);
9049
+ break;
9050
+ case "Enter":
9051
+ case " ":
9052
+ e.preventDefault();
9053
+ if (!dates[currentIndex].disabled) {
9054
+ onMonthSelection(dates[currentIndex].month);
9055
+ }
9056
+ break;
9057
+ }
9058
+ },
9059
+ [dates, onMonthSelection]
9060
+ );
9061
+ return /* @__PURE__ */ jsx(
9062
+ "div",
9063
+ {
9064
+ ref: combinedRef,
9065
+ "data-anv": "calendar-month-selection",
9066
+ className: classes,
9067
+ ...props,
9068
+ children: /* @__PURE__ */ jsx("div", { role: "grid", "aria-label": "Calendar month selection", children: /* @__PURE__ */ jsx(
9069
+ Grid,
9070
+ {
9071
+ templateColumns: "repeat(3, minmax(0, 1fr))",
9072
+ gap: 3,
9073
+ onKeyDown: handleKeyDown,
9074
+ role: "row",
9075
+ children: dates.map(({ month, disabled }, index) => /* @__PURE__ */ jsx("div", { role: "gridcell", children: /* @__PURE__ */ jsx(
9076
+ SelectCard,
9077
+ {
9078
+ id: month.toString(),
9079
+ disabled,
9080
+ onChange: () => onMonthSelection(month),
9081
+ checked: selectedMonth === month && selectedYear === currentDate.year,
9082
+ checkboxProps: {
9083
+ className: styles["selection-checkbox"],
9084
+ tabIndex: focusedIndex === index ? 0 : -1
9085
+ },
9086
+ className: styles["selection-card"],
9087
+ children: DateTime.fromObject({ month }).toFormat("MMMM")
9088
+ }
9089
+ ) }, month.toString()))
9090
+ }
9091
+ ) })
9092
+ }
9093
+ );
9094
+ });
9095
+ CalendarMonthSelection.displayName = "CalendarMonthSelection";
9096
+
9097
+ const CalendarYearSelection = forwardRef(({ onYearSelection, ...props }, ref) => {
9098
+ const { maxDate, minDate, selectedYear } = useCalendar();
9099
+ const containerRef = useRef(null);
9100
+ const combinedRef = useMergeRefs([ref, containerRef]);
9101
+ const initialYears = useMemo(
9102
+ () => Array.from({ length: 52 }, (_, i) => {
9103
+ const year = selectedYear - (selectedYear % 2 ? 24 : 25) + i;
9104
+ const disabled = minDate && year < minDate.year || maxDate && year > maxDate.year;
9105
+ return { year, disabled: disabled ?? false };
9106
+ }),
9107
+ [selectedYear, minDate, maxDate]
9108
+ );
9109
+ const [dates, setDates] = useState(initialYears);
9110
+ useLayoutEffect(() => {
9111
+ containerRef.current?.scrollTo({
9112
+ top: (containerRef.current?.scrollHeight ?? 0) / 2 - (containerRef.current?.clientHeight ?? 0) / 2
9113
+ });
9114
+ const container = containerRef.current;
9115
+ if (!container) return;
9116
+ const handleScroll = () => {
9117
+ const { scrollTop, scrollHeight, clientHeight } = container;
9118
+ const distanceFromTop = scrollTop;
9119
+ const distanceFromBottom = scrollHeight - scrollTop - clientHeight;
9120
+ if (distanceFromTop < 200 && !minDate) {
9121
+ setDates((prevDates) => {
9122
+ const firstYear = prevDates[0].year;
9123
+ const newDates = Array.from({ length: 20 }, (_, i) => ({
9124
+ year: firstYear - (20 - i),
9125
+ disabled: false
9126
+ }));
9127
+ return [...newDates, ...prevDates];
9128
+ });
9129
+ } else if (distanceFromBottom < 200 && !maxDate) {
9130
+ setDates((prevDates) => {
9131
+ const lastYear = prevDates[prevDates.length - 1].year;
9132
+ const newDates = Array.from({ length: 20 }, (_, i) => ({
9133
+ year: lastYear + (i + 1),
9134
+ disabled: false
9135
+ }));
9136
+ return [...prevDates, ...newDates];
9137
+ });
9138
+ }
8803
9139
  };
8804
- const isDisabled = isBeyondMaxDate(nToday, maxDate) || isBeyondMinDate(nToday, minDate) || isUnavailableDate(nToday, unavailableDates, unavailable, defaultTimeZone);
8805
- return /* @__PURE__ */ jsx(
8806
- Button,
8807
- {
8808
- ref,
8809
- onClick: onClickHandler,
8810
- appearance: "secondary",
8811
- disabled: isDisabled,
8812
- "data-anv": "calendar-now",
8813
- size: "small",
8814
- ...rest,
8815
- children: "Today"
9140
+ container.addEventListener("scroll", handleScroll);
9141
+ return () => container.removeEventListener("scroll", handleScroll);
9142
+ }, [minDate, maxDate]);
9143
+ const classes = cx(styles["year-selection"], props.className);
9144
+ const [focusedIndex, setFocusedIndex] = useState(
9145
+ // start focused on the middle of the year selection, with odd numbers on the left
9146
+ selectedYear % 2 ? 24 : 25
9147
+ );
9148
+ const handleKeyDown = useCallback(
9149
+ (e) => {
9150
+ const target = e.target;
9151
+ const cards = containerRef.current?.querySelectorAll(
9152
+ "input[type='checkbox']"
9153
+ );
9154
+ if (!cards || cards.length === 0) {
9155
+ return;
8816
9156
  }
8817
- );
8818
- }
8819
- );
8820
- CalendarNow.displayName = "CalendarNow";
9157
+ const cardArray = Array.from(cards);
9158
+ const currentIndex = cardArray.indexOf(target);
9159
+ if (currentIndex === -1) return;
9160
+ const updateFocusedIndex = (index) => {
9161
+ e.preventDefault();
9162
+ cardArray[index].focus();
9163
+ setFocusedIndex(index);
9164
+ };
9165
+ switch (e.key) {
9166
+ case "ArrowLeft":
9167
+ updateFocusedIndex(currentIndex - 1);
9168
+ break;
9169
+ case "ArrowRight":
9170
+ updateFocusedIndex(currentIndex + 1);
9171
+ break;
9172
+ case "ArrowUp":
9173
+ updateFocusedIndex(currentIndex - 2);
9174
+ break;
9175
+ case "ArrowDown":
9176
+ updateFocusedIndex(currentIndex + 2);
9177
+ break;
9178
+ case "Enter":
9179
+ case " ":
9180
+ e.preventDefault();
9181
+ onYearSelection(dates[currentIndex].year);
9182
+ break;
9183
+ }
9184
+ },
9185
+ [dates, onYearSelection]
9186
+ );
9187
+ return /* @__PURE__ */ jsx(
9188
+ "div",
9189
+ {
9190
+ ref: combinedRef,
9191
+ "data-anv": "calendar-year-selection",
9192
+ className: classes,
9193
+ ...props,
9194
+ children: /* @__PURE__ */ jsx("div", { role: "grid", "aria-label": "Calendar year selection", children: /* @__PURE__ */ jsx(
9195
+ Grid,
9196
+ {
9197
+ templateColumns: "repeat(2, minmax(0, 1fr))",
9198
+ gap: 3,
9199
+ onKeyDown: handleKeyDown,
9200
+ role: "row",
9201
+ children: dates.map(({ year, disabled }, index) => {
9202
+ const yearDate = DateTime.fromObject({ year }).toFormat("yyyy");
9203
+ return /* @__PURE__ */ jsx("div", { role: "gridcell", children: /* @__PURE__ */ jsx(
9204
+ SelectCard,
9205
+ {
9206
+ id: yearDate,
9207
+ onChange: () => onYearSelection(year),
9208
+ checked: selectedYear === year,
9209
+ checkboxProps: {
9210
+ className: styles["selection-checkbox"],
9211
+ tabIndex: focusedIndex === index ? 0 : -1
9212
+ },
9213
+ className: styles["selection-card"],
9214
+ disabled,
9215
+ children: yearDate
9216
+ }
9217
+ ) }, yearDate);
9218
+ })
9219
+ }
9220
+ ) })
9221
+ }
9222
+ );
9223
+ });
9224
+ CalendarYearSelection.displayName = "CalendarYearSelection";
8821
9225
 
8822
- const CalendarContext = createContext(null);
8823
9226
  const Calendar = forwardRef(
8824
9227
  (props, ref) => {
8825
9228
  const uid = useId();
8826
9229
  const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
8827
9230
  const {
9231
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- overriding children internally
8828
9232
  children,
8829
9233
  focusedDate: focusProp,
8830
9234
  defaultFocusedDate,
@@ -8846,36 +9250,98 @@ const Calendar = forwardRef(
8846
9250
  range,
8847
9251
  ...remainingProps
8848
9252
  } = componentProps;
9253
+ const calendarRef = useRef(null);
9254
+ const combinedRef = useMergeRefs([ref, calendarRef]);
9255
+ const lastIValue = useRef(iValue);
9256
+ const buttonsRef = useRef(void 0);
9257
+ const [calendarWidth, setCalendarWidth] = useState(
9258
+ void 0
9259
+ );
9260
+ const [calendarSelectionState, setCalendarSelectionState] = useState("day");
9261
+ useEffect(() => {
9262
+ if (!calendarRef.current || style?.width != null) return;
9263
+ const resizeObserver = new ResizeObserver((entries) => {
9264
+ for (const entry of entries) {
9265
+ const width = entry.contentRect.width;
9266
+ if (calendarSelectionState === "day" && width > 100) {
9267
+ setCalendarWidth(width);
9268
+ }
9269
+ }
9270
+ });
9271
+ resizeObserver.observe(calendarRef.current);
9272
+ return () => {
9273
+ resizeObserver.disconnect();
9274
+ };
9275
+ }, [calendarSelectionState, style?.width]);
8849
9276
  const styleCombined = {
9277
+ width: calendarWidth,
8850
9278
  ...style,
8851
9279
  ...layoutStyles
8852
9280
  };
8853
- const lastIValue = useRef(iValue);
8854
- const nDate = iValue ? typeof iValue === "string" ? normalizeDate(iValue, defaultTimeZone) : {
8855
- start: iValue.start ? normalizeDate(iValue.start, defaultTimeZone) : null,
8856
- end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null
8857
- } : null;
8858
- const nDefaultDate = iDefaultValue ? typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) ?? null : {
8859
- start: iDefaultValue.start ? normalizeDate(iDefaultValue.start, defaultTimeZone) : null,
8860
- end: iDefaultValue?.end ? normalizeDate(iDefaultValue.end, defaultTimeZone) : null
8861
- } : null;
8862
- const nToday = typeof iValue === "string" ? normalizeDate(DateTime.now().toISO(), defaultTimeZone) : {
8863
- start: normalizeDate(DateTime.now().toISO(), defaultTimeZone),
8864
- end: normalizeDate(DateTime.now().toISO(), defaultTimeZone)
8865
- };
9281
+ const { nDate, nDefaultDate, nToday } = useMemo(
9282
+ () => ({
9283
+ nDate: iValue ? typeof iValue === "string" ? normalizeDate(iValue, defaultTimeZone) : {
9284
+ start: iValue.start ? normalizeDate(iValue.start, defaultTimeZone) : null,
9285
+ end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null
9286
+ } : null,
9287
+ nDefaultDate: iDefaultValue ? typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) : {
9288
+ start: iDefaultValue.start ? normalizeDate(iDefaultValue.start, defaultTimeZone) : null,
9289
+ end: iDefaultValue?.end ? normalizeDate(iDefaultValue.end, defaultTimeZone) : null
9290
+ } : null,
9291
+ nToday: typeof iValue === "string" ? normalizeDate(DateTime.now().toISO(), defaultTimeZone) : {
9292
+ start: normalizeDate(DateTime.now().toISO(), defaultTimeZone),
9293
+ end: normalizeDate(DateTime.now().toISO(), defaultTimeZone)
9294
+ }
9295
+ }),
9296
+ [iValue, iDefaultValue, defaultTimeZone]
9297
+ );
8866
9298
  const [value, setValue] = useState(nDate ?? nDefaultDate ?? nToday);
8867
- const returnFocusedDate = () => {
9299
+ const getInitialDate = useMemo(() => {
9300
+ if (defaultFocusedDate) {
9301
+ return normalizeDate(defaultFocusedDate, defaultTimeZone);
9302
+ }
9303
+ if (iDefaultValue) {
9304
+ const date = typeof iDefaultValue === "string" ? normalizeDate(iDefaultValue, defaultTimeZone) : normalizeDate(
9305
+ iDefaultValue.start ?? iDefaultValue.end ?? "",
9306
+ defaultTimeZone
9307
+ );
9308
+ return date;
9309
+ }
8868
9310
  if (!DateTime.isDateTime(nDate) && !DateTime.isDateTime(nDefaultDate) && !DateTime.isDateTime(nToday)) {
8869
9311
  return nDate?.start ?? nDefaultDate?.start ?? nToday?.start;
8870
9312
  }
8871
9313
  return nDate ?? nDefaultDate ?? nToday;
8872
- };
8873
- const [focusedDate, setFocusedDate] = useState(returnFocusedDate());
9314
+ }, [
9315
+ defaultFocusedDate,
9316
+ iDefaultValue,
9317
+ nDate,
9318
+ nDefaultDate,
9319
+ nToday,
9320
+ defaultTimeZone
9321
+ ]);
9322
+ const initialDate = getInitialDate ?? DateTime.now();
9323
+ const [focusedDate, setFocusedDate] = useState(initialDate);
8874
9324
  const [hoveredDate, setHoveredDate] = useState();
9325
+ const [selectedMonth, setSelectedMonth] = useState(
9326
+ initialDate.month
9327
+ );
9328
+ const [selectedYear, setSelectedYear] = useState(
9329
+ initialDate.year
9330
+ );
8875
9331
  useEffect(() => {
8876
- if (!focusProp) return;
8877
- focusProp && setFocusedDate(normalizeDate(focusProp, defaultTimeZone));
8878
- }, [focusProp]);
9332
+ if (!focusProp && !defaultFocusedDate) return;
9333
+ if (focusProp) {
9334
+ setFocusedDate(normalizeDate(focusProp, defaultTimeZone));
9335
+ } else if (defaultFocusedDate) {
9336
+ setFocusedDate(normalizeDate(defaultFocusedDate, defaultTimeZone));
9337
+ setSelectedMonth(
9338
+ normalizeDate(defaultFocusedDate, defaultTimeZone).month
9339
+ );
9340
+ setSelectedYear(
9341
+ normalizeDate(defaultFocusedDate, defaultTimeZone).year
9342
+ );
9343
+ }
9344
+ }, [focusProp, defaultFocusedDate]);
8879
9345
  useEffect(() => {
8880
9346
  if (!iValue) {
8881
9347
  lastIValue.current = iValue;
@@ -8895,6 +9361,14 @@ const Calendar = forwardRef(
8895
9361
  }
8896
9362
  lastIValue.current = iValue;
8897
9363
  }, [iValue]);
9364
+ const normalizedMinDate = useMemo(
9365
+ () => minDate ? normalizeDate(minDate, defaultTimeZone) : null,
9366
+ [minDate, defaultTimeZone]
9367
+ );
9368
+ const normalizedMaxDate = useMemo(
9369
+ () => maxDate ? normalizeDate(maxDate, defaultTimeZone) : null,
9370
+ [maxDate, defaultTimeZone]
9371
+ );
8898
9372
  const providerValue = useMemo(() => {
8899
9373
  const format = {
8900
9374
  weekday: "long",
@@ -8905,6 +9379,10 @@ const Calendar = forwardRef(
8905
9379
  return {
8906
9380
  focusedDate,
8907
9381
  setFocusedDate,
9382
+ selectedMonth,
9383
+ setSelectedMonth,
9384
+ selectedYear,
9385
+ setSelectedYear,
8908
9386
  hoveredDate,
8909
9387
  setHoveredDate,
8910
9388
  value,
@@ -8914,8 +9392,8 @@ const Calendar = forwardRef(
8914
9392
  onSelection,
8915
9393
  controlled: !!iValue,
8916
9394
  range,
8917
- minDate: minDate ? normalizeDate(minDate, defaultTimeZone) : null,
8918
- maxDate: maxDate ? normalizeDate(maxDate, defaultTimeZone) : null,
9395
+ minDate: normalizedMinDate,
9396
+ maxDate: normalizedMaxDate,
8919
9397
  unavailableDates: new Set(unavailableDates),
8920
9398
  unavailable: {
8921
9399
  dates: new Set(unavailable.dates),
@@ -8927,11 +9405,13 @@ const Calendar = forwardRef(
8927
9405
  };
8928
9406
  }, [
8929
9407
  focusedDate,
9408
+ selectedMonth,
9409
+ selectedYear,
8930
9410
  hoveredDate,
8931
9411
  id,
8932
9412
  locale,
8933
- maxDate,
8934
- minDate,
9413
+ normalizedMaxDate,
9414
+ normalizedMinDate,
8935
9415
  iValue,
8936
9416
  onSelection,
8937
9417
  range,
@@ -8942,74 +9422,138 @@ const Calendar = forwardRef(
8942
9422
  value,
8943
9423
  startDay
8944
9424
  ]);
8945
- const heading = () => {
8946
- return focusedDate?.setLocale(locale).toLocaleString({
8947
- month: "long",
8948
- year: "numeric"
8949
- });
8950
- };
8951
- if ("range" in remainingProps && remainingProps.range === true) {
8952
- return /* @__PURE__ */ jsx(
8953
- CalendarContext.Provider,
8954
- {
8955
- value: providerValue,
8956
- children: /* @__PURE__ */ jsxs(
8957
- "div",
8958
- {
8959
- ref,
8960
- id: id ?? uid,
8961
- className: styles["calendar"],
8962
- style: styleCombined,
8963
- "data-anv": "calendar",
8964
- ...remainingProps,
8965
- children: [
8966
- /* @__PURE__ */ jsxs("div", { className: styles["header"], children: [
8967
- /* @__PURE__ */ jsx("span", { className: styles["heading"], children: heading() }),
8968
- /* @__PURE__ */ jsxs("span", { className: styles["controller"], children: [
8969
- /* @__PURE__ */ jsx(CalendarNow, {}),
8970
- /* @__PURE__ */ jsx(CalendarPrev, {}),
8971
- /* @__PURE__ */ jsx(CalendarNext, {})
8972
- ] })
8973
- ] }),
8974
- /* @__PURE__ */ jsx(CalendarMonth, {})
8975
- ]
8976
- }
8977
- )
8978
- }
9425
+ const updateHeaderButtons = useCallback(() => {
9426
+ buttonsRef.current = calendarRef.current?.querySelectorAll(
9427
+ "[data-calendar-header-button]"
8979
9428
  );
8980
- }
9429
+ }, []);
9430
+ useEffect(() => {
9431
+ updateHeaderButtons();
9432
+ }, [updateHeaderButtons]);
9433
+ const handleHeaderKeyDown = useCallback((e) => {
9434
+ const target = e.target;
9435
+ if (!buttonsRef.current || buttonsRef.current.length === 0) {
9436
+ return;
9437
+ }
9438
+ const buttonArray = Array.from(buttonsRef.current);
9439
+ const currentIndex = buttonArray.indexOf(target);
9440
+ if (currentIndex === -1) return;
9441
+ let newIndex;
9442
+ switch (e.key) {
9443
+ case "ArrowLeft":
9444
+ e.preventDefault();
9445
+ newIndex = currentIndex > 0 ? currentIndex - 1 : buttonArray.length - 1;
9446
+ buttonArray[newIndex].focus();
9447
+ break;
9448
+ case "ArrowRight":
9449
+ e.preventDefault();
9450
+ newIndex = currentIndex < buttonArray.length - 1 ? currentIndex + 1 : 0;
9451
+ buttonArray[newIndex].focus();
9452
+ break;
9453
+ }
9454
+ }, []);
9455
+ const handleMonthSelection = useCallback(
9456
+ (month) => {
9457
+ setSelectedMonth(month);
9458
+ setFocusedDate(
9459
+ DateTime.fromObject({
9460
+ year: focusedDate?.year ?? 1,
9461
+ month,
9462
+ day: 1
9463
+ })
9464
+ );
9465
+ setCalendarSelectionState("day");
9466
+ },
9467
+ [focusedDate]
9468
+ );
9469
+ const handleYearSelection = useCallback(
9470
+ (year) => {
9471
+ setSelectedYear(year);
9472
+ setFocusedDate(
9473
+ DateTime.fromObject({
9474
+ year,
9475
+ month: focusedDate?.month ?? 1,
9476
+ day: 1
9477
+ })
9478
+ );
9479
+ setCalendarSelectionState("day");
9480
+ },
9481
+ [focusedDate]
9482
+ );
8981
9483
  return /* @__PURE__ */ jsx(CalendarContext.Provider, { value: providerValue, children: /* @__PURE__ */ jsxs(
8982
9484
  "div",
8983
9485
  {
8984
- ref,
9486
+ ref: combinedRef,
8985
9487
  id: id ?? uid,
8986
9488
  style: styleCombined,
8987
9489
  className: styles["calendar"],
8988
9490
  "data-anv": "calendar",
8989
9491
  ...remainingProps,
8990
9492
  children: [
8991
- /* @__PURE__ */ jsxs("div", { className: styles["header"], children: [
8992
- /* @__PURE__ */ jsx("span", { className: styles["heading"], children: heading() }),
8993
- /* @__PURE__ */ jsxs("span", { className: styles["controller"], children: [
8994
- /* @__PURE__ */ jsx(CalendarNow, {}),
8995
- /* @__PURE__ */ jsx(CalendarPrev, {}),
8996
- /* @__PURE__ */ jsx(CalendarNext, {})
8997
- ] })
8998
- ] }),
8999
- /* @__PURE__ */ jsx(CalendarMonth, {})
9493
+ /* @__PURE__ */ jsx("div", { className: styles["header"], children: /* @__PURE__ */ jsxs(
9494
+ "span",
9495
+ {
9496
+ "aria-label": "Calendar navigation",
9497
+ role: "toolbar",
9498
+ onKeyDown: handleHeaderKeyDown,
9499
+ className: styles["controller"],
9500
+ children: [
9501
+ /* @__PURE__ */ jsx(
9502
+ CalendarMonthButton,
9503
+ {
9504
+ "data-calendar-header-button": true,
9505
+ calendarSelectionState,
9506
+ onClick: () => setCalendarSelectionState(
9507
+ (prev) => prev === "month" ? "day" : "month"
9508
+ )
9509
+ }
9510
+ ),
9511
+ /* @__PURE__ */ jsx(
9512
+ CalendarYearButton,
9513
+ {
9514
+ tabIndex: -1,
9515
+ "data-calendar-header-button": true,
9516
+ calendarSelectionState,
9517
+ onClick: () => setCalendarSelectionState(
9518
+ (prev) => prev === "year" ? "day" : "year"
9519
+ )
9520
+ }
9521
+ ),
9522
+ calendarSelectionState === "day" && /* @__PURE__ */ jsxs(Fragment, { children: [
9523
+ /* @__PURE__ */ jsx(
9524
+ CalendarPrevButton,
9525
+ {
9526
+ tabIndex: -1,
9527
+ "data-calendar-header-button": true
9528
+ }
9529
+ ),
9530
+ /* @__PURE__ */ jsx(
9531
+ CalendarNextButton,
9532
+ {
9533
+ tabIndex: -1,
9534
+ "data-calendar-header-button": true
9535
+ }
9536
+ ),
9537
+ /* @__PURE__ */ jsx(
9538
+ CalendarNowButton,
9539
+ {
9540
+ tabIndex: -1,
9541
+ "data-calendar-header-button": true
9542
+ }
9543
+ )
9544
+ ] })
9545
+ ]
9546
+ }
9547
+ ) }),
9548
+ calendarSelectionState === "day" && /* @__PURE__ */ jsx(CalendarMonth, {}),
9549
+ calendarSelectionState === "month" && /* @__PURE__ */ jsx(CalendarMonthSelection, { onMonthSelection: handleMonthSelection }),
9550
+ calendarSelectionState === "year" && /* @__PURE__ */ jsx(CalendarYearSelection, { onYearSelection: handleYearSelection })
9000
9551
  ]
9001
9552
  }
9002
9553
  ) });
9003
9554
  }
9004
9555
  );
9005
- function useCalendar() {
9006
- const context = useContext(CalendarContext);
9007
- if (!context) {
9008
- throw new Error("useCalendar must be used within a <Calendar>");
9009
- }
9010
- return context;
9011
- }
9012
9556
  Calendar.displayName = "Calendar";
9013
9557
 
9014
- export { CalendarNow as C, DateTime as D, CalendarMonth as a, CalendarNext as b, CalendarPrev as c, Calendar as d, isValidDate as i, toDateString as t };
9015
- //# sourceMappingURL=Calendar-ch54N6OS-0vxeSJFt.js.map
9558
+ export { CalendarNowButton as C, DateTime as D, CalendarMonth as a, CalendarNextButton as b, CalendarPrevButton as c, CalendarMonthButton as d, CalendarYearButton as e, Calendar as f, isValidDate as i, toDateString as t };
9559
+ //# sourceMappingURL=Calendar-C3dudrjk-nI60sdlM.js.map