@chassis-ui/react 0.4.0 → 0.5.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 (615) hide show
  1. package/README.md +7 -6
  2. package/dist/accordion.d.ts +1 -1
  3. package/dist/accordion.js +1 -1
  4. package/dist/alert.d.ts +1 -1
  5. package/dist/alert.js +1 -1
  6. package/dist/autocomplete.d.ts +1 -1
  7. package/dist/autocomplete.js +1 -1
  8. package/dist/avatar.d.ts +1 -1
  9. package/dist/avatar.js +1 -1
  10. package/dist/badge.d.ts +1 -1
  11. package/dist/badge.js +1 -1
  12. package/dist/breadcrumb.d.ts +1 -1
  13. package/dist/breadcrumb.js +1 -1
  14. package/dist/button-group.d.ts +1 -1
  15. package/dist/button-group.js +1 -1
  16. package/dist/button.d.ts +2 -2
  17. package/dist/button.js +1 -1
  18. package/dist/calendar.d.ts +1 -1
  19. package/dist/calendar.js +1 -1
  20. package/dist/card.d.ts +1 -1
  21. package/dist/card.js +1 -1
  22. package/dist/carousel.d.ts +1 -1
  23. package/dist/carousel.js +1 -1
  24. package/dist/checkbox.d.ts +1 -1
  25. package/dist/checkbox.js +1 -1
  26. package/dist/chip-input.d.ts +1 -1
  27. package/dist/chip-input.js +1 -1
  28. package/dist/chip.d.ts +1 -1
  29. package/dist/chip.js +1 -1
  30. package/dist/chunks/{Button-BuZ_GOHS.d.ts → Button-DblYVwl-.d.ts} +4 -2
  31. package/dist/chunks/Button-ZU-x1uN_.js +2 -0
  32. package/dist/chunks/Button-ZU-x1uN_.js.map +1 -0
  33. package/dist/chunks/Chip-C7QlFCvx.js +2 -0
  34. package/dist/chunks/Chip-C7QlFCvx.js.map +1 -0
  35. package/dist/chunks/CloseButton-BPUI5iGX.js +2 -0
  36. package/dist/chunks/CloseButton-BPUI5iGX.js.map +1 -0
  37. package/dist/chunks/ComboboxListBox-Db0rSM3w.js +2 -0
  38. package/dist/chunks/ComboboxListBox-Db0rSM3w.js.map +1 -0
  39. package/dist/chunks/DateField-4cdcwt0v.js +2 -0
  40. package/dist/chunks/DateField-4cdcwt0v.js.map +1 -0
  41. package/dist/chunks/FormHelp-B1eSoack.js +2 -0
  42. package/dist/chunks/FormHelp-B1eSoack.js.map +1 -0
  43. package/dist/chunks/FormLabel-CpzWYh6U.js +2 -0
  44. package/dist/chunks/FormLabel-CpzWYh6U.js.map +1 -0
  45. package/dist/chunks/{Icon-DLB1f88W.js → Icon-Dk5_q79o.js} +2 -2
  46. package/dist/chunks/Icon-Dk5_q79o.js.map +1 -0
  47. package/dist/chunks/Link-DE8NSAXJ.js +2 -0
  48. package/dist/chunks/Link-DE8NSAXJ.js.map +1 -0
  49. package/dist/chunks/Menu-264aGoBR.js +2 -0
  50. package/dist/chunks/Menu-264aGoBR.js.map +1 -0
  51. package/dist/chunks/{Menu-QeYOzrUL.d.ts → Menu-CCYshRuL.d.ts} +3 -2
  52. package/dist/chunks/MenuToggle-DcPEh55c.js +2 -0
  53. package/dist/chunks/MenuToggle-DcPEh55c.js.map +1 -0
  54. package/dist/chunks/Portal-BTDylxAi.js +2 -0
  55. package/dist/chunks/Portal-BTDylxAi.js.map +1 -0
  56. package/dist/chunks/RangeCalendar-mM3OeTlU.js +2 -0
  57. package/dist/chunks/RangeCalendar-mM3OeTlU.js.map +1 -0
  58. package/dist/chunks/VisuallyHidden-CGv-mBuQ.js +2 -0
  59. package/dist/chunks/VisuallyHidden-CGv-mBuQ.js.map +1 -0
  60. package/dist/chunks/accordion-BZlX2uk8.js +2 -0
  61. package/dist/chunks/accordion-BZlX2uk8.js.map +1 -0
  62. package/dist/chunks/alert-DSLg5MBb.js +2 -0
  63. package/dist/chunks/alert-DSLg5MBb.js.map +1 -0
  64. package/dist/chunks/autocomplete-99usnvgh.js +2 -0
  65. package/dist/chunks/autocomplete-99usnvgh.js.map +1 -0
  66. package/dist/chunks/avatar-BQBbcnk6.js +2 -0
  67. package/dist/chunks/avatar-BQBbcnk6.js.map +1 -0
  68. package/dist/chunks/{badge-D2oztCvs.js → badge-Ths1Qn1a.js} +2 -2
  69. package/dist/chunks/badge-Ths1Qn1a.js.map +1 -0
  70. package/dist/chunks/breadcrumb-BTiQikk-.js +2 -0
  71. package/dist/chunks/breadcrumb-BTiQikk-.js.map +1 -0
  72. package/dist/chunks/breakpoints-CGk8szzR.js.map +1 -1
  73. package/dist/chunks/button-group-CefkGeYL.js +2 -0
  74. package/dist/chunks/button-group-CefkGeYL.js.map +1 -0
  75. package/dist/chunks/card-CEQgHIaL.js +2 -0
  76. package/dist/chunks/card-CEQgHIaL.js.map +1 -0
  77. package/dist/chunks/carousel-DC-UGc6W.js +2 -0
  78. package/dist/chunks/carousel-DC-UGc6W.js.map +1 -0
  79. package/dist/chunks/checkbox-ko6CdtoT.js +2 -0
  80. package/dist/chunks/checkbox-ko6CdtoT.js.map +1 -0
  81. package/dist/chunks/chip-input-CugY8EOc.js +2 -0
  82. package/dist/chunks/chip-input-CugY8EOc.js.map +1 -0
  83. package/dist/chunks/{collapse--Go2Y73B.js → collapse-CBi3RWTf.js} +2 -2
  84. package/dist/chunks/collapse-CBi3RWTf.js.map +1 -0
  85. package/dist/chunks/color-input-C4zMWlvm.js +2 -0
  86. package/dist/chunks/color-input-C4zMWlvm.js.map +1 -0
  87. package/dist/chunks/colorClassNames-YzGWu6qm.js +2 -0
  88. package/dist/chunks/colorClassNames-YzGWu6qm.js.map +1 -0
  89. package/dist/chunks/combobox-BQh3uJWB.js +2 -0
  90. package/dist/chunks/combobox-BQh3uJWB.js.map +1 -0
  91. package/dist/chunks/context-DCg95BgR.js +2 -0
  92. package/dist/chunks/context-DCg95BgR.js.map +1 -0
  93. package/dist/chunks/context-HDVxTNPi.js +2 -0
  94. package/dist/chunks/context-HDVxTNPi.js.map +1 -0
  95. package/dist/chunks/context-menu-8KIuH4cJ.js +2 -0
  96. package/dist/chunks/context-menu-8KIuH4cJ.js.map +1 -0
  97. package/dist/chunks/datagrid-n9vFeXN1.js +2 -0
  98. package/dist/chunks/datagrid-n9vFeXN1.js.map +1 -0
  99. package/dist/chunks/datepicker-DqztYJD6.js +2 -0
  100. package/dist/chunks/datepicker-DqztYJD6.js.map +1 -0
  101. package/dist/chunks/{dialogTransition-i9vw0i2Z.js → dialogTransition-C8fYTsSa.js} +2 -2
  102. package/dist/chunks/dialogTransition-C8fYTsSa.js.map +1 -0
  103. package/dist/chunks/direction-LN6uwsK5.js.map +1 -1
  104. package/dist/chunks/divider-C1-NoKMV.js +2 -0
  105. package/dist/chunks/divider-C1-NoKMV.js.map +1 -0
  106. package/dist/chunks/drawer-CRv9jmbp.js +2 -0
  107. package/dist/chunks/drawer-CRv9jmbp.js.map +1 -0
  108. package/dist/chunks/file-input-D_Gl1h-T.js +2 -0
  109. package/dist/chunks/file-input-D_Gl1h-T.js.map +1 -0
  110. package/dist/chunks/{flex-B52oLCCC.js → flex-C2jV5LyV.js} +2 -2
  111. package/dist/chunks/flex-C2jV5LyV.js.map +1 -0
  112. package/dist/chunks/floating-input-D4gWFfOU.js +2 -0
  113. package/dist/chunks/floating-input-D4gWFfOU.js.map +1 -0
  114. package/dist/chunks/focus-ring-Bs80iIBN.js +2 -0
  115. package/dist/chunks/focus-ring-Bs80iIBN.js.map +1 -0
  116. package/dist/chunks/focusRedirect-CrBl4p_n.js +2 -0
  117. package/dist/chunks/focusRedirect-CrBl4p_n.js.map +1 -0
  118. package/dist/chunks/form-CPS2eNw1.js +2 -0
  119. package/dist/chunks/form-CPS2eNw1.js.map +1 -0
  120. package/dist/chunks/{form-field-CNPGTMiW.js → form-field-Bcx96ezd.js} +2 -2
  121. package/dist/chunks/form-field-Bcx96ezd.js.map +1 -0
  122. package/dist/chunks/grid-CkdPftit.js +2 -0
  123. package/dist/chunks/grid-CkdPftit.js.map +1 -0
  124. package/dist/chunks/icon-CVD3rTr-.js +2 -0
  125. package/dist/chunks/icon-CVD3rTr-.js.map +1 -0
  126. package/dist/chunks/iconSlot-DU_WcSL_.js +2 -0
  127. package/dist/chunks/iconSlot-DU_WcSL_.js.map +1 -0
  128. package/dist/chunks/{index-91YA-jkp.d.ts → index-3JVLrDHv.d.ts} +11 -3
  129. package/dist/chunks/{index-DMbdEm__.d.ts → index-5mW1Y9Lm.d.ts} +7 -4
  130. package/dist/chunks/{index-Cc4SSslb.d.ts → index-5qsV1-cc.d.ts} +3 -3
  131. package/dist/chunks/{index-CYvVmTPR.d.ts → index-6PnrAJmb.d.ts} +4 -4
  132. package/dist/chunks/{index-BA-raEMm.d.ts → index-B5f6haU-.d.ts} +2 -2
  133. package/dist/chunks/{index-4cKG9KWB.d.ts → index-B8OIYfGw.d.ts} +2 -2
  134. package/dist/chunks/{index-CjT_4IZx.d.ts → index-BAvt_oPe.d.ts} +14 -5
  135. package/dist/chunks/{index-DtbUXxjz.d.ts → index-BB8UNxnM.d.ts} +2 -2
  136. package/dist/chunks/{index-aRdgpeRb.d.ts → index-BEAZrhyV.d.ts} +2 -2
  137. package/dist/chunks/{index-BOx8v-oT.d.ts → index-BISMaKaC.d.ts} +14 -2
  138. package/dist/chunks/{index-DtvHH_Mb.d.ts → index-BOroLDDZ.d.ts} +2 -2
  139. package/dist/chunks/{index-C4Dks__B.d.ts → index-BZpHSGlk.d.ts} +2 -2
  140. package/dist/chunks/{index-C9gzVqwX.d.ts → index-BbZzaApz.d.ts} +2 -2
  141. package/dist/chunks/{index-DAoPg59I.d.ts → index-Bca_HQWF.d.ts} +7 -3
  142. package/dist/chunks/{index-B0-8n-Gs.d.ts → index-Bl-_sC4y.d.ts} +12 -4
  143. package/dist/chunks/{index-BSLneLYu.d.ts → index-BxJ6Vrhm.d.ts} +2 -2
  144. package/dist/chunks/{index-CTpwB1yR.d.ts → index-BxrIOrAc.d.ts} +11 -6
  145. package/dist/chunks/{index-DHcztR18.d.ts → index-ByBbC4Jh.d.ts} +3 -3
  146. package/dist/chunks/{index-DHGgezXU.d.ts → index-C-IrFdKe.d.ts} +2 -2
  147. package/dist/chunks/{index-B8uaSJA9.d.ts → index-C0g8NSXY.d.ts} +13 -4
  148. package/dist/chunks/{index-CFnQubsV.d.ts → index-C1RKm3hQ.d.ts} +5 -3
  149. package/dist/chunks/{index-BxROljJI.d.ts → index-C3qqMzs5.d.ts} +2 -2
  150. package/dist/chunks/{index-Dcc_W6Kv.d.ts → index-C6F3DQCd.d.ts} +2 -2
  151. package/dist/chunks/{index-x0vZRyoU.d.ts → index-CEPAXElM.d.ts} +4 -3
  152. package/dist/chunks/{index-DaHQdNul.d.ts → index-COVY45gK.d.ts} +2 -2
  153. package/dist/chunks/{index-DJfga0Ce.d.ts → index-COq1jJ6Y.d.ts} +2 -2
  154. package/dist/chunks/{index-HrKN6s8z.d.ts → index-CSRGr7pU.d.ts} +2 -2
  155. package/dist/chunks/{index-B1kw0jzM.d.ts → index-CTNqEMug.d.ts} +6 -3
  156. package/dist/chunks/{index-6uob77s9.d.ts → index-CW94lG-e.d.ts} +7 -4
  157. package/dist/chunks/{index-Ddd7iWfm.d.ts → index-CY-A60p6.d.ts} +2 -2
  158. package/dist/chunks/{index-lSPcxiii.d.ts → index-CbcFEGCh.d.ts} +5 -3
  159. package/dist/chunks/{index-9rQeMqVI.d.ts → index-Ce0f-bDM.d.ts} +2 -2
  160. package/dist/chunks/{index-Ci7AEgEc.d.ts → index-Cf3gHDjh.d.ts} +2 -2
  161. package/dist/chunks/{index-BVGGIaPX.d.ts → index-Cm3rPbI1.d.ts} +10 -5
  162. package/dist/chunks/{index-DPCwFiJL.d.ts → index-CmljNQ8F.d.ts} +2 -2
  163. package/dist/chunks/{index-DQImhbhy.d.ts → index-Cpifcw5a.d.ts} +2 -2
  164. package/dist/chunks/{index-B_UzbGOa.d.ts → index-Ctf5hLue.d.ts} +3 -3
  165. package/dist/chunks/{index-DM01FX3a.d.ts → index-D0Dhs7YI.d.ts} +18 -6
  166. package/dist/chunks/{index-BAsbRx5n.d.ts → index-D5KJRfMg.d.ts} +2 -2
  167. package/dist/chunks/{index-Bz8MDq0H.d.ts → index-DD6Z5NW-.d.ts} +7 -4
  168. package/dist/chunks/{index-Dfg4Ftb8.d.ts → index-DFKBJxqA.d.ts} +7 -4
  169. package/dist/chunks/{index-BMkbJVHg.d.ts → index-DGGyvlEQ.d.ts} +3 -3
  170. package/dist/chunks/{index-YJ9QdBuq.d.ts → index-DOxVxbb9.d.ts} +6 -5
  171. package/dist/chunks/{index-CxjNw4ss.d.ts → index-DVK16_FU.d.ts} +2 -2
  172. package/dist/chunks/{index-DHOG_rjE.d.ts → index-DVfH_2Ma.d.ts} +7 -4
  173. package/dist/chunks/{index-0jbACjYQ.d.ts → index-DXBkVdWc.d.ts} +2 -2
  174. package/dist/chunks/{index-CsARGAzD.d.ts → index-Davd7Cue.d.ts} +10 -5
  175. package/dist/chunks/{index-Bi8FFadV.d.ts → index-Dc50UjJy.d.ts} +13 -4
  176. package/dist/chunks/{index-BF3OWUVc.d.ts → index-Dci43Xhl.d.ts} +3 -3
  177. package/dist/chunks/{index-B2K-O9kl.d.ts → index-DdFipHYL.d.ts} +5 -4
  178. package/dist/chunks/{index-Du9fBqkT.d.ts → index-DmmLEHVo.d.ts} +2 -2
  179. package/dist/chunks/{index-B5bF1JxF.d.ts → index-DsU3M0oP.d.ts} +3 -3
  180. package/dist/chunks/{index-DP5xugE-.d.ts → index-Es9I0fIS.d.ts} +3 -3
  181. package/dist/chunks/{index-CqZ68Z8R.d.ts → index-HNUhTj5e.d.ts} +25 -6
  182. package/dist/chunks/{index-CCXJXToc.d.ts → index-OnB4_h6x.d.ts} +7 -4
  183. package/dist/chunks/{index-CftERHnE.d.ts → index-QeI-KSng.d.ts} +3 -2
  184. package/dist/chunks/{index-BLS1jhSJ.d.ts → index-RyE80_VH.d.ts} +2 -2
  185. package/dist/chunks/{index-CIwzgZJi.d.ts → index-UjmJQRaG.d.ts} +2 -2
  186. package/dist/chunks/{index-B19ZH3fm.d.ts → index-YzIZhXZ1.d.ts} +2 -2
  187. package/dist/chunks/{index-CHQR8x8_.d.ts → index-Z_5ArZpE.d.ts} +4 -2
  188. package/dist/chunks/{index-BNf0jIIL.d.ts → index-doVyX-4i.d.ts} +7 -4
  189. package/dist/chunks/{index-NGgDkhyn.d.ts → index-mLtlx-d9.d.ts} +6 -3
  190. package/dist/chunks/{index-g74gO0pc.d.ts → index-sT0Hnr_n.d.ts} +12 -10
  191. package/dist/chunks/{index-Bkj17NEQ.d.ts → index-t3k_T3Dv.d.ts} +2 -2
  192. package/dist/chunks/{index-BfEJYF4c.d.ts → index-yVsGuikp.d.ts} +2 -2
  193. package/dist/chunks/input-adorn-DV9tuWXh.js +2 -0
  194. package/dist/chunks/input-adorn-DV9tuWXh.js.map +1 -0
  195. package/dist/chunks/input-group-YB_zoKud.js +2 -0
  196. package/dist/chunks/input-group-YB_zoKud.js.map +1 -0
  197. package/dist/chunks/insideEvents-CWcNrMu7.js +2 -0
  198. package/dist/chunks/insideEvents-CWcNrMu7.js.map +1 -0
  199. package/dist/chunks/lazyElement-tfMG21pZ.js.map +1 -1
  200. package/dist/chunks/list-BPBZR66Y.js +2 -0
  201. package/dist/chunks/list-BPBZR66Y.js.map +1 -0
  202. package/dist/chunks/menu-DEu-Nbv8.js +2 -0
  203. package/dist/chunks/menu-DEu-Nbv8.js.map +1 -0
  204. package/dist/chunks/modal-CHvsDTyl.js +2 -0
  205. package/dist/chunks/modal-CHvsDTyl.js.map +1 -0
  206. package/dist/chunks/nav-B4U_Hqs7.js +2 -0
  207. package/dist/chunks/nav-B4U_Hqs7.js.map +1 -0
  208. package/dist/chunks/nav-overflow-DpX_lRYf.js +2 -0
  209. package/dist/chunks/nav-overflow-DpX_lRYf.js.map +1 -0
  210. package/dist/chunks/navOverflow-C_QJmkPM.js +2 -0
  211. package/dist/chunks/navOverflow-C_QJmkPM.js.map +1 -0
  212. package/dist/chunks/{navVariant-DeGTk9B7.js → navVariant-D4wiKS8I.js} +2 -2
  213. package/dist/chunks/navVariant-D4wiKS8I.js.map +1 -0
  214. package/dist/chunks/navbar-C7dO0YRs.js +2 -0
  215. package/dist/chunks/navbar-C7dO0YRs.js.map +1 -0
  216. package/dist/chunks/notification-oIrUtDhl.js +2 -0
  217. package/dist/chunks/notification-oIrUtDhl.js.map +1 -0
  218. package/dist/chunks/number-field-ChPTSBwI.js +2 -0
  219. package/dist/chunks/number-field-ChPTSBwI.js.map +1 -0
  220. package/dist/chunks/otp-input-DUtCMg8P.js +2 -0
  221. package/dist/chunks/otp-input-DUtCMg8P.js.map +1 -0
  222. package/dist/chunks/{overlayPlacement-BtS90IVf.js → overlayPlacement-Q6bcbXA5.js} +2 -2
  223. package/dist/chunks/overlayPlacement-Q6bcbXA5.js.map +1 -0
  224. package/dist/chunks/overlayStack-BXtTGCRm.js +2 -0
  225. package/dist/chunks/overlayStack-BXtTGCRm.js.map +1 -0
  226. package/dist/chunks/pagination-Dvz8lccd.js +2 -0
  227. package/dist/chunks/pagination-Dvz8lccd.js.map +1 -0
  228. package/dist/chunks/{password-strength-DDK8pHRq.js → password-strength-Qg5GHBmu.js} +2 -2
  229. package/dist/chunks/password-strength-Qg5GHBmu.js.map +1 -0
  230. package/dist/chunks/placeholder-SPoVRkKE.js +2 -0
  231. package/dist/chunks/placeholder-SPoVRkKE.js.map +1 -0
  232. package/dist/chunks/polymorphic-CZIFszAy.js +2 -0
  233. package/dist/chunks/polymorphic-CZIFszAy.js.map +1 -0
  234. package/dist/chunks/popover-C_32yD9W.js +2 -0
  235. package/dist/chunks/popover-C_32yD9W.js.map +1 -0
  236. package/dist/chunks/progress-CiSJDNwx.js +2 -0
  237. package/dist/chunks/progress-CiSJDNwx.js.map +1 -0
  238. package/dist/chunks/radio-C42F_5OD.js +2 -0
  239. package/dist/chunks/radio-C42F_5OD.js.map +1 -0
  240. package/dist/chunks/range-input-DeZq_9S7.js +2 -0
  241. package/dist/chunks/range-input-DeZq_9S7.js.map +1 -0
  242. package/dist/chunks/renderFormCheck-DvpfK_I4.js +2 -0
  243. package/dist/chunks/renderFormCheck-DvpfK_I4.js.map +1 -0
  244. package/dist/chunks/renderFormField-_6WswnEX.js +2 -0
  245. package/dist/chunks/renderFormField-_6WswnEX.js.map +1 -0
  246. package/dist/chunks/renderMenuItemContent-DNdj-Ukz.js +2 -0
  247. package/dist/chunks/renderMenuItemContent-DNdj-Ukz.js.map +1 -0
  248. package/dist/chunks/scrollspy-BEZEVyIw.js +2 -0
  249. package/dist/chunks/scrollspy-BEZEVyIw.js.map +1 -0
  250. package/dist/chunks/scrollspy-D_lPjb92.js.map +1 -1
  251. package/dist/chunks/search-field-OFsb3t4L.js +2 -0
  252. package/dist/chunks/search-field-OFsb3t4L.js.map +1 -0
  253. package/dist/chunks/select-DwyL6aqY.js +2 -0
  254. package/dist/chunks/select-DwyL6aqY.js.map +1 -0
  255. package/dist/chunks/skeleton-B2blJGWj.js +2 -0
  256. package/dist/chunks/skeleton-B2blJGWj.js.map +1 -0
  257. package/dist/chunks/slot-BQVx1Eew.js +2 -0
  258. package/dist/chunks/slot-BQVx1Eew.js.map +1 -0
  259. package/dist/chunks/spacingClassName-DVhk8m3P.js.map +1 -1
  260. package/dist/chunks/spinner-D8lQCW4u.js +2 -0
  261. package/dist/chunks/spinner-D8lQCW4u.js.map +1 -0
  262. package/dist/chunks/stack-DtzW54UK.js +2 -0
  263. package/dist/chunks/stack-DtzW54UK.js.map +1 -0
  264. package/dist/chunks/static-table-C7ZtFQ66.js +2 -0
  265. package/dist/chunks/static-table-C7ZtFQ66.js.map +1 -0
  266. package/dist/chunks/stepper-tSA84huJ.js +2 -0
  267. package/dist/chunks/stepper-tSA84huJ.js.map +1 -0
  268. package/dist/chunks/switch-cp3IZg3L.js +2 -0
  269. package/dist/chunks/switch-cp3IZg3L.js.map +1 -0
  270. package/dist/chunks/table-CBTg5Yuq.js +2 -0
  271. package/dist/chunks/table-CBTg5Yuq.js.map +1 -0
  272. package/dist/chunks/tableClassName-jRfRDXA3.js +2 -0
  273. package/dist/chunks/tableClassName-jRfRDXA3.js.map +1 -0
  274. package/dist/chunks/tabs-DMFSLjnV.js +2 -0
  275. package/dist/chunks/tabs-DMFSLjnV.js.map +1 -0
  276. package/dist/chunks/text-input-CR73x-8D.js +2 -0
  277. package/dist/chunks/text-input-CR73x-8D.js.map +1 -0
  278. package/dist/chunks/textarea-C-1cMyH4.js +2 -0
  279. package/dist/chunks/textarea-C-1cMyH4.js.map +1 -0
  280. package/dist/chunks/time-field-CbCfOQZz.js +2 -0
  281. package/dist/chunks/time-field-CbCfOQZz.js.map +1 -0
  282. package/dist/chunks/toast-Dd0J2e1z.js +2 -0
  283. package/dist/chunks/toast-Dd0J2e1z.js.map +1 -0
  284. package/dist/chunks/tooltip-CmKeQwYw.js +2 -0
  285. package/dist/chunks/tooltip-CmKeQwYw.js.map +1 -0
  286. package/dist/chunks/tree-DNj_EfUl.js +2 -0
  287. package/dist/chunks/tree-DNj_EfUl.js.map +1 -0
  288. package/dist/chunks/unhandledProps-9Kdj7WVf.js.map +1 -1
  289. package/dist/chunks/{useButtonSemantics-CILM_lhi.js → useButtonSemantics-B1SbGaDO.js} +2 -2
  290. package/dist/chunks/useButtonSemantics-B1SbGaDO.js.map +1 -0
  291. package/dist/chunks/useControllableState-CPUJxfKW.js.map +1 -1
  292. package/dist/chunks/useDialogElement-BfygWBPZ.js +2 -0
  293. package/dist/chunks/useDialogElement-BfygWBPZ.js.map +1 -0
  294. package/dist/chunks/useDialogTitle-DiB4YDGI.js +2 -0
  295. package/dist/chunks/useDialogTitle-DiB4YDGI.js.map +1 -0
  296. package/dist/chunks/useDisabledAnchorGuard-CH6df46a.js +2 -0
  297. package/dist/chunks/useDisabledAnchorGuard-CH6df46a.js.map +1 -0
  298. package/dist/chunks/useFloatingOverlay-BuiI_CCn.js +2 -0
  299. package/dist/chunks/useFloatingOverlay-BuiI_CCn.js.map +1 -0
  300. package/dist/chunks/useForkedRef-WoqMqsWE.js +2 -0
  301. package/dist/chunks/useForkedRef-WoqMqsWE.js.map +1 -0
  302. package/dist/chunks/useFormField-DH2tlc3e.js +2 -0
  303. package/dist/chunks/useFormField-DH2tlc3e.js.map +1 -0
  304. package/dist/chunks/useHeldBack-eeTfpa_t.js +2 -0
  305. package/dist/chunks/useHeldBack-eeTfpa_t.js.map +1 -0
  306. package/dist/chunks/useHydrated-Dud4JEwp.js +2 -0
  307. package/dist/chunks/useHydrated-Dud4JEwp.js.map +1 -0
  308. package/dist/chunks/useIsomorphicLayoutEffect-BbqRwuqn.js.map +1 -1
  309. package/dist/chunks/{useOpenStateProps-DykUbnPJ.js → useOpenStateProps-BhjSQ3f6.js} +2 -2
  310. package/dist/chunks/useOpenStateProps-BhjSQ3f6.js.map +1 -0
  311. package/dist/chunks/useOverlayMaxHeight-8mQL2Q6d.js +2 -0
  312. package/dist/chunks/useOverlayMaxHeight-8mQL2Q6d.js.map +1 -0
  313. package/dist/chunks/useRequiredValueInput-gYN8I-LY.js +2 -0
  314. package/dist/chunks/useRequiredValueInput-gYN8I-LY.js.map +1 -0
  315. package/dist/chunks/useToastRegionQueue-CuAMxAIA.js +2 -0
  316. package/dist/chunks/useToastRegionQueue-CuAMxAIA.js.map +1 -0
  317. package/dist/chunks/{useTransitionState-e5ToY7eX.js → useTransitionState-sQUQey74.js} +2 -2
  318. package/dist/chunks/useTransitionState-sQUQey74.js.map +1 -0
  319. package/dist/chunks/validationClassName-gRGs4KBm.js.map +1 -1
  320. package/dist/chunks/{visibleState-B_i1zHu2.js → visibleState-CWyQak65.js} +2 -2
  321. package/dist/chunks/visibleState-CWyQak65.js.map +1 -0
  322. package/dist/close-button.d.ts +1 -1
  323. package/dist/close-button.js +1 -1
  324. package/dist/collapse.d.ts +1 -1
  325. package/dist/collapse.js +1 -1
  326. package/dist/color-input.d.ts +1 -1
  327. package/dist/color-input.js +1 -1
  328. package/dist/combobox.d.ts +1 -1
  329. package/dist/combobox.js +1 -1
  330. package/dist/context-menu.d.ts +1 -1
  331. package/dist/context-menu.js +1 -1
  332. package/dist/datagrid.d.ts +1 -1
  333. package/dist/datagrid.js +1 -1
  334. package/dist/datepicker.d.ts +1 -1
  335. package/dist/datepicker.js +1 -1
  336. package/dist/divider.d.ts +1 -1
  337. package/dist/divider.js +1 -1
  338. package/dist/drawer.d.ts +1 -1
  339. package/dist/drawer.js +1 -1
  340. package/dist/file-input.d.ts +1 -1
  341. package/dist/file-input.js +1 -1
  342. package/dist/flex.d.ts +1 -1
  343. package/dist/flex.js +1 -1
  344. package/dist/floating-input.d.ts +1 -1
  345. package/dist/floating-input.js +1 -1
  346. package/dist/form-field.d.ts +1 -1
  347. package/dist/form-field.js +1 -1
  348. package/dist/form.d.ts +1 -1
  349. package/dist/form.js +1 -1
  350. package/dist/grid.d.ts +1 -1
  351. package/dist/grid.js +1 -1
  352. package/dist/icon.d.ts +1 -1
  353. package/dist/icon.js +1 -1
  354. package/dist/index.d.ts +68 -68
  355. package/dist/index.js +1 -1
  356. package/dist/input-adorn.d.ts +1 -1
  357. package/dist/input-adorn.js +1 -1
  358. package/dist/input-group.d.ts +1 -1
  359. package/dist/input-group.js +1 -1
  360. package/dist/link.d.ts +1 -1
  361. package/dist/link.js +1 -1
  362. package/dist/list.d.ts +1 -1
  363. package/dist/list.js +1 -1
  364. package/dist/menu.d.ts +2 -2
  365. package/dist/menu.js +1 -1
  366. package/dist/modal.d.ts +1 -1
  367. package/dist/modal.js +1 -1
  368. package/dist/nav-overflow.d.ts +1 -1
  369. package/dist/nav-overflow.js +1 -1
  370. package/dist/nav.d.ts +1 -1
  371. package/dist/nav.js +1 -1
  372. package/dist/navbar.d.ts +1 -1
  373. package/dist/navbar.js +1 -1
  374. package/dist/notification.d.ts +1 -1
  375. package/dist/notification.js +1 -1
  376. package/dist/number-field.d.ts +1 -1
  377. package/dist/number-field.js +1 -1
  378. package/dist/otp-input.d.ts +1 -1
  379. package/dist/otp-input.js +1 -1
  380. package/dist/pagination.d.ts +1 -1
  381. package/dist/pagination.js +1 -1
  382. package/dist/password-strength.d.ts +1 -1
  383. package/dist/password-strength.js +1 -1
  384. package/dist/placeholder.d.ts +1 -1
  385. package/dist/placeholder.js +1 -1
  386. package/dist/popover.d.ts +1 -1
  387. package/dist/popover.js +1 -1
  388. package/dist/portal.d.ts +1 -1
  389. package/dist/portal.js +1 -1
  390. package/dist/progress.d.ts +1 -1
  391. package/dist/progress.js +1 -1
  392. package/dist/radio.d.ts +1 -1
  393. package/dist/radio.js +1 -1
  394. package/dist/range-input.d.ts +1 -1
  395. package/dist/range-input.js +1 -1
  396. package/dist/scrollspy.d.ts +1 -1
  397. package/dist/scrollspy.js +1 -1
  398. package/dist/search-field.d.ts +1 -1
  399. package/dist/search-field.js +1 -1
  400. package/dist/select.d.ts +1 -1
  401. package/dist/select.js +1 -1
  402. package/dist/skeleton.d.ts +1 -1
  403. package/dist/skeleton.js +1 -1
  404. package/dist/spinner.d.ts +1 -1
  405. package/dist/spinner.js +1 -1
  406. package/dist/stack.d.ts +1 -1
  407. package/dist/stack.js +1 -1
  408. package/dist/static-table.js +1 -1
  409. package/dist/stepper.d.ts +1 -1
  410. package/dist/stepper.js +1 -1
  411. package/dist/style.css +1 -1
  412. package/dist/switch.d.ts +1 -1
  413. package/dist/switch.js +1 -1
  414. package/dist/table.d.ts +1 -1
  415. package/dist/table.js +1 -1
  416. package/dist/tabs.d.ts +1 -1
  417. package/dist/tabs.js +1 -1
  418. package/dist/text-input.d.ts +1 -1
  419. package/dist/text-input.js +1 -1
  420. package/dist/textarea.d.ts +1 -1
  421. package/dist/textarea.js +1 -1
  422. package/dist/time-field.d.ts +1 -1
  423. package/dist/time-field.js +1 -1
  424. package/dist/toast.d.ts +1 -1
  425. package/dist/toast.js +1 -1
  426. package/dist/tooltip.d.ts +1 -1
  427. package/dist/tooltip.js +1 -1
  428. package/dist/tree.d.ts +1 -1
  429. package/dist/tree.js +1 -1
  430. package/dist/visually-hidden.d.ts +1 -1
  431. package/dist/visually-hidden.js +1 -1
  432. package/package.json +29 -28
  433. package/dist/chunks/Button-BoymWE-L.js +0 -2
  434. package/dist/chunks/Button-BoymWE-L.js.map +0 -1
  435. package/dist/chunks/Chip-DCaWaBqo.js +0 -2
  436. package/dist/chunks/Chip-DCaWaBqo.js.map +0 -1
  437. package/dist/chunks/CloseButton-DPgQztE0.js +0 -2
  438. package/dist/chunks/CloseButton-DPgQztE0.js.map +0 -1
  439. package/dist/chunks/ComboboxListBox-Cm3L1ULl.js +0 -2
  440. package/dist/chunks/ComboboxListBox-Cm3L1ULl.js.map +0 -1
  441. package/dist/chunks/DateSegment-2agXAd0f.js +0 -2
  442. package/dist/chunks/DateSegment-2agXAd0f.js.map +0 -1
  443. package/dist/chunks/FormHelp-AE6_iSLJ.js +0 -2
  444. package/dist/chunks/FormHelp-AE6_iSLJ.js.map +0 -1
  445. package/dist/chunks/FormLabel-CYcQiFUI.js +0 -2
  446. package/dist/chunks/FormLabel-CYcQiFUI.js.map +0 -1
  447. package/dist/chunks/Icon-DLB1f88W.js.map +0 -1
  448. package/dist/chunks/Link-CZsWCnQb.js +0 -2
  449. package/dist/chunks/Link-CZsWCnQb.js.map +0 -1
  450. package/dist/chunks/Menu-CSBg2Zmc.js +0 -2
  451. package/dist/chunks/Menu-CSBg2Zmc.js.map +0 -1
  452. package/dist/chunks/MenuToggle-BdQtF7FV.js +0 -2
  453. package/dist/chunks/MenuToggle-BdQtF7FV.js.map +0 -1
  454. package/dist/chunks/Portal-CgeR1WXV.js +0 -2
  455. package/dist/chunks/Portal-CgeR1WXV.js.map +0 -1
  456. package/dist/chunks/RangeCalendar-BJl-j4W2.js +0 -2
  457. package/dist/chunks/RangeCalendar-BJl-j4W2.js.map +0 -1
  458. package/dist/chunks/VisuallyHidden-C2dM7HhC.js +0 -2
  459. package/dist/chunks/VisuallyHidden-C2dM7HhC.js.map +0 -1
  460. package/dist/chunks/accordion-B8UWyvQB.js +0 -2
  461. package/dist/chunks/accordion-B8UWyvQB.js.map +0 -1
  462. package/dist/chunks/alert-BXI-_qlt.js +0 -2
  463. package/dist/chunks/alert-BXI-_qlt.js.map +0 -1
  464. package/dist/chunks/autocomplete-Baf9VSHN.js +0 -2
  465. package/dist/chunks/autocomplete-Baf9VSHN.js.map +0 -1
  466. package/dist/chunks/avatar-S3dGy6Qc.js +0 -2
  467. package/dist/chunks/avatar-S3dGy6Qc.js.map +0 -1
  468. package/dist/chunks/badge-D2oztCvs.js.map +0 -1
  469. package/dist/chunks/breadcrumb-s6J9itez.js +0 -2
  470. package/dist/chunks/breadcrumb-s6J9itez.js.map +0 -1
  471. package/dist/chunks/button-group-BGppPrIv.js +0 -2
  472. package/dist/chunks/button-group-BGppPrIv.js.map +0 -1
  473. package/dist/chunks/card-CobeDpf1.js +0 -2
  474. package/dist/chunks/card-CobeDpf1.js.map +0 -1
  475. package/dist/chunks/carousel-fTVPqnSV.js +0 -2
  476. package/dist/chunks/carousel-fTVPqnSV.js.map +0 -1
  477. package/dist/chunks/checkbox-ZyQn5Ku5.js +0 -2
  478. package/dist/chunks/checkbox-ZyQn5Ku5.js.map +0 -1
  479. package/dist/chunks/chip-input-BpVDRERg.js +0 -2
  480. package/dist/chunks/chip-input-BpVDRERg.js.map +0 -1
  481. package/dist/chunks/collapse--Go2Y73B.js.map +0 -1
  482. package/dist/chunks/color-input-Bwl5ef5B.js +0 -2
  483. package/dist/chunks/color-input-Bwl5ef5B.js.map +0 -1
  484. package/dist/chunks/combobox-Bp1tIaiW.js +0 -2
  485. package/dist/chunks/combobox-Bp1tIaiW.js.map +0 -1
  486. package/dist/chunks/context-menu-B4a0tS-h.js +0 -2
  487. package/dist/chunks/context-menu-B4a0tS-h.js.map +0 -1
  488. package/dist/chunks/datagrid-CH3Cy-q7.js +0 -3
  489. package/dist/chunks/datagrid-CH3Cy-q7.js.map +0 -1
  490. package/dist/chunks/datepicker-bOiM_zhJ.js +0 -2
  491. package/dist/chunks/datepicker-bOiM_zhJ.js.map +0 -1
  492. package/dist/chunks/dialogTransition-i9vw0i2Z.js.map +0 -1
  493. package/dist/chunks/divider-CjbF4OfA.js +0 -2
  494. package/dist/chunks/divider-CjbF4OfA.js.map +0 -1
  495. package/dist/chunks/drawer-C7Tz4XU_.js +0 -2
  496. package/dist/chunks/drawer-C7Tz4XU_.js.map +0 -1
  497. package/dist/chunks/file-input-CDM6qrmV.js +0 -2
  498. package/dist/chunks/file-input-CDM6qrmV.js.map +0 -1
  499. package/dist/chunks/flex-B52oLCCC.js.map +0 -1
  500. package/dist/chunks/floating-input-DmSZZc27.js +0 -2
  501. package/dist/chunks/floating-input-DmSZZc27.js.map +0 -1
  502. package/dist/chunks/focus-ring-SR_LwaN7.js +0 -2
  503. package/dist/chunks/focus-ring-SR_LwaN7.js.map +0 -1
  504. package/dist/chunks/focusRedirect-BrvK3U_o.js +0 -2
  505. package/dist/chunks/focusRedirect-BrvK3U_o.js.map +0 -1
  506. package/dist/chunks/form-GpdAyWWi.js +0 -2
  507. package/dist/chunks/form-GpdAyWWi.js.map +0 -1
  508. package/dist/chunks/form-field-CNPGTMiW.js.map +0 -1
  509. package/dist/chunks/grid-C7tO-ppc.js +0 -2
  510. package/dist/chunks/grid-C7tO-ppc.js.map +0 -1
  511. package/dist/chunks/icon-BQsT6YtE.js +0 -2
  512. package/dist/chunks/icon-BQsT6YtE.js.map +0 -1
  513. package/dist/chunks/iconSlot-BNu2MrFI.js +0 -2
  514. package/dist/chunks/iconSlot-BNu2MrFI.js.map +0 -1
  515. package/dist/chunks/input-adorn-DwdX-jxA.js +0 -2
  516. package/dist/chunks/input-adorn-DwdX-jxA.js.map +0 -1
  517. package/dist/chunks/input-group-Cuiuf4Dl.js +0 -2
  518. package/dist/chunks/input-group-Cuiuf4Dl.js.map +0 -1
  519. package/dist/chunks/list-BQCkwWjF.js +0 -2
  520. package/dist/chunks/list-BQCkwWjF.js.map +0 -1
  521. package/dist/chunks/menu-98EAD9nj.js +0 -2
  522. package/dist/chunks/menu-98EAD9nj.js.map +0 -1
  523. package/dist/chunks/modal-bgDR29Jh.js +0 -2
  524. package/dist/chunks/modal-bgDR29Jh.js.map +0 -1
  525. package/dist/chunks/nav-TiZuTHC6.js +0 -2
  526. package/dist/chunks/nav-TiZuTHC6.js.map +0 -1
  527. package/dist/chunks/nav-overflow-Ay5mM5Gc.js +0 -2
  528. package/dist/chunks/nav-overflow-Ay5mM5Gc.js.map +0 -1
  529. package/dist/chunks/navOverflow-B5krZe6D.js +0 -2
  530. package/dist/chunks/navOverflow-B5krZe6D.js.map +0 -1
  531. package/dist/chunks/navVariant-DeGTk9B7.js.map +0 -1
  532. package/dist/chunks/navbar-DxIwt0sc.js +0 -2
  533. package/dist/chunks/navbar-DxIwt0sc.js.map +0 -1
  534. package/dist/chunks/notification-Dbci5Ka3.js +0 -2
  535. package/dist/chunks/notification-Dbci5Ka3.js.map +0 -1
  536. package/dist/chunks/number-field-IBIX2IWH.js +0 -2
  537. package/dist/chunks/number-field-IBIX2IWH.js.map +0 -1
  538. package/dist/chunks/otp-input-ws393uPB.js +0 -2
  539. package/dist/chunks/otp-input-ws393uPB.js.map +0 -1
  540. package/dist/chunks/overlayPlacement-BtS90IVf.js.map +0 -1
  541. package/dist/chunks/pagination-BkOquk-x.js +0 -2
  542. package/dist/chunks/pagination-BkOquk-x.js.map +0 -1
  543. package/dist/chunks/password-strength-DDK8pHRq.js.map +0 -1
  544. package/dist/chunks/placeholder-BCr83sUn.js +0 -2
  545. package/dist/chunks/placeholder-BCr83sUn.js.map +0 -1
  546. package/dist/chunks/polymorphic-BhGNZQja.js +0 -2
  547. package/dist/chunks/polymorphic-BhGNZQja.js.map +0 -1
  548. package/dist/chunks/popover-Bdg8D4sm.js +0 -2
  549. package/dist/chunks/popover-Bdg8D4sm.js.map +0 -1
  550. package/dist/chunks/progress-zWkTltor.js +0 -2
  551. package/dist/chunks/progress-zWkTltor.js.map +0 -1
  552. package/dist/chunks/radio-B6gJdtoN.js +0 -2
  553. package/dist/chunks/radio-B6gJdtoN.js.map +0 -1
  554. package/dist/chunks/range-input-CT_8TKL7.js +0 -2
  555. package/dist/chunks/range-input-CT_8TKL7.js.map +0 -1
  556. package/dist/chunks/renderFormCheck-DN_-V62U.js +0 -2
  557. package/dist/chunks/renderFormCheck-DN_-V62U.js.map +0 -1
  558. package/dist/chunks/renderFormField-Brkw1yA6.js +0 -2
  559. package/dist/chunks/renderFormField-Brkw1yA6.js.map +0 -1
  560. package/dist/chunks/renderMenuItemContent-DUezZrpj.js +0 -2
  561. package/dist/chunks/renderMenuItemContent-DUezZrpj.js.map +0 -1
  562. package/dist/chunks/scrollspy-C2HmrnZ4.js +0 -2
  563. package/dist/chunks/scrollspy-C2HmrnZ4.js.map +0 -1
  564. package/dist/chunks/search-field--nDoCI_E.js +0 -2
  565. package/dist/chunks/search-field--nDoCI_E.js.map +0 -1
  566. package/dist/chunks/select-BwJIfv9f.js +0 -2
  567. package/dist/chunks/select-BwJIfv9f.js.map +0 -1
  568. package/dist/chunks/skeleton-CmZBLJwp.js +0 -2
  569. package/dist/chunks/skeleton-CmZBLJwp.js.map +0 -1
  570. package/dist/chunks/slot-CNhFZdHF.js +0 -2
  571. package/dist/chunks/slot-CNhFZdHF.js.map +0 -1
  572. package/dist/chunks/spinner-DblhvrHL.js +0 -2
  573. package/dist/chunks/spinner-DblhvrHL.js.map +0 -1
  574. package/dist/chunks/stack-DK5F53VT.js +0 -2
  575. package/dist/chunks/stack-DK5F53VT.js.map +0 -1
  576. package/dist/chunks/static-table-D0M4oc_t.js +0 -2
  577. package/dist/chunks/static-table-D0M4oc_t.js.map +0 -1
  578. package/dist/chunks/stepper-CVXMJ2yg.js +0 -2
  579. package/dist/chunks/stepper-CVXMJ2yg.js.map +0 -1
  580. package/dist/chunks/switch-C6s3LxEv.js +0 -2
  581. package/dist/chunks/switch-C6s3LxEv.js.map +0 -1
  582. package/dist/chunks/table-Cy6uEuEP.js +0 -2
  583. package/dist/chunks/table-Cy6uEuEP.js.map +0 -1
  584. package/dist/chunks/tableClassName-CZA2Bse8.js +0 -2
  585. package/dist/chunks/tableClassName-CZA2Bse8.js.map +0 -1
  586. package/dist/chunks/tabs-91T7-8qq.js +0 -2
  587. package/dist/chunks/tabs-91T7-8qq.js.map +0 -1
  588. package/dist/chunks/text-input-B4pTv6SU.js +0 -2
  589. package/dist/chunks/text-input-B4pTv6SU.js.map +0 -1
  590. package/dist/chunks/textarea-1A1nABQE.js +0 -2
  591. package/dist/chunks/textarea-1A1nABQE.js.map +0 -1
  592. package/dist/chunks/time-field-B3MA7ED_.js +0 -2
  593. package/dist/chunks/time-field-B3MA7ED_.js.map +0 -1
  594. package/dist/chunks/toast-CGHl3-oU.js +0 -2
  595. package/dist/chunks/toast-CGHl3-oU.js.map +0 -1
  596. package/dist/chunks/tooltip-Bc-u6nIW.js +0 -2
  597. package/dist/chunks/tooltip-Bc-u6nIW.js.map +0 -1
  598. package/dist/chunks/tree-Cql1veeZ.js +0 -2
  599. package/dist/chunks/tree-Cql1veeZ.js.map +0 -1
  600. package/dist/chunks/useButtonSemantics-CILM_lhi.js.map +0 -1
  601. package/dist/chunks/useDialogElement-CgOnJAzu.js +0 -2
  602. package/dist/chunks/useDialogElement-CgOnJAzu.js.map +0 -1
  603. package/dist/chunks/useDisabledAnchorGuard-Cz58UCXy.js +0 -2
  604. package/dist/chunks/useDisabledAnchorGuard-Cz58UCXy.js.map +0 -1
  605. package/dist/chunks/useFloatingOverlay-DLIvwx-8.js +0 -2
  606. package/dist/chunks/useFloatingOverlay-DLIvwx-8.js.map +0 -1
  607. package/dist/chunks/useForkedRef-DVEfT-KI.js +0 -2
  608. package/dist/chunks/useForkedRef-DVEfT-KI.js.map +0 -1
  609. package/dist/chunks/useFormField-BOqmBTC4.js +0 -2
  610. package/dist/chunks/useFormField-BOqmBTC4.js.map +0 -1
  611. package/dist/chunks/useOpenStateProps-DykUbnPJ.js.map +0 -1
  612. package/dist/chunks/useToastRegionQueue-CIV5SdiE.js +0 -2
  613. package/dist/chunks/useToastRegionQueue-CIV5SdiE.js.map +0 -1
  614. package/dist/chunks/useTransitionState-e5ToY7eX.js.map +0 -1
  615. package/dist/chunks/visibleState-B_i1zHu2.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu-264aGoBR.js","names":["useForkedRef","useIsomorphicLayoutEffect","executeAfterTransition","pushOverlay","useFloatingOverlay","useOpenStateProps","useOverlayMaxHeight","toAriaPlacement","resolveMenuOverlayPositioning","isEventInside","NavOverflowBoundary","React","classNames","noop","MenuContext","createContext","menuToggleClicks","openMenuDismissals","MenuRender","offsetProp","rest","Component","component","Fragment","wrapperRef","useRef","forkedRef","ref","toggleNodeRef","targetRef","overlayRef","submenuOverlaysRef","registerOverlay","node","id","state","useMenuTriggerState","useMenuTrigger","reference","mountedRef","useEffect","overlay","isInitialCommit","onShow","onShown","onHide","onHidden","resolvedPlacement","useOverlayPosition","placement","overlayProps","followsRequestsRef","visible","onVisibleChange","isControlledRef","focusReturnOwedRef","show","focusStrategy","hide","toggleVisible","close","portalContainer","updatePosition","autoClose","handled","handleDismiss","event","target","toggleNode","menuNode","isMenuTarget","active","holdsFocus","contextValue","useMemo","container","menuProps","menuTriggerProps","menuStyle","placementAttr","content","children","className","Menu","createPolymorphicComponent"],"sources":["../../src/components/menu/Menu.tsx"],"sourcesContent":["import React, {\n createContext,\n ElementType,\n ForwardRefRenderFunction,\n Fragment,\n ReactElement,\n useEffect,\n useMemo,\n useRef\n} from 'react'\nimport classNames from 'classnames'\nimport { AriaButtonProps, useMenuTrigger, useOverlayPosition } from 'react-aria'\nimport { useMenuTriggerState } from 'react-stately'\n\nimport {\n useFloatingOverlay,\n useForkedRef,\n useIsomorphicLayoutEffect,\n useOpenStateProps,\n useOverlayMaxHeight\n} from '../../hooks'\nimport { executeAfterTransition } from '../../utils/dialogTransition'\nimport { isEventInside } from '../../utils/insideEvents'\nimport {\n Placement,\n resolveMenuOverlayPositioning,\n toAriaPlacement\n} from '../../utils/overlayPlacement'\nimport { NavOverflowBoundary } from '../../utils/navOverflow'\nimport { pushOverlay } from '../../utils/overlayStack'\nimport {\n createPolymorphicComponent,\n PolymorphicComponentProps,\n PolymorphicRef\n} from '../../utils/polymorphic'\n\nexport type { Placement }\nexport type MenuFocusStrategy = 'first' | 'last'\n\nexport type MenuAutoClose = boolean | 'inside' | 'outside'\n\ntype MenuOwnProps<C extends ElementType> = {\n /**\n * Controls which clicks close the menu. `true` closes on any click inside or outside.\n * `false` leaves closing to the toggle, the Escape key and `visible`. `'inside'` closes only\n * on click inside the menu. `'outside'` closes only on click outside the menu.\n */\n autoClose?: MenuAutoClose\n /**\n * A string of all className you want applied to the base component.\n */\n className?: string\n /**\n * Component used for the root node. Either a string to use a HTML element or a component.\n * Defaults to `Fragment` — `MenuToggle`/`MenuList` render with no wrapping element, so\n * they land as direct children of whatever contains the `Menu`. This matters inside\n * `ButtonGroup`/`InputGroup`, whose CSS expects the toggle button and menu panel as direct\n * children rather than nested inside an intermediate node.\n *\n * Pass an actual element (e.g. `\"div\"`, or `\"li\"` for a navbar item) to opt back into a\n * wrapper — needed if you want to apply `className`/`style`/other rest props to a container\n * around the whole menu, for semantic wrapping like a nav `<li>`, or for `reference=\"parent\"`,\n * which positions off this wrapper and has nothing to measure against without one.\n */\n component?: C\n /**\n * Teleports the menu panel to a container element on open. Accepts an element reference, or\n * `true` to append to `document.body`, or to the open dialog the menu is in, so the panel\n * stays in that dialog's top layer.\n */\n container?: boolean | Element\n /**\n * Whether the menu is open when it first renders. Use it instead of `visible` when nothing\n * outside needs to control the menu.\n */\n defaultVisible?: boolean\n /**\n * Distance between the menu and its reference element, as `[skidding, distance]` in pixels.\n */\n offset?: [number, number]\n /**\n * Callback fired when the menu starts to hide.\n */\n onHide?: () => void\n /**\n * Callback fired after the menu finishes hiding.\n */\n onHidden?: () => void\n /**\n * Callback fired when the menu starts to show.\n */\n onShow?: () => void\n /**\n * Callback fired after the menu finishes showing.\n */\n onShown?: () => void\n /**\n * Callback fired when the menu asks to show or hide: the toggle, a click that `autoClose`\n * counts, or the Escape or Tab key. Receives the state it asks for. With `visible` set, the\n * menu changes only when `visible` does.\n */\n onVisibleChange?: (visible: boolean) => void\n /**\n * Initial placement. Chassis will flip it to keep the menu in view.\n *\n * @type 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end'\n */\n placement?: Placement\n /**\n * Reference element used for positioning. `'toggle'` uses the trigger. `'parent'` uses this\n * component's own rendered element, useful for split buttons and button groups.\n */\n reference?: 'toggle' | 'parent'\n /**\n * Whether the menu is open. Setting it makes the menu controlled: it opens and closes only\n * when this changes, so pair it with `onVisibleChange`. Leave it unset, or use\n * `defaultVisible`, for a menu that opens and closes itself.\n */\n visible?: boolean\n}\n\nexport type MenuProps<C extends ElementType = typeof Fragment> = PolymorphicComponentProps<\n C,\n MenuOwnProps<C>\n>\n\ntype MenuComponent = (<C extends ElementType = typeof Fragment>(\n props: MenuProps<C> & { ref?: PolymorphicRef<C> }\n) => ReactElement | null) & { displayName?: string }\n\nexport interface MenuContextProps {\n autoClose: MenuAutoClose\n close: () => void\n container?: boolean | Element\n focusStrategy: MenuFocusStrategy | null\n hide: () => void\n menuId: string\n menuStyle: React.CSSProperties\n menuTriggerProps: AriaButtonProps\n overlayRef: React.MutableRefObject<HTMLElement | null>\n placementAttr: string\n /**\n * The open dialog the menu is in, or `document.body`; `null` until the menu first opens. A\n * `MenuSubmenu` portals its panel there, so inside a modal dialog it is in the top layer with\n * the menu rather than under it, where the page is inert.\n */\n portalContainer?: Element | null\n reference: 'toggle' | 'parent'\n /**\n * Registers (or, passing `null`, unregisters) a nested `MenuSubmenu`'s own portaled panel\n * element, so this `Menu`'s outside/inside click-dismiss logic recognizes clicks landing in it\n * as \"inside\" the menu — see `MenuSubmenu`'s own use for why this is necessary: its panel\n * portals straight to `document.body`, structurally detached from this menu's own DOM subtree.\n */\n registerOverlay: (id: string, node: HTMLElement | null) => void\n show: (focusStrategy?: MenuFocusStrategy | null) => void\n targetRef: React.MutableRefObject<HTMLElement | null>\n toggle: (focusStrategy?: MenuFocusStrategy | null) => void\n toggleNodeRef: React.MutableRefObject<HTMLElement | null>\n triggerId: string\n visible: boolean\n}\n\n// A fully-shaped no-op default so a `MenuToggle`/`MenuList`/`MenuSubmenu` rendered without a\n// `Menu` ancestor (or in an environment where context can't cross a component boundary, e.g.\n// some static-site prerenderers) degrades to an inert, always-closed menu instead of throwing.\nconst noop = () => undefined\n\nconst defaultMenuContext: MenuContextProps = {\n autoClose: true,\n close: noop,\n focusStrategy: null,\n hide: noop,\n menuId: '',\n menuStyle: {},\n menuTriggerProps: {},\n overlayRef: { current: null },\n placementAttr: 'bottom-start',\n reference: 'toggle',\n registerOverlay: noop,\n show: noop,\n targetRef: { current: null },\n toggle: noop,\n toggleNodeRef: { current: null },\n triggerId: '',\n visible: false\n}\n\nexport const MenuContext = createContext(defaultMenuContext)\n\n// The clicks on a `MenuToggle` or a `MenuSubmenu` trigger. One in a menu's list opens a menu of\n// its own: it is no click on an item of that list.\nexport const menuToggleClicks = new WeakSet<Event>()\n\n// The outside-click handlers of the open menus. react-aria's press handling stops the click on a\n// `MenuToggle` before it reaches `window`, where those handlers listen, so another menu stayed open\n// beside the one the click opened: the toggle hands its click to each of them itself.\nexport const openMenuDismissals = new Set<(event: Event) => void>()\n\nfunction MenuRender<C extends ElementType = typeof Fragment>(\n {\n children,\n autoClose = true,\n className,\n component,\n container,\n defaultVisible,\n offset: offsetProp = [0, 2],\n onHide,\n onHidden,\n onShow,\n onShown,\n onVisibleChange,\n placement = 'bottom-start',\n reference = 'toggle',\n visible,\n ...rest\n }: MenuProps<C>,\n ref: PolymorphicRef<C>\n) {\n const Component = component ?? (Fragment as ElementType)\n const wrapperRef = useRef<HTMLElement>(null)\n const forkedRef = useForkedRef(ref, wrapperRef)\n const toggleNodeRef = useRef<HTMLElement | null>(null)\n const targetRef = useRef<HTMLElement | null>(null)\n const overlayRef = useRef<HTMLElement | null>(null)\n // Portaled `MenuSubmenu` panels register themselves here (see `registerOverlay` below and\n // `MenuSubmenu`'s own ref callback) so `handleDismiss` can recognize clicks inside them as\n // \"inside\" this menu despite living outside `overlayRef.current`'s own DOM subtree.\n const submenuOverlaysRef = useRef<Map<string, HTMLElement>>(new Map())\n const registerOverlay = (id: string, node: HTMLElement | null) => {\n if (node) submenuOverlaysRef.current.set(id, node)\n else submenuOverlaysRef.current.delete(id)\n }\n\n // Controlled by `visible` when it is set: `show`/`hide`/`toggle` (from `MenuToggle`, autoClose\n // dismissal, an item) then only report to `onVisibleChange`.\n const state = useMenuTriggerState(\n useOpenStateProps({ defaultVisible, onVisibleChange, visible }, 'Menu')\n )\n const { menuTriggerProps, menuProps } = useMenuTrigger<unknown>({}, state, toggleNodeRef)\n\n useIsomorphicLayoutEffect(() => {\n if (reference === 'parent') {\n targetRef.current = wrapperRef.current\n }\n }, [reference])\n\n // `onShown`/`onHidden` wait for chassis-css's own opacity/transform transition on `.menu`\n // (see `_menu.scss`) to actually finish, matching `Modal`'s identically-worded \"requests to\n // be shown\" vs \"finishes showing\" contract (`Modal.tsx`'s own `executeAfterTransition` use).\n // `overlayRef.current` is `MenuList`'s root element — already in the DOM and already\n // reflecting the new `.show` class by the time this effect runs, since React commits the\n // render before passive effects execute. Falls back to firing synchronously when no\n // `MenuList` is mounted to measure (nothing to transition, so nothing to wait for).\n //\n // All four report *transitions*, so none fires for the initial commit — mounting closed is not\n // a hide. Without this guard, mounting fired `onHide` (and scheduled `onHidden`) for every menu\n // on the page before `onShow` had ever fired once, which `Menu.spec.tsx` used to have to\n // `mockClear()` past.\n const mountedRef = useRef(false)\n\n useEffect(() => {\n const overlay = overlayRef.current\n const isInitialCommit = !mountedRef.current\n mountedRef.current = true\n if (isInitialCommit) return undefined\n\n if (state.isOpen) {\n onShow?.()\n if (!overlay) {\n onShown?.()\n return undefined\n }\n return executeAfterTransition(overlay, () => onShown?.(), true)\n }\n\n onHide?.()\n if (!overlay) {\n onHidden?.()\n return undefined\n }\n return executeAfterTransition(overlay, () => onHidden?.(), true)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.isOpen])\n\n const {\n overlayProps,\n placement: resolvedPlacement,\n updatePosition\n } = useOverlayPosition({\n targetRef,\n overlayRef,\n placement: toAriaPlacement(placement),\n offset: offsetProp[1],\n crossOffset: offsetProp[0],\n containerPadding: 8,\n isOpen: state.isOpen,\n // `useOverlayPosition` closes on any window scroll via a backward-compat `WeakMap` that\n // `useMenuTrigger` populates for `targetRef.current` (see `MenuToggle`'s `setRefs`).\n // Passing `null` opts out so the menu repositions with its trigger instead of vanishing —\n // matching `Autocomplete`/`Combobox`, neither of which is wired into that map.\n onClose: null\n })\n useOverlayMaxHeight(overlayRef, state.isOpen)\n\n const { menuStyle, placementAttr } = resolveMenuOverlayPositioning(\n overlayProps.style,\n placement,\n resolvedPlacement\n )\n\n // Escape closes the menu and returns focus to the toggle. Controlled, the close is a request:\n // focus returns when `visible` follows it, in the effect below, and stays where it is when\n // nothing can follow it or the caller declines. Read through a ref because the context value\n // these functions travel in is memoized.\n const followsRequestsRef = useRef(true)\n followsRequestsRef.current = visible === undefined || !!onVisibleChange\n const isControlledRef = useRef(false)\n isControlledRef.current = visible !== undefined\n const focusReturnOwedRef = useRef(false)\n\n const show = (focusStrategy?: MenuFocusStrategy | null) => state.open(focusStrategy)\n const hide = () => {\n focusReturnOwedRef.current = false\n state.close()\n }\n const toggleVisible = (focusStrategy?: MenuFocusStrategy | null) => state.toggle(focusStrategy)\n const close = () => {\n state.close()\n if (!isControlledRef.current) toggleNodeRef.current?.focus()\n else focusReturnOwedRef.current = followsRequestsRef.current\n }\n\n useEffect(() => {\n if (!state.isOpen && focusReturnOwedRef.current) toggleNodeRef.current?.focus()\n focusReturnOwedRef.current = false\n }, [state.isOpen])\n\n // The open dialog the toggle is in, if any, as `Popover` and `ContextMenu` resolve it: a list\n // teleported by `container` goes into that dialog rather than `document.body`, which lies\n // under a modal dialog's top layer, and the menu closes when the dialog does, teleported or\n // not, so a reopened dialog doesn't show a menu left open. `onShow`/`onHide` stay with the\n // effect above.\n const portalContainer = useFloatingOverlay({\n close: hide,\n isOpen: state.isOpen,\n triggerRef: toggleNodeRef\n })\n\n // The list is mounted again when it moves into the dialog, as a new element in another\n // containing block: placed again here, after its ref is set and before the paint.\n useIsomorphicLayoutEffect(() => {\n if (state.isOpen) updatePosition()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [portalContainer])\n\n // Deferred so the click that opened the menu doesn't immediately close it, and scoped\n // to match menu.js's `clearMenus`: skip the toggle itself, honor `inside`/`outside`\n // modes, and let Tab or clicks on form controls inside the menu pass through untouched.\n useEffect(() => {\n if (!state.isOpen || autoClose === false) return undefined\n\n // A toggle's click can come both ways: from the toggle, and on `window` when nothing stopped it.\n const handled = new WeakSet<Event>()\n const handleDismiss = (event: Event) => {\n if (event instanceof KeyboardEvent && event.key !== 'Tab') return\n if (handled.has(event)) return\n handled.add(event)\n\n const target = event.target as Node\n const toggleNode = toggleNodeRef.current\n const menuNode = overlayRef.current\n\n if (toggleNode?.contains(target)) return\n\n const isMenuTarget =\n !!menuNode?.contains(target) ||\n Array.from(submenuOverlaysRef.current.values()).some((node) => node.contains(target))\n\n // An overlay opened from the menu (a popover on an item, a picker's list) is portaled out\n // of the list, and React still renders it under it (`insideEvents`). A click there is\n // neither a click on an item nor one outside the menu: it is that overlay's.\n if (!isMenuTarget && isEventInside(event, overlayRef)) return\n if (isMenuTarget && menuToggleClicks.has(event)) return\n\n if (autoClose === 'inside' && !isMenuTarget) return\n if (autoClose === 'outside' && isMenuTarget) return\n\n if (\n isMenuTarget &&\n ((event instanceof KeyboardEvent && event.key === 'Tab') ||\n /input|select|option|textarea|form/i.test((target as HTMLElement).tagName ?? ''))\n ) {\n return\n }\n\n // An item chosen returns focus to the toggle, as Escape does: the closed list is\n // `display: none`, and focus on an item in it fell to `<body>`. Only while the menu holds\n // focus, or nothing does: an item that opened a dialog has moved it there. A click outside\n // or Tab has put focus where it is going already.\n const active = document.activeElement\n const holdsFocus =\n !active ||\n active === document.body ||\n !!menuNode?.contains(active) ||\n Array.from(submenuOverlaysRef.current.values()).some((node) => node.contains(active))\n if (isMenuTarget && holdsFocus) close()\n else hide()\n }\n\n const id = window.setTimeout(() => {\n window.addEventListener('click', handleDismiss)\n window.addEventListener('keyup', handleDismiss)\n openMenuDismissals.add(handleDismiss)\n })\n\n return () => {\n window.clearTimeout(id)\n window.removeEventListener('click', handleDismiss)\n window.removeEventListener('keyup', handleDismiss)\n openMenuDismissals.delete(handleDismiss)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.isOpen, autoClose])\n\n // Escape should always close the menu, independent of `autoClose`'s inside/outside/false\n // modes. `MenuList`'s own `onKeyDown` handling only fires when focus is already inside the\n // panel (e.g. opened via ArrowDown) — a mouse-press open via `useMenuTrigger` leaves focus on\n // the trigger button, where that handler is unreachable. The stack of open overlays listens on\n // `window`, which catches Escape regardless of where focus currently is, and gives it to this\n // menu only while nothing opened since is still open, and never to the popover or the dialog\n // around the menu as well.\n useEffect(() => {\n if (!state.isOpen) return undefined\n\n return pushOverlay({\n nodes: () => [overlayRef.current, toggleNodeRef.current],\n onEscape: close\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.isOpen])\n\n const contextValue: MenuContextProps = useMemo(\n () => ({\n autoClose,\n close,\n container: container === true ? (portalContainer ?? true) : container,\n focusStrategy: state.focusStrategy as MenuFocusStrategy | null,\n hide,\n menuId: menuProps.id ?? '',\n menuStyle,\n menuTriggerProps,\n overlayRef,\n placementAttr,\n portalContainer,\n reference,\n registerOverlay,\n show,\n targetRef,\n toggle: toggleVisible,\n toggleNodeRef,\n triggerId: menuTriggerProps.id ?? '',\n visible: state.isOpen\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n autoClose,\n container,\n state.focusStrategy,\n menuProps.id,\n menuStyle,\n menuTriggerProps,\n placementAttr,\n portalContainer,\n reference,\n state.isOpen\n ]\n )\n\n // Inside a `NavOverflow`, a menu in a nav item is that item's content, not its link: a toggle\n // rendered as a `NavLink` has nothing to show in the overflow menu.\n const content = <NavOverflowBoundary>{children}</NavOverflowBoundary>\n\n return (\n <MenuContext.Provider value={contextValue}>\n {Component === Fragment ? (\n content\n ) : (\n // `show` mirrors vanilla menu.js's `this._parent.classList.add('show')` — needed for\n // e.g. `.nav-item.show .nav-link` to put a `NavLink`-rooted `MenuToggle` into its\n // pressed look while open, since a bare `.nav-link.show` has no styling of its own.\n <Component\n className={classNames(className, { show: state.isOpen })}\n {...rest}\n ref={forkedRef}\n >\n {content}\n </Component>\n )}\n </MenuContext.Provider>\n )\n}\n\nexport const Menu = createPolymorphicComponent<MenuComponent>(\n MenuRender as ForwardRefRenderFunction<Element, MenuProps<ElementType>>,\n 'Menu'\n)\n"],"mappings":"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"}
@@ -31,7 +31,8 @@ type MenuOwnProps<C extends ElementType> = {
31
31
  component?: C;
32
32
  /**
33
33
  * Teleports the menu panel to a container element on open. Accepts an element reference, or
34
- * `true` to append to `document.body`.
34
+ * `true` to append to `document.body`, or to the open dialog the menu is in, so the panel
35
+ * stays in that dialog's top layer.
35
36
  */
36
37
  container?: boolean | Element;
37
38
  /**
@@ -92,4 +93,4 @@ type MenuComponent = (<C extends ElementType = typeof Fragment>(props: MenuProps
92
93
  declare const Menu: MenuComponent;
93
94
  //#endregion
94
95
  export { MenuProps as i, MenuAutoClose as n, MenuFocusStrategy as r, Menu as t };
95
- //# sourceMappingURL=Menu-QeYOzrUL.d.ts.map
96
+ //# sourceMappingURL=Menu-CCYshRuL.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{d as e,f as t,m as n,v as r}from"./slot-BQVx1Eew.js";import{t as i}from"./useForkedRef-WoqMqsWE.js";import{t as a}from"./polymorphic-CZIFszAy.js";import{t as o}from"./useHydrated-Dud4JEwp.js";import{t as s}from"./renderMenuItemContent-DNdj-Ukz.js";import{t as c}from"./Portal-BTDylxAi.js";import{t as l}from"./Link-DE8NSAXJ.js";import{t as u}from"./Button-ZU-x1uN_.js";import{t as d}from"./insideEvents-CWcNrMu7.js";import{i as f,n as p,r as m}from"./Menu-264aGoBR.js";import h,{createContext as g,forwardRef as _,useContext as v,useEffect as y,useRef as b}from"react";import x from"classnames";import{mergeProps as S,useButton as C}from"react-aria";const w=_(({className:e,...t},n)=>{let r=x(`menu-divider`,e);return/* @__PURE__ */ h.createElement(`hr`,{className:r,...t,ref:n})});w.displayName=`MenuDivider`;function T({children:e,className:t,component:n,role:r=`presentation`,...i},a){let o=n??`h4`,s=x(`menu-header`,t);return/* @__PURE__ */ h.createElement(o,{className:s,role:r,...i,ref:a},e)}const E=a(T,`MenuHeader`);function D({children:e,className:t,component:r,description:i,href:a,icon:o,onClick:c,selected:u,...d},f){let p=x(`menu-item`,{selected:u},t);return/* @__PURE__ */ h.createElement(l,{role:`menuitem`,component:n(r,a,`button`),href:a,onClick:e=>{a===`#`&&e.preventDefault(),c?.(e)},...d,className:p,ref:f},s({icon:o,label:e,description:i}))}const O=a(D,`MenuItem`),k=`:is(.menu-item, .submenu-back):not(.disabled):not(:disabled)`,A=e=>!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length),j=e=>{if(!e)return[];let t=[];for(let n of Array.from(e.children))if(n.matches(k))t.push(n);else if(n.classList.contains(`submenu`)){let e=Array.from(n.children).find(e=>e.matches(k));e&&t.push(e)}return t.filter(A)},M=(e,t)=>{e.length&&(t===`first`?e[0]:e[e.length-1]).focus()},N=(e,{onArrowLeft:t,onArrowRight:n,onEscape:r})=>{let i=e.currentTarget,a=e.target;switch(e.key){case`ArrowDown`:case`ArrowUp`:{e.preventDefault(),e.stopPropagation();let t=j(i);if(!t.length)return;let n=t.indexOf(a);t[n===-1?e.key===`ArrowDown`?0:t.length-1:(n+(e.key===`ArrowDown`?1:-1)+t.length)%t.length].focus();return}case`Home`:case`End`:e.preventDefault(),e.stopPropagation(),M(j(i),e.key===`Home`?`first`:`last`);return;case`Escape`:if(!r)return;e.preventDefault(),e.stopPropagation(),r();return;case`ArrowLeft`:if(!t)return;e.preventDefault(),e.stopPropagation(),t();return;case`ArrowRight`:if(!n)return;e.preventDefault(),e.stopPropagation(),n();return}},P=g(null),F=()=>{let e=b(null);if(!e.current){let t=/* @__PURE__ */ new Map;e.current={register:(e,n)=>(t.set(e,n),()=>{t.delete(e)}),notifyOpen:e=>{t.forEach((t,n)=>{n!==e&&t()})}}}return e.current},I=g(null),L=g(!0),R=e=>e.type===`header`?/* @__PURE__ */ h.createElement(E,{key:e.id},e.label):e.type===`divider`?/* @__PURE__ */ h.createElement(w,{key:e.id}):/* @__PURE__ */ h.createElement(O,{key:e.id,href:e.href,disabled:e.disabled,selected:e.selected,onClick:e.onClick},s({icon:e.icon,label:e.label,description:e.description,selected:e.selected}));function z({children:e,className:t,component:n,items:r,onKeyDown:a,...s},l){let u=n??`div`,{close:f,container:m,focusStrategy:g,menuId:_,menuStyle:b,overlayRef:C,placementAttr:w,triggerId:T,visible:E}=v(p),D=i(l,C),O=F(),k=o(),A=E&&k;y(()=>{E&&g&&M(j(C.current),g===`last`?`last`:`first`)},[E,g]);let I=e=>{N(e,{onEscape:f}),a?.(e)},L=s[`aria-label`]?void 0:T||void 0,z=/* @__PURE__ */ h.createElement(u,{role:`menu`,id:_,"aria-labelledby":L,className:x(`menu`,{show:A},t),style:b,"data-cx-placement":w,...S(s,d(C)),onKeyDown:I,ref:D},/* @__PURE__ */ h.createElement(P.Provider,{value:O},r?r.map(R):e));return m?/* @__PURE__ */ h.createElement(c,{container:m===!0?void 0:m},z):z}const B=a(z,`MenuList`);function V({children:n,caret:a=!0,className:o,component:s,href:c,onClick:l,onKeyDown:d,tabIndex:g,..._},y){let{hide:w,menuTriggerProps:T,reference:E,targetRef:D,toggleNodeRef:O,visible:k}=v(p),A=s??u,j=b(null),M=A===u?e(c)?`anchor`:`button`:r(A,c,_),N=M===`button`,P=A===u?{href:c}:t(M,c,`MenuToggle`),{buttonProps:F}=C({...T,elementType:N?`button`:`a`},j),I=b(!1),L=i(y,e=>{j.current=e,O.current=e,E!==`parent`&&(D.current=e)}),R=e=>{I.current=e.pointerType!==`touch`&&k},z=e=>{e.preventDefault(),m.add(e.nativeEvent);for(let t of[...f])t(e.nativeEvent);I.current&&(I.current=!1,w()),l?.(e)};return/* @__PURE__ */ h.createElement(A,{...N?{type:`button`}:{},className:x({caret:a,show:k},o),...S({onPointerDown:R},_,F,{onClick:z,onKeyDown:d,...g!==void 0&&{tabIndex:g}}),...P,ref:L},n)}const H=a(V,`MenuToggle`);export{L as a,j as c,E as d,w as f,P as i,N as l,B as n,F as o,I as r,M as s,H as t,O as u};
2
+ //# sourceMappingURL=MenuToggle-DcPEh55c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuToggle-DcPEh55c.js","names":["hasHref","hrefProps","linkElement","resolveLinkKind","useForkedRef","createPolymorphicComponent","useHydrated","renderMenuItemContent","Portal","Link","Button","insideEventProps","openMenuDismissals","MenuContext","menuToggleClicks","React","classNames","MenuDivider","forwardRef","rest","_className","className","MenuHeaderRender","Component","component","children","MenuHeader","MenuItemRender","href","event","onClick","MenuItem","VISIBLE_ITEMS_SELECTOR","isVisible","element","getMenuItems","menu","items","child","trigger","grandchild","focusMenuItem","target","handleMenuKeyDown","currentIndex","onEscape","onArrowLeft","onArrowRight","SubmenuGroupContext","createContext","useSubmenuGroupProvider","ref","useRef","closers","id","close","key","SubmenuActionsContext","SubmenuVisibleContext","renderMenuItemDef","def","MenuListRender","useContext","forkedRef","overlayRef","submenuGroup","hydrated","shown","visible","useEffect","focusStrategy","handleKeyDown","onKeyDown","labelledBy","triggerId","content","menuId","menuStyle","placementAttr","mergeProps","container","MenuList","MenuToggleRender","buttonRef","kind","rendersButton","linkProps","useButton","menuTriggerProps","wasOpenRef","node","reference","handlePointerDown","handleClick","dismiss","hide","buttonProps","tabIndex","MenuToggle"],"sources":["../../src/components/menu/MenuDivider.tsx","../../src/components/menu/MenuHeader.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/menu/menuNavigation.ts","../../src/components/menu/submenuGroup.ts","../../src/components/menu/MenuList.tsx","../../src/components/menu/MenuToggle.tsx"],"sourcesContent":["import React, { forwardRef, HTMLAttributes } from 'react'\nimport classNames from 'classnames'\n\nexport interface MenuDividerProps extends HTMLAttributes<HTMLHRElement> {\n /**\n * A string of all className you want applied to the component.\n */\n className?: string\n}\n\nexport const MenuDivider = forwardRef<HTMLHRElement, MenuDividerProps>(\n ({ className, ...rest }, ref) => {\n const _className = classNames('menu-divider', className)\n\n return <hr className={_className} {...rest} ref={ref} />\n }\n)\n\nMenuDivider.displayName = 'MenuDivider'\n","import React, { ElementType, ForwardRefRenderFunction, ReactElement } from 'react'\nimport classNames from 'classnames'\n\nimport {\n createPolymorphicComponent,\n PolymorphicComponentProps,\n PolymorphicRef\n} from '../../utils/polymorphic'\n\ntype MenuHeaderOwnProps<C extends ElementType> = {\n /**\n * A string of all className you want applied to the component.\n */\n className?: string\n /**\n * Component used for the root node. Either a string to use a HTML element or a component.\n */\n component?: C\n /**\n * ARIA role applied to the root node. Defaults to `'presentation'` — see the render function\n * for why.\n */\n role?: React.AriaRole\n}\n\nexport type MenuHeaderProps<C extends ElementType = 'h4'> = PolymorphicComponentProps<\n C,\n MenuHeaderOwnProps<C>\n>\n\ntype MenuHeaderComponent = (<C extends ElementType = 'h4'>(\n props: MenuHeaderProps<C> & { ref?: PolymorphicRef<C> }\n) => ReactElement | null) & { displayName?: string }\n\nfunction MenuHeaderRender<C extends ElementType = 'h4'>(\n { children, className, component, role = 'presentation', ...rest }: MenuHeaderProps<C>,\n ref: PolymorphicRef<C>\n) {\n const Component = component ?? 'h4'\n const _className = classNames('menu-header', className)\n\n // Always rendered as a direct child of `role=\"menu\"` (see MenuList) — ARIA's menu role only\n // permits menuitem/group/separator children, so a bare heading fails aria-required-children.\n // `role=\"presentation\"` opts the element itself out without hiding its text content.\n return (\n <Component className={_className} role={role} {...rest} ref={ref}>\n {children}\n </Component>\n )\n}\n\nexport const MenuHeader = createPolymorphicComponent<MenuHeaderComponent>(\n MenuHeaderRender as ForwardRefRenderFunction<Element, MenuHeaderProps<ElementType>>,\n 'MenuHeader'\n)\n","import React, {\n ElementType,\n ForwardRefRenderFunction,\n MouseEvent,\n ReactElement,\n ReactNode\n} from 'react'\nimport classNames from 'classnames'\n\nimport { linkElement } from '../../utils/elementKind'\nimport {\n createPolymorphicComponent,\n PolymorphicRef,\n PolymorphicRefWithFallback\n} from '../../utils/polymorphic'\nimport { renderMenuItemContent } from './renderMenuItemContent'\nimport { LinkProps, Link } from '../link/Link'\n\ntype MenuItemOwnProps = {\n /**\n * A string of all className you want applied to the component.\n */\n className?: string\n /**\n * Secondary line of text rendered below `children` (`.menu-item-description`).\n */\n description?: ReactNode\n /**\n * Icon rendered at the item's leading edge (`.menu-item-icon`).\n */\n icon?: ReactNode\n /**\n * Marks the item as the current selection in a choice list. Renders in a heavier font weight.\n * Combine with a manually-composed `.menu-item-check` icon (in `children`, or via `icon` on a\n * plain, non-selection item) to also show a checkmark — this prop alone doesn't add one, so\n * existing font-weight-only usage keeps rendering unchanged.\n */\n selected?: boolean\n}\n\nexport type MenuItemProps<C extends ElementType = 'a'> = LinkProps<C> & MenuItemOwnProps\n\ntype MenuItemComponent = (<C extends ElementType = 'a'>(\n props: MenuItemProps<C> & {\n ref?: PolymorphicRefWithFallback<C, HTMLAnchorElement | HTMLButtonElement>\n }\n) => ReactElement | null) & { displayName?: string }\n\nfunction MenuItemRender<C extends ElementType = 'a'>(\n {\n children,\n className,\n component,\n description,\n href,\n icon,\n onClick,\n selected,\n ...rest\n }: MenuItemProps<C>,\n ref: PolymorphicRef<C>\n) {\n const _className = classNames('menu-item', { selected }, className)\n\n // `href=\"#\"` is a common placeholder for menu items that act via `onClick` rather than\n // real navigation. Left alone, a plain anchor click still navigates to the empty fragment,\n // which scrolls the page to the top — so we suppress that default for the placeholder case\n // only, leaving real same-page anchors (`href=\"#some-id\"`) free to navigate as expected.\n const handleClick = (event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {\n if (href === '#') event.preventDefault()\n onClick?.(event)\n }\n\n // An item with `href` is an `<a>`, one without is a `<button type=\"button\">`, unless `component`\n // or `asChild` chose the element (see `linkElement`). chassis-css styles both as `.menu-item`.\n // An item without `href` used to be an `<a>` with no `href`, which isn't focusable, so keyboard\n // users couldn't reach it outside the menu's own arrow-key handling.\n return (\n <Link\n role=\"menuitem\"\n component={linkElement(component as ElementType | undefined, href, 'button')}\n href={href}\n onClick={handleClick}\n {...(rest as Record<string, unknown>)}\n className={_className}\n ref={ref as PolymorphicRef<ElementType>}\n >\n {renderMenuItemContent({ icon, label: children, description })}\n </Link>\n )\n}\n\nexport const MenuItem = createPolymorphicComponent<MenuItemComponent>(\n MenuItemRender as ForwardRefRenderFunction<Element, MenuItemProps<ElementType>>,\n 'MenuItem'\n)\n","import React from 'react'\n\n// Mirrors Chassis CSS's menu.js SELECTOR_VISIBLE_ITEMS / SELECTOR_KB_NAV_ITEMS: direct-child\n// menu items and submenu-back buttons, plus submenu trigger items nested one level inside a\n// `.submenu` wrapper (which aren't direct children of the `.menu`).\n//\n// Walks `children` directly rather than a `:scope`-based `querySelectorAll` — jsdom's selector\n// engine (nwsapi) mis-parses `:scope` queries against an element whose `id` contains a colon,\n// which is exactly the shape of React 18's default `useId()` output now that `MenuList`/\n// `MenuSubmenu` set a real `id` for `aria-controls`/`aria-labelledby` linking. Real browsers don't\n// have this bug, but walking children is just as correct and sidesteps it either way.\nconst VISIBLE_ITEMS_SELECTOR = ':is(.menu-item, .submenu-back):not(.disabled):not(:disabled)'\n\nconst isVisible = (element: HTMLElement) =>\n Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length)\n\nexport const getMenuItems = (menu: HTMLElement | null): HTMLElement[] => {\n if (!menu) return []\n const items: HTMLElement[] = []\n for (const child of Array.from(menu.children)) {\n if (child.matches(VISIBLE_ITEMS_SELECTOR)) {\n items.push(child as HTMLElement)\n } else if (child.classList.contains('submenu')) {\n const trigger = Array.from(child.children).find((grandchild) =>\n grandchild.matches(VISIBLE_ITEMS_SELECTOR)\n )\n if (trigger) items.push(trigger as HTMLElement)\n }\n }\n return items.filter(isVisible)\n}\n\nexport const focusMenuItem = (items: HTMLElement[], target: 'first' | 'last') => {\n if (!items.length) return\n ;(target === 'first' ? items[0]! : items[items.length - 1]!).focus()\n}\n\nexport interface MenuKeyDownOptions {\n onArrowLeft?: () => void\n onArrowRight?: () => void\n onEscape?: () => void\n}\n\n// Scoped to `event.currentTarget` (the `.menu` element the handler is bound to), so the same\n// function drives keyboard navigation for both the top-level menu and any nested submenu list.\n// `onArrowLeft`/`onArrowRight` are both optional and independent (rather than a single\n// direction-agnostic \"close\" callback) so a caller under an RTL locale can wire the one that\n// actually points back toward the trigger — see `MenuSubmenu`, the only current consumer of\n// either.\nexport const handleMenuKeyDown = (\n event: React.KeyboardEvent<HTMLElement>,\n { onArrowLeft, onArrowRight, onEscape }: MenuKeyDownOptions\n): void => {\n const menu = event.currentTarget\n const target = event.target as HTMLElement\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault()\n event.stopPropagation()\n const items = getMenuItems(menu)\n if (!items.length) return\n const currentIndex = items.indexOf(target)\n const nextIndex =\n currentIndex === -1\n ? event.key === 'ArrowDown'\n ? 0\n : items.length - 1\n : (currentIndex + (event.key === 'ArrowDown' ? 1 : -1) + items.length) % items.length\n // `nextIndex` is always a valid index into `items` here (0, items.length - 1, or a modulo\n // result — the `if (!items.length) return` above already ruled out the empty-array case).\n items[nextIndex]!.focus()\n return\n }\n case 'Home':\n case 'End': {\n event.preventDefault()\n event.stopPropagation()\n focusMenuItem(getMenuItems(menu), event.key === 'Home' ? 'first' : 'last')\n return\n }\n case 'Escape': {\n if (!onEscape) return\n event.preventDefault()\n event.stopPropagation()\n onEscape()\n return\n }\n case 'ArrowLeft': {\n if (!onArrowLeft) return\n event.preventDefault()\n event.stopPropagation()\n onArrowLeft()\n return\n }\n case 'ArrowRight': {\n if (!onArrowRight) return\n event.preventDefault()\n event.stopPropagation()\n onArrowRight()\n return\n }\n default:\n }\n}\n","import { createContext, useRef } from 'react'\n\n// Lets sibling `.submenu` flyouts at the same menu level close one another when a new one\n// opens, mirroring menu.js's `_closeSiblingSubmenus`. One provider instance is created per\n// menu level (the top-level `.menu` and each `.submenu`'s own nested list) and lives for the\n// lifetime of that level, so registration doesn't churn on every render.\nexport interface SubmenuGroupContextValue {\n register: (id: string, close: () => void) => () => void\n notifyOpen: (id: string) => void\n}\n\nexport const SubmenuGroupContext = createContext<SubmenuGroupContextValue | null>(null)\n\nexport const useSubmenuGroupProvider = (): SubmenuGroupContextValue => {\n const ref = useRef<SubmenuGroupContextValue | null>(null)\n\n if (!ref.current) {\n const closers = new Map<string, () => void>()\n ref.current = {\n register: (id, close) => {\n closers.set(id, close)\n return () => {\n closers.delete(id)\n }\n },\n notifyOpen: (id) => {\n closers.forEach((close, key) => {\n if (key !== id) close()\n })\n }\n }\n }\n\n return ref.current\n}\n\n// Exposes the current `.submenu`'s own close-and-refocus action to a nested `MenuSubmenuBack`\n// button, without threading it through the sibling-group registry above.\nexport interface SubmenuActionsContextValue {\n close: () => void\n}\n\nexport const SubmenuActionsContext = createContext<SubmenuActionsContextValue | null>(null)\n\n// Whether the `.submenu` a nested `MenuSubmenu` is in is open. A submenu's panel is portaled out\n// of its parent's, so nothing hides it when the parent closes: it follows this, as the first\n// level follows the `Menu` itself. `true` at the top level, where there is no parent submenu.\nexport const SubmenuVisibleContext = createContext(true)\n","import React, {\n ElementType,\n ForwardRefRenderFunction,\n ReactElement,\n ReactNode,\n useContext,\n useEffect\n} from 'react'\nimport classNames from 'classnames'\nimport { mergeProps } from 'react-aria'\n\nimport { useForkedRef } from '../../hooks'\nimport { insideEventProps } from '../../utils/insideEvents'\nimport { renderMenuItemContent } from './renderMenuItemContent'\nimport {\n createPolymorphicComponent,\n PolymorphicComponentProps,\n PolymorphicRef\n} from '../../utils/polymorphic'\nimport { useHydrated } from '../../hooks/useHydrated'\nimport { Portal } from '../portal/Portal'\nimport { MenuContext } from './Menu'\nimport { MenuDivider } from './MenuDivider'\nimport { MenuHeader } from './MenuHeader'\nimport { MenuItem } from './MenuItem'\nimport { MenuItemsDef } from './MenuItemDef'\nimport { focusMenuItem, getMenuItems, handleMenuKeyDown } from './menuNavigation'\nimport { SubmenuGroupContext, useSubmenuGroupProvider } from './submenuGroup'\n\ntype MenuListOwnProps<C extends ElementType> = {\n /**\n * A string of all className you want applied to the base component.\n */\n className?: string\n /**\n * Component used for the root node. Either a string to use a HTML element or a component.\n */\n component?: C\n /**\n * Array of item/header/divider definitions for data-driven rendering. When provided, children\n * are ignored. Covers flat items, headers, and dividers only — for nested submenus, compose\n * with `children` and `MenuSubmenu` instead.\n */\n items?: MenuItemsDef\n}\n\nexport type MenuListProps<C extends ElementType = 'div'> = PolymorphicComponentProps<\n C,\n MenuListOwnProps<C>\n>\n\ntype MenuListComponent = (<C extends ElementType = 'div'>(\n props: MenuListProps<C> & { ref?: PolymorphicRef<C> }\n) => ReactElement | null) & { displayName?: string }\n\nconst renderMenuItemDef = (def: MenuItemsDef[number]): ReactNode => {\n if (def.type === 'header') {\n return <MenuHeader key={def.id}>{def.label}</MenuHeader>\n }\n if (def.type === 'divider') {\n return <MenuDivider key={def.id} />\n }\n return (\n <MenuItem\n key={def.id}\n href={def.href}\n disabled={def.disabled}\n selected={def.selected}\n onClick={def.onClick}\n >\n {renderMenuItemContent({\n icon: def.icon,\n label: def.label,\n description: def.description,\n selected: def.selected\n })}\n </MenuItem>\n )\n}\n\nfunction MenuListRender<C extends ElementType = 'div'>(\n { children, className, component, items, onKeyDown, ...rest }: MenuListProps<C>,\n ref: PolymorphicRef<C>\n) {\n const Component = component ?? 'div'\n const {\n close,\n container,\n focusStrategy,\n menuId,\n menuStyle,\n overlayRef,\n placementAttr,\n triggerId,\n visible\n } = useContext(MenuContext)\n const forkedRef = useForkedRef(ref, overlayRef)\n const submenuGroup = useSubmenuGroupProvider()\n // The list is positioned in a layout effect, which the server never runs: a menu open on its\n // first render was painted at the top left of the page until the JavaScript had loaded. It is\n // shown once hydration has finished, where that effect has placed it.\n const hydrated = useHydrated()\n const shown = visible && hydrated\n\n // ArrowDown/ArrowUp on the trigger opens the menu with a focus strategy (see `Menu`'s\n // `useMenuTrigger` wiring) — this is where that intent actually lands, since we're not\n // adopting `useMenu`'s own collection-aware auto-focus.\n useEffect(() => {\n if (!visible || !focusStrategy) return\n focusMenuItem(getMenuItems(overlayRef.current), focusStrategy === 'last' ? 'last' : 'first')\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, focusStrategy])\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n handleMenuKeyDown(event, { onEscape: close })\n onKeyDown?.(event as React.KeyboardEvent<HTMLDivElement>)\n }\n\n // Labelled by the trigger, unless the caller names the list itself: `aria-labelledby` would\n // outrank that `aria-label`. Left out when there is no trigger to point at (a `ContextMenu`'s\n // region with no id of its own has one; a list rendered with no `Menu` around it has none).\n const ariaLabel = (rest as { 'aria-label'?: string })['aria-label']\n const labelledBy = ariaLabel ? undefined : triggerId || undefined\n\n const content = (\n <Component\n role=\"menu\"\n id={menuId}\n aria-labelledby={labelledBy}\n className={classNames('menu', { show: shown }, className)}\n style={menuStyle}\n data-cx-placement={placementAttr}\n // Marks the events that reach the list through React's tree, for the `Menu` or the\n // `ContextMenu` to tell an overlay opened from an item from the page outside.\n {...(mergeProps(rest, insideEventProps(overlayRef)) as Record<string, unknown>)}\n onKeyDown={handleKeyDown}\n ref={forkedRef}\n >\n <SubmenuGroupContext.Provider value={submenuGroup}>\n {items ? items.map(renderMenuItemDef) : children}\n </SubmenuGroupContext.Provider>\n </Component>\n )\n\n if (container) {\n return <Portal container={container === true ? undefined : container}>{content}</Portal>\n }\n\n return content\n}\n\nexport const MenuList = createPolymorphicComponent<MenuListComponent>(\n MenuListRender as ForwardRefRenderFunction<Element, MenuListProps<ElementType>>,\n 'MenuList'\n)\n","import React, {\n ElementType,\n ForwardRefRenderFunction,\n ReactElement,\n useContext,\n useRef\n} from 'react'\nimport classNames from 'classnames'\nimport { mergeProps, useButton } from 'react-aria'\n\nimport { Button, ButtonProps } from '../button/Button'\nimport { MenuContext, menuToggleClicks, openMenuDismissals } from './Menu'\nimport { ContextColor, Shapes } from '../../types'\nimport {\n createPolymorphicComponent,\n PolymorphicComponentProps,\n PolymorphicRef\n} from '../../utils/polymorphic'\nimport { useForkedRef } from '../../hooks'\nimport { hasHref, hrefProps, resolveLinkKind } from '../../utils/elementKind'\n\ntype MenuToggleOwnProps<C extends ElementType> = {\n /**\n * Toggle the active state for the component.\n */\n active?: boolean\n /**\n * Draws the caret after the toggle's content. Set it to `false` for a toggle that shows what it\n * is another way, such as an icon-only \"more\" button.\n *\n * @default true\n */\n caret?: boolean\n /**\n * A string of all className you want applied to the base component.\n */\n className?: string\n /**\n * Sets the color of the component to one of Chassis context colors. Only applies to the\n * default `Button` root.\n */\n color?: ContextColor\n /**\n * Component used for the root node — the trigger element the menu opens from. Defaults to\n * `Button`; swap for e.g. `NavLink` to render a nav-item-style trigger (`.nav-link.caret`)\n * instead of a `.button.caret`. Its own props are type-checked at the call site once passed\n * here.\n */\n component?: C\n /**\n * Toggle the disabled state for the component.\n */\n disabled?: boolean\n /**\n * The href attribute specifies the URL of the page the link goes to.\n */\n href?: string\n /**\n * Select the shape of the component. Only applies to the default `Button` root.\n */\n shape?: Shapes\n /**\n * Size the component sm or lg. Only applies to the default `Button` root.\n */\n size?: 'sm' | 'lg'\n /**\n * Sets the style variant of the component, as `Button`'s own `variant` does. Only applies to\n * the default `Button` root.\n */\n variant?: ButtonProps['variant']\n}\n\nexport type MenuToggleProps<C extends ElementType = typeof Button> = PolymorphicComponentProps<\n C,\n MenuToggleOwnProps<C>\n>\n\ntype MenuToggleComponent = (<C extends ElementType = typeof Button>(\n props: MenuToggleProps<C> & { ref?: PolymorphicRef<C> }\n) => ReactElement | null) & { displayName?: string }\n\nfunction MenuToggleRender<C extends ElementType = typeof Button>(\n {\n children,\n caret = true,\n className,\n component,\n href,\n onClick,\n onKeyDown,\n tabIndex,\n ...rest\n }: MenuToggleProps<C>,\n ref: PolymorphicRef<C>\n) {\n const { hide, menuTriggerProps, reference, targetRef, toggleNodeRef, visible } =\n useContext(MenuContext)\n const Component = component ?? Button\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n // What the root renders. The default `Button` renders a `<button>`, or an `<a>` given `href`.\n // Anything else is asked, like every polymorphic component asks: `NavLink` is a component\n // reference, and `component=\"button\"` a real `<button>`.\n const kind =\n Component === Button\n ? hasHref(href)\n ? 'anchor'\n : 'button'\n : resolveLinkKind(Component, href, rest)\n const rendersButton = kind === 'button'\n // `Button` applies the `href` rule itself; anything else gets `href` only if it can take one.\n const linkProps = Component === Button ? { href } : hrefProps(kind, href, 'MenuToggle')\n // `elementType` tells react-aria whether the rendered root already has native button\n // semantics or needs them emulated (`role=\"button\"`, keyboard activation).\n const { buttonProps } = useButton(\n { ...menuTriggerProps, elementType: rendersButton ? 'button' : 'a' },\n buttonRef\n )\n const wasOpenRef = useRef(false)\n\n const setRefs = (node: HTMLButtonElement | null) => {\n buttonRef.current = node\n toggleNodeRef.current = node\n if (reference !== 'parent') {\n targetRef.current = node\n }\n }\n\n const forkedRef = useForkedRef(ref, setRefs)\n\n // react-aria's `useMenuTrigger` opens (rather than toggles) on mouse/pen press start, so\n // re-clicking an already-open trigger would otherwise re-open it right back instead of\n // closing it. Capture whether it was open before that happens — ours has to run ahead of\n // `buttonProps`' own `onPointerDown` in the `mergeProps` chain below — then close it back\n // down on click. Touch is exempt: react-aria's `onPress` already toggles it correctly there.\n const handlePointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\n wasOpenRef.current = event.pointerType !== 'touch' && visible\n }\n\n // Another open menu closes on the click (`openMenuDismissals`), unless this toggle is in its\n // list (`menuToggleClicks`).\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n menuToggleClicks.add(event.nativeEvent)\n for (const dismiss of [...openMenuDismissals]) dismiss(event.nativeEvent)\n if (wasOpenRef.current) {\n wasOpenRef.current = false\n hide()\n }\n onClick?.(event)\n }\n\n return (\n <Component\n // A `<button>` root needs an explicit `type` to avoid an implicit form submit; other roots\n // (e.g. `NavLink`) don't render a `<button>` at all.\n {...(rendersButton ? { type: 'button' } : {})}\n // The `.caret` utility (rather than styling off `[data-cx-toggle=\"menu\"]`, as the vanilla\n // CSS docs show) keeps this element from also matching Chassis CSS's own vanilla menu.js\n // selectors on a page that happens to load both — this component reimplements all of that\n // behavior itself, so there's nothing for the vanilla plugin to usefully do with it anyway.\n // `show` mirrors `MenuList`'s own `{ show: visible }` and vanilla menu.js's\n // `this._element.classList.add('show')` — it's what puts the trigger itself into a\n // pressed look while its menu is open (`.button.show`/`.nav-item.show .nav-link`).\n className={classNames({ caret, show: visible }, className)}\n {...(mergeProps({ onPointerDown: handlePointerDown }, rest, buttonProps, {\n onClick: handleClick,\n onKeyDown,\n // The caller's, when it gives one: react-aria's own `tabIndex` would replace it.\n ...(tabIndex !== undefined && { tabIndex })\n }) as Record<string, unknown>)}\n // After `buttonProps`: for an `<a>`, react-aria returns an `href` of its own, the one it was\n // given, which is none.\n {...linkProps}\n ref={forkedRef}\n >\n {children}\n </Component>\n )\n}\n\nexport const MenuToggle = createPolymorphicComponent<MenuToggleComponent>(\n MenuToggleRender as ForwardRefRenderFunction<Element, MenuToggleProps<ElementType>>,\n 'MenuToggle'\n)\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./useHydrated-Dud4JEwp.js";import t from"react";import{createPortal as n}from"react-dom";function r({children:r,container:i,fallback:a}){return e()?n(r,i??document.body):/* @__PURE__ */ t.createElement(t.Fragment,null,a)}r.displayName=`Portal`;export{r as t};
2
+ //# sourceMappingURL=Portal-BTDylxAi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Portal-BTDylxAi.js","names":["useHydrated","React","Portal","createPortal","children","container","fallback"],"sources":["../../src/components/portal/Portal.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useHydrated } from '../../hooks/useHydrated'\n\nexport interface PortalProps {\n /**\n * The content to render in the portal.\n */\n children: ReactNode\n /**\n * Where the children are portaled. Defaults to `document.body`.\n */\n container?: Element | DocumentFragment | null\n /**\n * Rendered in place until the portal exists: on the server and during hydration. Nothing by\n * default.\n */\n fallback?: ReactNode\n}\n\n// A portal has no server equivalent. `typeof window !== 'undefined' && createPortal(...)` renders\n// nothing on the server and the portal's content on the client's first render, so hydration walks\n// into content the server never sent and reports a mismatch. `Portal` renders `fallback` until\n// hydration has finished, then portals `children`; a client-only render portals immediately.\n/**\n * Renders its children into `container` (`document.body` by default), and renders `fallback` on the\n * server and during hydration, so server-rendered pages hydrate without a mismatch.\n */\nexport function Portal({ children, container, fallback }: PortalProps): ReactElement {\n const hydrated = useHydrated()\n if (!hydrated) return <>{fallback}</>\n return createPortal(children, container ?? document.body)\n}\n\nPortal.displayName = 'Portal'\n"],"mappings":"A,4GA6BA,SAAgBE,EAAO,CAAE,WAAU,YAAW,YAAuC,CAGnF,OAFiBF,EACL,EACLG,EAAaC,EAAUC,GAAa,SAAS,IAAI,EADlC,kBAAA,cAAAJ,EAAA,SAAA,KAAGK,CAAW,CAEtC,CAEA,EAAO,YAAc,S"}
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./focus-ring-Bs80iIBN.js";import{t}from"./useForkedRef-WoqMqsWE.js";import{t as n}from"./useHydrated-Dud4JEwp.js";import{t as r}from"./VisuallyHidden-CGv-mBuQ.js";import i,{createContext as a,forwardRef as o,useContext as s,useEffect as c,useMemo as l,useRef as u,useState as d}from"react";import f from"classnames";import{mergeProps as p,useButton as m,useCalendar as h,useCalendarCell as g,useCalendarGrid as _,useDateFormatter as v,useLocale as y,useLocalizedStringFormatter as b,useRangeCalendar as x}from"react-aria";import{useCalendarState as S,useRangeCalendarState as C}from"react-stately";import{flushSync as w}from"react-dom";import{createCalendar as ee,getLocalTimeZone as T,isSameDay as E,isSameMonth as D,isToday as O,isWeekend as k,startOfMonth as A,toCalendar as j,toCalendarDate as M,today as N}from"@internationalized/date";const P=(e,t,n)=>!!(e.isDisabled||e.maxValue&&t.compare(M(e.maxValue))>0||e.minValue&&n.compare(M(e.minValue))<0),F={previousYears:`Previous years`,nextYears:`Next years`,selectYear:`Select year`,selectMonth:`Select month`,month:`Month`,year:`Year`,calendar:`Calendar`,clear:`Clear`},I=a(F),L=()=>s(I),R=({children:e,labels:t})=>{let n=s(I),r=l(()=>t?{...n,...t}:n,[n,t]);return/* @__PURE__ */ i.createElement(I.Provider,{value:r},e)},z=({announce:e=!0,monthStart:t,onBack:n,onSelect:a,state:o})=>{let s=L(),c=v({calendar:t.calendar.identifier,month:`short`,timeZone:o.timeZone}),l=v({calendar:t.calendar.identifier,timeZone:o.timeZone,year:`numeric`}),u=t.calendar.getMonthsInYear(t),d=[...Array(u).keys()].map(e=>{let n=t.set({day:1,month:e+1});return{date:n,formatted:c.format(n.toDate(o.timeZone))}});return/* @__PURE__ */ i.createElement(i.Fragment,null,/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-header`},/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-header-content`},/* @__PURE__ */ i.createElement(`button`,{className:`datepicker-month`,onClick:n,type:`button`},l.format(t.toDate(o.timeZone))))),e&&/* @__PURE__ */ i.createElement(r,{role:`status`},`${s.selectMonth}, ${l.format(t.toDate(o.timeZone))}`),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-content`},/* @__PURE__ */ i.createElement(`div`,{"aria-label":l.format(t.toDate(o.timeZone)),className:`datepicker-months`,role:`group`},d.map(e=>{let n=e.date.month===t.month,r=P(o,e.date,e.date.add({months:1}).subtract({days:1}));return/* @__PURE__ */ i.createElement(`button`,{"aria-current":n?`true`:void 0,className:f(`datepicker-months-month`,{selected:n}),disabled:r,key:e.date.month,onClick:()=>a(e.date),type:`button`},e.formatted)}))))},B=({announce:e=!0,monthStart:t,onBack:n,onSelect:a,state:o})=>{let s=L(),c=v({calendar:t.calendar.identifier,timeZone:o.timeZone,year:`numeric`}),[l,u]=d(0),p=[...Array(15).keys()].map(e=>{let n=l+e,r=t.add({years:n}),i=r.set({day:1,month:1}),a=i.add({years:1}).subtract({days:1});return{date:r,formatted:c.format(r.toDate(o.timeZone)),offset:n,yearEnd:a,yearStart:i}}),m=p[0],h=p[p.length-1],g=m.yearStart,_=h.yearEnd,y=`${m.formatted} – ${h.formatted}`,b=o.isDisabled||o.minValue!=null&&g.subtract({days:1}).compare(M(o.minValue))<0,x=o.isDisabled||o.maxValue!=null&&_.add({days:1}).compare(M(o.maxValue))>0;return/* @__PURE__ */ i.createElement(i.Fragment,null,/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-header`},/* @__PURE__ */ i.createElement(`button`,{"aria-label":s.previousYears,className:`datepicker-arrow datepicker-arrow-prev`,disabled:b,onClick:()=>u(e=>e-15),type:`button`}),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-header-content`},/* @__PURE__ */ i.createElement(`button`,{className:`datepicker-year`,onClick:n,type:`button`},y)),/* @__PURE__ */ i.createElement(`button`,{"aria-label":s.nextYears,className:`datepicker-arrow datepicker-arrow-next`,disabled:x,onClick:()=>u(e=>e+15),type:`button`})),e&&/* @__PURE__ */ i.createElement(r,{role:`status`},`${s.selectYear}, ${y}`),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-content`},/* @__PURE__ */ i.createElement(`div`,{"aria-label":y,className:`datepicker-years`,role:`group`},p.map(e=>{let t=e.offset===0,n=P(o,e.yearStart,e.yearEnd);return/* @__PURE__ */ i.createElement(`button`,{"aria-current":t?`true`:void 0,className:f(`datepicker-years-year`,{selected:t}),disabled:n,key:e.offset,onClick:()=>a(e.date),type:`button`},e.formatted)}))))},V=(e,t)=>{let{start:n,end:r}=e.visibleRange;if(t.compare(n)===0)return;let i=e.visibleDuration.months||1,a=t.compare(n)>0;if(a?t.compare(r)>0:t.add({months:i-1}).compare(n)<0){e.setFocusedDate(H(t,a,i));return}let o=a?t.add({months:i}):t.subtract({months:i});w(()=>{e.setFocusedDate(H(o,a,i))}),e.setFocusedDate(H(t,!a,i))},H=(e,t,n)=>t?e:e.add({months:n-1}),U=({children:e,monthIndex:t=0,monthStart:n,nextArrow:a,onViewChange:o,prevArrow:s,state:l})=>{let f=L(),[p,m]=d(`days`),h=u(null),g=u(p),_=e=>{m(e),o?.(e)},y=u(o);y.current=o,c(()=>()=>y.current?.(`days`),[]),c(()=>{let e=g.current;if(e===p)return;g.current=p;let t=h.current;t&&(p===`days`?t.querySelector(`.datepicker-date-btn[tabindex="0"]`)??t.querySelector(e===`years`?`.datepicker-year`:`.datepicker-month`):t.querySelector(`.datepicker-months-month.selected, .datepicker-years-year.selected`)??t.querySelector(`.datepicker-months-month, .datepicker-years-year`))?.focus()},[p]);let b=v({calendar:n.calendar.identifier,month:`long`,timeZone:l.timeZone}),x=v({calendar:n.calendar.identifier,timeZone:l.timeZone,year:`numeric`}),S=e=>{V(l,e.subtract({months:t})),_(`days`)};return/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-column`,ref:h},p===`months`&&/* @__PURE__ */ i.createElement(z,{announce:t===0,monthStart:n,onBack:()=>_(`days`),onSelect:S,state:l}),p===`years`&&/* @__PURE__ */ i.createElement(B,{announce:t===0,monthStart:n,onBack:()=>_(`days`),onSelect:S,state:l}),p===`days`&&/* @__PURE__ */ i.createElement(i.Fragment,null,/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-header`},s,/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-header-content`},/* @__PURE__ */ i.createElement(`button`,{"aria-label":`${f.month}: ${b.format(n.toDate(l.timeZone))}`,className:`datepicker-month`,disabled:l.isDisabled,onClick:()=>_(`months`),type:`button`},b.format(n.toDate(l.timeZone))),/* @__PURE__ */ i.createElement(`button`,{"aria-label":`${f.year}: ${x.format(n.toDate(l.timeZone))}`,className:`datepicker-year`,disabled:l.isDisabled,onClick:()=>_(`years`),type:`button`},x.format(n.toDate(l.timeZone)))),a),t===0&&/* @__PURE__ */ i.createElement(r,{role:`status`},`${b.format(n.toDate(l.timeZone))} ${x.format(n.toDate(l.timeZone))}`),e))},W=({firstDayOfWeek:e,renderCell:t,startDate:n,state:r})=>{let{gridProps:a,headerProps:o,weekDays:s,weeksInMonth:c}=_({firstDayOfWeek:e,startDate:n},r),l=n??r.visibleRange.start;return/* @__PURE__ */ i.createElement(`div`,{...a,className:`datepicker-content`},/* @__PURE__ */ i.createElement(`div`,{...o,className:`datepicker-week`,role:`row`},s.map((e,t)=>/* @__PURE__ */ i.createElement(`span`,{className:`datepicker-week-day`,key:t,role:`columnheader`},e))),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-dates`},[...Array(c).keys()].map(e=>{let a=r.getDatesInWeek(e,n);return/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-dates-row`,key:e,role:`row`},a.map((e,n)=>e?/* @__PURE__ */ i.createElement(i.Fragment,{key:e.toString()},t(e,n,a,!D(e,l))):/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-date`,key:n,role:`gridcell`})))})))},te=({arrows:e,firstDayOfWeek:t,monthIndex:n,onViewChange:r,renderCell:a,state:o})=>{let s=o.visibleRange.start.add({months:n});return/* @__PURE__ */ i.createElement(i.Fragment,null,/* @__PURE__ */ i.createElement(U,{monthIndex:n,monthStart:s,nextArrow:e?.next,onViewChange:r,prevArrow:e?.prev,state:o},/* @__PURE__ */ i.createElement(W,{firstDayOfWeek:t,renderCell:a,startDate:s,state:o})))},G=({buttonProps:e,direction:t})=>{let n=u(null),{buttonProps:r}=m(e,n);return/* @__PURE__ */ i.createElement(`button`,{...r,className:`datepicker-arrow datepicker-arrow-${t}`,ref:n,type:`button`})},K=(e,t)=>{if(!e?.length&&!t)return;let n=e?.length?new Set(e):null;return e=>!!n?.has(M(e).toString())||!!t?.(e)},q={"ar-AE":{todayDate:e=>`اليوم، ${e?.date}`,todayDateSelected:e=>`اليوم، ${e?.date} محدد`,dateSelected:e=>`${e?.date} المحدد`,minimumDate:`أول تاريخ متاح`,maximumDate:`آخر تاريخ متاح`},"bg-BG":{todayDate:e=>`Днес, ${e?.date}`,todayDateSelected:e=>`Днес, ${e?.date} са избрани`,dateSelected:e=>`Избрано е ${e?.date}`,minimumDate:`Първа налична дата`,maximumDate:`Последна налична дата`},"cs-CZ":{todayDate:e=>`Dnes, ${e?.date}`,todayDateSelected:e=>`Dnes, vybráno ${e?.date}`,dateSelected:e=>`Vybráno ${e?.date}`,minimumDate:`První dostupné datum`,maximumDate:`Poslední dostupné datum`},"da-DK":{todayDate:e=>`I dag, ${e?.date}`,todayDateSelected:e=>`I dag, ${e?.date} valgt`,dateSelected:e=>`${e?.date} valgt`,minimumDate:`Første ledige dato`,maximumDate:`Sidste ledige dato`},"de-DE":{todayDate:e=>`Heute, ${e?.date}`,todayDateSelected:e=>`Heute, ${e?.date} ausgewählt`,dateSelected:e=>`${e?.date} ausgewählt`,minimumDate:`Erstes verfügbares Datum`,maximumDate:`Letztes verfügbares Datum`},"el-GR":{todayDate:e=>`Σήμερα, ${e?.date}`,todayDateSelected:e=>`Σήμερα, επιλέχτηκε ${e?.date}`,dateSelected:e=>`Επιλέχθηκε ${e?.date}`,minimumDate:`Πρώτη διαθέσιμη ημερομηνία`,maximumDate:`Τελευταία διαθέσιμη ημερομηνία`},"en-US":{todayDate:e=>`Today, ${e?.date}`,todayDateSelected:e=>`Today, ${e?.date} selected`,dateSelected:e=>`${e?.date} selected`,minimumDate:`First available date`,maximumDate:`Last available date`},"es-ES":{todayDate:e=>`Hoy, ${e?.date}`,todayDateSelected:e=>`Hoy, ${e?.date} seleccionado`,dateSelected:e=>`${e?.date} seleccionado`,minimumDate:`Primera fecha disponible`,maximumDate:`Última fecha disponible`},"et-EE":{todayDate:e=>`Täna, ${e?.date}`,todayDateSelected:e=>`Täna, ${e?.date} valitud`,dateSelected:e=>`${e?.date} valitud`,minimumDate:`Esimene saadaolev kuupäev`,maximumDate:`Viimane saadaolev kuupäev`},"fi-FI":{todayDate:e=>`Tänään, ${e?.date}`,todayDateSelected:e=>`Tänään, ${e?.date} valittu`,dateSelected:e=>`${e?.date} valittu`,minimumDate:`Ensimmäinen varattavissa oleva päivämäärä`,maximumDate:`Viimeinen varattavissa oleva päivämäärä`},"fr-FR":{todayDate:e=>`Aujourd'hui, ${e?.date}`,todayDateSelected:e=>`Aujourd’hui, ${e?.date} sélectionné`,dateSelected:e=>`${e?.date} sélectionné`,minimumDate:`Première date disponible`,maximumDate:`Dernière date disponible`},"he-IL":{todayDate:e=>`היום, ${e?.date}`,todayDateSelected:e=>`היום, ${e?.date} נבחר`,dateSelected:e=>`${e?.date} נבחר`,minimumDate:`תאריך פנוי ראשון`,maximumDate:`תאריך פנוי אחרון`},"hr-HR":{todayDate:e=>`Danas, ${e?.date}`,todayDateSelected:e=>`Danas, odabran ${e?.date}`,dateSelected:e=>`${e?.date} odabran`,minimumDate:`Prvi raspoloživi datum`,maximumDate:`Posljednji raspoloživi datum`},"hu-HU":{todayDate:e=>`Ma, ${e?.date}`,todayDateSelected:e=>`Ma, ${e?.date} kijelölve`,dateSelected:e=>`${e?.date} kiválasztva`,minimumDate:`Az első elérhető dátum`,maximumDate:`Utolsó elérhető dátum`},"it-IT":{todayDate:e=>`Oggi, ${e?.date}`,todayDateSelected:e=>`Oggi, ${e?.date} selezionata`,dateSelected:e=>`${e?.date} selezionata`,minimumDate:`Prima data disponibile`,maximumDate:`Ultima data disponibile`},"ja-JP":{todayDate:e=>`本日、${e?.date}`,todayDateSelected:e=>`本日、${e?.date} を選択`,dateSelected:e=>`${e?.date} を選択`,minimumDate:`最初の利用可能日`,maximumDate:`最終利用可能日`},"ko-KR":{todayDate:e=>`오늘, ${e?.date}`,todayDateSelected:e=>`오늘, ${e?.date} 선택됨`,dateSelected:e=>`${e?.date} 선택됨`,minimumDate:`처음으로 사용 가능한 일자`,maximumDate:`마지막으로 사용 가능한 일자`},"lt-LT":{todayDate:e=>`Šiandien, ${e?.date}`,todayDateSelected:e=>`Šiandien, pasirinkta ${e?.date}`,dateSelected:e=>`Pasirinkta ${e?.date}`,minimumDate:`Pirmoji galima data`,maximumDate:`Paskutinė galima data`},"lv-LV":{todayDate:e=>`Šodien, ${e?.date}`,todayDateSelected:e=>`Atlasīta šodiena, ${e?.date}`,dateSelected:e=>`Atlasīts: ${e?.date}`,minimumDate:`Pirmais pieejamais datums`,maximumDate:`Pēdējais pieejamais datums`},"nb-NO":{todayDate:e=>`I dag, ${e?.date}`,todayDateSelected:e=>`I dag, ${e?.date} valgt`,dateSelected:e=>`${e?.date} valgt`,minimumDate:`Første tilgjengelige dato`,maximumDate:`Siste tilgjengelige dato`},"nl-NL":{todayDate:e=>`Vandaag, ${e?.date}`,todayDateSelected:e=>`Vandaag, ${e?.date} geselecteerd`,dateSelected:e=>`${e?.date} geselecteerd`,minimumDate:`Eerste beschikbare datum`,maximumDate:`Laatste beschikbare datum`},"pl-PL":{todayDate:e=>`Dzisiaj, ${e?.date}`,todayDateSelected:e=>`Dzisiaj wybrano ${e?.date}`,dateSelected:e=>`Wybrano ${e?.date}`,minimumDate:`Pierwsza dostępna data`,maximumDate:`Ostatnia dostępna data`},"pt-BR":{todayDate:e=>`Hoje, ${e?.date}`,todayDateSelected:e=>`Hoje, ${e?.date} selecionado`,dateSelected:e=>`${e?.date} selecionado`,minimumDate:`Primeira data disponível`,maximumDate:`Última data disponível`},"pt-PT":{todayDate:e=>`Hoje, ${e?.date}`,todayDateSelected:e=>`Hoje, ${e?.date} selecionado`,dateSelected:e=>`${e?.date} selecionado`,minimumDate:`Primeira data disponível`,maximumDate:`Última data disponível`},"ro-RO":{todayDate:e=>`Astăzi, ${e?.date}`,todayDateSelected:e=>`Azi, ${e?.date} selectată`,dateSelected:e=>`${e?.date} selectată`,minimumDate:`Prima dată disponibilă`,maximumDate:`Ultima dată disponibilă`},"ru-RU":{todayDate:e=>`Сегодня, ${e?.date}`,todayDateSelected:e=>`Сегодня, выбрано ${e?.date}`,dateSelected:e=>`Выбрано ${e?.date}`,minimumDate:`Первая доступная дата`,maximumDate:`Последняя доступная дата`},"sk-SK":{todayDate:e=>`Dnes ${e?.date}`,todayDateSelected:e=>`Vybratý dnešný dátum ${e?.date}`,dateSelected:e=>`Vybratý dátum ${e?.date}`,minimumDate:`Prvý dostupný dátum`,maximumDate:`Posledný dostupný dátum`},"sl-SI":{todayDate:e=>`Danes, ${e?.date}`,todayDateSelected:e=>`Danes, ${e?.date} izbrano`,dateSelected:e=>`${e?.date} izbrano`,minimumDate:`Prvi razpoložljivi datum`,maximumDate:`Zadnji razpoložljivi datum`},"sr-SP":{todayDate:e=>`Danas, ${e?.date}`,todayDateSelected:e=>`Danas, izabran ${e?.date}`,dateSelected:e=>`${e?.date} izabran`,minimumDate:`Prvi raspoloživi datum`,maximumDate:`Zadnji raspoloživi datum`},"sv-SE":{todayDate:e=>`Idag, ${e?.date}`,todayDateSelected:e=>`Idag, ${e?.date} har valts`,dateSelected:e=>`${e?.date} har valts`,minimumDate:`Första tillgängliga datum`,maximumDate:`Sista tillgängliga datum`},"tr-TR":{todayDate:e=>`Bugün, ${e?.date}`,todayDateSelected:e=>`Bugün, ${e?.date} seçildi`,dateSelected:e=>`${e?.date} seçildi`,minimumDate:`İlk müsait tarih`,maximumDate:`Son müsait tarih`},"uk-UA":{todayDate:e=>`Сьогодні, ${e?.date}`,todayDateSelected:e=>`Сьогодні, вибрано ${e?.date}`,dateSelected:e=>`Вибрано ${e?.date}`,minimumDate:`Перша доступна дата`,maximumDate:`Остання доступна дата`},"zh-CN":{todayDate:e=>`今天,即 ${e?.date}`,todayDateSelected:e=>`已选择今天,即 ${e?.date}`,dateSelected:e=>`已选择 ${e?.date}`,minimumDate:`第一个可用日期`,maximumDate:`最后一个可用日期`},"zh-TW":{todayDate:e=>`今天,${e?.date}`,todayDateSelected:e=>`已選取今天,${e?.date}`,dateSelected:e=>`已選取 ${e?.date}`,minimumDate:`第一個可用日期`,maximumDate:`最後一個可用日期`}};function J(e,t,r,i){let a=n(),o=b(q,`@react-aria/calendar`),s=O(e,t.timeZone);if(a||!s||!i)return{isCurrentDate:a&&s,label:i};let[c=``,l=``]=o.format(r?`todayDateSelected`:`todayDate`,{date:`\0`}).split(`\0`),u=``;t.minValue&&E(e,t.minValue)?u=`, ${o.format(`minimumDate`)}`:t.maxValue&&E(e,t.maxValue)&&(u=`, ${o.format(`maximumDate`)}`);let d=i.length-l.length-u.length;if(!i.startsWith(c)||!i.endsWith(l+u)||d<c.length)return{isCurrentDate:!1,label:i};let f=i.slice(c.length,d);return{isCurrentDate:!1,label:(r?o.format(`dateSelected`,{date:f}):f)+u}}const Y=o((e,n)=>{let{autoFocus:r,className:a,defaultFocusedValue:o,defaultValue:s,disabled:c,firstDayOfWeek:m=`mon`,isDateUnavailable:g,labels:_,maxValue:v,minValue:b,onChange:x,selectionMode:C=`single`,unavailableDates:w,value:E,visibleMonths:D=1,...O}=e,{locale:k}=y(),A=u(null),j=t(A,n),M=l(()=>K(w,g),[w,g]),[P,F]=d({}),I=Object.values(P).some(e=>e!==`days`),L=e=>{x?.(e)},z=E,B=s,V=z===void 0?B:z,H=o??(C===`multiple`&&Array.isArray(V)&&V.length===0?N(T()):void 0),q=S({autoFocus:r,createCalendar:ee,defaultFocusedValue:H,defaultValue:B,firstDayOfWeek:m,isDateUnavailable:M,isDisabled:c,locale:k,maxValue:v,minValue:b,onChange:L,pageBehavior:`single`,selectionMode:C,value:z,visibleDuration:{months:D}}),J={"aria-label":O[`aria-label`],"aria-labelledby":O[`aria-labelledby`],autoFocus:r,defaultFocusedValue:H,defaultValue:B,isDateUnavailable:M,isDisabled:c,maxValue:v,minValue:b,onChange:L,selectionMode:C,value:z},{calendarProps:Y,prevButtonProps:Z,nextButtonProps:ne}=h(J,q),Q=/* @__PURE__ */ i.createElement(G,{buttonProps:Z,direction:`prev`}),$=/* @__PURE__ */ i.createElement(G,{buttonProps:ne,direction:`next`});return/* @__PURE__ */ i.createElement(R,{labels:_},/* @__PURE__ */ i.createElement(`div`,{...p(Y,O),className:f(`datepicker`,a),"data-cx-inline":`true`,ref:j},D===1?/* @__PURE__ */ i.createElement(U,{monthStart:q.visibleRange.start,nextArrow:$,prevArrow:Q,state:q},/* @__PURE__ */ i.createElement(W,{firstDayOfWeek:m,renderCell:(e,t,n,r)=>/* @__PURE__ */ i.createElement(X,{date:e,isOutsideMonth:r,locale:k,state:q}),state:q})):/* @__PURE__ */ i.createElement(i.Fragment,null,!I&&/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-controls`},Q,$),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-grid`},[...Array(D).keys()].map(e=>/* @__PURE__ */ i.createElement(te,{firstDayOfWeek:m,key:e,monthIndex:e,onViewChange:t=>F(n=>({...n,[e]:t})),renderCell:(e,t,n,r)=>/* @__PURE__ */ i.createElement(X,{date:e,isOutsideMonth:r,locale:k,state:q}),state:q}))))))});Y.displayName=`Calendar`;const X=({date:e,isOutsideMonth:t,locale:n,state:r})=>{let a=u(null),{cellProps:o,buttonProps:s,isSelected:c,isOutsideVisibleRange:l,isDisabled:d,isUnavailable:p,formattedDate:m}=g({date:e,isOutsideMonth:t},r,a),{isCurrentDate:h,label:_}=J(e,r,c,s[`aria-label`]);return/* @__PURE__ */ i.createElement(`div`,{...o,"aria-current":h?`date`:void 0,className:f(`datepicker-date`,{"datepicker-date-selected":c,"datepicker-date-today":h,"datepicker-date-outside":l||t,"datepicker-date-disabled":d,"datepicker-date-unavailable":p,"datepicker-date-weekend":k(e,n)})},/* @__PURE__ */ i.createElement(`button`,{...s,"aria-label":_,type:`button`,className:`datepicker-date-btn`,ref:a,tabIndex:s.tabIndex??-1},m))},Z=(e,t)=>{let n=j(t,e.calendar);return`hour`in e?e.set({day:n.day,era:n.era,month:n.month,year:n.year}):n},ne=(e,t,n,r,i,a)=>{let[o,s]=e.end.compare(e.start)<0?[e.end,e.start]:[e.start,e.end],c=M(o),l=M(s),u=n?M(n):null,d=r?M(r):null;if(u&&l.compare(u)<0||d&&c.compare(d)>0)return null;if(u&&c.compare(u)<0&&(c=u),d&&l.compare(d)>0&&(l=d),i){for(let e=c;e.compare(l)<=0;e=e.add({days:1}))if(i(a?j(e,a):e))return null}return{end:Z(t?.end??s,l),start:Z(t?.start??o,c)}},Q=o(({autoFocus:e,className:n,defaultFocusedValue:r,defaultValue:a,disabled:o,firstDayOfWeek:s=`mon`,isDateUnavailable:c,labels:m,maxValue:h,minValue:g,onChange:_,presets:v,unavailableDates:b,value:S,visibleMonths:w=1,...T},E)=>{let{locale:O}=y(),k=u(null),N=t(k,E),P=l(()=>K(b,c),[b,c]),F=v&&v.length>0?v:null,[I,L]=d({}),z=Object.values(I).some(e=>e!==`days`),B=C({autoFocus:e,createCalendar:ee,defaultFocusedValue:r,defaultValue:a,firstDayOfWeek:s,isDateUnavailable:P,isDisabled:o,locale:O,maxValue:h,minValue:g,onChange:_,pageBehavior:`single`,value:S,visibleDuration:{months:w}}),H={"aria-label":T[`aria-label`],"aria-labelledby":T[`aria-labelledby`],autoFocus:e,defaultFocusedValue:r,defaultValue:a,isDateUnavailable:P,isDisabled:o,maxValue:h,minValue:g,onChange:_,value:S},{calendarProps:U,prevButtonProps:W,nextButtonProps:q}=x(H,B,k),J=/* @__PURE__ */ i.createElement(G,{buttonProps:W,direction:`prev`}),Y=/* @__PURE__ */ i.createElement(G,{buttonProps:q,direction:`next`}),X=w===1?{next:Y,prev:J}:null,Z=B.focusedDate.calendar,Q=l(()=>new Map(F?.map(e=>[e,ne(e.range,B.value,g,h,P,Z)])),[F,B.value,g,h,P,Z]),re=e=>{let t=Q.get(e);if(!t)return;let n=j(M(t.start),B.focusedDate.calendar),{end:r,start:i}=B.visibleRange;(n.compare(i)<0||n.compare(r)>0)&&V(B,A(n)),B.setAnchorDate(null),B.setValue(t)},ae=(e,t)=>!!(e&&D(e,t)&&B.isSelected(e));return/* @__PURE__ */ i.createElement(R,{labels:m},/* @__PURE__ */ i.createElement(`div`,{...p(U,T),className:f(`datepicker`,n),"data-cx-inline":`true`,ref:N},/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-grid`},F&&/* @__PURE__ */ i.createElement(ie,{disabled:B.isDisabled,onSelect:re,presets:F,rangeOf:e=>Q.get(e)??null,value:B.value}),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-body`},w>1&&!z&&/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-controls`},J,Y),/* @__PURE__ */ i.createElement(`div`,{className:`datepicker-grid`},[...Array(w).keys()].map(e=>{let t=B.visibleRange.start.add({months:e});return/* @__PURE__ */ i.createElement(te,{arrows:e===0?X:null,firstDayOfWeek:s,key:e,monthIndex:e,onViewChange:t=>L(n=>({...n,[e]:t})),renderCell:(e,n,r,a)=>/* @__PURE__ */ i.createElement($,{date:e,isBandEnd:!ae(r[n+1],t),isBandStart:!ae(r[n-1],t),isOutsideMonth:a,locale:O,state:B}),state:B})}))))))});Q.displayName=`RangeCalendar`;const $=({date:t,isBandEnd:n,isBandStart:r,isOutsideMonth:a,locale:o,state:s})=>{let c=u(null),{cellProps:l,buttonProps:d,isSelected:m,isOutsideVisibleRange:h,isDisabled:_,isUnavailable:v,formattedDate:y}=g({date:t,isOutsideMonth:a},s,c),{highlightedRange:b}=s,x=!!(b&&E(t,b.start)),S=!!(b&&E(t,b.end)),{isCurrentDate:C,label:w}=J(t,s,m,d[`aria-label`]);return/* @__PURE__ */ i.createElement(`div`,{...l,"aria-current":C?`date`:void 0,className:f(`datepicker-date`,{"datepicker-date-today":C,"datepicker-date-in-range":m,"datepicker-date-range-start":m&&(x||r),"datepicker-date-range-end":m&&(S||n),"datepicker-date-outside":h||a,"datepicker-date-disabled":_,"datepicker-date-unavailable":v,"datepicker-date-weekend":k(t,o)})},/* @__PURE__ */ i.createElement(`button`,{...p(d,{"aria-label":w,onPointerEnter:()=>{s.anchorDate&&c.current&&e(c.current)},tabIndex:d.tabIndex??-1}),type:`button`,className:f(`datepicker-date-btn`,{"datepicker-date-range-start":m&&x,"datepicker-date-range-end":m&&S}),ref:c},y))},re=(e,t)=>E(e.start,t.start)&&E(e.end,t.end),ie=({disabled:e,onSelect:t,presets:n,rangeOf:r,value:a})=>/* @__PURE__ */ i.createElement(`ul`,{className:`datepicker-presets`},n.map(n=>{let o=r(n),s=!!(a&&o&&re(a,o));return/* @__PURE__ */ i.createElement(`li`,{key:n.label},/* @__PURE__ */ i.createElement(`button`,{"aria-current":s?`true`:void 0,className:f(`datepicker-preset`,{selected:s}),disabled:e||!o,onClick:()=>t(n),type:`button`},n.label))}));export{F as a,R as i,Y as n,L as o,K as r,Q as t};
2
+ //# sourceMappingURL=RangeCalendar-mM3OeTlU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeCalendar-mM3OeTlU.js","names":["CalendarCell","suppressFocusRing","useHydrated","VisuallyHidden","React","classNames","isWholeUnitDisabled","state","unitStart","toCalendarDate","unitEnd","DEFAULT_CALENDAR_LABELS","CalendarLabelsContext","createContext","useCalendarLabels","useContext","CalendarLabelsProvider","parent","value","useMemo","labels","children","CalendarMonthGrid","monthFormatter","useDateFormatter","monthStart","yearFormatter","numMonths","months","date","i","onBack","announce","isSelected","month","isDisabled","onSelect","CalendarYearGrid","pageOffset","setPageOffset","useState","years","offset","yearStart","yearEnd","firstYear","lastYear","firstYearStart","lastYearEnd","rangeLabel","isPrevDisabled","isNextDisabled","year","setVisibleRangeStart","currentStart","currentEnd","desiredStart","durationMonths","isForward","focusedDateForStart","overshootStart","flushSync","CalendarMonthYearPicker","view","setView","containerRef","useRef","focusedView","changeView","next","onViewChange","onViewChangeRef","useEffect","previousView","container","commitAndReturn","monthIndex","prevArrow","nextArrow","CalendarWeekGrid","useCalendarGrid","startDate","gridProps","headerProps","weekDays","index","day","weeksInMonth","week","weekIndex","renderCell","isSameMonth","CalendarMonthBlock","arrows","CalendarNavButton","ref","domButtonProps","useButton","buttonProps","direction","mergeIsDateUnavailable","unavailableDates","isDateUnavailable","set","todayLabelStrings","args","useCellToday","hydrated","strings","useLocalizedStringFormatter","today","isToday","label","before","after","note","isSameDay","end","inner","Calendar","forwardRef","defaultFocusedValueProp","rest","props","useLocale","internalRef","useForkedRef","forwardedRef","combinedIsDateUnavailable","monthViews","setMonthViews","hasPickerView","handleChange","onChange","normalizedValue","normalizedDefaultValue","defaultValue","resolvedValue","defaultFocusedValue","selectionMode","getLocalTimeZone","useCalendarState","disabled","visibleMonths","ariaProps","useCalendar","prevButton","prevButtonProps","nextButton","nextButtonProps","mergeProps","calendarProps","className","CalendarCell$1","prev","useCalendarCell","cellProps","isCurrentDate","isOutsideVisibleRange","isOutsideMonth","isUnavailable","isWeekend","locale","formattedDate","onDayOf","toCalendar","like","normalizePresetRange","first","last","range","start","min","minValue","max","maxValue","calendar","RangeCalendar","resolvedPresets","presets","useRangeCalendarState","useRangeCalendar","singleMonthArrows","gridCalendar","presetRanges","preset","handlePresetSelect","visibleEnd","visibleStart","startOfMonth","isInBand","DateRangePresets","CalendarCell","isRangeStart","highlightedRange","isRangeEnd","isBandStart","isBandEnd","isSameRange","a","b","rangeOf"],"sources":["../../src/utils/isWholeUnitDisabled.ts","../../src/components/calendar/labels.tsx","../../src/components/calendar/CalendarMonthGrid.tsx","../../src/components/calendar/CalendarYearGrid.tsx","../../src/utils/setVisibleRangeStart.ts","../../src/components/calendar/CalendarMonthYearPicker.tsx","../../src/components/calendar/CalendarWeekGrid.tsx","../../src/components/calendar/CalendarMonthBlock.tsx","../../src/components/calendar/CalendarNavButton.tsx","../../src/utils/mergeIsDateUnavailable.ts","../../src/components/calendar/todayLabelStrings.ts","../../src/components/calendar/todayLabel.ts","../../src/components/calendar/Calendar.tsx","../../src/components/calendar/presetRange.ts","../../src/components/calendar/RangeCalendar.tsx"],"sourcesContent":["import { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate, toCalendarDate } from '@internationalized/date'\n\n// Shared by `CalendarMonthGrid` and `CalendarYearGrid` — a month/year button is disabled when\n// every day it covers falls outside `minValue`/`maxValue`, not just when its first day does (e.g.\n// a `maxValue` of March 15th still leaves March itself partly selectable, so March's button stays\n// enabled; April's doesn't). `unitEnd` is the last day of the button's own month/year.\nexport const isWholeUnitDisabled = (\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState,\n unitStart: CalendarDate,\n unitEnd: CalendarDate\n): boolean => {\n if (state.isDisabled) return true\n if (state.maxValue && unitStart.compare(toCalendarDate(state.maxValue)) > 0) return true\n if (state.minValue && unitEnd.compare(toCalendarDate(state.minValue)) < 0) return true\n return false\n}\n","import React, { createContext, ReactNode, useContext, useMemo } from 'react'\n\n/**\n * The user-facing strings the calendar/datepicker family renders itself, rather than getting from\n * the active locale.\n *\n * Everything else these components say — weekday names, month names, the calendar system, segment\n * order — comes from `I18nProvider`'s locale via react-aria, which ships its own translations. The\n * strings below have no equivalent in react-aria's dictionaries, so they were hardcoded English\n * with no way to override them: under `<I18nProvider locale=\"ar-SA\">` a user got Arabic month\n * names interleaved with an English \"Previous years\". Pass `labels` to translate them, the same\n * way `Pagination`'s `previousLabel`/`nextLabel` are translated (see the Internationalization\n * docs page).\n */\nexport interface CalendarLabels {\n /** Accessible name of the year view's \"page back\" arrow. */\n previousYears: string\n /** Accessible name of the year view's \"page forward\" arrow. */\n nextYears: string\n /** Prefix of the year view's live-region announcement, rendered as `${selectYear}, 2020 – 2034`. */\n selectYear: string\n /** Prefix of the month view's live-region announcement, rendered as `${selectMonth}, 2024`. */\n selectMonth: string\n /** Prefix of the header month button's accessible name, rendered as `${month}: March`. */\n month: string\n /** Prefix of the header year button's accessible name, rendered as `${year}: 2024`. */\n year: string\n /** Accessible name of the trigger that opens the calendar overlay. */\n calendar: string\n /** Accessible name of the adornment that resets the current selection. */\n clear: string\n}\n\nexport const DEFAULT_CALENDAR_LABELS: CalendarLabels = {\n previousYears: 'Previous years',\n nextYears: 'Next years',\n selectYear: 'Select year',\n selectMonth: 'Select month',\n month: 'Month',\n year: 'Year',\n calendar: 'Calendar',\n clear: 'Clear'\n}\n\nconst CalendarLabelsContext = createContext<CalendarLabels>(DEFAULT_CALENDAR_LABELS)\n\n/**\n * Reads the merged labels. Internal — every component in this family that renders one of these\n * strings goes through here rather than taking its own prop, because most of them\n * (`CalendarYearGrid`, `CalendarMonthGrid`, `CalendarMonthYearPicker`) sit three or four levels\n * below the public component a consumer actually passes `labels` to.\n */\nexport const useCalendarLabels = (): CalendarLabels => useContext(CalendarLabelsContext)\n\ninterface CalendarLabelsProviderProps {\n children: ReactNode\n labels?: Partial<CalendarLabels>\n}\n\n/**\n * Merges `labels` over whatever is already in context, rather than replacing it. `DatePicker`\n * renders a `Calendar` internally, so both provide — without merging, the inner `Calendar`\n * (which usually has no `labels` of its own) would reset the outer `DatePicker`'s overrides back\n * to English.\n */\nexport const CalendarLabelsProvider = ({ children, labels }: CalendarLabelsProviderProps) => {\n const parent = useContext(CalendarLabelsContext)\n const value = useMemo(() => (labels ? { ...parent, ...labels } : parent), [parent, labels])\n\n return <CalendarLabelsContext.Provider value={value}>{children}</CalendarLabelsContext.Provider>\n}\n","import React from 'react'\nimport classNames from 'classnames'\nimport { useDateFormatter } from 'react-aria'\nimport { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate } from '@internationalized/date'\n\nimport { isWholeUnitDisabled } from '../../utils/isWholeUnitDisabled'\nimport { useCalendarLabels } from './labels'\nimport { VisuallyHidden } from '../visually-hidden/VisuallyHidden'\n\ninterface CalendarMonthGridProps {\n // Whether to render the visually-hidden `aria-live` announcement of this view's current header\n // (see `CalendarMonthYearPicker`'s own equivalent gate) — `false` for every visible month block\n // but the first when `visibleMonths > 1`, so switching into this view doesn't fire one\n // simultaneous announcement per block.\n announce?: boolean\n monthStart: CalendarDate\n onBack: () => void\n onSelect: (date: CalendarDate) => void\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState\n}\n\n// The month view of `CalendarMonthYearPicker` — every month in `monthStart`'s own year, laid out\n// as a static 3-column grid (no paging; picking a different year is the year view's job).\nexport const CalendarMonthGrid = ({\n announce = true,\n monthStart,\n onBack,\n onSelect,\n state\n}: CalendarMonthGridProps) => {\n const labels = useCalendarLabels()\n const monthFormatter = useDateFormatter({\n calendar: monthStart.calendar.identifier,\n month: 'short',\n timeZone: state.timeZone\n })\n const yearFormatter = useDateFormatter({\n calendar: monthStart.calendar.identifier,\n timeZone: state.timeZone,\n year: 'numeric'\n })\n\n const numMonths = monthStart.calendar.getMonthsInYear(monthStart)\n const months = [...new Array(numMonths).keys()].map((i) => {\n const date = monthStart.set({ day: 1, month: i + 1 })\n return { date, formatted: monthFormatter.format(date.toDate(state.timeZone)) }\n })\n\n return (\n <>\n <div className=\"datepicker-header\">\n <div className=\"datepicker-header-content\">\n <button className=\"datepicker-month\" onClick={onBack} type=\"button\">\n {yearFormatter.format(monthStart.toDate(state.timeZone))}\n </button>\n </div>\n </div>\n {announce && (\n <VisuallyHidden role=\"status\">\n {`${labels.selectMonth}, ${yearFormatter.format(monthStart.toDate(state.timeZone))}`}\n </VisuallyHidden>\n )}\n <div className=\"datepicker-content\">\n <div\n aria-label={yearFormatter.format(monthStart.toDate(state.timeZone))}\n className=\"datepicker-months\"\n role=\"group\"\n >\n {months.map((month) => {\n const isSelected = month.date.month === monthStart.month\n const isDisabled = isWholeUnitDisabled(\n state,\n month.date,\n month.date.add({ months: 1 }).subtract({ days: 1 })\n )\n\n return (\n <button\n aria-current={isSelected ? 'true' : undefined}\n className={classNames('datepicker-months-month', { selected: isSelected })}\n disabled={isDisabled}\n key={month.date.month}\n onClick={() => onSelect(month.date)}\n type=\"button\"\n >\n {month.formatted}\n </button>\n )\n })}\n </div>\n </div>\n </>\n )\n}\n","import React, { useState } from 'react'\nimport classNames from 'classnames'\nimport { useDateFormatter } from 'react-aria'\nimport { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate, toCalendarDate } from '@internationalized/date'\n\nimport { isWholeUnitDisabled } from '../../utils/isWholeUnitDisabled'\nimport { useCalendarLabels } from './labels'\nimport { VisuallyHidden } from '../visually-hidden/VisuallyHidden'\n\ninterface CalendarYearGridProps {\n // Whether to render the visually-hidden `aria-live` announcement of this view's current header\n // (see `CalendarMonthYearPicker`'s own equivalent gate) — `false` for every visible month block\n // but the first when `visibleMonths > 1`, so switching into this view (or paging within it)\n // doesn't fire one simultaneous announcement per block.\n announce?: boolean\n monthStart: CalendarDate\n onBack: () => void\n onSelect: (date: CalendarDate) => void\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState\n}\n\nconst YEARS_PER_PAGE = 15\n\n// The year view of `CalendarMonthYearPicker` — a paged 3-column grid, `YEARS_PER_PAGE` years at a\n// time starting from the currently visible year. Unlike the month view, a year range doesn't fit\n// on one screen, so this owns its own prev/next paging (independent of the day grid's own\n// prev/next, which keep paging by month underneath whenever this view isn't showing).\nexport const CalendarYearGrid = ({\n announce = true,\n monthStart,\n onBack,\n onSelect,\n state\n}: CalendarYearGridProps) => {\n const labels = useCalendarLabels()\n const yearFormatter = useDateFormatter({\n calendar: monthStart.calendar.identifier,\n timeZone: state.timeZone,\n year: 'numeric'\n })\n // The first year of the page, counted in years from `monthStart`'s own. This view unmounts on\n // every exit, so there's no case where `monthStart` changes while it's still mounted that this\n // would need to react to.\n const [pageOffset, setPageOffset] = useState(0)\n\n // `date` preserves `monthStart`'s own month/day, changing only the year — picking a year should\n // land on the same month it started from, not reset to January (`yearStart`/`yearEnd` are the\n // Jan 1–Dec 31 bounds used only for the disabled-range check below, kept separate so the actual\n // selection target isn't affected by them). The year is reached with `add`, not `set({ year })`:\n // a year number counts within its era, so `set` clamped one before the era's first year to that\n // year, and paging back in the Japanese calendar showed the era's first year fifteen times.\n const years = [...new Array(YEARS_PER_PAGE).keys()].map((i) => {\n const offset = pageOffset + i\n const date = monthStart.add({ years: offset })\n const yearStart = date.set({ day: 1, month: 1 })\n const yearEnd = yearStart.add({ years: 1 }).subtract({ days: 1 })\n return {\n date,\n formatted: yearFormatter.format(date.toDate(state.timeZone)),\n offset,\n yearEnd,\n yearStart\n }\n })\n // `years` always has exactly `YEARS_PER_PAGE` (15) entries — a fixed, non-zero constant, never\n // empty — so the first/last indices are always in range.\n const firstYear = years[0]!\n const lastYear = years[years.length - 1]!\n const firstYearStart = firstYear.yearStart\n const lastYearEnd = lastYear.yearEnd\n const rangeLabel = `${firstYear.formatted} – ${lastYear.formatted}`\n\n const isPrevDisabled =\n state.isDisabled ||\n (state.minValue != null &&\n firstYearStart.subtract({ days: 1 }).compare(toCalendarDate(state.minValue)) < 0)\n const isNextDisabled =\n state.isDisabled ||\n (state.maxValue != null &&\n lastYearEnd.add({ days: 1 }).compare(toCalendarDate(state.maxValue)) > 0)\n\n return (\n <>\n <div className=\"datepicker-header\">\n <button\n aria-label={labels.previousYears}\n className=\"datepicker-arrow datepicker-arrow-prev\"\n disabled={isPrevDisabled}\n onClick={() => setPageOffset((offset) => offset - YEARS_PER_PAGE)}\n type=\"button\"\n />\n <div className=\"datepicker-header-content\">\n <button className=\"datepicker-year\" onClick={onBack} type=\"button\">\n {rangeLabel}\n </button>\n </div>\n <button\n aria-label={labels.nextYears}\n className=\"datepicker-arrow datepicker-arrow-next\"\n disabled={isNextDisabled}\n onClick={() => setPageOffset((offset) => offset + YEARS_PER_PAGE)}\n type=\"button\"\n />\n </div>\n {announce && (\n <VisuallyHidden role=\"status\">{`${labels.selectYear}, ${rangeLabel}`}</VisuallyHidden>\n )}\n <div className=\"datepicker-content\">\n <div aria-label={rangeLabel} className=\"datepicker-years\" role=\"group\">\n {years.map((year) => {\n const isSelected = year.offset === 0\n const isDisabled = isWholeUnitDisabled(state, year.yearStart, year.yearEnd)\n\n return (\n <button\n aria-current={isSelected ? 'true' : undefined}\n className={classNames('datepicker-years-year', { selected: isSelected })}\n disabled={isDisabled}\n key={year.offset}\n onClick={() => onSelect(year.date)}\n type=\"button\"\n >\n {year.formatted}\n </button>\n )\n })}\n </div>\n </div>\n </>\n )\n}\n","import { flushSync } from 'react-dom'\nimport { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate } from '@internationalized/date'\n\n// Moves a (possibly multi-month) calendar's visible range so it starts at `desiredStart` — used by\n// `CalendarMonthYearPicker` to jump straight to a picked month/year, in any visible block.\n//\n// `state.setFocusedDate` is the only way to move `visibleRange` from outside react-stately, but it\n// doesn't just set `visibleRange.start` to wherever focus goes: react-stately keeps the visible\n// range as separate internal state, only repositioning it when the newly focused date falls\n// entirely *before* the current range (realigning so the range *ends* at that date's month) or\n// entirely *after* it (realigning so it *starts* there) — a focused date that lands inside the\n// current range moves focus without paging the range at all. That means a single `setFocusedDate`\n// call can only land exactly on an arbitrary `desiredStart` when it's at least a full\n// `visibleDuration` away from the current range. Anything closer — the common case here, since\n// adjacent blocks in a multi-month calendar are only one month apart — either no-ops (desired\n// start still inside the current range) or overshoots by up to a full `visibleDuration` (desired\n// start just outside it, but not far enough for the realignment to land exactly).\n//\n// Worked around with two `setFocusedDate` hops when a single one can't reach exactly: first past\n// `desiredStart` by one extra `visibleDuration` in the same direction (always far enough to land\n// exactly, by the same rule), flushed synchronously so `visibleRange` actually updates before the\n// second call runs, then back onto `desiredStart` itself — which, relative to that intermediate\n// range, is now exactly one `visibleDuration` away and so lands exactly too.\nexport const setVisibleRangeStart = (\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState,\n desiredStart: CalendarDate\n): void => {\n const { start: currentStart, end: currentEnd } = state.visibleRange\n if (desiredStart.compare(currentStart) === 0) return\n\n const durationMonths = state.visibleDuration.months || 1\n const isForward = desiredStart.compare(currentStart) > 0\n\n const reachableInOneHop = isForward\n ? desiredStart.compare(currentEnd) > 0\n : desiredStart.add({ months: durationMonths - 1 }).compare(currentStart) < 0\n\n if (reachableInOneHop) {\n state.setFocusedDate(focusedDateForStart(desiredStart, isForward, durationMonths))\n return\n }\n\n const overshootStart = isForward\n ? desiredStart.add({ months: durationMonths })\n : desiredStart.subtract({ months: durationMonths })\n\n flushSync(() => {\n state.setFocusedDate(focusedDateForStart(overshootStart, isForward, durationMonths))\n })\n // Relative to the now-updated range, `desiredStart` sits exactly one `visibleDuration` back the\n // way we came — always far enough for a single hop to land exactly.\n state.setFocusedDate(focusedDateForStart(desiredStart, !isForward, durationMonths))\n}\n\n// react-stately's forward-paging realignment anchors the new range to whatever month\n// `focusedDate` itself falls in; its backward-paging one anchors it `visibleDuration - 1` months\n// *before* `focusedDate`'s month instead — so landing on a specific desired start takes a\n// different `focusedDate` depending on which of the two is going to fire.\nconst focusedDateForStart = (\n desiredStart: CalendarDate,\n isForward: boolean,\n durationMonths: number\n): CalendarDate => (isForward ? desiredStart : desiredStart.add({ months: durationMonths - 1 }))\n","import React, { ReactNode, useEffect, useRef, useState } from 'react'\nimport { useDateFormatter } from 'react-aria'\nimport { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate } from '@internationalized/date'\n\nimport { CalendarMonthGrid } from './CalendarMonthGrid'\nimport { CalendarYearGrid } from './CalendarYearGrid'\nimport { setVisibleRangeStart } from '../../utils/setVisibleRangeStart'\nimport { useCalendarLabels } from './labels'\nimport { VisuallyHidden } from '../visually-hidden/VisuallyHidden'\n\ninterface CalendarMonthYearPickerProps {\n // The day grid, shown in the default 'days' view — owned by the caller (`Calendar` and\n // `RangeCalendar` render genuinely different cells: single-date vs. range pill styling), so\n // this only decides *whether* it's showing, never how it's built.\n children: ReactNode\n monthIndex?: number\n monthStart: CalendarDate\n // `null` when a global prev/next pair elsewhere is paging every visible month block at once\n // (`RangeCalendar` with `visibleMonths > 1`) rather than this block having its own — see that\n // component's own `arrows` prop. Only ever rendered in the 'days' view; the month/year views page\n // themselves independently (`CalendarYearGrid`) or don't page at all (`CalendarMonthGrid`).\n nextArrow?: ReactNode\n // Reports this block's own view whenever it changes, so a parent rendering several blocks\n // (`RangeCalendar` with `visibleMonths > 1`) can tell when one of them has switched to the\n // year view — `CalendarYearGrid` owns its own prev/next pager in that view, which would\n // otherwise sit right underneath the parent's global `.datepicker-controls` overlay.\n onViewChange?: (view: 'days' | 'months' | 'years') => void\n prevArrow?: ReactNode\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState\n}\n\n// Header + body for one visible month block: the day grid by default, switching in place to a\n// month or year grid when the header's own month/year button is pressed (chassis-css's actual\n// `_datepicker.scss` design for this — `[data-vc=\"months\"]`/`[data-vc=\"years\"]`, swapped in for\n// `[data-vc=\"dates\"]` — not a `<select>`, which is what this component used to render here. Native\n// `<select>` turned out to be the whole problem: picking a value forced a synchronous re-render\n// from inside the browser's own `change`-event dispatch, and in Safari that corrupted `usePress`'s\n// pointerup-vs-click target check for whatever the user clicked next — a page bug specific to\n// native form controls, not present here since a grid button is a plain, ordinary press.\n//\n// Shared by `Calendar` and `RangeCalendar` — `monthIndex` is the offset of this block's own\n// month from `state.focusedDate` (`0` for a single-month calendar), letting `setVisibleRangeStart`\n// land a pick correctly regardless of which visible block it came from.\nexport const CalendarMonthYearPicker = ({\n children,\n monthIndex = 0,\n monthStart,\n nextArrow,\n onViewChange,\n prevArrow,\n state\n}: CalendarMonthYearPickerProps) => {\n const labels = useCalendarLabels()\n const [view, setView] = useState<'days' | 'months' | 'years'>('days')\n const containerRef = useRef<HTMLDivElement>(null)\n // The view focus was last moved for. Nothing moves on mount — there's no prior view to restore\n // focus from yet, and stealing focus as soon as the calendar renders would fight `autoFocus`/the\n // caller's own focus management. Compared to `view` rather than a \"first render\" flag: StrictMode\n // runs a mount's effects twice, and the second run took the calendar's focused day for a return\n // to the day grid, so every calendar on a page focused itself on load.\n const focusedView = useRef(view)\n\n const changeView = (next: 'days' | 'months' | 'years') => {\n setView(next)\n onViewChange?.(next)\n }\n\n // A block that unmounts in its month or year view (`visibleMonths` lowered) has left it as far\n // as the parent can tell: without this the parent's global prev/next pair stayed hidden.\n const onViewChangeRef = useRef(onViewChange)\n onViewChangeRef.current = onViewChange\n useEffect(() => () => onViewChangeRef.current?.('days'), [])\n\n // Switching `view` swaps in a whole new subtree, unmounting whatever was focused (the month/\n // year trigger button, or the month/year grid button just picked) — React has no reason to move\n // focus anywhere on its own, so without this it drops to `document.body`, breaking out of\n // `FocusScope`'s containment in `DatePicker`/`DateRangePicker`'s popover entirely. Lands\n // focus on the selected month/year button when entering the month/year view (falling back to\n // the first option if nothing is selected on the currently visible page), or back onto the\n // day grid's own roving-tabindex cell when returning to 'days'. With several months visible that\n // cell is often in another block (a pick focuses the first or last visible month, and backing\n // out moves nothing), so this block's header button for the view just left takes focus instead.\n useEffect(() => {\n const previousView = focusedView.current\n if (previousView === view) return\n focusedView.current = view\n\n const container = containerRef.current\n if (!container) return\n\n const target =\n view === 'days'\n ? (container.querySelector<HTMLElement>('.datepicker-date-btn[tabindex=\"0\"]') ??\n container.querySelector<HTMLElement>(\n previousView === 'years' ? '.datepicker-year' : '.datepicker-month'\n ))\n : (container.querySelector<HTMLElement>(\n '.datepicker-months-month.selected, .datepicker-years-year.selected'\n ) ??\n container.querySelector<HTMLElement>('.datepicker-months-month, .datepicker-years-year'))\n\n target?.focus()\n }, [view])\n\n const monthFormatter = useDateFormatter({\n calendar: monthStart.calendar.identifier,\n month: 'long',\n timeZone: state.timeZone\n })\n const yearFormatter = useDateFormatter({\n calendar: monthStart.calendar.identifier,\n timeZone: state.timeZone,\n year: 'numeric'\n })\n\n const commitAndReturn = (date: CalendarDate) => {\n setVisibleRangeStart(state, date.subtract({ months: monthIndex }))\n changeView('days')\n }\n\n return (\n <div className=\"datepicker-column\" ref={containerRef}>\n {view === 'months' && (\n <CalendarMonthGrid\n announce={monthIndex === 0}\n monthStart={monthStart}\n onBack={() => changeView('days')}\n onSelect={commitAndReturn}\n state={state}\n />\n )}\n {view === 'years' && (\n <CalendarYearGrid\n announce={monthIndex === 0}\n monthStart={monthStart}\n onBack={() => changeView('days')}\n onSelect={commitAndReturn}\n state={state}\n />\n )}\n {view === 'days' && (\n <>\n <div className=\"datepicker-header\">\n {prevArrow}\n <div className=\"datepicker-header-content\">\n <button\n aria-label={`${labels.month}: ${monthFormatter.format(monthStart.toDate(state.timeZone))}`}\n className=\"datepicker-month\"\n disabled={state.isDisabled}\n onClick={() => changeView('months')}\n type=\"button\"\n >\n {monthFormatter.format(monthStart.toDate(state.timeZone))}\n </button>\n <button\n aria-label={`${labels.year}: ${yearFormatter.format(monthStart.toDate(state.timeZone))}`}\n className=\"datepicker-year\"\n disabled={state.isDisabled}\n onClick={() => changeView('years')}\n type=\"button\"\n >\n {yearFormatter.format(monthStart.toDate(state.timeZone))}\n </button>\n </div>\n {nextArrow}\n </div>\n {monthIndex === 0 && (\n <VisuallyHidden role=\"status\">\n {`${monthFormatter.format(monthStart.toDate(state.timeZone))} ${yearFormatter.format(monthStart.toDate(state.timeZone))}`}\n </VisuallyHidden>\n )}\n {children}\n </>\n )}\n </div>\n )\n}\n","import React, { ReactNode } from 'react'\nimport { useCalendarGrid } from 'react-aria'\nimport { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate, isSameMonth } from '@internationalized/date'\n\ninterface CalendarWeekGridProps {\n firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'\n renderCell: (\n date: CalendarDate,\n index: number,\n week: (CalendarDate | null)[],\n isOutsideMonth: boolean\n ) => ReactNode\n startDate?: CalendarDate\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState\n}\n\n// Shared week-day header + date-rows grid, used by both `Calendar` and `RangeCalendar` —\n// `startDate` lets a range calendar anchor this to one of several visible months (see\n// `useCalendarGrid`'s own docs); omitted, it defaults to the calendar's own visible start. Only the\n// individual cell differs between the two callers (range selection needs start/end/in-between pill\n// state a single-date cell has no equivalent for), so cell rendering is left to `renderCell`.\n//\n// A week at either end of the month holds days of the month next to it. With several months\n// visible those days are inside the calendar's visible range, so react-aria can't tell them from\n// the month's own: `renderCell` is told, and hands it on to `useCalendarCell` as `isOutsideMonth`.\n// Otherwise the day shows twice, in this grid and in its own month's, both selectable and both\n// taking focus.\nexport const CalendarWeekGrid = ({\n firstDayOfWeek,\n renderCell,\n startDate,\n state\n}: CalendarWeekGridProps) => {\n const { gridProps, headerProps, weekDays, weeksInMonth } = useCalendarGrid(\n { firstDayOfWeek, startDate },\n state\n )\n const monthStart = startDate ?? state.visibleRange.start\n\n return (\n <div {...gridProps} className=\"datepicker-content\">\n <div {...headerProps} className=\"datepicker-week\" role=\"row\">\n {weekDays.map((day, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"datepicker-week-day\" key={index} role=\"columnheader\">\n {day}\n </span>\n ))}\n </div>\n <div className=\"datepicker-dates\">\n {[...new Array(weeksInMonth).keys()].map((weekIndex) => {\n const week = state.getDatesInWeek(weekIndex, startDate)\n return (\n <div className=\"datepicker-dates-row\" key={weekIndex} role=\"row\">\n {week.map((date, i) =>\n date ? (\n <React.Fragment key={date.toString()}>\n {renderCell(date, i, week, !isSameMonth(date, monthStart))}\n </React.Fragment>\n ) : (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"datepicker-date\" key={i} role=\"gridcell\" />\n )\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","import React, { ReactNode } from 'react'\nimport { CalendarState, RangeCalendarState } from 'react-stately'\nimport { CalendarDate } from '@internationalized/date'\n\nimport { CalendarMonthYearPicker } from './CalendarMonthYearPicker'\nimport { CalendarWeekGrid } from './CalendarWeekGrid'\n\ninterface CalendarMonthBlockProps {\n // `null`/omitted when a global prev/next pair elsewhere is paging every visible month block at\n // once (`RangeCalendar` with `visibleMonths > 1`) rather than this block having its own — see\n // that component's own `arrows` prop.\n arrows?: { next: ReactNode; prev: ReactNode } | null\n firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'\n monthIndex: number\n onViewChange: (view: 'days' | 'months' | 'years') => void\n // The individual cell differs between `Calendar` and `RangeCalendar` (range selection needs\n // start/end/in-between pill state a single-date cell has no equivalent for), so cell rendering\n // is left to the caller — same shape `CalendarWeekGrid` itself already expects.\n renderCell: (\n date: CalendarDate,\n index: number,\n week: (CalendarDate | null)[],\n isOutsideMonth: boolean\n ) => ReactNode\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState\n}\n\n// One visible month within `visibleMonths` — shared by `Calendar` and `RangeCalendar`, which\n// otherwise duplicated this wiring near-verbatim. `monthIndex` is the offset of this block's own\n// month from `state.focusedDate` (`0` for a single-month calendar), letting `setVisibleRangeStart`\n// (inside `CalendarMonthYearPicker`) land a pick correctly regardless of which visible block it\n// came from.\nexport const CalendarMonthBlock = ({\n arrows,\n firstDayOfWeek,\n monthIndex,\n onViewChange,\n renderCell,\n state\n}: CalendarMonthBlockProps) => {\n const monthStart = state.visibleRange.start.add({ months: monthIndex })\n\n return (\n <>\n <CalendarMonthYearPicker\n monthIndex={monthIndex}\n monthStart={monthStart}\n nextArrow={arrows?.next}\n onViewChange={onViewChange}\n prevArrow={arrows?.prev}\n state={state}\n >\n <CalendarWeekGrid\n firstDayOfWeek={firstDayOfWeek}\n renderCell={renderCell}\n startDate={monthStart}\n state={state}\n />\n </CalendarMonthYearPicker>\n </>\n )\n}\n","import React, { useRef } from 'react'\nimport { AriaButtonProps, useButton } from 'react-aria'\n\ninterface CalendarNavButtonProps {\n buttonProps: AriaButtonProps\n direction: 'prev' | 'next'\n}\n\n// Shared prev/next arrow, used twice by both `Calendar` and `RangeCalendar` — `buttonProps`\n// comes from that caller's own `useCalendar`/`useRangeCalendar`, so this only owns the DOM ref and\n// the `useButton` wiring plus the arrow markup itself.\nexport const CalendarNavButton = ({ buttonProps, direction }: CalendarNavButtonProps) => {\n const ref = useRef<HTMLButtonElement>(null)\n const { buttonProps: domButtonProps } = useButton(buttonProps, ref)\n\n return (\n <button\n {...domButtonProps}\n className={`datepicker-arrow datepicker-arrow-${direction}`}\n ref={ref}\n type=\"button\"\n ></button>\n )\n}\n","import { DateValue } from 'react-stately'\nimport { toCalendarDate } from '@internationalized/date'\n\n// `toString()` on a `CalendarDate` yields the same ISO 8601 `YYYY-MM-DD` string already used\n// elsewhere for form submission (see `DatePicker`'s hidden input), so `unavailableDates` entries\n// are expected in that same format. A calendar's cells are `CalendarDate`s, but the pickers also\n// validate their own value with this, and with a time `granularity` that value's `toString()`\n// carries the time (`2026-03-15T09:30:00`): it's reduced to its day first.\nexport const mergeIsDateUnavailable = (\n unavailableDates: string[] | undefined,\n isDateUnavailable: ((date: DateValue) => boolean) | undefined\n): ((date: DateValue) => boolean) | undefined => {\n if (!unavailableDates?.length && !isDateUnavailable) return undefined\n\n const set = unavailableDates?.length ? new Set(unavailableDates) : null\n return (date) =>\n Boolean(set?.has(toCalendarDate(date).toString())) || Boolean(isDateUnavailable?.(date))\n}\n","import type { useLocalizedStringFormatter } from 'react-aria'\n\n// react-aria's own strings for the cell labels `useCalendarCell` writes (react-aria 3.52.1,\n// `intl/calendar/*.json`, Apache-2.0), limited to the ones `useCellToday` reads: the \"Today\" and\n// \"selected\" wrappers, and the minimum/maximum date notes. The locales and their order are\n// react-aria's, so a locale it doesn't have falls back to the same one here.\n// `test/components/calendar/todayLabel.spec.tsx` compares the labels against react-aria's\n// `react-aria/i18n` strings in every locale, so a react-aria update that changes them fails there.\nexport const todayLabelStrings: Parameters<typeof useLocalizedStringFormatter>[0] = {\n 'ar-AE': {\n todayDate: (args) => `اليوم، ${args?.date}`,\n todayDateSelected: (args) => `اليوم، ${args?.date} محدد`,\n dateSelected: (args) => `${args?.date} المحدد`,\n minimumDate: `أول تاريخ متاح`,\n maximumDate: `آخر تاريخ متاح`\n },\n 'bg-BG': {\n todayDate: (args) => `Днес, ${args?.date}`,\n todayDateSelected: (args) => `Днес, ${args?.date} са избрани`,\n dateSelected: (args) => `Избрано е ${args?.date}`,\n minimumDate: `Първа налична дата`,\n maximumDate: `Последна налична дата`\n },\n 'cs-CZ': {\n todayDate: (args) => `Dnes, ${args?.date}`,\n todayDateSelected: (args) => `Dnes, vybráno ${args?.date}`,\n dateSelected: (args) => `Vybráno ${args?.date}`,\n minimumDate: `První dostupné datum`,\n maximumDate: `Poslední dostupné datum`\n },\n 'da-DK': {\n todayDate: (args) => `I dag, ${args?.date}`,\n todayDateSelected: (args) => `I dag, ${args?.date} valgt`,\n dateSelected: (args) => `${args?.date} valgt`,\n minimumDate: `Første ledige dato`,\n maximumDate: `Sidste ledige dato`\n },\n 'de-DE': {\n todayDate: (args) => `Heute, ${args?.date}`,\n todayDateSelected: (args) => `Heute, ${args?.date} ausgewählt`,\n dateSelected: (args) => `${args?.date} ausgewählt`,\n minimumDate: `Erstes verfügbares Datum`,\n maximumDate: `Letztes verfügbares Datum`\n },\n 'el-GR': {\n todayDate: (args) => `Σήμερα, ${args?.date}`,\n todayDateSelected: (args) => `Σήμερα, επιλέχτηκε ${args?.date}`,\n dateSelected: (args) => `Επιλέχθηκε ${args?.date}`,\n minimumDate: `Πρώτη διαθέσιμη ημερομηνία`,\n maximumDate: `Τελευταία διαθέσιμη ημερομηνία`\n },\n 'en-US': {\n todayDate: (args) => `Today, ${args?.date}`,\n todayDateSelected: (args) => `Today, ${args?.date} selected`,\n dateSelected: (args) => `${args?.date} selected`,\n minimumDate: `First available date`,\n maximumDate: `Last available date`\n },\n 'es-ES': {\n todayDate: (args) => `Hoy, ${args?.date}`,\n todayDateSelected: (args) => `Hoy, ${args?.date} seleccionado`,\n dateSelected: (args) => `${args?.date} seleccionado`,\n minimumDate: `Primera fecha disponible`,\n maximumDate: `Última fecha disponible`\n },\n 'et-EE': {\n todayDate: (args) => `Täna, ${args?.date}`,\n todayDateSelected: (args) => `Täna, ${args?.date} valitud`,\n dateSelected: (args) => `${args?.date} valitud`,\n minimumDate: `Esimene saadaolev kuupäev`,\n maximumDate: `Viimane saadaolev kuupäev`\n },\n 'fi-FI': {\n todayDate: (args) => `Tänään, ${args?.date}`,\n todayDateSelected: (args) => `Tänään, ${args?.date} valittu`,\n dateSelected: (args) => `${args?.date} valittu`,\n minimumDate: `Ensimmäinen varattavissa oleva päivämäärä`,\n maximumDate: `Viimeinen varattavissa oleva päivämäärä`\n },\n 'fr-FR': {\n todayDate: (args) => `Aujourd'hui, ${args?.date}`,\n todayDateSelected: (args) => `Aujourd’hui, ${args?.date} sélectionné`,\n dateSelected: (args) => `${args?.date} sélectionné`,\n minimumDate: `Première date disponible`,\n maximumDate: `Dernière date disponible`\n },\n 'he-IL': {\n todayDate: (args) => `היום, ${args?.date}`,\n todayDateSelected: (args) => `היום, ${args?.date} נבחר`,\n dateSelected: (args) => `${args?.date} נבחר`,\n minimumDate: `תאריך פנוי ראשון`,\n maximumDate: `תאריך פנוי אחרון`\n },\n 'hr-HR': {\n todayDate: (args) => `Danas, ${args?.date}`,\n todayDateSelected: (args) => `Danas, odabran ${args?.date}`,\n dateSelected: (args) => `${args?.date} odabran`,\n minimumDate: `Prvi raspoloživi datum`,\n maximumDate: `Posljednji raspoloživi datum`\n },\n 'hu-HU': {\n todayDate: (args) => `Ma, ${args?.date}`,\n todayDateSelected: (args) => `Ma, ${args?.date} kijelölve`,\n dateSelected: (args) => `${args?.date} kiválasztva`,\n minimumDate: `Az első elérhető dátum`,\n maximumDate: `Utolsó elérhető dátum`\n },\n 'it-IT': {\n todayDate: (args) => `Oggi, ${args?.date}`,\n todayDateSelected: (args) => `Oggi, ${args?.date} selezionata`,\n dateSelected: (args) => `${args?.date} selezionata`,\n minimumDate: `Prima data disponibile`,\n maximumDate: `Ultima data disponibile`\n },\n 'ja-JP': {\n todayDate: (args) => `本日、${args?.date}`,\n todayDateSelected: (args) => `本日、${args?.date} を選択`,\n dateSelected: (args) => `${args?.date} を選択`,\n minimumDate: `最初の利用可能日`,\n maximumDate: `最終利用可能日`\n },\n 'ko-KR': {\n todayDate: (args) => `오늘, ${args?.date}`,\n todayDateSelected: (args) => `오늘, ${args?.date} 선택됨`,\n dateSelected: (args) => `${args?.date} 선택됨`,\n minimumDate: `처음으로 사용 가능한 일자`,\n maximumDate: `마지막으로 사용 가능한 일자`\n },\n 'lt-LT': {\n todayDate: (args) => `Šiandien, ${args?.date}`,\n todayDateSelected: (args) => `Šiandien, pasirinkta ${args?.date}`,\n dateSelected: (args) => `Pasirinkta ${args?.date}`,\n minimumDate: `Pirmoji galima data`,\n maximumDate: `Paskutinė galima data`\n },\n 'lv-LV': {\n todayDate: (args) => `Šodien, ${args?.date}`,\n todayDateSelected: (args) => `Atlasīta šodiena, ${args?.date}`,\n dateSelected: (args) => `Atlasīts: ${args?.date}`,\n minimumDate: `Pirmais pieejamais datums`,\n maximumDate: `Pēdējais pieejamais datums`\n },\n 'nb-NO': {\n todayDate: (args) => `I dag, ${args?.date}`,\n todayDateSelected: (args) => `I dag, ${args?.date} valgt`,\n dateSelected: (args) => `${args?.date} valgt`,\n minimumDate: `Første tilgjengelige dato`,\n maximumDate: `Siste tilgjengelige dato`\n },\n 'nl-NL': {\n todayDate: (args) => `Vandaag, ${args?.date}`,\n todayDateSelected: (args) => `Vandaag, ${args?.date} geselecteerd`,\n dateSelected: (args) => `${args?.date} geselecteerd`,\n minimumDate: `Eerste beschikbare datum`,\n maximumDate: `Laatste beschikbare datum`\n },\n 'pl-PL': {\n todayDate: (args) => `Dzisiaj, ${args?.date}`,\n todayDateSelected: (args) => `Dzisiaj wybrano ${args?.date}`,\n dateSelected: (args) => `Wybrano ${args?.date}`,\n minimumDate: `Pierwsza dostępna data`,\n maximumDate: `Ostatnia dostępna data`\n },\n 'pt-BR': {\n todayDate: (args) => `Hoje, ${args?.date}`,\n todayDateSelected: (args) => `Hoje, ${args?.date} selecionado`,\n dateSelected: (args) => `${args?.date} selecionado`,\n minimumDate: `Primeira data disponível`,\n maximumDate: `Última data disponível`\n },\n 'pt-PT': {\n todayDate: (args) => `Hoje, ${args?.date}`,\n todayDateSelected: (args) => `Hoje, ${args?.date} selecionado`,\n dateSelected: (args) => `${args?.date} selecionado`,\n minimumDate: `Primeira data disponível`,\n maximumDate: `Última data disponível`\n },\n 'ro-RO': {\n todayDate: (args) => `Astăzi, ${args?.date}`,\n todayDateSelected: (args) => `Azi, ${args?.date} selectată`,\n dateSelected: (args) => `${args?.date} selectată`,\n minimumDate: `Prima dată disponibilă`,\n maximumDate: `Ultima dată disponibilă`\n },\n 'ru-RU': {\n todayDate: (args) => `Сегодня, ${args?.date}`,\n todayDateSelected: (args) => `Сегодня, выбрано ${args?.date}`,\n dateSelected: (args) => `Выбрано ${args?.date}`,\n minimumDate: `Первая доступная дата`,\n maximumDate: `Последняя доступная дата`\n },\n 'sk-SK': {\n todayDate: (args) => `Dnes ${args?.date}`,\n todayDateSelected: (args) => `Vybratý dnešný dátum ${args?.date}`,\n dateSelected: (args) => `Vybratý dátum ${args?.date}`,\n minimumDate: `Prvý dostupný dátum`,\n maximumDate: `Posledný dostupný dátum`\n },\n 'sl-SI': {\n todayDate: (args) => `Danes, ${args?.date}`,\n todayDateSelected: (args) => `Danes, ${args?.date} izbrano`,\n dateSelected: (args) => `${args?.date} izbrano`,\n minimumDate: `Prvi razpoložljivi datum`,\n maximumDate: `Zadnji razpoložljivi datum`\n },\n 'sr-SP': {\n todayDate: (args) => `Danas, ${args?.date}`,\n todayDateSelected: (args) => `Danas, izabran ${args?.date}`,\n dateSelected: (args) => `${args?.date} izabran`,\n minimumDate: `Prvi raspoloživi datum`,\n maximumDate: `Zadnji raspoloživi datum`\n },\n 'sv-SE': {\n todayDate: (args) => `Idag, ${args?.date}`,\n todayDateSelected: (args) => `Idag, ${args?.date} har valts`,\n dateSelected: (args) => `${args?.date} har valts`,\n minimumDate: `Första tillgängliga datum`,\n maximumDate: `Sista tillgängliga datum`\n },\n 'tr-TR': {\n todayDate: (args) => `Bugün, ${args?.date}`,\n todayDateSelected: (args) => `Bugün, ${args?.date} seçildi`,\n dateSelected: (args) => `${args?.date} seçildi`,\n minimumDate: `İlk müsait tarih`,\n maximumDate: `Son müsait tarih`\n },\n 'uk-UA': {\n todayDate: (args) => `Сьогодні, ${args?.date}`,\n todayDateSelected: (args) => `Сьогодні, вибрано ${args?.date}`,\n dateSelected: (args) => `Вибрано ${args?.date}`,\n minimumDate: `Перша доступна дата`,\n maximumDate: `Остання доступна дата`\n },\n 'zh-CN': {\n todayDate: (args) => `今天,即 ${args?.date}`,\n todayDateSelected: (args) => `已选择今天,即 ${args?.date}`,\n dateSelected: (args) => `已选择 ${args?.date}`,\n minimumDate: `第一个可用日期`,\n maximumDate: `最后一个可用日期`\n },\n 'zh-TW': {\n todayDate: (args) => `今天,${args?.date}`,\n todayDateSelected: (args) => `已選取今天,${args?.date}`,\n dateSelected: (args) => `已選取 ${args?.date}`,\n minimumDate: `第一個可用日期`,\n maximumDate: `最後一個可用日期`\n }\n}\n","import { CalendarDate, isSameDay, isToday } from '@internationalized/date'\nimport { useLocalizedStringFormatter } from 'react-aria'\nimport type { CalendarState, RangeCalendarState } from 'react-stately'\n\nimport { useHydrated } from '../../hooks/useHydrated'\nimport { todayLabelStrings } from './todayLabelStrings'\n\n// Stands in for the date in a wrapper string, to split the wrapper around it.\nconst DATE = '\\u0000'\n\ninterface CellToday {\n /** Whether the cell is marked as today: its class and `aria-current`. */\n isCurrentDate: boolean\n /** The cell button's `aria-label`. */\n label: string | undefined\n}\n\n// \"Today\" depends on the time zone, and a server's is rarely the viewer's, so a cell marks it only\n// once hydration has finished. The zone is the calendar's, as in react-aria's label: a\n// `ZonedDateTime` value's own, otherwise the browser's.\n//\n// That covers the label too, which `useCalendarCell` writes during render with no such guard\n// (\"Today, Thursday, October 1, 2026 selected\"). Until hydration the cell's label is react-aria's\n// for a day that isn't today: the \"Today\" wrapper taken off the label react-aria wrote, and, for a\n// selected day, its \"selected\" wrapper put on instead. The wrappers come from the same strings\n// react-aria formats with, a `LocalizedStringProvider`'s or else a copy of react-aria's own\n// (`todayLabelStrings.ts`). What's inside the wrapper (a range's description, the date) and the\n// first/last available date note after it stay react-aria's. Should react-aria's label ever not\n// match those wrappers, it's left as it is.\nexport function useCellToday(\n date: CalendarDate,\n state: CalendarState<'single' | 'multiple'> | RangeCalendarState,\n isSelected: boolean,\n label: string | undefined\n): CellToday {\n const hydrated = useHydrated()\n const strings = useLocalizedStringFormatter(todayLabelStrings, '@react-aria/calendar')\n const today = isToday(date, state.timeZone)\n if (hydrated || !today || !label) return { isCurrentDate: hydrated && today, label }\n\n const wrapper = strings.format(isSelected ? 'todayDateSelected' : 'todayDate', { date: DATE })\n const [before = '', after = ''] = wrapper.split(DATE)\n let note = ''\n if (state.minValue && isSameDay(date, state.minValue)) {\n note = `, ${strings.format('minimumDate')}`\n } else if (state.maxValue && isSameDay(date, state.maxValue)) {\n note = `, ${strings.format('maximumDate')}`\n }\n const end = label.length - after.length - note.length\n if (!label.startsWith(before) || !label.endsWith(after + note) || end < before.length) {\n return { isCurrentDate: false, label }\n }\n\n const inner = label.slice(before.length, end)\n return {\n isCurrentDate: false,\n label: (isSelected ? strings.format('dateSelected', { date: inner }) : inner) + note\n }\n}\n","import React, { forwardRef, HTMLAttributes, useMemo, useRef, useState } from 'react'\nimport classNames from 'classnames'\nimport { AriaCalendarProps, mergeProps, useCalendar, useCalendarCell, useLocale } from 'react-aria'\nimport { CalendarState as StatelyCalendarState, DateValue, useCalendarState } from 'react-stately'\nimport {\n CalendarDate,\n createCalendar,\n getLocalTimeZone,\n isWeekend,\n today\n} from '@internationalized/date'\n\nimport { useForkedRef } from '../../hooks'\nimport { CalendarMonthBlock } from './CalendarMonthBlock'\nimport { CalendarMonthYearPicker } from './CalendarMonthYearPicker'\nimport { CalendarNavButton } from './CalendarNavButton'\nimport { CalendarWeekGrid } from './CalendarWeekGrid'\nimport { mergeIsDateUnavailable } from '../../utils/mergeIsDateUnavailable'\nimport './Calendar.scss'\nimport { CalendarLabels, CalendarLabelsProvider } from './labels'\nimport { useCellToday } from './todayLabel'\n\ninterface CalendarBaseProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /**\n * An accessible label for the calendar, used when there's no visible label. Required for\n * standalone use — a calendar grid has no other accessible name of its own.\n */\n 'aria-label'?: string\n /**\n * Identifies a visible label element for the calendar.\n */\n 'aria-labelledby'?: string\n /**\n * Whether to automatically focus the calendar when it mounts.\n */\n autoFocus?: boolean\n /**\n * A string of all className you want applied to the base component.\n */\n className?: string\n /**\n * The date the calendar first shows and focuses, in place of the selected date or today.\n * `DatePicker` and `DateRangePicker` pass their `placeholderValue` here while empty.\n */\n defaultFocusedValue?: DateValue | null\n /**\n * Prevents the calendar from being focused or interacted with.\n */\n disabled?: boolean\n /**\n * The day that starts the week, overriding the default set by the active locale.\n *\n * @default 'mon'\n */\n firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'\n /**\n * Callback that is called for each date in the calendar. If it returns `true`, that date is\n * shown but cannot be selected.\n */\n isDateUnavailable?: (date: DateValue) => boolean\n /**\n * Overrides for the handful of strings this component renders itself rather than getting from\n * the active locale (the year view's paging arrows, its live-region announcements, and the\n * month/year header buttons). Everything else — month and weekday names, the calendar system —\n * follows `I18nProvider`'s locale via react-aria and needs no override. Merged over the English\n * defaults, so passing one key leaves the rest alone.\n */\n labels?: Partial<CalendarLabels>\n /**\n * The maximum allowed date that a user may select.\n */\n maxValue?: DateValue | null\n /**\n * The minimum allowed date that a user may select.\n */\n minValue?: DateValue | null\n /**\n * ISO 8601 dates (`YYYY-MM-DD`) to mark unselectable, as a convenience alternative to\n * `isDateUnavailable` for data-driven cases (e.g. booked dates fetched from an API). Composed\n * with `isDateUnavailable` when both are given — a date unavailable by either is unavailable.\n */\n unavailableDates?: string[]\n /**\n * Number of months to display side by side, sharing one selection. Wraps to multiple rows in\n * a narrow container (e.g. a popover on a sm screen) rather than overflowing — the wrap is\n * driven by the calendar's own width, not the viewport, so it adapts correctly regardless of\n * where the calendar is embedded.\n *\n * @default 1\n */\n visibleMonths?: number\n}\n\nexport interface CalendarSingleProps extends CalendarBaseProps {\n /**\n * The initial selected date (uncontrolled).\n */\n defaultValue?: DateValue | null\n /**\n * Callback fired when the selected date changes. Unlike `DatePicker`'s `onChange` (whose\n * segmented field can be cleared to `null`), a calendar selection is always a concrete date.\n */\n onChange?: (value: DateValue) => void\n /**\n * Whether a single date or multiple, independently toggled dates can be selected.\n *\n * @default 'single'\n */\n selectionMode?: 'single'\n /**\n * The selected date (controlled).\n */\n value?: DateValue | null\n}\n\nexport interface CalendarMultipleProps extends CalendarBaseProps {\n /**\n * The initial selected dates (uncontrolled).\n */\n defaultValue?: DateValue[] | null\n /**\n * Callback fired when the set of selected dates changes.\n */\n onChange?: (value: DateValue[]) => void\n /**\n * Whether a single date or multiple, independently toggled dates can be selected.\n *\n * @default 'single'\n */\n selectionMode: 'multiple'\n /**\n * The selected dates (controlled).\n */\n value?: DateValue[] | null\n}\n\nexport type CalendarProps = CalendarSingleProps | CalendarMultipleProps\n\n// Public, standalone calendar grid — also used internally by `DatePicker` to render the grid\n// inside its popover. Deliberately has no knowledge of dialog/popover semantics (role=\"dialog\",\n// focus trapping, etc.) — that's the caller's concern, layered on via the `...rest` passthrough\n// below (see `DatePicker`, which merges its own `useDialog` output in this way).\n//\n// `selectionMode` is a discriminated union on the public props (single vs. multiple value/\n// onChange shapes), bridged onto one underlying `useCalendarState`/`useCalendar` call instantiated\n// over the union of both modes — react-stately/react-aria are natively selection-mode-aware at\n// that layer (including `useCalendarCell`'s `isSelected`), so no custom multi-select logic is\n// needed here, just narrow, provably-safe casts at the seam between the public union and the\n// single generic call (react-stately always reports/expects the value shape matching whichever\n// `selectionMode` was actually passed in).\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>((props, forwardedRef) => {\n const {\n autoFocus,\n className,\n defaultFocusedValue: defaultFocusedValueProp,\n defaultValue,\n disabled,\n firstDayOfWeek = 'mon',\n isDateUnavailable,\n labels,\n maxValue,\n minValue,\n onChange,\n selectionMode = 'single',\n unavailableDates,\n value,\n visibleMonths = 1,\n ...rest\n } = props\n\n const { locale } = useLocale()\n const internalRef = useRef<HTMLDivElement>(null)\n const ref = useForkedRef(internalRef, forwardedRef)\n const combinedIsDateUnavailable = useMemo(\n () => mergeIsDateUnavailable(unavailableDates, isDateUnavailable),\n [unavailableDates, isDateUnavailable]\n )\n // Tracks each visible month block's own view, keyed by `monthIndex` — same reasoning as\n // `RangeCalendar`'s identical state: needed only to know whether *any* block has switched\n // away from the day grid, so the global `.datepicker-controls` overlay can hide itself rather\n // than sit on top of `CalendarYearGrid`'s own pager.\n const [monthViews, setMonthViews] = useState<Record<number, 'days' | 'months' | 'years'>>({})\n const hasPickerView = Object.values(monthViews).some((view) => view !== 'days')\n\n const handleChange = (next: DateValue | readonly DateValue[]) => {\n if (selectionMode === 'multiple') {\n ;(onChange as ((value: DateValue[]) => void) | undefined)?.(next as DateValue[])\n } else {\n ;(onChange as ((value: DateValue) => void) | undefined)?.(next as DateValue)\n }\n }\n const normalizedValue = value as DateValue | readonly DateValue[] | null | undefined\n const normalizedDefaultValue = defaultValue as DateValue | readonly DateValue[] | null | undefined\n // react-stately's `useCalendarState` crashes computing the initial focused date for\n // `selectionMode: 'multiple'` when the (controlled or default) value is a genuinely empty\n // array — its own fallback-to-today logic only runs when the value is nullish, but an empty\n // array is truthy, so it instead indexes the (nonexistent) first element and calls `.subtract`\n // on the resulting `undefined`. Supplying `defaultFocusedValue` ourselves in exactly that case\n // short-circuits react-stately's logic before it ever reaches the buggy branch, without\n // affecting the normal \"focus follows the selection\" behavior whenever there is one.\n const resolvedValue = normalizedValue !== undefined ? normalizedValue : normalizedDefaultValue\n const defaultFocusedValue =\n defaultFocusedValueProp ??\n (selectionMode === 'multiple' && Array.isArray(resolvedValue) && resolvedValue.length === 0\n ? today(getLocalTimeZone())\n : undefined)\n\n const state = useCalendarState<DateValue, 'single' | 'multiple'>({\n autoFocus,\n createCalendar,\n defaultFocusedValue,\n defaultValue: normalizedDefaultValue,\n firstDayOfWeek,\n isDateUnavailable: combinedIsDateUnavailable,\n isDisabled: disabled,\n locale,\n maxValue,\n minValue,\n onChange: handleChange,\n // Prev/next always slide the visible window by one month, regardless of `visibleMonths` —\n // same reasoning as `RangeCalendar`'s identical setting (see that component's own comment).\n pageBehavior: 'single',\n selectionMode,\n value: normalizedValue,\n visibleDuration: { months: visibleMonths }\n })\n\n const ariaProps: AriaCalendarProps<DateValue, 'single' | 'multiple'> = {\n 'aria-label': rest['aria-label'],\n 'aria-labelledby': rest['aria-labelledby'],\n autoFocus,\n defaultFocusedValue,\n defaultValue: normalizedDefaultValue,\n isDateUnavailable: combinedIsDateUnavailable,\n isDisabled: disabled,\n maxValue,\n minValue,\n onChange: handleChange,\n selectionMode,\n value: normalizedValue\n }\n\n const { calendarProps, prevButtonProps, nextButtonProps } = useCalendar(ariaProps, state)\n const prevButton = <CalendarNavButton buttonProps={prevButtonProps} direction=\"prev\" />\n const nextButton = <CalendarNavButton buttonProps={nextButtonProps} direction=\"next\" />\n\n return (\n <CalendarLabelsProvider labels={labels}>\n <div\n {...mergeProps(calendarProps, rest)}\n className={classNames('datepicker', className)}\n data-cx-inline=\"true\"\n ref={ref}\n >\n {visibleMonths === 1 ? (\n <CalendarMonthYearPicker\n monthStart={state.visibleRange.start}\n nextArrow={nextButton}\n prevArrow={prevButton}\n state={state}\n >\n <CalendarWeekGrid\n firstDayOfWeek={firstDayOfWeek}\n renderCell={(date, _index, _week, isOutsideMonth) => (\n <CalendarCell\n date={date}\n isOutsideMonth={isOutsideMonth}\n locale={locale}\n state={state}\n />\n )}\n state={state}\n />\n </CalendarMonthYearPicker>\n ) : (\n <>\n {/* `.datepicker[data-cx-inline]` (the root above) is already `position: relative` in\n chassis-css, so this overlay needs no extra positioning wrapper of its own — unlike\n `RangeCalendar`, which has a `presets` column sharing that root and so scopes its\n own copy of this overlay to a nested `.datepicker-body` instead. */}\n {!hasPickerView && (\n <div className=\"datepicker-controls\">\n {prevButton}\n {nextButton}\n </div>\n )}\n <div className=\"datepicker-grid\">\n {[...new Array(visibleMonths).keys()].map((monthIndex) => (\n <CalendarMonthBlock\n firstDayOfWeek={firstDayOfWeek}\n key={monthIndex}\n monthIndex={monthIndex}\n onViewChange={(view) =>\n setMonthViews((prev) => ({ ...prev, [monthIndex]: view }))\n }\n renderCell={(date, _index, _week, isOutsideMonth) => (\n <CalendarCell\n date={date}\n isOutsideMonth={isOutsideMonth}\n locale={locale}\n state={state}\n />\n )}\n state={state}\n />\n ))}\n </div>\n </>\n )}\n </div>\n </CalendarLabelsProvider>\n )\n})\n\nCalendar.displayName = 'Calendar'\n\ntype CalendarState = StatelyCalendarState<'single' | 'multiple'>\n\ninterface CalendarCellProps {\n date: CalendarDate\n // A day of the month before or after the one this grid shows: see `CalendarWeekGrid`.\n isOutsideMonth: boolean\n locale: string\n state: CalendarState\n}\n\nconst CalendarCell = ({ date, isOutsideMonth, locale, state }: CalendarCellProps) => {\n const ref = useRef<HTMLButtonElement>(null)\n const {\n cellProps,\n buttonProps,\n isSelected,\n isOutsideVisibleRange,\n isDisabled,\n isUnavailable,\n formattedDate\n } = useCalendarCell({ date, isOutsideMonth }, state, ref)\n // Today only once hydrated, in the class, `aria-current` and the label alike: see `useCellToday`.\n const { isCurrentDate, label } = useCellToday(date, state, isSelected, buttonProps['aria-label'])\n\n return (\n <div\n {...cellProps}\n aria-current={isCurrentDate ? 'date' : undefined}\n className={classNames('datepicker-date', {\n 'datepicker-date-selected': isSelected,\n 'datepicker-date-today': isCurrentDate,\n 'datepicker-date-outside': isOutsideVisibleRange || isOutsideMonth,\n 'datepicker-date-disabled': isDisabled,\n 'datepicker-date-unavailable': isUnavailable,\n 'datepicker-date-weekend': isWeekend(date, locale)\n })}\n >\n <button\n {...buttonProps}\n aria-label={label}\n type=\"button\"\n className=\"datepicker-date-btn\"\n ref={ref}\n // react-aria leaves `tabIndex` off a day that can't be focused, which keeps its own `<div>`\n // out of the tab order but not a `<button>`.\n tabIndex={buttonProps.tabIndex ?? -1}\n >\n {formattedDate}\n </button>\n </div>\n )\n}\n","import { RangeValue } from 'react-aria'\nimport { DateValue } from 'react-stately'\nimport { Calendar, CalendarDate, toCalendar, toCalendarDate } from '@internationalized/date'\n\n// The day `date` on `like`: in its calendar, and with its time and zone when it has them.\nconst onDayOf = (like: DateValue, date: CalendarDate): DateValue => {\n const day = toCalendar(date, like.calendar)\n return 'hour' in like\n ? like.set({ day: day.day, era: day.era, month: day.month, year: day.year })\n : day\n}\n\n// A preset's range as a range picked in the grid would come out. react-stately's `selectDate`\n// puts the two days in order, keeps them inside `minValue`/`maxValue`, and returns them in the\n// calendar of the current value with that value's times; `state.setValue` does none of it, so a\n// preset could commit a reversed range, days no cell allows, and plain dates over a value that\n// has times. With no current value the preset's own dates set the calendar and the times.\n//\n// `null` when the grid has no way to that range, and the preset is disabled:\n//\n// - No day of it is inside `minValue`/`maxValue`: there is nothing to select.\n// - A day of it, inside those limits, is unavailable. A range in the grid is contiguous (this\n// package doesn't pass react-stately's `allowsNonContiguousRanges`): with the start picked,\n// the cells from the next unavailable day on are disabled, so no second press reaches the\n// preset's end. The range isn't cut short at that day instead, as it is at a limit: the days\n// left would be whichever came before the first gap, not what the preset's label says.\n// `isDateUnavailable` is asked about each day as the grid asks, in `calendar`.\nexport const normalizePresetRange = (\n range: RangeValue<DateValue>,\n value: RangeValue<DateValue> | null,\n minValue?: DateValue | null,\n maxValue?: DateValue | null,\n isDateUnavailable?: (date: DateValue) => boolean,\n calendar?: Calendar\n): RangeValue<DateValue> | null => {\n const [first, last] =\n range.end.compare(range.start) < 0 ? [range.end, range.start] : [range.start, range.end]\n let start = toCalendarDate(first)\n let end = toCalendarDate(last)\n const min = minValue ? toCalendarDate(minValue) : null\n const max = maxValue ? toCalendarDate(maxValue) : null\n if ((min && end.compare(min) < 0) || (max && start.compare(max) > 0)) return null\n if (min && start.compare(min) < 0) start = min\n if (max && end.compare(max) > 0) end = max\n if (isDateUnavailable) {\n for (let day = start; day.compare(end) <= 0; day = day.add({ days: 1 })) {\n if (isDateUnavailable(calendar ? toCalendar(day, calendar) : day)) return null\n }\n }\n return {\n end: onDayOf(value?.end ?? last, end),\n start: onDayOf(value?.start ?? first, start)\n }\n}\n","import React, { forwardRef, HTMLAttributes, useMemo, useRef, useState } from 'react'\nimport classNames from 'classnames'\nimport {\n AriaRangeCalendarProps,\n mergeProps,\n RangeValue,\n useCalendarCell,\n useLocale,\n useRangeCalendar\n} from 'react-aria'\nimport { DateValue, RangeCalendarState, useRangeCalendarState } from 'react-stately'\nimport {\n CalendarDate,\n createCalendar,\n isSameDay,\n isSameMonth,\n isWeekend,\n startOfMonth,\n toCalendar,\n toCalendarDate\n} from '@internationalized/date'\n\nimport { useForkedRef } from '../../hooks'\nimport { CalendarMonthBlock } from './CalendarMonthBlock'\nimport { CalendarNavButton } from './CalendarNavButton'\nimport { DateRangePreset } from '../../utils/dateRangePresets'\nimport { mergeIsDateUnavailable } from '../../utils/mergeIsDateUnavailable'\nimport { setVisibleRangeStart } from '../../utils/setVisibleRangeStart'\nimport { suppressFocusRing } from '../../utils/suppressFocusRingGlobally'\nimport './Calendar.scss'\nimport './RangeCalendar.scss'\nimport { CalendarLabels, CalendarLabelsProvider } from './labels'\nimport { normalizePresetRange } from './presetRange'\nimport { useCellToday } from './todayLabel'\n\nexport interface RangeCalendarProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /**\n * An accessible label for the calendar, used when there's no visible label. Required for\n * standalone use — a calendar grid has no other accessible name of its own.\n */\n 'aria-label'?: string\n /**\n * Identifies a visible label element for the calendar.\n */\n 'aria-labelledby'?: string\n /**\n * Whether to automatically focus the calendar when it mounts.\n */\n autoFocus?: boolean\n /**\n * A string of all className you want applied to the base component.\n */\n className?: string\n /**\n * The date the calendar first shows and focuses, in place of the selected date or today.\n * `DatePicker` and `DateRangePicker` pass their `placeholderValue` here while empty.\n */\n defaultFocusedValue?: DateValue | null\n /**\n * The initial selected date range (uncontrolled).\n */\n defaultValue?: RangeValue<DateValue> | null\n /**\n * Prevents the calendar from being focused or interacted with.\n */\n disabled?: boolean\n /**\n * The day that starts the week, overriding the default set by the active locale.\n *\n * @default 'mon'\n */\n firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'\n /**\n * Callback that is called for each date in the calendar. If it returns `true`, that date is\n * shown but cannot be selected.\n */\n isDateUnavailable?: (date: DateValue) => boolean\n /**\n * Overrides for the handful of strings this component renders itself rather than getting from\n * the active locale (the year view's paging arrows, its live-region announcements, and the\n * month/year header buttons). Everything else — month and weekday names, the calendar system —\n * follows `I18nProvider`'s locale via react-aria and needs no override. Merged over the English\n * defaults, so passing one key leaves the rest alone.\n */\n labels?: Partial<CalendarLabels>\n /**\n * The maximum allowed date that a user may select.\n */\n maxValue?: DateValue | null\n /**\n * The minimum allowed date that a user may select.\n */\n minValue?: DateValue | null\n /**\n * Callback fired when a complete range is selected (both a start and end date).\n */\n onChange?: (value: RangeValue<DateValue>) => void\n /**\n * A list of quick-select range presets shown beside the calendar. Selecting a preset commits\n * its range immediately, the same as picking a start and end date from the grid: in order,\n * kept inside `minValue`/`maxValue`, and in the calendar of the current value with its times.\n * A preset the grid couldn't select is disabled: one with no day inside those limits, and one\n * with an unavailable day in its range. The preset matching the current selection (if any) is\n * marked selected. Omit to not show a preset list.\n */\n presets?: DateRangePreset[]\n /**\n * ISO 8601 dates (`YYYY-MM-DD`) to mark unselectable, as a convenience alternative to\n * `isDateUnavailable` for data-driven cases (e.g. booked dates fetched from an API). Composed\n * with `isDateUnavailable` when both are given — a date unavailable by either is unavailable.\n */\n unavailableDates?: string[]\n /**\n * The selected date range (controlled).\n */\n value?: RangeValue<DateValue> | null\n /**\n * Number of months to display side by side, sharing one selection. Wraps to multiple rows in\n * a narrow container (e.g. a popover on a sm screen) rather than overflowing — the wrap is\n * driven by the calendar's own width, not the viewport, so it adapts correctly regardless of\n * where the calendar is embedded.\n *\n * @default 1\n */\n visibleMonths?: number\n}\n\n// Range counterpart to `Calendar` — same dialog-agnostic composition boundary (see that\n// component's own comment) and the same header/month-year-picker/grid visual language, reusing\n// `Calendar.scss`'s shared classes directly. Kept as its own component rather than a `mode` prop\n// on `Calendar`: the underlying react-stately/react-aria hooks are a genuinely different pair\n// (`useRangeCalendarState`/`useRangeCalendar` vs `useCalendarState`/`useCalendar`), and the cell\n// rendering has range-only concerns (start/end/in-between pill styling) with no single-date\n// equivalent.\nexport const RangeCalendar = forwardRef<HTMLDivElement, RangeCalendarProps>(\n (\n {\n autoFocus,\n className,\n defaultFocusedValue,\n defaultValue,\n disabled,\n firstDayOfWeek = 'mon',\n isDateUnavailable,\n labels,\n maxValue,\n minValue,\n onChange,\n presets,\n unavailableDates,\n value,\n visibleMonths = 1,\n ...rest\n },\n forwardedRef\n ) => {\n const { locale } = useLocale()\n const internalRef = useRef<HTMLDivElement>(null)\n const ref = useForkedRef(internalRef, forwardedRef)\n const combinedIsDateUnavailable = useMemo(\n () => mergeIsDateUnavailable(unavailableDates, isDateUnavailable),\n [unavailableDates, isDateUnavailable]\n )\n const resolvedPresets = presets && presets.length > 0 ? presets : null\n // Tracks each visible month block's own view, keyed by `monthIndex` — needed only to know\n // whether *any* block has switched away from the day grid. `CalendarYearGrid` owns its own\n // prev/next pager, which would otherwise sit right underneath the global `.datepicker-controls`\n // overlay below (see its own comment) — and even in the month view, where there's no such\n // literal overlap, the global pager would still page the day grid one block is no longer\n // showing, which reads as it doing nothing.\n const [monthViews, setMonthViews] = useState<Record<number, 'days' | 'months' | 'years'>>({})\n const hasPickerView = Object.values(monthViews).some((view) => view !== 'days')\n\n const state = useRangeCalendarState({\n autoFocus,\n createCalendar,\n defaultFocusedValue,\n defaultValue,\n firstDayOfWeek,\n isDateUnavailable: combinedIsDateUnavailable,\n isDisabled: disabled,\n locale,\n maxValue,\n minValue,\n onChange,\n // Prev/next always slide the visible window by one month, regardless of `visibleMonths` —\n // react-stately's own default (`pageBehavior: 'visible'`) instead pages by the *entire*\n // visible span at once (e.g. jumping straight from Nov/Dec to Jan/Feb for `visibleMonths={2}`,\n // skipping Dec/Jan entirely), which reads as broken next to `CalendarMonthYearDropdowns`'\n // own one-month-at-a-time jumps.\n pageBehavior: 'single',\n value,\n visibleDuration: { months: visibleMonths }\n })\n\n const ariaProps: AriaRangeCalendarProps<DateValue> = {\n 'aria-label': rest['aria-label'],\n 'aria-labelledby': rest['aria-labelledby'],\n autoFocus,\n defaultFocusedValue,\n defaultValue,\n isDateUnavailable: combinedIsDateUnavailable,\n isDisabled: disabled,\n maxValue,\n minValue,\n onChange,\n value\n }\n\n const { calendarProps, prevButtonProps, nextButtonProps } = useRangeCalendar(\n ariaProps,\n state,\n internalRef\n )\n // A single pair of buttons, placed in exactly one spot depending on `visibleMonths` — inline\n // in the (only) month's own header for a single month, or once as a global overlay for\n // several — never both, so there's no risk of two DOM nodes fighting over one ref.\n const prevButton = <CalendarNavButton buttonProps={prevButtonProps} direction=\"prev\" />\n const nextButton = <CalendarNavButton buttonProps={nextButtonProps} direction=\"next\" />\n const singleMonthArrows = visibleMonths === 1 ? { next: nextButton, prev: prevButton } : null\n\n // Each preset's range as the grid would select it, or `null` for one it couldn't: see\n // `normalizePresetRange`. Kept between renders, of which hovering the grid makes many: a\n // preset is asked about every day of its range.\n const gridCalendar = state.focusedDate.calendar\n const presetRanges = useMemo(\n () =>\n new Map(\n resolvedPresets?.map((preset) => [\n preset,\n normalizePresetRange(\n preset.range,\n state.value,\n minValue,\n maxValue,\n combinedIsDateUnavailable,\n gridCalendar\n )\n ])\n ),\n [resolvedPresets, state.value, minValue, maxValue, combinedIsDateUnavailable, gridCalendar]\n )\n\n // Goes through the same `state.setValue` path a two-click grid selection does (rather than\n // calling `onChange` directly), so it behaves identically whether `value` is controlled or\n // uncontrolled — including `DateRangePicker`, which relies on this to auto-close its popover\n // the same way completing a range in the grid already does. `setValue` alone skips what the\n // grid's `selectDate` does to the two days first, so the range is normalized here.\n const handlePresetSelect = (preset: DateRangePreset) => {\n const range = presetRanges.get(preset)\n if (!range) return\n // A range that starts outside the visible months would be selected out of sight, so the\n // calendar moves to its first month.\n const start = toCalendar(toCalendarDate(range.start), state.focusedDate.calendar)\n const { end: visibleEnd, start: visibleStart } = state.visibleRange\n if (start.compare(visibleStart) < 0 || start.compare(visibleEnd) > 0) {\n setVisibleRangeStart(state, startOfMonth(start))\n }\n // A selection begun in the grid would otherwise stay pending over the preset's range: the\n // grid kept showing it, and the next day pressed finished it.\n state.setAnchorDate(null)\n state.setValue(range)\n }\n\n // Whether the grid of the month starting at `monthStart` draws `date` inside the range's band.\n // A day of another month, a disabled one and an unavailable one are not, whatever the range.\n const isInBand = (date: CalendarDate | null | undefined, monthStart: CalendarDate) =>\n Boolean(date && isSameMonth(date, monthStart) && state.isSelected(date))\n\n return (\n <CalendarLabelsProvider labels={labels}>\n <div\n {...mergeProps(calendarProps, rest)}\n className={classNames('datepicker', className)}\n data-cx-inline=\"true\"\n ref={ref}\n >\n <div className=\"datepicker-grid\">\n {resolvedPresets && (\n <DateRangePresets\n disabled={state.isDisabled}\n onSelect={handlePresetSelect}\n presets={resolvedPresets}\n rangeOf={(preset) => presetRanges.get(preset) ?? null}\n value={state.value}\n />\n )}\n <div className=\"datepicker-body\">\n {visibleMonths > 1 && !hasPickerView && (\n <div className=\"datepicker-controls\">\n {prevButton}\n {nextButton}\n </div>\n )}\n <div className=\"datepicker-grid\">\n {[...new Array(visibleMonths).keys()].map((monthIndex) => {\n const monthStart = state.visibleRange.start.add({ months: monthIndex })\n\n return (\n <CalendarMonthBlock\n arrows={monthIndex === 0 ? singleMonthArrows : null}\n firstDayOfWeek={firstDayOfWeek}\n key={monthIndex}\n monthIndex={monthIndex}\n onViewChange={(view) =>\n setMonthViews((prev) => ({ ...prev, [monthIndex]: view }))\n }\n renderCell={(date, i, week, isOutsideMonth) => (\n <CalendarCell\n date={date}\n isBandEnd={!isInBand(week[i + 1], monthStart)}\n isBandStart={!isInBand(week[i - 1], monthStart)}\n isOutsideMonth={isOutsideMonth}\n locale={locale}\n state={state}\n />\n )}\n state={state}\n />\n )\n })}\n </div>\n </div>\n </div>\n </div>\n </CalendarLabelsProvider>\n )\n }\n)\n\nRangeCalendar.displayName = 'RangeCalendar'\n\ninterface CalendarCellProps {\n date: CalendarDate\n // Whether the band stops after this day and starts at it: the day next to it in the row is\n // not drawn in the range, or there is none. That is a row's last and first day, and also a day\n // beside an unavailable or disabled one, or beside another month's.\n isBandEnd: boolean\n isBandStart: boolean\n // A day of the month before or after the one this grid shows: see `CalendarWeekGrid`.\n isOutsideMonth: boolean\n locale: string\n state: RangeCalendarState\n}\n\nconst CalendarCell = ({\n date,\n isBandEnd,\n isBandStart,\n isOutsideMonth,\n locale,\n state\n}: CalendarCellProps) => {\n const ref = useRef<HTMLButtonElement>(null)\n const {\n cellProps,\n buttonProps,\n isSelected,\n isOutsideVisibleRange,\n isDisabled,\n isUnavailable,\n formattedDate\n } = useCalendarCell({ date, isOutsideMonth }, state, ref)\n\n // `isSelected` is true for every day in the range, not just its endpoints — the pill's rounded\n // caps belong only at the true start/end (or wherever the band breaks: a row wrapping mid-range,\n // so it still reads as continuous week to week, and a day the range can't hold, where it used\n // to stop square); everything else in between is a flush, square-edged band. An endpoint that\n // isn't drawn as selected, the copy of a day in the next month's grid, isn't drawn as one.\n const { highlightedRange } = state\n const isRangeStart = Boolean(highlightedRange && isSameDay(date, highlightedRange.start))\n const isRangeEnd = Boolean(highlightedRange && isSameDay(date, highlightedRange.end))\n // Today only once hydrated, in the class, `aria-current` and the label alike: see `useCellToday`.\n const { isCurrentDate, label } = useCellToday(date, state, isSelected, buttonProps['aria-label'])\n\n return (\n <div\n {...cellProps}\n aria-current={isCurrentDate ? 'date' : undefined}\n className={classNames('datepicker-date', {\n 'datepicker-date-today': isCurrentDate,\n 'datepicker-date-in-range': isSelected,\n 'datepicker-date-range-start': isSelected && (isRangeStart || isBandStart),\n 'datepicker-date-range-end': isSelected && (isRangeEnd || isBandEnd),\n 'datepicker-date-outside': isOutsideVisibleRange || isOutsideMonth,\n 'datepicker-date-disabled': isDisabled,\n 'datepicker-date-unavailable': isUnavailable,\n 'datepicker-date-weekend': isWeekend(date, locale)\n })}\n >\n <button\n {...mergeProps(buttonProps, {\n 'aria-label': label,\n // Hovering to preview a range's end date moves real DOM focus via `element.focus()`\n // (`useCalendarCell`'s `onPointerEnter` -> `state.highlightDate`), which browsers can\n // paint as a visible focus ring even though the input modality is a pointer, not a\n // keyboard — suppress it the same way a mouse press does elsewhere in the library.\n onPointerEnter: () => {\n if (state.anchorDate && ref.current) suppressFocusRing(ref.current)\n },\n // react-aria leaves `tabIndex` off a day that can't be focused, which keeps its own\n // `<div>` out of the tab order but not a `<button>`.\n tabIndex: buttonProps.tabIndex ?? -1\n })}\n type=\"button\"\n className={classNames('datepicker-date-btn', {\n 'datepicker-date-range-start': isSelected && isRangeStart,\n 'datepicker-date-range-end': isSelected && isRangeEnd\n })}\n ref={ref}\n >\n {formattedDate}\n </button>\n </div>\n )\n}\n\ninterface DateRangePresetsProps {\n disabled: boolean\n onSelect: (preset: DateRangePreset) => void\n presets: DateRangePreset[]\n // A preset's range as the grid would select it (`normalizePresetRange`), or `null` where it\n // couldn't: that preset is disabled, as the cells of its days are.\n rangeOf: (preset: DateRangePreset) => RangeValue<DateValue> | null\n value: RangeValue<DateValue> | null\n}\n\n// A preset \"matches\" the current selection when both endpoints of the range it selects land on\n// the same day, the range as clamped to `minValue`/`maxValue` and put in order, not as given: the\n// same granularity `CalendarCell` already uses to compare dates, so a preset stays marked selected\n// regardless of whether `value` is a `CalendarDate`, `CalendarDateTime`, or `ZonedDateTime`.\nconst isSameRange = (a: RangeValue<DateValue>, b: RangeValue<DateValue>) =>\n isSameDay(a.start, b.start) && isSameDay(a.end, b.end)\n\n// Plain buttons in a list, not a listbox — a group of independent actions (each one commits\n// immediately) rather than a single-selection widget, so native Tab/Enter/Space is the right\n// interaction model without extra roving-tabindex/arrow-key wiring.\nconst DateRangePresets = ({\n disabled,\n onSelect,\n presets,\n rangeOf,\n value\n}: DateRangePresetsProps) => (\n <ul className=\"datepicker-presets\">\n {presets.map((preset) => {\n const range = rangeOf(preset)\n const isSelected = Boolean(value && range && isSameRange(value, range))\n\n return (\n <li key={preset.label}>\n <button\n aria-current={isSelected ? 'true' : undefined}\n className={classNames('datepicker-preset', { selected: isSelected })}\n disabled={disabled || !range}\n onClick={() => onSelect(preset)}\n type=\"button\"\n >\n {preset.label}\n </button>\n </li>\n )\n })}\n </ul>\n)\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./polymorphic-CZIFszAy.js";import t from"react";import n from"classnames";function r({children:e,className:r,component:i,focusable:a,...o},s){let c=i??`span`;return/* @__PURE__ */ t.createElement(c,{className:n(a?`visually-hidden-focusable`:`visually-hidden`,r),...o,ref:s},e)}const i=e(r,`VisuallyHidden`);export{i as t};
2
+ //# sourceMappingURL=VisuallyHidden-CGv-mBuQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisuallyHidden-CGv-mBuQ.js","names":["createPolymorphicComponent","React","classNames","VisuallyHiddenRender","rest","Component","component","focusable","className","children","VisuallyHidden"],"sources":["../../src/components/visually-hidden/VisuallyHidden.tsx"],"sourcesContent":["import React, { ElementType, ForwardRefRenderFunction, ReactElement } from 'react'\nimport classNames from 'classnames'\n\nimport {\n createPolymorphicComponent,\n PolymorphicComponentProps,\n PolymorphicRef\n} from '../../utils/polymorphic'\n\ntype VisuallyHiddenOwnProps<C extends ElementType> = {\n /**\n * A string of all className you want applied to the component.\n */\n className?: string\n /**\n * Component used for the root node. Either a string to use an HTML element or a component.\n *\n * @default 'span'\n */\n component?: C\n /**\n * Shows the element while it, or an element inside it, has keyboard focus: a skip link, or a\n * group of controls only keyboard users reach. Renders `.visually-hidden-focusable` instead of\n * `.visually-hidden`.\n */\n focusable?: boolean\n}\n\nexport type VisuallyHiddenProps<C extends ElementType = 'span'> = PolymorphicComponentProps<\n C,\n VisuallyHiddenOwnProps<C>\n>\n\ntype VisuallyHiddenComponent = (<C extends ElementType = 'span'>(\n props: VisuallyHiddenProps<C> & { ref?: PolymorphicRef<C> }\n) => ReactElement | null) & { displayName?: string }\n\nfunction VisuallyHiddenRender<C extends ElementType = 'span'>(\n { children, className, component, focusable, ...rest }: VisuallyHiddenProps<C>,\n ref: PolymorphicRef<C>\n) {\n const Component = component ?? 'span'\n\n return (\n <Component\n className={classNames(focusable ? 'visually-hidden-focusable' : 'visually-hidden', className)}\n {...rest}\n ref={ref}\n >\n {children}\n </Component>\n )\n}\n\nexport const VisuallyHidden = createPolymorphicComponent<VisuallyHiddenComponent>(\n VisuallyHiddenRender as ForwardRefRenderFunction<Element, VisuallyHiddenProps<ElementType>>,\n 'VisuallyHidden'\n)\n"],"mappings":"A,6FAqCA,SAASG,EACP,CAAE,WAAU,YAAW,YAAW,YAAW,GAAGC,GAChD,EACA,CACA,IAAMC,EAAYC,GAAa,OAE/B,MACE,kBAAA,cAACD,EAAD,CACE,UAAWH,EAAWK,EAAY,4BAA8B,kBAAmBC,CAAS,EAC5F,GAAIJ,EACC,KAGI,EADRK,CACQ,CAEf,CAEA,MAAaC,EAAiBV,EAC5BG,EACA,gBACF,E"}
@@ -0,0 +1,2 @@
1
+ import"./focus-ring-Bs80iIBN.js";import{S as e}from"./slot-BQVx1Eew.js";import{t}from"./polymorphic-CZIFszAy.js";import n,{createContext as r,forwardRef as i,useContext as a,useId as o,useRef as s,useState as c}from"react";import l from"classnames";function u({children:e,className:t,component:r,...i},a){let o=r??`div`;return/* @__PURE__ */ n.createElement(o,{className:l(`accordion-body`,t),...i,ref:a},e)}const d=t(u,`AccordionBody`),f=i(({children:e,className:t,...r},i)=>/* @__PURE__ */ n.createElement(`summary`,{className:l(t)||void 0,...r,ref:i},/* @__PURE__ */ n.createElement(`span`,{className:`accordion-title`},e)));f.displayName=`AccordionHeader`;const p=r({}),m=i(({children:t,alwaysOpen:r,className:i,name:o,open:s,itemKey:c,...u},d)=>{e(c!==void 0,`AccordionItem: the itemKey prop is deprecated and no longer used — the native <details> element manages its own state. It will be removed in a future major version.`);let f=a(p),m=r??f.alwaysOpen,h=o??f.name,g=m?{}:{name:h};return/* @__PURE__ */ n.createElement(`details`,{className:l(`accordion-item`,i),open:s,...g,...u,ref:d},t)});m.displayName=`AccordionItem`;const h=i(({children:e,alwaysOpen:t=!1,caretEnd:r,className:i,defaultExpandedKeys:a,expandedKeys:u,flush:h,items:g,name:_,onExpandedChange:v,size:y,...b},x)=>{let S=o(),C=_??S,w=l(`accordion`,{flush:h,"caret-end":r},y,i),T=u!==void 0,E=T||a!==void 0||v!==void 0,[D,O]=c(()=>a??g?.flatMap((e,t)=>e.open?[e.id??t]:[])??[]),k=T?u:D,A=s(/* @__PURE__ */ new Map),j=(e,t)=>n=>{if(t?.(n),!g)return;let r=g.map((e,t)=>e.id??t).filter(e=>A.current.get(e)?.open);T?n.currentTarget.open=u.includes(e):O(r),v?.(r)},M=g?g.map((e,t)=>{let r=e.id??t;return/* @__PURE__ */ n.createElement(m,{key:r,className:e.className,open:E?k.includes(r):e.open,name:e.name,alwaysOpen:e.alwaysOpen,onToggle:j(r,e.onToggle),ref:e=>{A.current.set(r,e)}},/* @__PURE__ */ n.createElement(f,null,e.header),/* @__PURE__ */ n.createElement(d,null,e.body))}):e;return/* @__PURE__ */ n.createElement(`div`,{className:w,...b,ref:x},/* @__PURE__ */ n.createElement(p.Provider,{value:{alwaysOpen:t,name:C}},M))});h.displayName=`Accordion`;export{d as i,m as n,f as r,h as t};
2
+ //# sourceMappingURL=accordion-BZlX2uk8.js.map