@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,58 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react'
|
|
2
|
-
import { useCalendarGrid } from 'react-aria'
|
|
3
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
4
|
-
import { CalendarDate } from '@internationalized/date'
|
|
5
|
-
|
|
6
|
-
interface CalendarWeekGridProps {
|
|
7
|
-
firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
|
|
8
|
-
renderCell: (date: CalendarDate, index: number, week: (CalendarDate | null)[]) => ReactNode
|
|
9
|
-
startDate?: CalendarDate
|
|
10
|
-
state: CalendarState<'single' | 'multiple'> | RangeCalendarState
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// Shared week-day header + date-rows grid, used by both `Calendar` and `RangeCalendar` —
|
|
14
|
-
// `startDate` lets a range calendar anchor this to one of several visible months (see
|
|
15
|
-
// `useCalendarGrid`'s own docs); omitted, it defaults to the calendar's own visible start. Only the
|
|
16
|
-
// individual cell differs between the two callers (range selection needs start/end/in-between pill
|
|
17
|
-
// state a single-date cell has no equivalent for), so cell rendering is left to `renderCell`.
|
|
18
|
-
export const CalendarWeekGrid = ({
|
|
19
|
-
firstDayOfWeek,
|
|
20
|
-
renderCell,
|
|
21
|
-
startDate,
|
|
22
|
-
state
|
|
23
|
-
}: CalendarWeekGridProps) => {
|
|
24
|
-
const { gridProps, headerProps, weekDays, weeksInMonth } = useCalendarGrid(
|
|
25
|
-
{ firstDayOfWeek, startDate },
|
|
26
|
-
state
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<div {...gridProps} className="datepicker-content">
|
|
31
|
-
<div {...headerProps} className="datepicker-week" role="row">
|
|
32
|
-
{weekDays.map((day, index) => (
|
|
33
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
34
|
-
<span className="datepicker-week-day" key={index} role="columnheader">
|
|
35
|
-
{day}
|
|
36
|
-
</span>
|
|
37
|
-
))}
|
|
38
|
-
</div>
|
|
39
|
-
<div className="datepicker-dates">
|
|
40
|
-
{[...new Array(weeksInMonth).keys()].map((weekIndex) => {
|
|
41
|
-
const week = state.getDatesInWeek(weekIndex, startDate)
|
|
42
|
-
return (
|
|
43
|
-
<div className="datepicker-dates-row" key={weekIndex} role="row">
|
|
44
|
-
{week.map((date, i) =>
|
|
45
|
-
date ? (
|
|
46
|
-
<React.Fragment key={date.toString()}>{renderCell(date, i, week)}</React.Fragment>
|
|
47
|
-
) : (
|
|
48
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
49
|
-
<div className="datepicker-date" key={i} role="gridcell" />
|
|
50
|
-
)
|
|
51
|
-
)}
|
|
52
|
-
</div>
|
|
53
|
-
)
|
|
54
|
-
})}
|
|
55
|
-
</div>
|
|
56
|
-
</div>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react'
|
|
2
|
-
import classNames from 'classnames'
|
|
3
|
-
import { useDateFormatter } from 'react-aria'
|
|
4
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
5
|
-
import { CalendarDate, toCalendarDate } from '@internationalized/date'
|
|
6
|
-
|
|
7
|
-
import { isWholeUnitDisabled } from '../../utils/isWholeUnitDisabled'
|
|
8
|
-
import { useCalendarLabels } from './labels'
|
|
9
|
-
|
|
10
|
-
interface CalendarYearGridProps {
|
|
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 (or paging within it)
|
|
14
|
-
// doesn't fire one 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
|
-
const YEARS_PER_PAGE = 15
|
|
23
|
-
|
|
24
|
-
// The year view of `CalendarMonthYearPicker` — a paged 3-column grid, `YEARS_PER_PAGE` years at a
|
|
25
|
-
// time starting from the currently visible year. Unlike the month view, a year range doesn't fit
|
|
26
|
-
// on one screen, so this owns its own prev/next paging (independent of the day grid's own
|
|
27
|
-
// prev/next, which keep paging by month underneath whenever this view isn't showing).
|
|
28
|
-
export const CalendarYearGrid = ({
|
|
29
|
-
announce = true,
|
|
30
|
-
monthStart,
|
|
31
|
-
onBack,
|
|
32
|
-
onSelect,
|
|
33
|
-
state
|
|
34
|
-
}: CalendarYearGridProps) => {
|
|
35
|
-
const labels = useCalendarLabels()
|
|
36
|
-
const yearFormatter = useDateFormatter({
|
|
37
|
-
calendar: monthStart.calendar.identifier,
|
|
38
|
-
timeZone: state.timeZone,
|
|
39
|
-
year: 'numeric'
|
|
40
|
-
})
|
|
41
|
-
// Lazy initializer only — this view unmounts on every exit, so there's no case where `monthStart`
|
|
42
|
-
// changes while it's still mounted that this would need to react to.
|
|
43
|
-
const [pageStart, setPageStart] = useState(() => monthStart.year)
|
|
44
|
-
|
|
45
|
-
// `date` preserves `monthStart`'s own month/day, changing only the year — picking a year should
|
|
46
|
-
// land on the same month it started from, not reset to January (`yearStart`/`yearEnd` are the
|
|
47
|
-
// Jan 1–Dec 31 bounds used only for the disabled-range check below, kept separate so the actual
|
|
48
|
-
// selection target isn't affected by them).
|
|
49
|
-
const years = [...new Array(YEARS_PER_PAGE).keys()].map((i) => {
|
|
50
|
-
const date = monthStart.set({ year: pageStart + i })
|
|
51
|
-
const yearStart = date.set({ day: 1, month: 1 })
|
|
52
|
-
const yearEnd = yearStart.add({ years: 1 }).subtract({ days: 1 })
|
|
53
|
-
return {
|
|
54
|
-
date,
|
|
55
|
-
formatted: yearFormatter.format(date.toDate(state.timeZone)),
|
|
56
|
-
yearEnd,
|
|
57
|
-
yearStart
|
|
58
|
-
}
|
|
59
|
-
})
|
|
60
|
-
// `years` always has exactly `YEARS_PER_PAGE` (15) entries — a fixed, non-zero constant, never
|
|
61
|
-
// empty — so the first/last indices are always in range.
|
|
62
|
-
const firstYear = years[0]!
|
|
63
|
-
const lastYear = years[years.length - 1]!
|
|
64
|
-
const firstYearStart = firstYear.yearStart
|
|
65
|
-
const lastYearEnd = lastYear.yearEnd
|
|
66
|
-
const rangeLabel = `${firstYear.formatted} – ${lastYear.formatted}`
|
|
67
|
-
|
|
68
|
-
const isPrevDisabled =
|
|
69
|
-
state.isDisabled ||
|
|
70
|
-
(state.minValue != null &&
|
|
71
|
-
firstYearStart.subtract({ days: 1 }).compare(toCalendarDate(state.minValue)) < 0)
|
|
72
|
-
const isNextDisabled =
|
|
73
|
-
state.isDisabled ||
|
|
74
|
-
(state.maxValue != null &&
|
|
75
|
-
lastYearEnd.add({ days: 1 }).compare(toCalendarDate(state.maxValue)) > 0)
|
|
76
|
-
|
|
77
|
-
return (
|
|
78
|
-
<>
|
|
79
|
-
<div className="datepicker-header">
|
|
80
|
-
<button
|
|
81
|
-
aria-label={labels.previousYears}
|
|
82
|
-
className="datepicker-arrow datepicker-arrow-prev"
|
|
83
|
-
disabled={isPrevDisabled}
|
|
84
|
-
onClick={() => setPageStart((start) => start - YEARS_PER_PAGE)}
|
|
85
|
-
type="button"
|
|
86
|
-
/>
|
|
87
|
-
<div className="datepicker-header-content">
|
|
88
|
-
<button className="datepicker-year" onClick={onBack} type="button">
|
|
89
|
-
{rangeLabel}
|
|
90
|
-
</button>
|
|
91
|
-
</div>
|
|
92
|
-
<button
|
|
93
|
-
aria-label={labels.nextYears}
|
|
94
|
-
className="datepicker-arrow datepicker-arrow-next"
|
|
95
|
-
disabled={isNextDisabled}
|
|
96
|
-
onClick={() => setPageStart((start) => start + YEARS_PER_PAGE)}
|
|
97
|
-
type="button"
|
|
98
|
-
/>
|
|
99
|
-
</div>
|
|
100
|
-
{announce && (
|
|
101
|
-
<span role="status" className="visually-hidden">
|
|
102
|
-
{`${labels.selectYear}, ${rangeLabel}`}
|
|
103
|
-
</span>
|
|
104
|
-
)}
|
|
105
|
-
<div className="datepicker-content">
|
|
106
|
-
<div aria-label={rangeLabel} className="datepicker-years" role="group">
|
|
107
|
-
{years.map((year) => {
|
|
108
|
-
const isSelected = year.date.year === monthStart.year
|
|
109
|
-
const isDisabled = isWholeUnitDisabled(state, year.yearStart, year.yearEnd)
|
|
110
|
-
|
|
111
|
-
return (
|
|
112
|
-
<button
|
|
113
|
-
aria-current={isSelected ? 'true' : undefined}
|
|
114
|
-
className={classNames('datepicker-years-year', { selected: isSelected })}
|
|
115
|
-
disabled={isDisabled}
|
|
116
|
-
key={year.date.year}
|
|
117
|
-
onClick={() => onSelect(year.date)}
|
|
118
|
-
type="button"
|
|
119
|
-
>
|
|
120
|
-
{year.formatted}
|
|
121
|
-
</button>
|
|
122
|
-
)
|
|
123
|
-
})}
|
|
124
|
-
</div>
|
|
125
|
-
</div>
|
|
126
|
-
</>
|
|
127
|
-
)
|
|
128
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
@use "@chassis-ui/css/scss/config" as *;
|
|
2
|
-
@use "@chassis-ui/css/scss/mixins" as *;
|
|
3
|
-
|
|
4
|
-
/*
|
|
5
|
-
* `RangeCalendar` reuses chassis-css's `.datepicker-*` classes as-is (see `Calendar.scss`).
|
|
6
|
-
* This file only covers the gaps: range-specific state (`.datepicker-date-in-range`,
|
|
7
|
-
* `-range-start`/`-end`) and the quick-select list beside the grid, which chassis-css
|
|
8
|
-
* doesn't style.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
@layer components {
|
|
12
|
-
.datepicker-date-in-range {
|
|
13
|
-
color: var(--day-range-fg-color);
|
|
14
|
-
background-color: var(--day-range-bg-color);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.datepicker-date-in-range > .datepicker-date-btn:hover {
|
|
18
|
-
background-color: unset;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.datepicker-date-in-range.datepicker-date-range-start {
|
|
22
|
-
@include border-top-start-radius(var(--border-radius-md));
|
|
23
|
-
@include border-bottom-start-radius(var(--border-radius-md));
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.datepicker-date-in-range.datepicker-date-range-end {
|
|
27
|
-
@include border-top-end-radius(var(--border-radius-md));
|
|
28
|
-
@include border-bottom-end-radius(var(--border-radius-md));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.datepicker-date-btn:is(.datepicker-date-range-start, .datepicker-date-range-end),
|
|
32
|
-
.datepicker-date-btn:is(.datepicker-date-range-start, .datepicker-date-range-end):hover {
|
|
33
|
-
color: var(--primary-contrast);
|
|
34
|
-
background-color: var(--primary);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.datepicker-date-btn.datepicker-date-range-start:not(.datepicker-date-range-end) {
|
|
38
|
-
@include border-top-end-radius(0);
|
|
39
|
-
@include border-bottom-end-radius(0);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.datepicker-date-btn.datepicker-date-range-end:not(.datepicker-date-range-start) {
|
|
43
|
-
@include border-top-start-radius(0);
|
|
44
|
-
@include border-bottom-start-radius(0);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/* Wins the specificity tie with chassis-css's "today" rule for a range endpoint that's also
|
|
48
|
-
today (same approach as `Calendar.scss`'s selected+today override). */
|
|
49
|
-
.datepicker-date[aria-current="date"] > .datepicker-date-btn.datepicker-date-range-start,
|
|
50
|
-
.datepicker-date[aria-current="date"] > .datepicker-date-btn.datepicker-date-range-end {
|
|
51
|
-
color: var(--primary-contrast);
|
|
52
|
-
background-color: var(--primary);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/* Quick-select list beside the grid; no chassis-css equivalent, so fully custom. */
|
|
56
|
-
.datepicker-presets {
|
|
57
|
-
display: flex;
|
|
58
|
-
flex-direction: column;
|
|
59
|
-
gap: var(--gap);
|
|
60
|
-
padding-inline: 0 var(--padding-x);
|
|
61
|
-
margin: 0;
|
|
62
|
-
list-style: none;
|
|
63
|
-
border-inline-end: var(--border-width-md) solid var(--border-subtle);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.datepicker-preset {
|
|
67
|
-
padding: var(--space-2xs) var(--space-xs);
|
|
68
|
-
color: var(--fg-main);
|
|
69
|
-
text-align: start;
|
|
70
|
-
white-space: nowrap;
|
|
71
|
-
cursor: pointer;
|
|
72
|
-
background-color: transparent;
|
|
73
|
-
border: 0;
|
|
74
|
-
@include border-radius(var(--border-radius-md));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.datepicker-preset:hover {
|
|
78
|
-
background-color: var(--bg-hover);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.datepicker-preset:focus-visible {
|
|
82
|
-
outline: var(--border-width-xl) solid var(--primary);
|
|
83
|
-
outline-offset: -1px;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.datepicker-preset.selected {
|
|
87
|
-
color: var(--primary-contrast);
|
|
88
|
-
background-color: var(--primary);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.datepicker-preset.selected:hover {
|
|
92
|
-
background-color: var(--primary);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
@@ -1,373 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef, HTMLAttributes, useMemo, useRef, useState } from 'react'
|
|
2
|
-
import classNames from 'classnames'
|
|
3
|
-
import {
|
|
4
|
-
AriaRangeCalendarProps,
|
|
5
|
-
mergeProps,
|
|
6
|
-
RangeValue,
|
|
7
|
-
useCalendarCell,
|
|
8
|
-
useLocale,
|
|
9
|
-
useRangeCalendar
|
|
10
|
-
} from 'react-aria'
|
|
11
|
-
import { DateValue, RangeCalendarState, useRangeCalendarState } from 'react-stately'
|
|
12
|
-
import {
|
|
13
|
-
CalendarDate,
|
|
14
|
-
createCalendar,
|
|
15
|
-
getLocalTimeZone,
|
|
16
|
-
isSameDay,
|
|
17
|
-
isToday,
|
|
18
|
-
isWeekend
|
|
19
|
-
} from '@internationalized/date'
|
|
20
|
-
|
|
21
|
-
import { useForkedRef } from '../../hooks'
|
|
22
|
-
import { CalendarMonthBlock } from './CalendarMonthBlock'
|
|
23
|
-
import { CalendarNavButton } from './CalendarNavButton'
|
|
24
|
-
import { DateRangePreset } from '../../utils/dateRangePresets'
|
|
25
|
-
import { mergeIsDateUnavailable } from '../../utils/mergeIsDateUnavailable'
|
|
26
|
-
import { suppressFocusRing } from '../../utils/suppressFocusRingGlobally'
|
|
27
|
-
import './Calendar.scss'
|
|
28
|
-
import './RangeCalendar.scss'
|
|
29
|
-
import { CalendarLabels, CalendarLabelsProvider } from './labels'
|
|
30
|
-
|
|
31
|
-
export interface RangeCalendarProps extends Omit<
|
|
32
|
-
HTMLAttributes<HTMLDivElement>,
|
|
33
|
-
'onChange' | 'defaultValue'
|
|
34
|
-
> {
|
|
35
|
-
/**
|
|
36
|
-
* An accessible label for the calendar, used when there's no visible label. Required for
|
|
37
|
-
* standalone use — a calendar grid has no other accessible name of its own.
|
|
38
|
-
*/
|
|
39
|
-
'aria-label'?: string
|
|
40
|
-
/**
|
|
41
|
-
* Identifies a visible label element for the calendar.
|
|
42
|
-
*/
|
|
43
|
-
'aria-labelledby'?: string
|
|
44
|
-
/**
|
|
45
|
-
* Whether to automatically focus the calendar when it mounts.
|
|
46
|
-
*/
|
|
47
|
-
autoFocus?: boolean
|
|
48
|
-
/**
|
|
49
|
-
* A string of all className you want applied to the base component.
|
|
50
|
-
*/
|
|
51
|
-
className?: string
|
|
52
|
-
/**
|
|
53
|
-
* The initial selected date range (uncontrolled).
|
|
54
|
-
*/
|
|
55
|
-
defaultValue?: RangeValue<DateValue> | null
|
|
56
|
-
/**
|
|
57
|
-
* Prevents the calendar from being focused or interacted with.
|
|
58
|
-
*/
|
|
59
|
-
disabled?: boolean
|
|
60
|
-
/**
|
|
61
|
-
* The day that starts the week, overriding the default set by the active locale.
|
|
62
|
-
*
|
|
63
|
-
* @default 'mon'
|
|
64
|
-
*/
|
|
65
|
-
firstDayOfWeek?: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
|
|
66
|
-
/**
|
|
67
|
-
* Callback that is called for each date in the calendar. If it returns `true`, that date is
|
|
68
|
-
* shown but cannot be selected.
|
|
69
|
-
*/
|
|
70
|
-
isDateUnavailable?: (date: DateValue) => boolean
|
|
71
|
-
/**
|
|
72
|
-
* Overrides for the handful of strings this component renders itself rather than getting from
|
|
73
|
-
* the active locale (the year view's paging arrows, its live-region announcements, and the
|
|
74
|
-
* month/year header buttons). Everything else — month and weekday names, the calendar system —
|
|
75
|
-
* follows `I18nProvider`'s locale via react-aria and needs no override. Merged over the English
|
|
76
|
-
* defaults, so passing one key leaves the rest alone.
|
|
77
|
-
*/
|
|
78
|
-
labels?: Partial<CalendarLabels>
|
|
79
|
-
/**
|
|
80
|
-
* The maximum allowed date that a user may select.
|
|
81
|
-
*/
|
|
82
|
-
maxValue?: DateValue | null
|
|
83
|
-
/**
|
|
84
|
-
* The minimum allowed date that a user may select.
|
|
85
|
-
*/
|
|
86
|
-
minValue?: DateValue | null
|
|
87
|
-
/**
|
|
88
|
-
* Callback fired when a complete range is selected (both a start and end date).
|
|
89
|
-
*/
|
|
90
|
-
onChange?: (value: RangeValue<DateValue>) => void
|
|
91
|
-
/**
|
|
92
|
-
* A list of quick-select range presets shown beside the calendar. Selecting a preset commits
|
|
93
|
-
* its range immediately, the same as picking a start and end date from the grid. The preset
|
|
94
|
-
* matching the current selection (if any) is marked selected. Omit to not show a preset list.
|
|
95
|
-
*/
|
|
96
|
-
presets?: DateRangePreset[]
|
|
97
|
-
/**
|
|
98
|
-
* ISO 8601 dates (`YYYY-MM-DD`) to mark unselectable, as a convenience alternative to
|
|
99
|
-
* `isDateUnavailable` for data-driven cases (e.g. booked dates fetched from an API). Composed
|
|
100
|
-
* with `isDateUnavailable` when both are given — a date unavailable by either is unavailable.
|
|
101
|
-
*/
|
|
102
|
-
unavailableDates?: string[]
|
|
103
|
-
/**
|
|
104
|
-
* The selected date range (controlled).
|
|
105
|
-
*/
|
|
106
|
-
value?: RangeValue<DateValue> | null
|
|
107
|
-
/**
|
|
108
|
-
* Number of months to display side by side, sharing one selection. Wraps to multiple rows in
|
|
109
|
-
* a narrow container (e.g. a popover on a sm screen) rather than overflowing — the wrap is
|
|
110
|
-
* driven by the calendar's own width, not the viewport, so it adapts correctly regardless of
|
|
111
|
-
* where the calendar is embedded.
|
|
112
|
-
*
|
|
113
|
-
* @default 1
|
|
114
|
-
*/
|
|
115
|
-
visibleMonths?: number
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Range counterpart to `Calendar` — same dialog-agnostic composition boundary (see that
|
|
119
|
-
// component's own comment) and the same header/month-year-picker/grid visual language, reusing
|
|
120
|
-
// `Calendar.scss`'s shared classes directly. Kept as its own component rather than a `mode` prop
|
|
121
|
-
// on `Calendar`: the underlying react-stately/react-aria hooks are a genuinely different pair
|
|
122
|
-
// (`useRangeCalendarState`/`useRangeCalendar` vs `useCalendarState`/`useCalendar`), and the cell
|
|
123
|
-
// rendering has range-only concerns (start/end/in-between pill styling) with no single-date
|
|
124
|
-
// equivalent.
|
|
125
|
-
export const RangeCalendar = forwardRef<HTMLDivElement, RangeCalendarProps>(
|
|
126
|
-
(
|
|
127
|
-
{
|
|
128
|
-
autoFocus,
|
|
129
|
-
className,
|
|
130
|
-
defaultValue,
|
|
131
|
-
disabled,
|
|
132
|
-
firstDayOfWeek = 'mon',
|
|
133
|
-
isDateUnavailable,
|
|
134
|
-
labels,
|
|
135
|
-
maxValue,
|
|
136
|
-
minValue,
|
|
137
|
-
onChange,
|
|
138
|
-
presets,
|
|
139
|
-
unavailableDates,
|
|
140
|
-
value,
|
|
141
|
-
visibleMonths = 1,
|
|
142
|
-
...rest
|
|
143
|
-
},
|
|
144
|
-
forwardedRef
|
|
145
|
-
) => {
|
|
146
|
-
const { locale } = useLocale()
|
|
147
|
-
const internalRef = useRef<HTMLDivElement>(null)
|
|
148
|
-
const ref = useForkedRef(internalRef, forwardedRef)
|
|
149
|
-
const combinedIsDateUnavailable = useMemo(
|
|
150
|
-
() => mergeIsDateUnavailable(unavailableDates, isDateUnavailable),
|
|
151
|
-
[unavailableDates, isDateUnavailable]
|
|
152
|
-
)
|
|
153
|
-
const resolvedPresets = presets && presets.length > 0 ? presets : null
|
|
154
|
-
// Tracks each visible month block's own view, keyed by `monthIndex` — needed only to know
|
|
155
|
-
// whether *any* block has switched away from the day grid. `CalendarYearGrid` owns its own
|
|
156
|
-
// prev/next pager, which would otherwise sit right underneath the global `.datepicker-controls`
|
|
157
|
-
// overlay below (see its own comment) — and even in the month view, where there's no such
|
|
158
|
-
// literal overlap, the global pager would still page the day grid one block is no longer
|
|
159
|
-
// showing, which reads as it doing nothing.
|
|
160
|
-
const [monthViews, setMonthViews] = useState<Record<number, 'days' | 'months' | 'years'>>({})
|
|
161
|
-
const hasPickerView = Object.values(monthViews).some((view) => view !== 'days')
|
|
162
|
-
|
|
163
|
-
const state = useRangeCalendarState({
|
|
164
|
-
autoFocus,
|
|
165
|
-
createCalendar,
|
|
166
|
-
defaultValue,
|
|
167
|
-
firstDayOfWeek,
|
|
168
|
-
isDateUnavailable: combinedIsDateUnavailable,
|
|
169
|
-
isDisabled: disabled,
|
|
170
|
-
locale,
|
|
171
|
-
maxValue,
|
|
172
|
-
minValue,
|
|
173
|
-
onChange,
|
|
174
|
-
// Prev/next always slide the visible window by one month, regardless of `visibleMonths` —
|
|
175
|
-
// react-stately's own default (`pageBehavior: 'visible'`) instead pages by the *entire*
|
|
176
|
-
// visible span at once (e.g. jumping straight from Nov/Dec to Jan/Feb for `visibleMonths={2}`,
|
|
177
|
-
// skipping Dec/Jan entirely), which reads as broken next to `CalendarMonthYearDropdowns`'
|
|
178
|
-
// own one-month-at-a-time jumps.
|
|
179
|
-
pageBehavior: 'single',
|
|
180
|
-
value,
|
|
181
|
-
visibleDuration: { months: visibleMonths }
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
const ariaProps: AriaRangeCalendarProps<DateValue> = {
|
|
185
|
-
'aria-label': rest['aria-label'],
|
|
186
|
-
'aria-labelledby': rest['aria-labelledby'],
|
|
187
|
-
autoFocus,
|
|
188
|
-
defaultValue,
|
|
189
|
-
isDateUnavailable: combinedIsDateUnavailable,
|
|
190
|
-
isDisabled: disabled,
|
|
191
|
-
maxValue,
|
|
192
|
-
minValue,
|
|
193
|
-
onChange,
|
|
194
|
-
value
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
const { calendarProps, prevButtonProps, nextButtonProps } = useRangeCalendar(
|
|
198
|
-
ariaProps,
|
|
199
|
-
state,
|
|
200
|
-
internalRef
|
|
201
|
-
)
|
|
202
|
-
// A single pair of buttons, placed in exactly one spot depending on `visibleMonths` — inline
|
|
203
|
-
// in the (only) month's own header for a single month, or once as a global overlay for
|
|
204
|
-
// several — never both, so there's no risk of two DOM nodes fighting over one ref.
|
|
205
|
-
const prevButton = <CalendarNavButton buttonProps={prevButtonProps} direction="prev" />
|
|
206
|
-
const nextButton = <CalendarNavButton buttonProps={nextButtonProps} direction="next" />
|
|
207
|
-
const singleMonthArrows = visibleMonths === 1 ? { next: nextButton, prev: prevButton } : null
|
|
208
|
-
|
|
209
|
-
// Goes through the same `state.setValue` path a two-click grid selection does (rather than
|
|
210
|
-
// calling `onChange` directly), so it behaves identically whether `value` is controlled or
|
|
211
|
-
// uncontrolled — including `DateRangePicker`, which relies on this to auto-close its popover
|
|
212
|
-
// the same way completing a range in the grid already does.
|
|
213
|
-
const handlePresetSelect = (range: RangeValue<DateValue>) => {
|
|
214
|
-
state.setValue(range)
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return (
|
|
218
|
-
<CalendarLabelsProvider labels={labels}>
|
|
219
|
-
<div
|
|
220
|
-
{...mergeProps(calendarProps, rest)}
|
|
221
|
-
className={classNames('datepicker', className)}
|
|
222
|
-
data-cx-inline="true"
|
|
223
|
-
ref={ref}
|
|
224
|
-
>
|
|
225
|
-
<div className="datepicker-grid">
|
|
226
|
-
{resolvedPresets && (
|
|
227
|
-
<DateRangePresets
|
|
228
|
-
onSelect={handlePresetSelect}
|
|
229
|
-
presets={resolvedPresets}
|
|
230
|
-
value={state.value}
|
|
231
|
-
/>
|
|
232
|
-
)}
|
|
233
|
-
<div className="datepicker-body">
|
|
234
|
-
{visibleMonths > 1 && !hasPickerView && (
|
|
235
|
-
<div className="datepicker-controls">
|
|
236
|
-
{prevButton}
|
|
237
|
-
{nextButton}
|
|
238
|
-
</div>
|
|
239
|
-
)}
|
|
240
|
-
<div className="datepicker-grid">
|
|
241
|
-
{[...new Array(visibleMonths).keys()].map((monthIndex) => (
|
|
242
|
-
<CalendarMonthBlock
|
|
243
|
-
arrows={monthIndex === 0 ? singleMonthArrows : null}
|
|
244
|
-
firstDayOfWeek={firstDayOfWeek}
|
|
245
|
-
key={monthIndex}
|
|
246
|
-
monthIndex={monthIndex}
|
|
247
|
-
onViewChange={(view) =>
|
|
248
|
-
setMonthViews((prev) => ({ ...prev, [monthIndex]: view }))
|
|
249
|
-
}
|
|
250
|
-
renderCell={(date, i, week) => (
|
|
251
|
-
<CalendarCell
|
|
252
|
-
date={date}
|
|
253
|
-
isFirstInRow={i === 0}
|
|
254
|
-
isLastInRow={i === week.length - 1}
|
|
255
|
-
locale={locale}
|
|
256
|
-
state={state}
|
|
257
|
-
/>
|
|
258
|
-
)}
|
|
259
|
-
state={state}
|
|
260
|
-
/>
|
|
261
|
-
))}
|
|
262
|
-
</div>
|
|
263
|
-
</div>
|
|
264
|
-
</div>
|
|
265
|
-
</div>
|
|
266
|
-
</CalendarLabelsProvider>
|
|
267
|
-
)
|
|
268
|
-
}
|
|
269
|
-
)
|
|
270
|
-
|
|
271
|
-
RangeCalendar.displayName = 'RangeCalendar'
|
|
272
|
-
|
|
273
|
-
interface CalendarCellProps {
|
|
274
|
-
date: CalendarDate
|
|
275
|
-
isFirstInRow: boolean
|
|
276
|
-
isLastInRow: boolean
|
|
277
|
-
locale: string
|
|
278
|
-
state: RangeCalendarState
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
const CalendarCell = ({ date, isFirstInRow, isLastInRow, locale, state }: CalendarCellProps) => {
|
|
282
|
-
const ref = useRef<HTMLButtonElement>(null)
|
|
283
|
-
const {
|
|
284
|
-
cellProps,
|
|
285
|
-
buttonProps,
|
|
286
|
-
isSelected,
|
|
287
|
-
isOutsideVisibleRange,
|
|
288
|
-
isDisabled,
|
|
289
|
-
isUnavailable,
|
|
290
|
-
formattedDate
|
|
291
|
-
} = useCalendarCell({ date }, state, ref)
|
|
292
|
-
|
|
293
|
-
// `isSelected` is true for every day in the range, not just its endpoints — the pill's rounded
|
|
294
|
-
// caps belong only at the true start/end (or wherever a row wraps mid-range, so the band still
|
|
295
|
-
// reads as continuous week to week); everything else in between is a flush, square-edged band.
|
|
296
|
-
const { highlightedRange } = state
|
|
297
|
-
const isRangeStart = Boolean(highlightedRange && isSameDay(date, highlightedRange.start))
|
|
298
|
-
const isRangeEnd = Boolean(highlightedRange && isSameDay(date, highlightedRange.end))
|
|
299
|
-
const isCurrentDate = isToday(date, getLocalTimeZone())
|
|
300
|
-
|
|
301
|
-
return (
|
|
302
|
-
<div
|
|
303
|
-
{...cellProps}
|
|
304
|
-
aria-current={isCurrentDate ? 'date' : undefined}
|
|
305
|
-
className={classNames('datepicker-date', {
|
|
306
|
-
'datepicker-date-today': isCurrentDate,
|
|
307
|
-
'datepicker-date-in-range': isSelected,
|
|
308
|
-
'datepicker-date-range-start': isSelected && (isRangeStart || isFirstInRow),
|
|
309
|
-
'datepicker-date-range-end': isSelected && (isRangeEnd || isLastInRow),
|
|
310
|
-
'datepicker-date-outside': isOutsideVisibleRange,
|
|
311
|
-
'datepicker-date-disabled': isDisabled,
|
|
312
|
-
'datepicker-date-unavailable': isUnavailable,
|
|
313
|
-
'datepicker-date-weekend': isWeekend(date, locale)
|
|
314
|
-
})}
|
|
315
|
-
>
|
|
316
|
-
<button
|
|
317
|
-
{...mergeProps(buttonProps, {
|
|
318
|
-
// Hovering to preview a range's end date moves real DOM focus via `element.focus()`
|
|
319
|
-
// (`useCalendarCell`'s `onPointerEnter` -> `state.highlightDate`), which browsers can
|
|
320
|
-
// paint as a visible focus ring even though the input modality is a pointer, not a
|
|
321
|
-
// keyboard — suppress it the same way a mouse press does elsewhere in the library.
|
|
322
|
-
onPointerEnter: () => {
|
|
323
|
-
if (state.anchorDate && ref.current) suppressFocusRing(ref.current)
|
|
324
|
-
}
|
|
325
|
-
})}
|
|
326
|
-
type="button"
|
|
327
|
-
className={classNames('datepicker-date-btn', {
|
|
328
|
-
'datepicker-date-range-start': isRangeStart,
|
|
329
|
-
'datepicker-date-range-end': isRangeEnd
|
|
330
|
-
})}
|
|
331
|
-
ref={ref}
|
|
332
|
-
>
|
|
333
|
-
{formattedDate}
|
|
334
|
-
</button>
|
|
335
|
-
</div>
|
|
336
|
-
)
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
interface DateRangePresetsProps {
|
|
340
|
-
onSelect: (range: RangeValue<DateValue>) => void
|
|
341
|
-
presets: DateRangePreset[]
|
|
342
|
-
value: RangeValue<DateValue> | null
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
// A preset "matches" the current selection when both endpoints land on the same day — the same
|
|
346
|
-
// granularity `CalendarCell` already uses to compare dates, so a preset stays marked selected
|
|
347
|
-
// regardless of whether `value` is a `CalendarDate`, `CalendarDateTime`, or `ZonedDateTime`.
|
|
348
|
-
const isSameRange = (a: RangeValue<DateValue>, b: RangeValue<DateValue>) =>
|
|
349
|
-
isSameDay(a.start, b.start) && isSameDay(a.end, b.end)
|
|
350
|
-
|
|
351
|
-
// Plain buttons in a list, not a listbox — a group of independent actions (each one commits
|
|
352
|
-
// immediately) rather than a single-selection widget, so native Tab/Enter/Space is the right
|
|
353
|
-
// interaction model without extra roving-tabindex/arrow-key wiring.
|
|
354
|
-
const DateRangePresets = ({ onSelect, presets, value }: DateRangePresetsProps) => (
|
|
355
|
-
<ul className="datepicker-presets">
|
|
356
|
-
{presets.map((preset) => {
|
|
357
|
-
const isSelected = Boolean(value && isSameRange(value, preset.range))
|
|
358
|
-
|
|
359
|
-
return (
|
|
360
|
-
<li key={preset.label}>
|
|
361
|
-
<button
|
|
362
|
-
aria-current={isSelected ? 'true' : undefined}
|
|
363
|
-
className={classNames('datepicker-preset', { selected: isSelected })}
|
|
364
|
-
onClick={() => onSelect(preset.range)}
|
|
365
|
-
type="button"
|
|
366
|
-
>
|
|
367
|
-
{preset.label}
|
|
368
|
-
</button>
|
|
369
|
-
</li>
|
|
370
|
-
)
|
|
371
|
-
})}
|
|
372
|
-
</ul>
|
|
373
|
-
)
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { Calendar } from './Calendar'
|
|
2
|
-
export type { CalendarProps, CalendarSingleProps, CalendarMultipleProps } from './Calendar'
|
|
3
|
-
export { RangeCalendar } from './RangeCalendar'
|
|
4
|
-
export type { RangeCalendarProps } from './RangeCalendar'
|
|
5
|
-
export type { CalendarLabels } from './labels'
|
|
6
|
-
export type { DateRangePreset } from '../../utils/dateRangePresets'
|