@chassis-ui/react 0.1.3 → 0.3.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.
- package/LICENSE +1 -1
- package/README.md +56 -23
- package/dist/accordion.d.ts +2 -0
- package/dist/accordion.js +1 -0
- package/dist/alert.d.ts +2 -0
- package/dist/alert.js +1 -0
- package/dist/autocomplete.d.ts +2 -0
- package/dist/autocomplete.js +1 -0
- package/dist/avatar.d.ts +2 -0
- package/dist/avatar.js +1 -0
- package/dist/badge.d.ts +2 -0
- package/dist/badge.js +1 -0
- package/dist/breadcrumb.d.ts +2 -0
- package/dist/breadcrumb.js +1 -0
- package/dist/button-group.d.ts +2 -0
- package/dist/button-group.js +1 -0
- package/dist/button.d.ts +3 -0
- package/dist/button.js +1 -0
- package/dist/calendar.d.ts +3 -0
- package/dist/calendar.js +1 -0
- package/dist/card.d.ts +2 -0
- package/dist/card.js +1 -0
- package/dist/carousel.d.ts +2 -0
- package/dist/carousel.js +1 -0
- package/dist/checkbox.d.ts +3 -0
- package/dist/checkbox.js +1 -0
- package/dist/chip-input.d.ts +2 -0
- package/dist/chip-input.js +1 -0
- package/dist/chip.d.ts +2 -0
- package/dist/chip.js +1 -0
- package/dist/chunks/Button-BoymWE-L.js +2 -0
- package/dist/chunks/Button-BoymWE-L.js.map +1 -0
- package/dist/chunks/Button-Cptd4Yk7.d.ts +66 -0
- package/dist/chunks/Chip-DCaWaBqo.js +2 -0
- package/dist/chunks/Chip-DCaWaBqo.js.map +1 -0
- package/dist/chunks/CloseButton-DPgQztE0.js +2 -0
- package/dist/chunks/CloseButton-DPgQztE0.js.map +1 -0
- package/dist/chunks/ComboboxItem-C9TpoJOI.d.ts +55 -0
- package/dist/chunks/ComboboxListBox-Cm3L1ULl.js +2 -0
- package/dist/chunks/ComboboxListBox-Cm3L1ULl.js.map +1 -0
- package/dist/chunks/DateSegment-2agXAd0f.js +2 -0
- package/dist/chunks/DateSegment-2agXAd0f.js.map +1 -0
- package/dist/chunks/FormHelp-AE6_iSLJ.js +2 -0
- package/dist/chunks/FormHelp-AE6_iSLJ.js.map +1 -0
- package/dist/chunks/FormLabel-CYcQiFUI.js +2 -0
- package/dist/chunks/FormLabel-CYcQiFUI.js.map +1 -0
- package/dist/chunks/Icon-CioraWLF.d.ts +37 -0
- package/dist/chunks/Icon-DLB1f88W.js +2 -0
- package/dist/chunks/Icon-DLB1f88W.js.map +1 -0
- package/dist/chunks/Link-CZsWCnQb.js +2 -0
- package/dist/chunks/Link-CZsWCnQb.js.map +1 -0
- package/dist/chunks/Link-nrd0JWlO.d.ts +71 -0
- package/dist/chunks/Menu-CSBg2Zmc.js +2 -0
- package/dist/chunks/Menu-CSBg2Zmc.js.map +1 -0
- package/dist/chunks/Menu-QeYOzrUL.d.ts +95 -0
- package/{src/components/menu/MenuItemDef.ts → dist/chunks/MenuItemDef-D0VDtYIQ.d.ts} +25 -25
- package/dist/chunks/MenuToggle-BdQtF7FV.js +2 -0
- package/dist/chunks/MenuToggle-BdQtF7FV.js.map +1 -0
- package/dist/chunks/Portal-CgeR1WXV.js +2 -0
- package/dist/chunks/Portal-CgeR1WXV.js.map +1 -0
- package/dist/chunks/RangeCalendar-BJl-j4W2.js +2 -0
- package/dist/chunks/RangeCalendar-BJl-j4W2.js.map +1 -0
- package/dist/chunks/VisuallyHidden-C2dM7HhC.js +2 -0
- package/dist/chunks/VisuallyHidden-C2dM7HhC.js.map +1 -0
- package/dist/chunks/accordion-B8UWyvQB.js +2 -0
- package/dist/chunks/accordion-B8UWyvQB.js.map +1 -0
- package/dist/chunks/alert-BXI-_qlt.js +2 -0
- package/dist/chunks/alert-BXI-_qlt.js.map +1 -0
- package/dist/chunks/autocomplete-Baf9VSHN.js +2 -0
- package/dist/chunks/autocomplete-Baf9VSHN.js.map +1 -0
- package/dist/chunks/avatar-S3dGy6Qc.js +2 -0
- package/dist/chunks/avatar-S3dGy6Qc.js.map +1 -0
- package/dist/chunks/badge-D2oztCvs.js +2 -0
- package/dist/chunks/badge-D2oztCvs.js.map +1 -0
- package/dist/chunks/breadcrumb-s6J9itez.js +2 -0
- package/dist/chunks/breadcrumb-s6J9itez.js.map +1 -0
- package/dist/chunks/breakpoints-CJ-498B7.d.ts +7 -0
- package/dist/chunks/breakpoints-o_2Ev7ir.js +2 -0
- package/dist/chunks/breakpoints-o_2Ev7ir.js.map +1 -0
- package/dist/chunks/button-group-BGppPrIv.js +2 -0
- package/dist/chunks/button-group-BGppPrIv.js.map +1 -0
- package/dist/chunks/card-YXn3bj_d.js +2 -0
- package/dist/chunks/card-YXn3bj_d.js.map +1 -0
- package/dist/chunks/carousel-fTVPqnSV.js +2 -0
- package/dist/chunks/carousel-fTVPqnSV.js.map +1 -0
- package/dist/chunks/checkbox-ChACalAw.js +2 -0
- package/dist/chunks/checkbox-ChACalAw.js.map +1 -0
- package/dist/chunks/chip-input-BpVDRERg.js +2 -0
- package/dist/chunks/chip-input-BpVDRERg.js.map +1 -0
- package/dist/chunks/collapse--Go2Y73B.js +2 -0
- package/dist/chunks/collapse--Go2Y73B.js.map +1 -0
- package/dist/chunks/color-input-Bwl5ef5B.js +2 -0
- package/dist/chunks/color-input-Bwl5ef5B.js.map +1 -0
- package/dist/chunks/combobox-Bp1tIaiW.js +2 -0
- package/dist/chunks/combobox-Bp1tIaiW.js.map +1 -0
- package/dist/chunks/context-menu-B4a0tS-h.js +2 -0
- package/dist/chunks/context-menu-B4a0tS-h.js.map +1 -0
- package/dist/chunks/datagrid-CH3Cy-q7.js +3 -0
- package/dist/chunks/datagrid-CH3Cy-q7.js.map +1 -0
- package/dist/chunks/dateRangePresets-R1FtA1zp.d.ts +42 -0
- package/dist/chunks/datepicker-bOiM_zhJ.js +2 -0
- package/dist/chunks/datepicker-bOiM_zhJ.js.map +1 -0
- package/dist/chunks/dialogTransition-i9vw0i2Z.js +2 -0
- package/dist/chunks/dialogTransition-i9vw0i2Z.js.map +1 -0
- package/dist/chunks/direction-LN6uwsK5.js +2 -0
- package/dist/chunks/direction-LN6uwsK5.js.map +1 -0
- package/dist/chunks/divider-CjbF4OfA.js +2 -0
- package/dist/chunks/divider-CjbF4OfA.js.map +1 -0
- package/dist/chunks/drawer-C7Tz4XU_.js +2 -0
- package/dist/chunks/drawer-C7Tz4XU_.js.map +1 -0
- package/dist/chunks/file-input-CDM6qrmV.js +2 -0
- package/dist/chunks/file-input-CDM6qrmV.js.map +1 -0
- package/dist/chunks/flex-CmlJbKVj.js +2 -0
- package/dist/chunks/flex-CmlJbKVj.js.map +1 -0
- package/dist/chunks/floating-input-DmSZZc27.js +2 -0
- package/dist/chunks/floating-input-DmSZZc27.js.map +1 -0
- package/dist/chunks/focus-ring-SR_LwaN7.js +2 -0
- package/dist/chunks/focus-ring-SR_LwaN7.js.map +1 -0
- package/dist/chunks/focusRedirect-BrvK3U_o.js +2 -0
- package/dist/chunks/focusRedirect-BrvK3U_o.js.map +1 -0
- package/dist/chunks/form-GpdAyWWi.js +2 -0
- package/dist/chunks/form-GpdAyWWi.js.map +1 -0
- package/dist/chunks/form-field-CNPGTMiW.js +2 -0
- package/dist/chunks/form-field-CNPGTMiW.js.map +1 -0
- package/dist/chunks/grid-DK_vxz-4.js +2 -0
- package/dist/chunks/grid-DK_vxz-4.js.map +1 -0
- package/dist/chunks/icon-BQsT6YtE.js +2 -0
- package/dist/chunks/icon-BQsT6YtE.js.map +1 -0
- package/dist/chunks/iconConfig-C6gbYhsD.d.ts +71 -0
- package/dist/chunks/iconSlot-BNu2MrFI.js +2 -0
- package/dist/chunks/iconSlot-BNu2MrFI.js.map +1 -0
- package/dist/chunks/index-4cKG9KWB.d.ts +85 -0
- package/dist/chunks/index-6uob77s9.d.ts +81 -0
- package/dist/chunks/index-91YA-jkp.d.ts +127 -0
- package/dist/chunks/index-9rQeMqVI.d.ts +42 -0
- package/dist/chunks/index-B0-8n-Gs.d.ts +106 -0
- package/dist/chunks/index-B2K-O9kl.d.ts +59 -0
- package/dist/chunks/index-B8uaSJA9.d.ts +96 -0
- package/dist/chunks/index-BA-raEMm.d.ts +29 -0
- package/dist/chunks/index-BAsbRx5n.d.ts +54 -0
- package/dist/chunks/index-BF3OWUVc.d.ts +66 -0
- package/dist/chunks/index-BNf0jIIL.d.ts +213 -0
- package/dist/chunks/index-BO9jLOIb.d.ts +59 -0
- package/dist/chunks/index-BTTeKpiE.d.ts +364 -0
- package/dist/chunks/index-BVGGIaPX.d.ts +111 -0
- package/dist/chunks/index-B_UzbGOa.d.ts +195 -0
- package/dist/chunks/index-Bi8FFadV.d.ts +99 -0
- package/dist/chunks/index-Bkj17NEQ.d.ts +51 -0
- package/dist/chunks/index-Bm2NpgND.d.ts +82 -0
- package/dist/chunks/index-BnR7wjax.d.ts +68 -0
- package/dist/chunks/index-BxROljJI.d.ts +18 -0
- package/dist/chunks/index-Bz8MDq0H.d.ts +85 -0
- package/dist/chunks/index-C4Dks__B.d.ts +139 -0
- package/dist/chunks/index-CCXJXToc.d.ts +53 -0
- package/dist/chunks/index-CFnQubsV.d.ts +123 -0
- package/dist/chunks/index-CJXKl97l.d.ts +120 -0
- package/dist/chunks/index-CJzKu7QI.d.ts +41 -0
- package/dist/chunks/index-CKx1KHED.d.ts +303 -0
- package/dist/chunks/index-COsIPd8L.d.ts +63 -0
- package/dist/chunks/index-CRfm7W6C.d.ts +231 -0
- package/dist/chunks/index-CTpwB1yR.d.ts +236 -0
- package/dist/chunks/index-CVUMS0x7.d.ts +74 -0
- package/dist/chunks/index-CYgBmZ8w.d.ts +271 -0
- package/dist/chunks/index-Cc4SSslb.d.ts +205 -0
- package/dist/chunks/index-CftERHnE.d.ts +25 -0
- package/dist/chunks/index-Ci7AEgEc.d.ts +47 -0
- package/dist/chunks/index-CqZ68Z8R.d.ts +415 -0
- package/dist/chunks/index-CsARGAzD.d.ts +50 -0
- package/dist/chunks/index-CsMIgBsd.d.ts +40 -0
- package/dist/chunks/index-D9PZHY_I.d.ts +136 -0
- package/dist/chunks/index-DAoPg59I.d.ts +81 -0
- package/dist/chunks/index-DHGgezXU.d.ts +59 -0
- package/dist/chunks/index-DHOG_rjE.d.ts +121 -0
- package/dist/chunks/index-DJfga0Ce.d.ts +57 -0
- package/dist/chunks/index-DJr_ZK4b.d.ts +110 -0
- package/dist/chunks/index-DMbdEm__.d.ts +119 -0
- package/dist/chunks/index-DXjbI7Yv.d.ts +133 -0
- package/dist/chunks/index-DaHQdNul.d.ts +182 -0
- package/dist/chunks/index-Dcc_W6Kv.d.ts +147 -0
- package/dist/chunks/index-DceCODH9.d.ts +138 -0
- package/dist/chunks/index-Ddd7iWfm.d.ts +32 -0
- package/dist/chunks/index-Dfg4Ftb8.d.ts +69 -0
- package/dist/chunks/index-Dfy1YW5j.d.ts +74 -0
- package/dist/chunks/index-DgHvXzVh.d.ts +208 -0
- package/dist/chunks/index-Dh5CaHTP.d.ts +45 -0
- package/dist/chunks/index-DjXRq-n3.d.ts +98 -0
- package/dist/chunks/index-DjrEvKd-.d.ts +193 -0
- package/dist/chunks/index-DtbUXxjz.d.ts +54 -0
- package/dist/chunks/index-Du9fBqkT.d.ts +56 -0
- package/dist/chunks/index-FKh7iFQE.d.ts +95 -0
- package/dist/chunks/index-HrKN6s8z.d.ts +67 -0
- package/dist/chunks/index-I-H3VJ-L.d.ts +229 -0
- package/dist/chunks/index-RHJhkSY-.d.ts +273 -0
- package/dist/chunks/index-e7SJkI_m.d.ts +102 -0
- package/dist/chunks/index-g74gO0pc.d.ts +36 -0
- package/dist/chunks/index-qMq_-GY2.d.ts +105 -0
- package/dist/chunks/index-t_x6jj7l.d.ts +97 -0
- package/dist/chunks/input-adorn-DwdX-jxA.js +2 -0
- package/dist/chunks/input-adorn-DwdX-jxA.js.map +1 -0
- package/dist/chunks/input-group-Cuiuf4Dl.js +2 -0
- package/dist/chunks/input-group-Cuiuf4Dl.js.map +1 -0
- package/dist/chunks/lazyElement-tfMG21pZ.js +2 -0
- package/dist/chunks/lazyElement-tfMG21pZ.js.map +1 -0
- package/dist/chunks/list-BQCkwWjF.js +2 -0
- package/dist/chunks/list-BQCkwWjF.js.map +1 -0
- package/dist/chunks/menu-98EAD9nj.js +2 -0
- package/dist/chunks/menu-98EAD9nj.js.map +1 -0
- package/dist/chunks/modal-bgDR29Jh.js +2 -0
- package/dist/chunks/modal-bgDR29Jh.js.map +1 -0
- package/dist/chunks/nav-TiZuTHC6.js +2 -0
- package/dist/chunks/nav-TiZuTHC6.js.map +1 -0
- package/dist/chunks/nav-overflow-Ay5mM5Gc.js +2 -0
- package/dist/chunks/nav-overflow-Ay5mM5Gc.js.map +1 -0
- package/dist/chunks/navOverflow-B5krZe6D.js +2 -0
- package/dist/chunks/navOverflow-B5krZe6D.js.map +1 -0
- package/dist/chunks/navVariant-CnD21GBS.d.ts +5 -0
- package/dist/chunks/navVariant-DeGTk9B7.js +2 -0
- package/dist/chunks/navVariant-DeGTk9B7.js.map +1 -0
- package/dist/chunks/navbar-DxIwt0sc.js +2 -0
- package/dist/chunks/navbar-DxIwt0sc.js.map +1 -0
- package/dist/chunks/notification-Ds24wnPq.js +2 -0
- package/dist/chunks/notification-Ds24wnPq.js.map +1 -0
- package/dist/chunks/number-field-IBIX2IWH.js +2 -0
- package/dist/chunks/number-field-IBIX2IWH.js.map +1 -0
- package/dist/chunks/otp-input-ws393uPB.js +2 -0
- package/dist/chunks/otp-input-ws393uPB.js.map +1 -0
- package/dist/chunks/overlayPlacement-BtS90IVf.js +2 -0
- package/dist/chunks/overlayPlacement-BtS90IVf.js.map +1 -0
- package/dist/chunks/overlayPlacement-CIsLpycT.d.ts +7 -0
- package/dist/chunks/pagination-BkOquk-x.js +2 -0
- package/dist/chunks/pagination-BkOquk-x.js.map +1 -0
- package/dist/chunks/password-strength-DDK8pHRq.js +2 -0
- package/dist/chunks/password-strength-DDK8pHRq.js.map +1 -0
- package/dist/chunks/placeholder-BCr83sUn.js +2 -0
- package/dist/chunks/placeholder-BCr83sUn.js.map +1 -0
- package/dist/chunks/polymorphic-BhGNZQja.js +2 -0
- package/dist/chunks/polymorphic-BhGNZQja.js.map +1 -0
- package/dist/chunks/polymorphic-CVHbTHSN.d.ts +41 -0
- package/dist/chunks/popover-Bdg8D4sm.js +2 -0
- package/dist/chunks/popover-Bdg8D4sm.js.map +1 -0
- package/dist/chunks/progress-zWkTltor.js +2 -0
- package/dist/chunks/progress-zWkTltor.js.map +1 -0
- package/dist/chunks/radio-DOFYCfJi.js +2 -0
- package/dist/chunks/radio-DOFYCfJi.js.map +1 -0
- package/dist/chunks/range-input-CT_8TKL7.js +2 -0
- package/dist/chunks/range-input-CT_8TKL7.js.map +1 -0
- package/dist/chunks/renderFormCheck-DN_-V62U.js +2 -0
- package/dist/chunks/renderFormCheck-DN_-V62U.js.map +1 -0
- package/dist/chunks/renderFormCheck-DZh_5Df8.d.ts +24 -0
- package/dist/chunks/renderFormField-Brkw1yA6.js +2 -0
- package/dist/chunks/renderFormField-Brkw1yA6.js.map +1 -0
- package/dist/chunks/renderFormField-ChNagAFN.d.ts +15 -0
- package/dist/chunks/renderMenuItemContent-DUezZrpj.js +2 -0
- package/dist/chunks/renderMenuItemContent-DUezZrpj.js.map +1 -0
- package/dist/chunks/scrollspy-C2HmrnZ4.js +2 -0
- package/dist/chunks/scrollspy-C2HmrnZ4.js.map +1 -0
- package/dist/chunks/scrollspy-D_lPjb92.js +2 -0
- package/dist/chunks/scrollspy-D_lPjb92.js.map +1 -0
- package/dist/chunks/search-field--nDoCI_E.js +2 -0
- package/dist/chunks/search-field--nDoCI_E.js.map +1 -0
- package/dist/chunks/select-BwJIfv9f.js +2 -0
- package/dist/chunks/select-BwJIfv9f.js.map +1 -0
- package/dist/chunks/skeleton-BrD2JwNx.js +2 -0
- package/dist/chunks/skeleton-BrD2JwNx.js.map +1 -0
- package/dist/chunks/slot-CNhFZdHF.js +2 -0
- package/dist/chunks/slot-CNhFZdHF.js.map +1 -0
- package/dist/chunks/spacingClassName-DVhk8m3P.js +2 -0
- package/dist/chunks/spacingClassName-DVhk8m3P.js.map +1 -0
- package/dist/chunks/spinner-DblhvrHL.js +2 -0
- package/dist/chunks/spinner-DblhvrHL.js.map +1 -0
- package/dist/chunks/stack-CsMiQbpq.js +2 -0
- package/dist/chunks/stack-CsMiQbpq.js.map +1 -0
- package/dist/chunks/static-table-D0M4oc_t.js +2 -0
- package/dist/chunks/static-table-D0M4oc_t.js.map +1 -0
- package/dist/chunks/stepper-CVXMJ2yg.js +2 -0
- package/dist/chunks/stepper-CVXMJ2yg.js.map +1 -0
- package/dist/chunks/switch-C6s3LxEv.js +2 -0
- package/dist/chunks/switch-C6s3LxEv.js.map +1 -0
- package/dist/chunks/table-Cy6uEuEP.js +2 -0
- package/dist/chunks/table-Cy6uEuEP.js.map +1 -0
- package/dist/chunks/tableClassName-CZA2Bse8.js +2 -0
- package/dist/chunks/tableClassName-CZA2Bse8.js.map +1 -0
- package/dist/chunks/tabs-91T7-8qq.js +2 -0
- package/dist/chunks/tabs-91T7-8qq.js.map +1 -0
- package/dist/chunks/text-input-B4pTv6SU.js +2 -0
- package/dist/chunks/text-input-B4pTv6SU.js.map +1 -0
- package/dist/chunks/textarea-1A1nABQE.js +2 -0
- package/dist/chunks/textarea-1A1nABQE.js.map +1 -0
- package/dist/chunks/time-field-B3MA7ED_.js +2 -0
- package/dist/chunks/time-field-B3MA7ED_.js.map +1 -0
- package/dist/chunks/toast-CGHl3-oU.js +2 -0
- package/dist/chunks/toast-CGHl3-oU.js.map +1 -0
- package/dist/chunks/tooltip-Bc-u6nIW.js +2 -0
- package/dist/chunks/tooltip-Bc-u6nIW.js.map +1 -0
- package/dist/chunks/tree-Cql1veeZ.js +2 -0
- package/dist/chunks/tree-Cql1veeZ.js.map +1 -0
- package/dist/chunks/types-CS_40Txv.d.ts +35 -0
- package/dist/chunks/unhandledProps-9Kdj7WVf.js +2 -0
- package/dist/chunks/unhandledProps-9Kdj7WVf.js.map +1 -0
- package/dist/chunks/useButtonSemantics-CILM_lhi.js +2 -0
- package/dist/chunks/useButtonSemantics-CILM_lhi.js.map +1 -0
- package/dist/chunks/useControllableState-CPUJxfKW.js +2 -0
- package/dist/chunks/useControllableState-CPUJxfKW.js.map +1 -0
- package/dist/chunks/useDialogElement-CgOnJAzu.js +2 -0
- package/dist/chunks/useDialogElement-CgOnJAzu.js.map +1 -0
- package/dist/chunks/useDisabledAnchorGuard-Cz58UCXy.js +2 -0
- package/dist/chunks/useDisabledAnchorGuard-Cz58UCXy.js.map +1 -0
- package/dist/chunks/useFloatingOverlay-DLIvwx-8.js +2 -0
- package/dist/chunks/useFloatingOverlay-DLIvwx-8.js.map +1 -0
- package/dist/chunks/useForkedRef-DVEfT-KI.js +2 -0
- package/dist/chunks/useForkedRef-DVEfT-KI.js.map +1 -0
- package/dist/chunks/useFormField-BOqmBTC4.js +2 -0
- package/dist/chunks/useFormField-BOqmBTC4.js.map +1 -0
- package/dist/chunks/useIsomorphicLayoutEffect-BbqRwuqn.js +2 -0
- package/dist/chunks/useIsomorphicLayoutEffect-BbqRwuqn.js.map +1 -0
- package/dist/chunks/useOpenStateProps-DykUbnPJ.js +2 -0
- package/dist/chunks/useOpenStateProps-DykUbnPJ.js.map +1 -0
- package/dist/chunks/useToastRegionQueue-CIV5SdiE.js +2 -0
- package/dist/chunks/useToastRegionQueue-CIV5SdiE.js.map +1 -0
- package/dist/chunks/useTransitionState-e5ToY7eX.js +2 -0
- package/dist/chunks/useTransitionState-e5ToY7eX.js.map +1 -0
- package/dist/chunks/validationClassName-gRGs4KBm.js +2 -0
- package/dist/chunks/validationClassName-gRGs4KBm.js.map +1 -0
- package/dist/chunks/visibleState-B_i1zHu2.js +2 -0
- package/dist/chunks/visibleState-B_i1zHu2.js.map +1 -0
- package/dist/close-button.d.ts +2 -0
- package/dist/close-button.js +1 -0
- package/dist/collapse.d.ts +2 -0
- package/dist/collapse.js +1 -0
- package/dist/color-input.d.ts +2 -0
- package/dist/color-input.js +1 -0
- package/dist/combobox.d.ts +3 -0
- package/dist/combobox.js +1 -0
- package/dist/context-menu.d.ts +2 -0
- package/dist/context-menu.js +1 -0
- package/dist/datagrid.d.ts +2 -0
- package/dist/datagrid.js +1 -0
- package/dist/datepicker.d.ts +2 -0
- package/dist/datepicker.js +1 -0
- package/dist/divider.d.ts +2 -0
- package/dist/divider.js +1 -0
- package/dist/drawer.d.ts +2 -0
- package/dist/drawer.js +1 -0
- package/dist/file-input.d.ts +2 -0
- package/dist/file-input.js +1 -0
- package/dist/flex.d.ts +2 -0
- package/dist/flex.js +1 -0
- package/dist/floating-input.d.ts +2 -0
- package/dist/floating-input.js +1 -0
- package/dist/form-field.d.ts +2 -0
- package/dist/form-field.js +1 -0
- package/dist/form.d.ts +2 -0
- package/dist/form.js +1 -0
- package/dist/grid.d.ts +2 -0
- package/dist/grid.js +1 -0
- package/dist/icon.d.ts +4 -0
- package/dist/icon.js +1 -0
- package/dist/index.d.ts +84 -6369
- package/dist/index.js +1 -2
- package/dist/input-adorn.d.ts +2 -0
- package/dist/input-adorn.js +1 -0
- package/dist/input-group.d.ts +2 -0
- package/dist/input-group.js +1 -0
- package/dist/link.d.ts +3 -0
- package/dist/link.js +1 -0
- package/dist/list.d.ts +2 -0
- package/dist/list.js +1 -0
- package/dist/menu.d.ts +4 -0
- package/dist/menu.js +1 -0
- package/dist/modal.d.ts +2 -0
- package/dist/modal.js +1 -0
- package/dist/nav-overflow.d.ts +2 -0
- package/dist/nav-overflow.js +1 -0
- package/dist/nav.d.ts +2 -0
- package/dist/nav.js +1 -0
- package/dist/navbar.d.ts +2 -0
- package/dist/navbar.js +1 -0
- package/dist/notification.d.ts +2 -0
- package/dist/notification.js +1 -0
- package/dist/number-field.d.ts +2 -0
- package/dist/number-field.js +1 -0
- package/dist/otp-input.d.ts +2 -0
- package/dist/otp-input.js +1 -0
- package/dist/pagination.d.ts +2 -0
- package/dist/pagination.js +1 -0
- package/dist/password-strength.d.ts +2 -0
- package/dist/password-strength.js +1 -0
- package/dist/placeholder.d.ts +2 -0
- package/dist/placeholder.js +1 -0
- package/dist/popover.d.ts +2 -0
- package/dist/popover.js +1 -0
- package/dist/portal.d.ts +2 -0
- package/dist/portal.js +1 -0
- package/dist/progress.d.ts +2 -0
- package/dist/progress.js +1 -0
- package/dist/radio.d.ts +2 -0
- package/dist/radio.js +1 -0
- package/dist/range-input.d.ts +2 -0
- package/dist/range-input.js +1 -0
- package/dist/scrollspy.d.ts +2 -0
- package/dist/scrollspy.js +1 -0
- package/dist/search-field.d.ts +2 -0
- package/dist/search-field.js +1 -0
- package/dist/select.d.ts +2 -0
- package/dist/select.js +1 -0
- package/dist/skeleton.d.ts +2 -0
- package/dist/skeleton.js +1 -0
- package/dist/spinner.d.ts +2 -0
- package/dist/spinner.js +1 -0
- package/dist/stack.d.ts +2 -0
- package/dist/stack.js +1 -0
- package/dist/static-table.d.ts +2 -0
- package/dist/static-table.js +1 -0
- package/dist/stepper.d.ts +2 -0
- package/dist/stepper.js +1 -0
- package/dist/style.css +1 -1
- package/dist/switch.d.ts +2 -0
- package/dist/switch.js +1 -0
- package/dist/table.d.ts +2 -0
- package/dist/table.js +1 -0
- package/dist/tabs.d.ts +2 -0
- package/dist/tabs.js +1 -0
- package/dist/text-input.d.ts +2 -0
- package/dist/text-input.js +1 -0
- package/dist/textarea.d.ts +2 -0
- package/dist/textarea.js +1 -0
- package/dist/time-field.d.ts +2 -0
- package/dist/time-field.js +1 -0
- package/dist/toast.d.ts +2 -0
- package/dist/toast.js +1 -0
- package/dist/tooltip.d.ts +2 -0
- package/dist/tooltip.js +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.js +1 -0
- package/dist/visually-hidden.d.ts +2 -0
- package/dist/visually-hidden.js +1 -0
- package/package.json +120 -53
- package/src/components/accordion/Accordion.tsx +0 -190
- package/src/components/accordion/AccordionBody.tsx +0 -46
- package/src/components/accordion/AccordionHeader.tsx +0 -21
- package/src/components/accordion/AccordionItem.tsx +0 -59
- package/src/components/accordion/context.ts +0 -8
- package/src/components/accordion/index.ts +0 -8
- package/src/components/autocomplete/Autocomplete.tsx +0 -464
- package/src/components/autocomplete/AutocompleteGroup.tsx +0 -20
- package/src/components/autocomplete/AutocompleteItem.tsx +0 -18
- package/src/components/autocomplete/index.ts +0 -6
- package/src/components/avatar/Avatar.tsx +0 -137
- package/src/components/avatar/AvatarImage.tsx +0 -19
- package/src/components/avatar/AvatarStack.tsx +0 -98
- package/src/components/avatar/index.ts +0 -6
- package/src/components/badge/Badge.tsx +0 -94
- package/src/components/badge/index.ts +0 -2
- package/src/components/breadcrumb/Breadcrumb.tsx +0 -68
- package/src/components/breadcrumb/BreadcrumbItem.tsx +0 -38
- package/src/components/breadcrumb/index.ts +0 -4
- package/src/components/button/Button.tsx +0 -232
- package/src/components/button/index.ts +0 -2
- package/src/components/button-group/ButtonGroup.tsx +0 -55
- package/src/components/button-group/ButtonToolbar.tsx +0 -47
- package/src/components/button-group/index.ts +0 -4
- package/src/components/calendar/Calendar.scss +0 -57
- package/src/components/calendar/Calendar.tsx +0 -338
- package/src/components/calendar/CalendarMonthBlock.tsx +0 -57
- package/src/components/calendar/CalendarMonthGrid.tsx +0 -94
- package/src/components/calendar/CalendarMonthYearPicker.tsx +0 -164
- package/src/components/calendar/CalendarNavButton.tsx +0 -24
- package/src/components/calendar/CalendarWeekGrid.tsx +0 -58
- package/src/components/calendar/CalendarYearGrid.tsx +0 -128
- package/src/components/calendar/RangeCalendar.scss +0 -95
- package/src/components/calendar/RangeCalendar.tsx +0 -373
- package/src/components/calendar/index.ts +0 -6
- package/src/components/calendar/labels.tsx +0 -71
- package/src/components/card/Card.tsx +0 -173
- package/src/components/card/CardBody.tsx +0 -75
- package/src/components/card/CardFooter.tsx +0 -47
- package/src/components/card/CardGroup.tsx +0 -51
- package/src/components/card/CardHeader.tsx +0 -47
- package/src/components/card/CardImage.tsx +0 -70
- package/src/components/card/CardImageOverlay.tsx +0 -47
- package/src/components/card/CardLink.tsx +0 -40
- package/src/components/card/CardSubtitle.tsx +0 -47
- package/src/components/card/CardText.tsx +0 -47
- package/src/components/card/CardTitle.tsx +0 -47
- package/src/components/card/index.ts +0 -22
- package/src/components/carousel/Carousel.tsx +0 -753
- package/src/components/carousel/CarouselControlButton.tsx +0 -74
- package/src/components/carousel/CarouselControlNext.tsx +0 -22
- package/src/components/carousel/CarouselControlPrev.tsx +0 -22
- package/src/components/carousel/CarouselIndicators.tsx +0 -44
- package/src/components/carousel/CarouselInner.tsx +0 -56
- package/src/components/carousel/CarouselItem.tsx +0 -51
- package/src/components/carousel/CarouselOverlay.tsx +0 -51
- package/src/components/carousel/CarouselPlayPause.tsx +0 -61
- package/src/components/carousel/carouselEngine.ts +0 -170
- package/src/components/carousel/context.ts +0 -29
- package/src/components/carousel/index.ts +0 -21
- package/src/components/checkbox/Checkbox.tsx +0 -252
- package/src/components/checkbox/CheckboxGroup.tsx +0 -145
- package/src/components/checkbox/context.ts +0 -14
- package/src/components/checkbox/index.ts +0 -4
- package/src/components/chip/Chip.tsx +0 -184
- package/src/components/chip/index.ts +0 -2
- package/src/components/chip-input/ChipInput.tsx +0 -371
- package/src/components/chip-input/ChipList.tsx +0 -95
- package/src/components/chip-input/index.ts +0 -2
- package/src/components/close-button/CloseButton.tsx +0 -205
- package/src/components/close-button/index.ts +0 -2
- package/src/components/collapse/Collapse.tsx +0 -128
- package/src/components/collapse/index.ts +0 -2
- package/src/components/color-input/ColorInput.tsx +0 -106
- package/src/components/color-input/index.ts +0 -2
- package/src/components/combobox/Combobox.tsx +0 -320
- package/src/components/combobox/ComboboxGroup.tsx +0 -27
- package/src/components/combobox/ComboboxItem.tsx +0 -44
- package/src/components/combobox/ComboboxListBox.tsx +0 -98
- package/src/components/combobox/index.ts +0 -6
- package/src/components/datagrid/DataGrid.scss +0 -203
- package/src/components/datagrid/DataGrid.tsx +0 -259
- package/src/components/datagrid/DataGridBody.tsx +0 -162
- package/src/components/datagrid/DataGridCell.tsx +0 -47
- package/src/components/datagrid/DataGridColumn.tsx +0 -109
- package/src/components/datagrid/DataGridHeader.tsx +0 -47
- package/src/components/datagrid/DataGridPinBehavior.tsx +0 -225
- package/src/components/datagrid/DataGridRow.tsx +0 -48
- package/src/components/datagrid/DataGridSelectionCell.tsx +0 -74
- package/src/components/datagrid/DataGridTableLayout.ts +0 -30
- package/src/components/datagrid/index.ts +0 -14
- package/src/components/datagrid/useColumnGeometry.ts +0 -161
- package/src/components/datepicker/CalendarToggleButton.tsx +0 -58
- package/src/components/datepicker/ClearButton.tsx +0 -38
- package/src/components/datepicker/DateField.tsx +0 -54
- package/src/components/datepicker/DatePicker.scss +0 -51
- package/src/components/datepicker/DatePicker.tsx +0 -606
- package/src/components/datepicker/DateRangePicker.scss +0 -11
- package/src/components/datepicker/DateRangePicker.tsx +0 -361
- package/src/components/datepicker/index.ts +0 -4
- package/src/components/datepicker/renderDatePickerShell.tsx +0 -104
- package/src/components/drawer/Drawer.tsx +0 -213
- package/src/components/drawer/DrawerBody.tsx +0 -47
- package/src/components/drawer/DrawerFooter.tsx +0 -51
- package/src/components/drawer/DrawerHeader.tsx +0 -60
- package/src/components/drawer/DrawerTitle.tsx +0 -49
- package/src/components/drawer/index.ts +0 -10
- package/src/components/file-input/FileInput.tsx +0 -100
- package/src/components/file-input/index.ts +0 -2
- package/src/components/flex/Flex.tsx +0 -134
- package/src/components/flex/index.ts +0 -2
- package/src/components/floating-input/FloatingInput.tsx +0 -94
- package/src/components/floating-input/index.ts +0 -2
- package/src/components/form/Form.tsx +0 -26
- package/src/components/form/FormFeedback.tsx +0 -64
- package/src/components/form/FormHelp.tsx +0 -46
- package/src/components/form/FormLabel.tsx +0 -26
- package/src/components/form/index.ts +0 -8
- package/src/components/form/renderFormCheck.tsx +0 -86
- package/src/components/form-field/FormField.tsx +0 -84
- package/src/components/form-field/index.ts +0 -2
- package/src/components/form-field/renderFormField.tsx +0 -85
- package/src/components/grid/Col.tsx +0 -69
- package/src/components/grid/Container.tsx +0 -59
- package/src/components/grid/Grid.tsx +0 -86
- package/src/components/grid/GridItem.tsx +0 -123
- package/src/components/grid/Row.tsx +0 -71
- package/src/components/grid/gap.ts +0 -8
- package/src/components/grid/index.ts +0 -10
- package/src/components/icon/Icon.tsx +0 -74
- package/src/components/icon/index.ts +0 -2
- package/src/components/input-adorn/InputAdorn.tsx +0 -55
- package/src/components/input-adorn/index.ts +0 -2
- package/src/components/input-group/InputGroup.tsx +0 -50
- package/src/components/input-group/InputGroupAddon.tsx +0 -50
- package/src/components/input-group/index.ts +0 -4
- package/src/components/link/Link.tsx +0 -148
- package/src/components/link/index.ts +0 -2
- package/src/components/list/List.tsx +0 -193
- package/src/components/list/ListItem.tsx +0 -91
- package/src/components/list/index.ts +0 -4
- package/src/components/menu/Menu.tsx +0 -408
- package/src/components/menu/MenuDivider.tsx +0 -19
- package/src/components/menu/MenuHeader.tsx +0 -55
- package/src/components/menu/MenuItem.tsx +0 -85
- package/src/components/menu/MenuList.tsx +0 -142
- package/src/components/menu/MenuSubmenu.tsx +0 -284
- package/src/components/menu/MenuSubmenuBack.tsx +0 -39
- package/src/components/menu/MenuText.tsx +0 -47
- package/src/components/menu/MenuToggle.tsx +0 -148
- package/src/components/menu/index.ts +0 -19
- package/src/components/menu/menuNavigation.ts +0 -106
- package/src/components/menu/submenuGroup.ts +0 -43
- package/src/components/modal/Modal.tsx +0 -164
- package/src/components/modal/ModalBody.tsx +0 -47
- package/src/components/modal/ModalFooter.tsx +0 -51
- package/src/components/modal/ModalHeader.tsx +0 -60
- package/src/components/modal/ModalTitle.tsx +0 -49
- package/src/components/modal/index.ts +0 -10
- package/src/components/nav/Nav.tsx +0 -97
- package/src/components/nav/NavItem.tsx +0 -42
- package/src/components/nav/NavLink.tsx +0 -48
- package/src/components/nav/NavTitle.tsx +0 -22
- package/src/components/nav/index.ts +0 -7
- package/src/components/navbar/Navbar.tsx +0 -112
- package/src/components/navbar/NavbarBrand.tsx +0 -58
- package/src/components/navbar/NavbarNav.tsx +0 -47
- package/src/components/navbar/NavbarText.tsx +0 -47
- package/src/components/navbar/NavbarToggler.tsx +0 -34
- package/src/components/navbar/index.ts +0 -10
- package/src/components/notification/Notification.scss +0 -15
- package/src/components/notification/Notification.tsx +0 -187
- package/src/components/notification/NotificationIcon.tsx +0 -21
- package/src/components/notification/NotificationStack.tsx +0 -66
- package/src/components/notification/NotificationText.tsx +0 -47
- package/src/components/notification/NotificationTitle.tsx +0 -47
- package/src/components/notification/context.ts +0 -14
- package/src/components/notification/index.ts +0 -17
- package/src/components/notification/notificationQueue.ts +0 -48
- package/src/components/otp-input/OtpBox.tsx +0 -68
- package/src/components/otp-input/OtpInput.tsx +0 -342
- package/src/components/otp-input/index.ts +0 -2
- package/src/components/pagination/Pagination.tsx +0 -199
- package/src/components/pagination/PaginationItem.tsx +0 -152
- package/src/components/pagination/index.ts +0 -4
- package/src/components/password-strength/PasswordStrength.tsx +0 -155
- package/src/components/password-strength/index.ts +0 -2
- package/src/components/password-strength/strengthScore.ts +0 -79
- package/src/components/placeholder/Placeholder.tsx +0 -178
- package/src/components/placeholder/index.ts +0 -2
- package/src/components/popover/Popover.tsx +0 -269
- package/src/components/popover/index.ts +0 -2
- package/src/components/progress/Progress.tsx +0 -154
- package/src/components/progress/ProgressBar.tsx +0 -88
- package/src/components/progress/index.ts +0 -4
- package/src/components/radio/Radio.tsx +0 -98
- package/src/components/radio/RadioGroup.tsx +0 -142
- package/src/components/radio/context.ts +0 -14
- package/src/components/radio/index.ts +0 -4
- package/src/components/range-input/RangeInput.tsx +0 -109
- package/src/components/range-input/index.ts +0 -2
- package/src/components/select/Select.tsx +0 -277
- package/src/components/select/index.ts +0 -2
- package/src/components/skeleton/Skeleton.tsx +0 -89
- package/src/components/skeleton/SkeletonLoader.tsx +0 -91
- package/src/components/skeleton/index.ts +0 -4
- package/src/components/spinner/Spinner.tsx +0 -77
- package/src/components/spinner/index.ts +0 -2
- package/src/components/stack/Stack.tsx +0 -81
- package/src/components/stack/index.ts +0 -2
- package/src/components/stepper/Stepper.tsx +0 -172
- package/src/components/stepper/StepperItem.tsx +0 -66
- package/src/components/stepper/index.ts +0 -4
- package/src/components/switch/Switch.tsx +0 -259
- package/src/components/switch/index.ts +0 -2
- package/src/components/table/Table.css +0 -39
- package/src/components/table/Table.tsx +0 -413
- package/src/components/table/TableBody.tsx +0 -25
- package/src/components/table/TableCell.tsx +0 -27
- package/src/components/table/TableColumn.tsx +0 -31
- package/src/components/table/TableHeader.tsx +0 -26
- package/src/components/table/TableRow.tsx +0 -24
- package/src/components/table/index.ts +0 -12
- package/src/components/tabs/Tab.tsx +0 -36
- package/src/components/tabs/TabList.tsx +0 -76
- package/src/components/tabs/TabPanel.tsx +0 -68
- package/src/components/tabs/Tabs.tsx +0 -136
- package/src/components/tabs/context.ts +0 -24
- package/src/components/tabs/index.ts +0 -8
- package/src/components/text-input/TextInput.tsx +0 -188
- package/src/components/text-input/index.ts +0 -2
- package/src/components/textarea/Textarea.tsx +0 -145
- package/src/components/textarea/index.ts +0 -2
- package/src/components/toast/Toast.tsx +0 -219
- package/src/components/toast/ToastBody.tsx +0 -64
- package/src/components/toast/ToastFooter.tsx +0 -47
- package/src/components/toast/ToastHeader.tsx +0 -104
- package/src/components/toast/ToastIcon.tsx +0 -21
- package/src/components/toast/Toaster.tsx +0 -87
- package/src/components/toast/context.ts +0 -14
- package/src/components/toast/index.ts +0 -18
- package/src/components/toast/toastQueue.ts +0 -56
- package/src/components/tooltip/Tooltip.tsx +0 -171
- package/src/components/tooltip/index.ts +0 -2
- package/src/global.d.ts +0 -2
- package/src/hooks/index.ts +0 -57
- package/src/hooks/useAutoDismiss.ts +0 -91
- package/src/hooks/useButtonSemantics.ts +0 -33
- package/src/hooks/useControllableState.ts +0 -24
- package/src/hooks/useDialogElement.ts +0 -226
- package/src/hooks/useDisabledAnchorGuard.ts +0 -22
- package/src/hooks/useDismissibleTransition.ts +0 -126
- package/src/hooks/useDrawer.ts +0 -9
- package/src/hooks/useFloatingOverlay.ts +0 -125
- package/src/hooks/useForkedRef.ts +0 -50
- package/src/hooks/useFormField.ts +0 -89
- package/src/hooks/useIsomorphicLayoutEffect.ts +0 -9
- package/src/hooks/useModal.ts +0 -9
- package/src/hooks/useNotification.ts +0 -10
- package/src/hooks/useOverlayPlacement.ts +0 -93
- package/src/hooks/usePagination.ts +0 -89
- package/src/hooks/useToast.ts +0 -9
- package/src/hooks/useToastRegionQueue.ts +0 -27
- package/src/index.ts +0 -502
- package/src/types.ts +0 -133
- package/src/utils/breakpoints.ts +0 -43
- package/src/utils/comboboxCollection.tsx +0 -152
- package/src/utils/dateRangePresets.ts +0 -6
- package/src/utils/devWarning.ts +0 -58
- package/src/utils/dialogTransition.ts +0 -39
- package/src/utils/direction.ts +0 -14
- package/src/utils/focusRedirect.ts +0 -23
- package/src/utils/isWholeUnitDisabled.ts +0 -17
- package/src/utils/mergeIsDateUnavailable.ts +0 -15
- package/src/utils/overlayPlacement.ts +0 -93
- package/src/utils/pointerInteraction.ts +0 -21
- package/src/utils/polymorphic.ts +0 -53
- package/src/utils/renderMenuItemContent.tsx +0 -62
- package/src/utils/setVisibleRangeStart.ts +0 -64
- package/src/utils/spacingClassName.ts +0 -14
- package/src/utils/suppressFocusRingGlobally.ts +0 -84
- package/src/utils/triggerElement.ts +0 -25
- package/src/utils/validationClassName.ts +0 -8
- package/src/utils/virtualFocusStyle.ts +0 -16
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef, HTMLAttributes, useMemo, useRef, useState } from 'react'
|
|
2
|
-
import classNames from 'classnames'
|
|
3
|
-
import { AriaCalendarProps, mergeProps, useCalendar, useCalendarCell, useLocale } from 'react-aria'
|
|
4
|
-
import { CalendarState as StatelyCalendarState, DateValue, useCalendarState } from 'react-stately'
|
|
5
|
-
import {
|
|
6
|
-
CalendarDate,
|
|
7
|
-
createCalendar,
|
|
8
|
-
getLocalTimeZone,
|
|
9
|
-
isToday,
|
|
10
|
-
isWeekend,
|
|
11
|
-
today
|
|
12
|
-
} from '@internationalized/date'
|
|
13
|
-
|
|
14
|
-
import { useForkedRef } from '../../hooks'
|
|
15
|
-
import { CalendarMonthBlock } from './CalendarMonthBlock'
|
|
16
|
-
import { CalendarMonthYearPicker } from './CalendarMonthYearPicker'
|
|
17
|
-
import { CalendarNavButton } from './CalendarNavButton'
|
|
18
|
-
import { CalendarWeekGrid } from './CalendarWeekGrid'
|
|
19
|
-
import { mergeIsDateUnavailable } from '../../utils/mergeIsDateUnavailable'
|
|
20
|
-
import './Calendar.scss'
|
|
21
|
-
import { CalendarLabels, CalendarLabelsProvider } from './labels'
|
|
22
|
-
|
|
23
|
-
interface CalendarBaseProps extends Omit<
|
|
24
|
-
HTMLAttributes<HTMLDivElement>,
|
|
25
|
-
'onChange' | 'defaultValue'
|
|
26
|
-
> {
|
|
27
|
-
/**
|
|
28
|
-
* An accessible label for the calendar, used when there's no visible label. Required for
|
|
29
|
-
* standalone use — a calendar grid has no other accessible name of its own.
|
|
30
|
-
*/
|
|
31
|
-
'aria-label'?: string
|
|
32
|
-
/**
|
|
33
|
-
* Identifies a visible label element for the calendar.
|
|
34
|
-
*/
|
|
35
|
-
'aria-labelledby'?: string
|
|
36
|
-
/**
|
|
37
|
-
* Whether to automatically focus the calendar when it mounts.
|
|
38
|
-
*/
|
|
39
|
-
autoFocus?: boolean
|
|
40
|
-
/**
|
|
41
|
-
* A string of all className you want applied to the base component.
|
|
42
|
-
*/
|
|
43
|
-
className?: string
|
|
44
|
-
/**
|
|
45
|
-
* Prevents the calendar from being focused or interacted with.
|
|
46
|
-
*/
|
|
47
|
-
disabled?: boolean
|
|
48
|
-
/**
|
|
49
|
-
* The day that starts the week, overriding the default set by the active locale.
|
|
50
|
-
*
|
|
51
|
-
* @default 'mon'
|
|
52
|
-
*/
|
|
53
|
-
firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
|
|
54
|
-
/**
|
|
55
|
-
* Callback that is called for each date in the calendar. If it returns `true`, that date is
|
|
56
|
-
* shown but cannot be selected.
|
|
57
|
-
*/
|
|
58
|
-
isDateUnavailable?: (date: DateValue) => boolean
|
|
59
|
-
/**
|
|
60
|
-
* Overrides for the handful of strings this component renders itself rather than getting from
|
|
61
|
-
* the active locale (the year view's paging arrows, its live-region announcements, and the
|
|
62
|
-
* month/year header buttons). Everything else — month and weekday names, the calendar system —
|
|
63
|
-
* follows `I18nProvider`'s locale via react-aria and needs no override. Merged over the English
|
|
64
|
-
* defaults, so passing one key leaves the rest alone.
|
|
65
|
-
*/
|
|
66
|
-
labels?: Partial<CalendarLabels>
|
|
67
|
-
/**
|
|
68
|
-
* The maximum allowed date that a user may select.
|
|
69
|
-
*/
|
|
70
|
-
maxValue?: DateValue | null
|
|
71
|
-
/**
|
|
72
|
-
* The minimum allowed date that a user may select.
|
|
73
|
-
*/
|
|
74
|
-
minValue?: DateValue | null
|
|
75
|
-
/**
|
|
76
|
-
* ISO 8601 dates (`YYYY-MM-DD`) to mark unselectable, as a convenience alternative to
|
|
77
|
-
* `isDateUnavailable` for data-driven cases (e.g. booked dates fetched from an API). Composed
|
|
78
|
-
* with `isDateUnavailable` when both are given — a date unavailable by either is unavailable.
|
|
79
|
-
*/
|
|
80
|
-
unavailableDates?: string[]
|
|
81
|
-
/**
|
|
82
|
-
* Number of months to display side by side, sharing one selection. Wraps to multiple rows in
|
|
83
|
-
* a narrow container (e.g. a popover on a sm screen) rather than overflowing — the wrap is
|
|
84
|
-
* driven by the calendar's own width, not the viewport, so it adapts correctly regardless of
|
|
85
|
-
* where the calendar is embedded.
|
|
86
|
-
*
|
|
87
|
-
* @default 1
|
|
88
|
-
*/
|
|
89
|
-
visibleMonths?: number
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export interface CalendarSingleProps extends CalendarBaseProps {
|
|
93
|
-
/**
|
|
94
|
-
* The initial selected date (uncontrolled).
|
|
95
|
-
*/
|
|
96
|
-
defaultValue?: DateValue | null
|
|
97
|
-
/**
|
|
98
|
-
* Callback fired when the selected date changes. Unlike `DatePicker`'s `onChange` (whose
|
|
99
|
-
* segmented field can be cleared to `null`), a calendar selection is always a concrete date.
|
|
100
|
-
*/
|
|
101
|
-
onChange?: (value: DateValue) => void
|
|
102
|
-
/**
|
|
103
|
-
* Whether a single date or multiple, independently toggled dates can be selected.
|
|
104
|
-
*
|
|
105
|
-
* @default 'single'
|
|
106
|
-
*/
|
|
107
|
-
selectionMode?: 'single'
|
|
108
|
-
/**
|
|
109
|
-
* The selected date (controlled).
|
|
110
|
-
*/
|
|
111
|
-
value?: DateValue | null
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export interface CalendarMultipleProps extends CalendarBaseProps {
|
|
115
|
-
/**
|
|
116
|
-
* The initial selected dates (uncontrolled).
|
|
117
|
-
*/
|
|
118
|
-
defaultValue?: DateValue[] | null
|
|
119
|
-
/**
|
|
120
|
-
* Callback fired when the set of selected dates changes.
|
|
121
|
-
*/
|
|
122
|
-
onChange?: (value: DateValue[]) => void
|
|
123
|
-
/**
|
|
124
|
-
* Whether a single date or multiple, independently toggled dates can be selected.
|
|
125
|
-
*
|
|
126
|
-
* @default 'single'
|
|
127
|
-
*/
|
|
128
|
-
selectionMode: 'multiple'
|
|
129
|
-
/**
|
|
130
|
-
* The selected dates (controlled).
|
|
131
|
-
*/
|
|
132
|
-
value?: DateValue[] | null
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export type CalendarProps = CalendarSingleProps | CalendarMultipleProps
|
|
136
|
-
|
|
137
|
-
// Public, standalone calendar grid — also used internally by `DatePicker` to render the grid
|
|
138
|
-
// inside its popover. Deliberately has no knowledge of dialog/popover semantics (role="dialog",
|
|
139
|
-
// focus trapping, etc.) — that's the caller's concern, layered on via the `...rest` passthrough
|
|
140
|
-
// below (see `DatePicker`, which merges its own `useDialog` output in this way).
|
|
141
|
-
//
|
|
142
|
-
// `selectionMode` is a discriminated union on the public props (single vs. multiple value/
|
|
143
|
-
// onChange shapes), bridged onto one underlying `useCalendarState`/`useCalendar` call instantiated
|
|
144
|
-
// over the union of both modes — react-stately/react-aria are natively selection-mode-aware at
|
|
145
|
-
// that layer (including `useCalendarCell`'s `isSelected`), so no custom multi-select logic is
|
|
146
|
-
// needed here, just narrow, provably-safe casts at the seam between the public union and the
|
|
147
|
-
// single generic call (react-stately always reports/expects the value shape matching whichever
|
|
148
|
-
// `selectionMode` was actually passed in).
|
|
149
|
-
export const Calendar = forwardRef<HTMLDivElement, CalendarProps>((props, forwardedRef) => {
|
|
150
|
-
const {
|
|
151
|
-
autoFocus,
|
|
152
|
-
className,
|
|
153
|
-
defaultValue,
|
|
154
|
-
disabled,
|
|
155
|
-
firstDayOfWeek = 'mon',
|
|
156
|
-
isDateUnavailable,
|
|
157
|
-
labels,
|
|
158
|
-
maxValue,
|
|
159
|
-
minValue,
|
|
160
|
-
onChange,
|
|
161
|
-
selectionMode = 'single',
|
|
162
|
-
unavailableDates,
|
|
163
|
-
value,
|
|
164
|
-
visibleMonths = 1,
|
|
165
|
-
...rest
|
|
166
|
-
} = props
|
|
167
|
-
|
|
168
|
-
const { locale } = useLocale()
|
|
169
|
-
const internalRef = useRef<HTMLDivElement>(null)
|
|
170
|
-
const ref = useForkedRef(internalRef, forwardedRef)
|
|
171
|
-
const combinedIsDateUnavailable = useMemo(
|
|
172
|
-
() => mergeIsDateUnavailable(unavailableDates, isDateUnavailable),
|
|
173
|
-
[unavailableDates, isDateUnavailable]
|
|
174
|
-
)
|
|
175
|
-
// Tracks each visible month block's own view, keyed by `monthIndex` — same reasoning as
|
|
176
|
-
// `RangeCalendar`'s identical state: needed only to know whether *any* block has switched
|
|
177
|
-
// away from the day grid, so the global `.datepicker-controls` overlay can hide itself rather
|
|
178
|
-
// than sit on top of `CalendarYearGrid`'s own pager.
|
|
179
|
-
const [monthViews, setMonthViews] = useState<Record<number, 'days' | 'months' | 'years'>>({})
|
|
180
|
-
const hasPickerView = Object.values(monthViews).some((view) => view !== 'days')
|
|
181
|
-
|
|
182
|
-
const handleChange = (next: DateValue | readonly DateValue[]) => {
|
|
183
|
-
if (selectionMode === 'multiple') {
|
|
184
|
-
;(onChange as ((value: DateValue[]) => void) | undefined)?.(next as DateValue[])
|
|
185
|
-
} else {
|
|
186
|
-
;(onChange as ((value: DateValue) => void) | undefined)?.(next as DateValue)
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
const normalizedValue = value as DateValue | readonly DateValue[] | null | undefined
|
|
190
|
-
const normalizedDefaultValue = defaultValue as DateValue | readonly DateValue[] | null | undefined
|
|
191
|
-
// react-stately's `useCalendarState` crashes computing the initial focused date for
|
|
192
|
-
// `selectionMode: 'multiple'` when the (controlled or default) value is a genuinely empty
|
|
193
|
-
// array — its own fallback-to-today logic only runs when the value is nullish, but an empty
|
|
194
|
-
// array is truthy, so it instead indexes the (nonexistent) first element and calls `.subtract`
|
|
195
|
-
// on the resulting `undefined`. Supplying `defaultFocusedValue` ourselves in exactly that case
|
|
196
|
-
// short-circuits react-stately's logic before it ever reaches the buggy branch, without
|
|
197
|
-
// affecting the normal "focus follows the selection" behavior whenever there is one.
|
|
198
|
-
const resolvedValue = normalizedValue !== undefined ? normalizedValue : normalizedDefaultValue
|
|
199
|
-
const defaultFocusedValue =
|
|
200
|
-
selectionMode === 'multiple' && Array.isArray(resolvedValue) && resolvedValue.length === 0
|
|
201
|
-
? today(getLocalTimeZone())
|
|
202
|
-
: undefined
|
|
203
|
-
|
|
204
|
-
const state = useCalendarState<DateValue, 'single' | 'multiple'>({
|
|
205
|
-
autoFocus,
|
|
206
|
-
createCalendar,
|
|
207
|
-
defaultFocusedValue,
|
|
208
|
-
defaultValue: normalizedDefaultValue,
|
|
209
|
-
firstDayOfWeek,
|
|
210
|
-
isDateUnavailable: combinedIsDateUnavailable,
|
|
211
|
-
isDisabled: disabled,
|
|
212
|
-
locale,
|
|
213
|
-
maxValue,
|
|
214
|
-
minValue,
|
|
215
|
-
onChange: handleChange,
|
|
216
|
-
// Prev/next always slide the visible window by one month, regardless of `visibleMonths` —
|
|
217
|
-
// same reasoning as `RangeCalendar`'s identical setting (see that component's own comment).
|
|
218
|
-
pageBehavior: 'single',
|
|
219
|
-
selectionMode,
|
|
220
|
-
value: normalizedValue,
|
|
221
|
-
visibleDuration: { months: visibleMonths }
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
const ariaProps: AriaCalendarProps<DateValue, 'single' | 'multiple'> = {
|
|
225
|
-
'aria-label': rest['aria-label'],
|
|
226
|
-
'aria-labelledby': rest['aria-labelledby'],
|
|
227
|
-
autoFocus,
|
|
228
|
-
defaultFocusedValue,
|
|
229
|
-
defaultValue: normalizedDefaultValue,
|
|
230
|
-
isDateUnavailable: combinedIsDateUnavailable,
|
|
231
|
-
isDisabled: disabled,
|
|
232
|
-
maxValue,
|
|
233
|
-
minValue,
|
|
234
|
-
onChange: handleChange,
|
|
235
|
-
selectionMode,
|
|
236
|
-
value: normalizedValue
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
const { calendarProps, prevButtonProps, nextButtonProps } = useCalendar(ariaProps, state)
|
|
240
|
-
const prevButton = <CalendarNavButton buttonProps={prevButtonProps} direction="prev" />
|
|
241
|
-
const nextButton = <CalendarNavButton buttonProps={nextButtonProps} direction="next" />
|
|
242
|
-
|
|
243
|
-
return (
|
|
244
|
-
<CalendarLabelsProvider labels={labels}>
|
|
245
|
-
<div
|
|
246
|
-
{...mergeProps(calendarProps, rest)}
|
|
247
|
-
className={classNames('datepicker', className)}
|
|
248
|
-
data-cx-inline="true"
|
|
249
|
-
ref={ref}
|
|
250
|
-
>
|
|
251
|
-
{visibleMonths === 1 ? (
|
|
252
|
-
<CalendarMonthYearPicker
|
|
253
|
-
monthStart={state.visibleRange.start}
|
|
254
|
-
nextArrow={nextButton}
|
|
255
|
-
prevArrow={prevButton}
|
|
256
|
-
state={state}
|
|
257
|
-
>
|
|
258
|
-
<CalendarWeekGrid
|
|
259
|
-
firstDayOfWeek={firstDayOfWeek}
|
|
260
|
-
renderCell={(date) => <CalendarCell date={date} locale={locale} state={state} />}
|
|
261
|
-
state={state}
|
|
262
|
-
/>
|
|
263
|
-
</CalendarMonthYearPicker>
|
|
264
|
-
) : (
|
|
265
|
-
<>
|
|
266
|
-
{/* `.datepicker[data-cx-inline]` (the root above) is already `position: relative` in
|
|
267
|
-
chassis-css, so this overlay needs no extra positioning wrapper of its own — unlike
|
|
268
|
-
`RangeCalendar`, which has a `presets` column sharing that root and so scopes its
|
|
269
|
-
own copy of this overlay to a nested `.datepicker-body` instead. */}
|
|
270
|
-
{!hasPickerView && (
|
|
271
|
-
<div className="datepicker-controls">
|
|
272
|
-
{prevButton}
|
|
273
|
-
{nextButton}
|
|
274
|
-
</div>
|
|
275
|
-
)}
|
|
276
|
-
<div className="datepicker-grid">
|
|
277
|
-
{[...new Array(visibleMonths).keys()].map((monthIndex) => (
|
|
278
|
-
<CalendarMonthBlock
|
|
279
|
-
firstDayOfWeek={firstDayOfWeek}
|
|
280
|
-
key={monthIndex}
|
|
281
|
-
monthIndex={monthIndex}
|
|
282
|
-
onViewChange={(view) =>
|
|
283
|
-
setMonthViews((prev) => ({ ...prev, [monthIndex]: view }))
|
|
284
|
-
}
|
|
285
|
-
renderCell={(date) => <CalendarCell date={date} locale={locale} state={state} />}
|
|
286
|
-
state={state}
|
|
287
|
-
/>
|
|
288
|
-
))}
|
|
289
|
-
</div>
|
|
290
|
-
</>
|
|
291
|
-
)}
|
|
292
|
-
</div>
|
|
293
|
-
</CalendarLabelsProvider>
|
|
294
|
-
)
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
Calendar.displayName = 'Calendar'
|
|
298
|
-
|
|
299
|
-
type CalendarState = StatelyCalendarState<'single' | 'multiple'>
|
|
300
|
-
|
|
301
|
-
interface CalendarCellProps {
|
|
302
|
-
date: CalendarDate
|
|
303
|
-
locale: string
|
|
304
|
-
state: CalendarState
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
const CalendarCell = ({ date, locale, state }: CalendarCellProps) => {
|
|
308
|
-
const ref = useRef<HTMLButtonElement>(null)
|
|
309
|
-
const {
|
|
310
|
-
cellProps,
|
|
311
|
-
buttonProps,
|
|
312
|
-
isSelected,
|
|
313
|
-
isOutsideVisibleRange,
|
|
314
|
-
isDisabled,
|
|
315
|
-
isUnavailable,
|
|
316
|
-
formattedDate
|
|
317
|
-
} = useCalendarCell({ date }, state, ref)
|
|
318
|
-
const isCurrentDate = isToday(date, getLocalTimeZone())
|
|
319
|
-
|
|
320
|
-
return (
|
|
321
|
-
<div
|
|
322
|
-
{...cellProps}
|
|
323
|
-
aria-current={isCurrentDate ? 'date' : undefined}
|
|
324
|
-
className={classNames('datepicker-date', {
|
|
325
|
-
'datepicker-date-selected': isSelected,
|
|
326
|
-
'datepicker-date-today': isCurrentDate,
|
|
327
|
-
'datepicker-date-outside': isOutsideVisibleRange,
|
|
328
|
-
'datepicker-date-disabled': isDisabled,
|
|
329
|
-
'datepicker-date-unavailable': isUnavailable,
|
|
330
|
-
'datepicker-date-weekend': isWeekend(date, locale)
|
|
331
|
-
})}
|
|
332
|
-
>
|
|
333
|
-
<button {...buttonProps} type="button" className="datepicker-date-btn" ref={ref}>
|
|
334
|
-
{formattedDate}
|
|
335
|
-
</button>
|
|
336
|
-
</div>
|
|
337
|
-
)
|
|
338
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react'
|
|
2
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
3
|
-
import { CalendarDate } from '@internationalized/date'
|
|
4
|
-
|
|
5
|
-
import { CalendarMonthYearPicker } from './CalendarMonthYearPicker'
|
|
6
|
-
import { CalendarWeekGrid } from './CalendarWeekGrid'
|
|
7
|
-
|
|
8
|
-
interface CalendarMonthBlockProps {
|
|
9
|
-
// `null`/omitted when a global prev/next pair elsewhere is paging every visible month block at
|
|
10
|
-
// once (`RangeCalendar` with `visibleMonths > 1`) rather than this block having its own — see
|
|
11
|
-
// that component's own `arrows` prop.
|
|
12
|
-
arrows?: { next: ReactNode; prev: ReactNode } | null
|
|
13
|
-
firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
|
|
14
|
-
monthIndex: number
|
|
15
|
-
onViewChange: (view: 'days' | 'months' | 'years') => void
|
|
16
|
-
// The individual cell differs between `Calendar` and `RangeCalendar` (range selection needs
|
|
17
|
-
// start/end/in-between pill state a single-date cell has no equivalent for), so cell rendering
|
|
18
|
-
// is left to the caller — same shape `CalendarWeekGrid` itself already expects.
|
|
19
|
-
renderCell: (date: CalendarDate, index: number, week: (CalendarDate | null)[]) => ReactNode
|
|
20
|
-
state: CalendarState<'single' | 'multiple'> | RangeCalendarState
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// One visible month within `visibleMonths` — shared by `Calendar` and `RangeCalendar`, which
|
|
24
|
-
// otherwise duplicated this wiring near-verbatim. `monthIndex` is the offset of this block's own
|
|
25
|
-
// month from `state.focusedDate` (`0` for a single-month calendar), letting `setVisibleRangeStart`
|
|
26
|
-
// (inside `CalendarMonthYearPicker`) land a pick correctly regardless of which visible block it
|
|
27
|
-
// came from.
|
|
28
|
-
export const CalendarMonthBlock = ({
|
|
29
|
-
arrows,
|
|
30
|
-
firstDayOfWeek,
|
|
31
|
-
monthIndex,
|
|
32
|
-
onViewChange,
|
|
33
|
-
renderCell,
|
|
34
|
-
state
|
|
35
|
-
}: CalendarMonthBlockProps) => {
|
|
36
|
-
const monthStart = state.visibleRange.start.add({ months: monthIndex })
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<>
|
|
40
|
-
<CalendarMonthYearPicker
|
|
41
|
-
monthIndex={monthIndex}
|
|
42
|
-
monthStart={monthStart}
|
|
43
|
-
nextArrow={arrows?.next}
|
|
44
|
-
onViewChange={onViewChange}
|
|
45
|
-
prevArrow={arrows?.prev}
|
|
46
|
-
state={state}
|
|
47
|
-
>
|
|
48
|
-
<CalendarWeekGrid
|
|
49
|
-
firstDayOfWeek={firstDayOfWeek}
|
|
50
|
-
renderCell={renderCell}
|
|
51
|
-
startDate={monthStart}
|
|
52
|
-
state={state}
|
|
53
|
-
/>
|
|
54
|
-
</CalendarMonthYearPicker>
|
|
55
|
-
</>
|
|
56
|
-
)
|
|
57
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import classNames from 'classnames'
|
|
3
|
-
import { useDateFormatter } from 'react-aria'
|
|
4
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
5
|
-
import { CalendarDate } from '@internationalized/date'
|
|
6
|
-
|
|
7
|
-
import { isWholeUnitDisabled } from '../../utils/isWholeUnitDisabled'
|
|
8
|
-
import { useCalendarLabels } from './labels'
|
|
9
|
-
|
|
10
|
-
interface CalendarMonthGridProps {
|
|
11
|
-
// Whether to render the visually-hidden `aria-live` announcement of this view's current header
|
|
12
|
-
// (see `CalendarMonthYearPicker`'s own equivalent gate) — `false` for every visible month block
|
|
13
|
-
// but the first when `visibleMonths > 1`, so switching into this view doesn't fire one
|
|
14
|
-
// simultaneous announcement per block.
|
|
15
|
-
announce?: boolean
|
|
16
|
-
monthStart: CalendarDate
|
|
17
|
-
onBack: () => void
|
|
18
|
-
onSelect: (date: CalendarDate) => void
|
|
19
|
-
state: CalendarState<'single' | 'multiple'> | RangeCalendarState
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// The month view of `CalendarMonthYearPicker` — every month in `monthStart`'s own year, laid out
|
|
23
|
-
// as a static 3-column grid (no paging; picking a different year is the year view's job).
|
|
24
|
-
export const CalendarMonthGrid = ({
|
|
25
|
-
announce = true,
|
|
26
|
-
monthStart,
|
|
27
|
-
onBack,
|
|
28
|
-
onSelect,
|
|
29
|
-
state
|
|
30
|
-
}: CalendarMonthGridProps) => {
|
|
31
|
-
const labels = useCalendarLabels()
|
|
32
|
-
const monthFormatter = useDateFormatter({
|
|
33
|
-
calendar: monthStart.calendar.identifier,
|
|
34
|
-
month: 'short',
|
|
35
|
-
timeZone: state.timeZone
|
|
36
|
-
})
|
|
37
|
-
const yearFormatter = useDateFormatter({
|
|
38
|
-
calendar: monthStart.calendar.identifier,
|
|
39
|
-
timeZone: state.timeZone,
|
|
40
|
-
year: 'numeric'
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
const numMonths = monthStart.calendar.getMonthsInYear(monthStart)
|
|
44
|
-
const months = [...new Array(numMonths).keys()].map((i) => {
|
|
45
|
-
const date = monthStart.set({ day: 1, month: i + 1 })
|
|
46
|
-
return { date, formatted: monthFormatter.format(date.toDate(state.timeZone)) }
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<>
|
|
51
|
-
<div className="datepicker-header">
|
|
52
|
-
<div className="datepicker-header-content">
|
|
53
|
-
<button className="datepicker-month" onClick={onBack} type="button">
|
|
54
|
-
{yearFormatter.format(monthStart.toDate(state.timeZone))}
|
|
55
|
-
</button>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
{announce && (
|
|
59
|
-
<span role="status" className="visually-hidden">
|
|
60
|
-
{`${labels.selectMonth}, ${yearFormatter.format(monthStart.toDate(state.timeZone))}`}
|
|
61
|
-
</span>
|
|
62
|
-
)}
|
|
63
|
-
<div className="datepicker-content">
|
|
64
|
-
<div
|
|
65
|
-
aria-label={yearFormatter.format(monthStart.toDate(state.timeZone))}
|
|
66
|
-
className="datepicker-months"
|
|
67
|
-
role="group"
|
|
68
|
-
>
|
|
69
|
-
{months.map((month) => {
|
|
70
|
-
const isSelected = month.date.month === monthStart.month
|
|
71
|
-
const isDisabled = isWholeUnitDisabled(
|
|
72
|
-
state,
|
|
73
|
-
month.date,
|
|
74
|
-
month.date.add({ months: 1 }).subtract({ days: 1 })
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
return (
|
|
78
|
-
<button
|
|
79
|
-
aria-current={isSelected ? 'true' : undefined}
|
|
80
|
-
className={classNames('datepicker-months-month', { selected: isSelected })}
|
|
81
|
-
disabled={isDisabled}
|
|
82
|
-
key={month.date.month}
|
|
83
|
-
onClick={() => onSelect(month.date)}
|
|
84
|
-
type="button"
|
|
85
|
-
>
|
|
86
|
-
{month.formatted}
|
|
87
|
-
</button>
|
|
88
|
-
)
|
|
89
|
-
})}
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
</>
|
|
93
|
-
)
|
|
94
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode, useEffect, useRef, useState } from 'react'
|
|
2
|
-
import { useDateFormatter } from 'react-aria'
|
|
3
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
4
|
-
import { CalendarDate } from '@internationalized/date'
|
|
5
|
-
|
|
6
|
-
import { CalendarMonthGrid } from './CalendarMonthGrid'
|
|
7
|
-
import { CalendarYearGrid } from './CalendarYearGrid'
|
|
8
|
-
import { setVisibleRangeStart } from '../../utils/setVisibleRangeStart'
|
|
9
|
-
import { useCalendarLabels } from './labels'
|
|
10
|
-
|
|
11
|
-
interface CalendarMonthYearPickerProps {
|
|
12
|
-
// The day grid, shown in the default 'days' view — owned by the caller (`Calendar` and
|
|
13
|
-
// `RangeCalendar` render genuinely different cells: single-date vs. range pill styling), so
|
|
14
|
-
// this only decides *whether* it's showing, never how it's built.
|
|
15
|
-
children: ReactNode
|
|
16
|
-
monthIndex?: number
|
|
17
|
-
monthStart: CalendarDate
|
|
18
|
-
// `null` when a global prev/next pair elsewhere is paging every visible month block at once
|
|
19
|
-
// (`RangeCalendar` with `visibleMonths > 1`) rather than this block having its own — see that
|
|
20
|
-
// component's own `arrows` prop. Only ever rendered in the 'days' view; the month/year views page
|
|
21
|
-
// themselves independently (`CalendarYearGrid`) or don't page at all (`CalendarMonthGrid`).
|
|
22
|
-
nextArrow?: ReactNode
|
|
23
|
-
// Reports this block's own view whenever it changes, so a parent rendering several blocks
|
|
24
|
-
// (`RangeCalendar` with `visibleMonths > 1`) can tell when one of them has switched to the
|
|
25
|
-
// year view — `CalendarYearGrid` owns its own prev/next pager in that view, which would
|
|
26
|
-
// otherwise sit right underneath the parent's global `.datepicker-controls` overlay.
|
|
27
|
-
onViewChange?: (view: 'days' | 'months' | 'years') => void
|
|
28
|
-
prevArrow?: ReactNode
|
|
29
|
-
state: CalendarState<'single' | 'multiple'> | RangeCalendarState
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Header + body for one visible month block: the day grid by default, switching in place to a
|
|
33
|
-
// month or year grid when the header's own month/year button is pressed (chassis-css's actual
|
|
34
|
-
// `_datepicker.scss` design for this — `[data-vc="months"]`/`[data-vc="years"]`, swapped in for
|
|
35
|
-
// `[data-vc="dates"]` — not a `<select>`, which is what this component used to render here. Native
|
|
36
|
-
// `<select>` turned out to be the whole problem: picking a value forced a synchronous re-render
|
|
37
|
-
// from inside the browser's own `change`-event dispatch, and in Safari that corrupted `usePress`'s
|
|
38
|
-
// pointerup-vs-click target check for whatever the user clicked next — a page bug specific to
|
|
39
|
-
// native form controls, not present here since a grid button is a plain, ordinary press.
|
|
40
|
-
//
|
|
41
|
-
// Shared by `Calendar` and `RangeCalendar` — `monthIndex` is the offset of this block's own
|
|
42
|
-
// month from `state.focusedDate` (`0` for a single-month calendar), letting `setVisibleRangeStart`
|
|
43
|
-
// land a pick correctly regardless of which visible block it came from.
|
|
44
|
-
export const CalendarMonthYearPicker = ({
|
|
45
|
-
children,
|
|
46
|
-
monthIndex = 0,
|
|
47
|
-
monthStart,
|
|
48
|
-
nextArrow,
|
|
49
|
-
onViewChange,
|
|
50
|
-
prevArrow,
|
|
51
|
-
state
|
|
52
|
-
}: CalendarMonthYearPickerProps) => {
|
|
53
|
-
const labels = useCalendarLabels()
|
|
54
|
-
const [view, setView] = useState<'days' | 'months' | 'years'>('days')
|
|
55
|
-
const containerRef = useRef<HTMLDivElement>(null)
|
|
56
|
-
// Skipped on mount — there's no prior view to restore focus from yet, and stealing focus
|
|
57
|
-
// as soon as the calendar renders would fight `autoFocus`/the caller's own focus management.
|
|
58
|
-
const isFirstRender = useRef(true)
|
|
59
|
-
|
|
60
|
-
const changeView = (next: 'days' | 'months' | 'years') => {
|
|
61
|
-
setView(next)
|
|
62
|
-
onViewChange?.(next)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Switching `view` swaps in a whole new subtree, unmounting whatever was focused (the month/
|
|
66
|
-
// year trigger button, or the month/year grid button just picked) — React has no reason to move
|
|
67
|
-
// focus anywhere on its own, so without this it drops to `document.body`, breaking out of
|
|
68
|
-
// `FocusScope`'s containment in `DatePicker`/`DateRangePicker`'s popover entirely. Lands
|
|
69
|
-
// focus on the selected month/year button when entering the month/year view (falling back to
|
|
70
|
-
// the first option if nothing is selected on the currently visible page), or back onto the
|
|
71
|
-
// day grid's own roving-tabindex cell when returning to 'days'.
|
|
72
|
-
useEffect(() => {
|
|
73
|
-
if (isFirstRender.current) {
|
|
74
|
-
isFirstRender.current = false
|
|
75
|
-
return
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const container = containerRef.current
|
|
79
|
-
if (!container) return
|
|
80
|
-
|
|
81
|
-
const target =
|
|
82
|
-
view === 'days'
|
|
83
|
-
? container.querySelector<HTMLElement>('.datepicker-date-btn[tabindex="0"]')
|
|
84
|
-
: (container.querySelector<HTMLElement>(
|
|
85
|
-
'.datepicker-months-month.selected, .datepicker-years-year.selected'
|
|
86
|
-
) ??
|
|
87
|
-
container.querySelector<HTMLElement>('.datepicker-months-month, .datepicker-years-year'))
|
|
88
|
-
|
|
89
|
-
target?.focus()
|
|
90
|
-
}, [view])
|
|
91
|
-
|
|
92
|
-
const monthFormatter = useDateFormatter({
|
|
93
|
-
calendar: monthStart.calendar.identifier,
|
|
94
|
-
month: 'long',
|
|
95
|
-
timeZone: state.timeZone
|
|
96
|
-
})
|
|
97
|
-
const yearFormatter = useDateFormatter({
|
|
98
|
-
calendar: monthStart.calendar.identifier,
|
|
99
|
-
timeZone: state.timeZone,
|
|
100
|
-
year: 'numeric'
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
const commitAndReturn = (date: CalendarDate) => {
|
|
104
|
-
setVisibleRangeStart(state, date.subtract({ months: monthIndex }))
|
|
105
|
-
changeView('days')
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return (
|
|
109
|
-
<div className="datepicker-column" ref={containerRef}>
|
|
110
|
-
{view === 'months' && (
|
|
111
|
-
<CalendarMonthGrid
|
|
112
|
-
announce={monthIndex === 0}
|
|
113
|
-
monthStart={monthStart}
|
|
114
|
-
onBack={() => changeView('days')}
|
|
115
|
-
onSelect={commitAndReturn}
|
|
116
|
-
state={state}
|
|
117
|
-
/>
|
|
118
|
-
)}
|
|
119
|
-
{view === 'years' && (
|
|
120
|
-
<CalendarYearGrid
|
|
121
|
-
announce={monthIndex === 0}
|
|
122
|
-
monthStart={monthStart}
|
|
123
|
-
onBack={() => changeView('days')}
|
|
124
|
-
onSelect={commitAndReturn}
|
|
125
|
-
state={state}
|
|
126
|
-
/>
|
|
127
|
-
)}
|
|
128
|
-
{view === 'days' && (
|
|
129
|
-
<>
|
|
130
|
-
<div className="datepicker-header">
|
|
131
|
-
{prevArrow}
|
|
132
|
-
<div className="datepicker-header-content">
|
|
133
|
-
<button
|
|
134
|
-
aria-label={`${labels.month}: ${monthFormatter.format(monthStart.toDate(state.timeZone))}`}
|
|
135
|
-
className="datepicker-month"
|
|
136
|
-
disabled={state.isDisabled}
|
|
137
|
-
onClick={() => changeView('months')}
|
|
138
|
-
type="button"
|
|
139
|
-
>
|
|
140
|
-
{monthFormatter.format(monthStart.toDate(state.timeZone))}
|
|
141
|
-
</button>
|
|
142
|
-
<button
|
|
143
|
-
aria-label={`${labels.year}: ${yearFormatter.format(monthStart.toDate(state.timeZone))}`}
|
|
144
|
-
className="datepicker-year"
|
|
145
|
-
disabled={state.isDisabled}
|
|
146
|
-
onClick={() => changeView('years')}
|
|
147
|
-
type="button"
|
|
148
|
-
>
|
|
149
|
-
{yearFormatter.format(monthStart.toDate(state.timeZone))}
|
|
150
|
-
</button>
|
|
151
|
-
</div>
|
|
152
|
-
{nextArrow}
|
|
153
|
-
</div>
|
|
154
|
-
{monthIndex === 0 && (
|
|
155
|
-
<span role="status" className="visually-hidden">
|
|
156
|
-
{`${monthFormatter.format(monthStart.toDate(state.timeZone))} ${yearFormatter.format(monthStart.toDate(state.timeZone))}`}
|
|
157
|
-
</span>
|
|
158
|
-
)}
|
|
159
|
-
{children}
|
|
160
|
-
</>
|
|
161
|
-
)}
|
|
162
|
-
</div>
|
|
163
|
-
)
|
|
164
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import React, { useRef } from 'react'
|
|
2
|
-
import { AriaButtonProps, useButton } from 'react-aria'
|
|
3
|
-
|
|
4
|
-
interface CalendarNavButtonProps {
|
|
5
|
-
buttonProps: AriaButtonProps
|
|
6
|
-
direction: 'prev' | 'next'
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// Shared prev/next arrow, used twice by both `Calendar` and `RangeCalendar` — `buttonProps`
|
|
10
|
-
// comes from that caller's own `useCalendar`/`useRangeCalendar`, so this only owns the DOM ref and
|
|
11
|
-
// the `useButton` wiring plus the arrow markup itself.
|
|
12
|
-
export const CalendarNavButton = ({ buttonProps, direction }: CalendarNavButtonProps) => {
|
|
13
|
-
const ref = useRef<HTMLButtonElement>(null)
|
|
14
|
-
const { buttonProps: domButtonProps } = useButton(buttonProps, ref)
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<button
|
|
18
|
-
{...domButtonProps}
|
|
19
|
-
className={`datepicker-arrow datepicker-arrow-${direction}`}
|
|
20
|
-
ref={ref}
|
|
21
|
-
type="button"
|
|
22
|
-
></button>
|
|
23
|
-
)
|
|
24
|
-
}
|