@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,152 +0,0 @@
|
|
|
1
|
-
import React, { ComponentType, ReactElement, ReactNode } from 'react'
|
|
2
|
-
import { Item, Key, Section } from 'react-stately'
|
|
3
|
-
|
|
4
|
-
import { ComboboxGroupProps } from '../components/combobox/ComboboxGroup'
|
|
5
|
-
import { ComboboxItem, ComboboxItemProps } from '../components/combobox/ComboboxItem'
|
|
6
|
-
import { MenuItemsDef } from '../components/menu/MenuItemDef'
|
|
7
|
-
import { renderMenuItemContent } from './renderMenuItemContent'
|
|
8
|
-
|
|
9
|
-
// Shared between Combobox.tsx/ComboboxListBox.tsx (which build/render this collection) and
|
|
10
|
-
// Autocomplete.tsx (which reuses the same entry shape — see the comment on
|
|
11
|
-
// `buildEntriesFromChildren` below). Lives in `utils/` rather than `components/combobox/` because
|
|
12
|
-
// it crosses that folder boundary; kept in its own file to also avoid a circular import between
|
|
13
|
-
// Combobox.tsx and ComboboxListBox.tsx.
|
|
14
|
-
|
|
15
|
-
export type ComboboxItemElement = ReactElement<ComboboxItemProps>
|
|
16
|
-
|
|
17
|
-
export interface ComboboxGroupEntry {
|
|
18
|
-
entryType: 'group'
|
|
19
|
-
key: Key
|
|
20
|
-
label: ReactNode
|
|
21
|
-
items: ComboboxItemElement[]
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export type ComboboxEntry = ComboboxItemElement | ComboboxGroupEntry
|
|
25
|
-
|
|
26
|
-
// `useComboBoxState`/`useComboBox`'s own `SelectionMode` ('single' | 'multiple') isn't
|
|
27
|
-
// re-exported from react-stately's public entry point (only `ComboBoxState` etc. are) — this is
|
|
28
|
-
// a structurally-identical stand-in so `ComboboxListBox` can stay generic over it without a
|
|
29
|
-
// fragile deep import.
|
|
30
|
-
export type ComboboxSelectionMode = 'single' | 'multiple'
|
|
31
|
-
|
|
32
|
-
export const isComboboxGroupEntry = (entry: ComboboxEntry): entry is ComboboxGroupEntry =>
|
|
33
|
-
(entry as ComboboxGroupEntry).entryType === 'group'
|
|
34
|
-
|
|
35
|
-
// `Autocomplete`'s own `AutocompleteItem`/`AutocompleteGroup` are structurally identical to
|
|
36
|
-
// `ComboboxItem`/`ComboboxGroup` (see AutocompleteItem.tsx/AutocompleteGroup.tsx — kept as
|
|
37
|
-
// separate named types only so `Autocomplete`'s public API doesn't leak `Combobox`'s own prop
|
|
38
|
-
// type), but they're different *runtime* component identities, which is what
|
|
39
|
-
// `buildEntriesFromChildren` below needs to check consumer-authored `children` against. Passing
|
|
40
|
-
// the pair in lets one implementation serve both families instead of two near-duplicate copies.
|
|
41
|
-
export interface ComboboxCollectionComponents {
|
|
42
|
-
Group: ComponentType<ComboboxGroupProps>
|
|
43
|
-
Item: ComponentType<ComboboxItemProps>
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Splits `children` into a flat, ordered list of entries — bare `Item` elements and
|
|
47
|
-
// `Group`-wrapped clusters of them — mirroring how `useComboBoxState`'s dynamic collection needs
|
|
48
|
-
// top-level nodes: some rendered as a plain `<Item>`, some as a `<Section>` wrapping several
|
|
49
|
-
// `<Item>`s (see `comboboxCollectionChildren` below).
|
|
50
|
-
export const buildEntriesFromChildren = (
|
|
51
|
-
children: ReactNode,
|
|
52
|
-
{ Group, Item: ItemComponent }: ComboboxCollectionComponents
|
|
53
|
-
): ComboboxEntry[] => {
|
|
54
|
-
const entries: ComboboxEntry[] = []
|
|
55
|
-
React.Children.forEach(children, (child, index) => {
|
|
56
|
-
if (!React.isValidElement(child)) return
|
|
57
|
-
if (child.type === Group) {
|
|
58
|
-
const groupProps = child.props as ComboboxGroupProps
|
|
59
|
-
const items: ComboboxItemElement[] = []
|
|
60
|
-
React.Children.forEach(groupProps.children, (groupChild) => {
|
|
61
|
-
if (React.isValidElement(groupChild) && groupChild.type === ItemComponent) {
|
|
62
|
-
items.push(groupChild as ComboboxItemElement)
|
|
63
|
-
}
|
|
64
|
-
})
|
|
65
|
-
entries.push({ entryType: 'group', key: `group-${index}`, label: groupProps.label, items })
|
|
66
|
-
return
|
|
67
|
-
}
|
|
68
|
-
if (child.type === ItemComponent) {
|
|
69
|
-
entries.push(child as ComboboxItemElement)
|
|
70
|
-
}
|
|
71
|
-
})
|
|
72
|
-
return entries
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Same shape as `buildEntriesFromChildren`, from a flat `MenuItemsDef` instead. A `'header'`
|
|
76
|
-
// entry opens a new group that all following items join until the next header (or the end of
|
|
77
|
-
// the array) — matching how chassis-css itself renders grouped items (flat siblings, no
|
|
78
|
-
// wrapping element per group). `'divider'` entries aren't meaningful for a listbox/option
|
|
79
|
-
// collection and are skipped.
|
|
80
|
-
//
|
|
81
|
-
// Always builds a bare `ComboboxItem` internally regardless of which family (`Combobox` or
|
|
82
|
-
// `Autocomplete`) called it: unlike `buildEntriesFromChildren`, nothing downstream re-checks
|
|
83
|
-
// these elements' runtime type (they're read only via `.props.*`, never matched against a
|
|
84
|
-
// component reference again), so there's no need to thread `ComboboxCollectionComponents`
|
|
85
|
-
// through here too. `def.href`/`def.onClick` are intentionally not read — see the doc comments on
|
|
86
|
-
// `MenuItemDef` itself for why: they're `Menu`-only fields on this shared type.
|
|
87
|
-
export const buildEntriesFromItemsDef = (defs: MenuItemsDef): ComboboxEntry[] => {
|
|
88
|
-
const entries: ComboboxEntry[] = []
|
|
89
|
-
let currentGroup: ComboboxGroupEntry | null = null
|
|
90
|
-
|
|
91
|
-
defs.forEach((def) => {
|
|
92
|
-
if (def.type === 'divider') return
|
|
93
|
-
if (def.type === 'header') {
|
|
94
|
-
currentGroup = { entryType: 'group', key: def.id, label: def.label, items: [] }
|
|
95
|
-
entries.push(currentGroup)
|
|
96
|
-
return
|
|
97
|
-
}
|
|
98
|
-
const item = (
|
|
99
|
-
<ComboboxItem
|
|
100
|
-
key={def.id}
|
|
101
|
-
id={def.id}
|
|
102
|
-
disabled={def.disabled}
|
|
103
|
-
icon={def.icon}
|
|
104
|
-
description={def.description}
|
|
105
|
-
textValue={def.textValue}
|
|
106
|
-
>
|
|
107
|
-
{def.label}
|
|
108
|
-
</ComboboxItem>
|
|
109
|
-
)
|
|
110
|
-
if (currentGroup) currentGroup.items.push(item)
|
|
111
|
-
else entries.push(item)
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
return entries
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export const getDisabledKeys = (entries: ComboboxEntry[]): Key[] =>
|
|
118
|
-
entries.reduce<Key[]>((keys, entry) => {
|
|
119
|
-
const items = isComboboxGroupEntry(entry) ? entry.items : [entry]
|
|
120
|
-
return keys.concat(items.filter((item) => item.props.disabled).map((item) => item.props.id))
|
|
121
|
-
}, [])
|
|
122
|
-
|
|
123
|
-
// Builds the react-stately `Item` node `useComboBoxState`'s collection actually renders from one
|
|
124
|
-
// entry's props — identical for `Combobox` and `Autocomplete` regardless of which authoring
|
|
125
|
-
// component (`ComboboxItem`/`AutocompleteItem`) produced it, since both share the same prop shape.
|
|
126
|
-
export const renderComboboxCollectionItem = (item: ComboboxItemElement) => (
|
|
127
|
-
<Item
|
|
128
|
-
key={item.props.id}
|
|
129
|
-
textValue={
|
|
130
|
-
item.props.textValue ??
|
|
131
|
-
(typeof item.props.children === 'string' ? item.props.children : undefined)
|
|
132
|
-
}
|
|
133
|
-
>
|
|
134
|
-
{renderMenuItemContent({
|
|
135
|
-
icon: item.props.icon,
|
|
136
|
-
label: item.props.children,
|
|
137
|
-
description: item.props.description
|
|
138
|
-
})}
|
|
139
|
-
</Item>
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
// `useComboBoxState`'s own `children` render prop, given one `ComboboxEntry` — a plain `Item` for
|
|
143
|
-
// a bare entry, a `Section` wrapping its items for a group. Identical for `Combobox` and
|
|
144
|
-
// `Autocomplete`'s state setup.
|
|
145
|
-
export const comboboxCollectionChildren = (entry: ComboboxEntry) =>
|
|
146
|
-
isComboboxGroupEntry(entry) ? (
|
|
147
|
-
<Section key={entry.key} title={entry.label} items={entry.items}>
|
|
148
|
-
{renderComboboxCollectionItem}
|
|
149
|
-
</Section>
|
|
150
|
-
) : (
|
|
151
|
-
renderComboboxCollectionItem(entry)
|
|
152
|
-
)
|
package/src/utils/devWarning.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
// Development-only misuse warnings, in one place so every component reports misuse the same way
|
|
2
|
-
// and none of it reaches a consumer's production bundle.
|
|
3
|
-
//
|
|
4
|
-
// Two problems this fixes over calling `console.warn` directly, which is what every call site used
|
|
5
|
-
// to do:
|
|
6
|
-
//
|
|
7
|
-
// 1. **They fired in production.** Nothing in this package guarded on `NODE_ENV`, so every
|
|
8
|
-
// `console.warn` ran for end users of a consuming app. `process.env.NODE_ENV` is the idiom
|
|
9
|
-
// bundlers (Vite, webpack, Turbopack, Rollup) replace with a literal, so in a production build
|
|
10
|
-
// `IS_DEV` folds to `false` and no warning is ever emitted. Relying on that substitution adds
|
|
11
|
-
// no new constraint: `react-dom` — a peer dependency, so always present — already requires
|
|
12
|
-
// exactly the same replacement.
|
|
13
|
-
// 2. **They repeated.** Most call sites warn during render, so a warning re-fired on every
|
|
14
|
-
// re-render, and twice per render under StrictMode's double-invoke. De-duplicating on the
|
|
15
|
-
// message means a misuse is reported once and stays readable in the console.
|
|
16
|
-
//
|
|
17
|
-
// What this does *not* do is strip the message strings from the bundle. Measured with esbuild
|
|
18
|
-
// against the built `dist/index.js`: a `NODE_ENV=production` consumer bundle still contains them.
|
|
19
|
-
// `tsdown` minifies this package's own output first (`minify: true`), collapsing each function to
|
|
20
|
-
// a `IS_DEV && cond && ...` expression, and a consumer's minifier won't then inline that call to
|
|
21
|
-
// discover its arguments are droppable. Building unminified would let them drop, at the cost of
|
|
22
|
-
// shipping pretty-printed dist — not worth it for a few hundred gzipped bytes. The behavior that
|
|
23
|
-
// mattered (nothing logged in production, nothing repeated in development) is the part that's
|
|
24
|
-
// fixed; treat the strings as part of the bundle's fixed cost.
|
|
25
|
-
const IS_DEV = process.env.NODE_ENV !== 'production'
|
|
26
|
-
|
|
27
|
-
const warned = new Set<string>()
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Resets the de-duplication set. Test-only — the suite asserts on these warnings, and without a
|
|
31
|
-
* reset between tests the *second* test in a file to trigger the same message would see nothing.
|
|
32
|
-
* Called from a global `beforeEach` in `test/setup.ts`.
|
|
33
|
-
*/
|
|
34
|
-
export function resetDevWarnings(): void {
|
|
35
|
-
warned.clear()
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Logs `message` once via `console.warn` when `condition` is true, in development builds only.
|
|
40
|
-
* Use for a recoverable misuse: the component still renders something sensible.
|
|
41
|
-
*/
|
|
42
|
-
export function devWarning(condition: boolean, message: string): void {
|
|
43
|
-
if (!IS_DEV) return
|
|
44
|
-
if (!condition || warned.has(message)) return
|
|
45
|
-
warned.add(message)
|
|
46
|
-
console.warn(message)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Logs `message` once via `console.error` when `condition` is true, in development builds only.
|
|
51
|
-
* Use for a misuse that leaves the component genuinely broken (e.g. a required prop missing).
|
|
52
|
-
*/
|
|
53
|
-
export function devError(condition: boolean, message: string): void {
|
|
54
|
-
if (!IS_DEV) return
|
|
55
|
-
if (!condition || warned.has(message)) return
|
|
56
|
-
warned.add(message)
|
|
57
|
-
console.error(message)
|
|
58
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// Shared transition timing for native <dialog>-based components (Modal, Drawer). Body-scroll
|
|
2
|
-
// locking is handled by react-aria's usePreventScroll directly in each component.
|
|
3
|
-
|
|
4
|
-
export const getTransitionDuration = (element: HTMLElement) => {
|
|
5
|
-
const { transitionDuration, transitionDelay } = window.getComputedStyle(element)
|
|
6
|
-
const duration = Number.parseFloat(transitionDuration) || 0
|
|
7
|
-
const delay = Number.parseFloat(transitionDelay) || 0
|
|
8
|
-
if (!duration && !delay) return 0
|
|
9
|
-
return (duration + delay) * 1000
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const executeAfterTransition = (
|
|
13
|
-
element: HTMLElement,
|
|
14
|
-
callback: () => void,
|
|
15
|
-
animated: boolean
|
|
16
|
-
) => {
|
|
17
|
-
if (!animated) {
|
|
18
|
-
callback()
|
|
19
|
-
return () => undefined
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
let called = false
|
|
23
|
-
const done = () => {
|
|
24
|
-
if (called) return
|
|
25
|
-
called = true
|
|
26
|
-
element.removeEventListener('transitionend', handleEnd)
|
|
27
|
-
clearTimeout(timer)
|
|
28
|
-
callback()
|
|
29
|
-
}
|
|
30
|
-
const handleEnd = (event: Event) => {
|
|
31
|
-
if (event.target === element) done()
|
|
32
|
-
}
|
|
33
|
-
element.addEventListener('transitionend', handleEnd)
|
|
34
|
-
const timer = setTimeout(done, getTransitionDuration(element) + 50)
|
|
35
|
-
return () => {
|
|
36
|
-
element.removeEventListener('transitionend', handleEnd)
|
|
37
|
-
clearTimeout(timer)
|
|
38
|
-
}
|
|
39
|
-
}
|
package/src/utils/direction.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whether `element` renders right-to-left.
|
|
3
|
-
*
|
|
4
|
-
* Reads the *computed* direction rather than react-aria's `useLocale()`. The two are deliberately
|
|
5
|
-
* separate signals in this library (see the Internationalization docs page): `useLocale()` follows
|
|
6
|
-
* `I18nProvider`, and drives locale-dependent behavior like which calendar system to use;
|
|
7
|
-
* everything about visual layout — including which physical arrow key moves "forward" through a
|
|
8
|
-
* horizontally-laid-out control — follows the `dir` attribute, which is what `getComputedStyle`
|
|
9
|
-
* resolves here. A page can set one without the other, and for arrow-key navigation it's the
|
|
10
|
-
* rendered order the user sees that has to match.
|
|
11
|
-
*/
|
|
12
|
-
export function isRTL(element: Element): boolean {
|
|
13
|
-
return getComputedStyle(element).direction === 'rtl'
|
|
14
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { suppressFocusRing } from './suppressFocusRingGlobally'
|
|
2
|
-
|
|
3
|
-
// Safari shows a `:focus-visible` ring on an element focused via script even when the
|
|
4
|
-
// interaction that triggered the script was a real pointer click — unlike Chromium/Firefox,
|
|
5
|
-
// which correctly suppress it in that case. Force the ring off for a pointer-triggered redirect,
|
|
6
|
-
// then let normal focus-visible behavior resume the next time this element is genuinely
|
|
7
|
-
// (re)focused, e.g. via Tab.
|
|
8
|
-
//
|
|
9
|
-
// The suppress/restore cycle itself is `suppressFocusRing`'s, not reimplemented here: it owns the
|
|
10
|
-
// re-entrancy guard that keeps a second call before the element blurs from capturing the
|
|
11
|
-
// already-suppressed value as the one to restore (which left the ring off for good — reachable by
|
|
12
|
-
// clicking twice at the same disabled end of a `ends="stop"` carousel). `boxShadow` is suppressed
|
|
13
|
-
// alongside `outline` here, but not on the global pointerdown path, because a redirect can land
|
|
14
|
-
// on an element whose ring is painted that way.
|
|
15
|
-
export function focusRedirect(
|
|
16
|
-
el: HTMLElement | null,
|
|
17
|
-
viaPointer: boolean,
|
|
18
|
-
focusOptions?: FocusOptions
|
|
19
|
-
): void {
|
|
20
|
-
if (!el) return
|
|
21
|
-
if (viaPointer) suppressFocusRing(el, ['outline', 'boxShadow'])
|
|
22
|
-
el.focus(focusOptions)
|
|
23
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
2
|
-
import { CalendarDate, toCalendarDate } from '@internationalized/date'
|
|
3
|
-
|
|
4
|
-
// Shared by `CalendarMonthGrid` and `CalendarYearGrid` — a month/year button is disabled when
|
|
5
|
-
// every day it covers falls outside `minValue`/`maxValue`, not just when its first day does (e.g.
|
|
6
|
-
// a `maxValue` of March 15th still leaves March itself partly selectable, so March's button stays
|
|
7
|
-
// enabled; April's doesn't). `unitEnd` is the last day of the button's own month/year.
|
|
8
|
-
export const isWholeUnitDisabled = (
|
|
9
|
-
state: CalendarState<'single' | 'multiple'> | RangeCalendarState,
|
|
10
|
-
unitStart: CalendarDate,
|
|
11
|
-
unitEnd: CalendarDate
|
|
12
|
-
): boolean => {
|
|
13
|
-
if (state.isDisabled) return true
|
|
14
|
-
if (state.maxValue && unitStart.compare(toCalendarDate(state.maxValue)) > 0) return true
|
|
15
|
-
if (state.minValue && unitEnd.compare(toCalendarDate(state.minValue)) < 0) return true
|
|
16
|
-
return false
|
|
17
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { DateValue } from 'react-stately'
|
|
2
|
-
|
|
3
|
-
// `date.toString()` on a `CalendarDate` (the only `DateValue` variant `Calendar`/`DatePicker`
|
|
4
|
-
// ever produce — both are date-only, no time segments) yields the same ISO 8601 `YYYY-MM-DD`
|
|
5
|
-
// string already used elsewhere for form submission (see `DatePicker`'s hidden input), so
|
|
6
|
-
// `unavailableDates` entries are expected in that same format.
|
|
7
|
-
export const mergeIsDateUnavailable = (
|
|
8
|
-
unavailableDates: string[] | undefined,
|
|
9
|
-
isDateUnavailable: ((date: DateValue) => boolean) | undefined
|
|
10
|
-
): ((date: DateValue) => boolean) | undefined => {
|
|
11
|
-
if (!unavailableDates?.length && !isDateUnavailable) return undefined
|
|
12
|
-
|
|
13
|
-
const set = unavailableDates?.length ? new Set(unavailableDates) : null
|
|
14
|
-
return (date) => Boolean(set?.has(date.toString())) || Boolean(isDateUnavailable?.(date))
|
|
15
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import type { CSSProperties } from 'react'
|
|
2
|
-
import type { Placement as AriaPlacement, PlacementAxis } from 'react-aria'
|
|
3
|
-
|
|
4
|
-
// Chassis CSS's floating components (`.menu`, `.tooltip`, `.popover`) read a `data-cx-placement`
|
|
5
|
-
// attribute in this hyphenated, compound form (`"bottom-end"`, `"top-start"`, ...) to pick the
|
|
6
|
-
// right transform-origin for the open/close animation. React Aria's `useOverlayPosition` speaks a
|
|
7
|
-
// different, space-separated placement vocabulary (`"bottom end"`) and only reports back the
|
|
8
|
-
// resolved main axis after flipping, not the full compound value — this module bridges the two.
|
|
9
|
-
export type Placement =
|
|
10
|
-
| 'top'
|
|
11
|
-
| 'top-start'
|
|
12
|
-
| 'top-end'
|
|
13
|
-
| 'bottom'
|
|
14
|
-
| 'bottom-start'
|
|
15
|
-
| 'bottom-end'
|
|
16
|
-
| 'left'
|
|
17
|
-
| 'left-start'
|
|
18
|
-
| 'left-end'
|
|
19
|
-
| 'right'
|
|
20
|
-
| 'right-start'
|
|
21
|
-
| 'right-end'
|
|
22
|
-
|
|
23
|
-
const ARIA_PLACEMENT: Record<Placement, AriaPlacement> = {
|
|
24
|
-
top: 'top',
|
|
25
|
-
'top-start': 'top start',
|
|
26
|
-
'top-end': 'top end',
|
|
27
|
-
bottom: 'bottom',
|
|
28
|
-
'bottom-start': 'bottom start',
|
|
29
|
-
'bottom-end': 'bottom end',
|
|
30
|
-
left: 'left',
|
|
31
|
-
'left-start': 'left top',
|
|
32
|
-
'left-end': 'left bottom',
|
|
33
|
-
right: 'right',
|
|
34
|
-
'right-start': 'right top',
|
|
35
|
-
'right-end': 'right bottom'
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Translates chassis-react's public `placement` prop values into the strings
|
|
39
|
-
// `useOverlayPosition` expects.
|
|
40
|
-
export const toAriaPlacement = (placement: Placement): AriaPlacement => ARIA_PLACEMENT[placement]
|
|
41
|
-
|
|
42
|
-
// `useOverlayPosition`'s own `shouldFlip` only ever swaps the main axis (top<->bottom or
|
|
43
|
-
// left<->right) — it never changes the requested cross-axis alignment — so the resolved compound
|
|
44
|
-
// value is always the requested cross-axis suffix reattached to the (possibly flipped) main axis
|
|
45
|
-
// `useOverlayPosition` reports back.
|
|
46
|
-
export const resolveDataPlacement = (
|
|
47
|
-
requested: Placement,
|
|
48
|
-
resolvedMain: PlacementAxis | null
|
|
49
|
-
): string => {
|
|
50
|
-
if (!resolvedMain || resolvedMain === 'center') return requested
|
|
51
|
-
const cross = requested.split('-')[1]
|
|
52
|
-
return cross ? `${resolvedMain}-${cross}` : resolvedMain
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Shared between `Menu`/`MenuSubmenu` and `Combobox`/`Autocomplete`, whose floating panels all
|
|
56
|
-
// position via `useOverlayPosition` the same way: only `position`/`top`/`left` are taken from the
|
|
57
|
-
// hook's computed style (`zIndex`/`maxHeight` stay owned by chassis-css's own `--zindex`/
|
|
58
|
-
// `--max-height` tokens, see `_menu.scss`), and `data-cx-placement` needs the resolved main axis
|
|
59
|
-
// reattached to the originally-requested cross-axis alignment. Lives here (rather than
|
|
60
|
-
// `components/menu/`) for the same reason `renderMenuItemContent` does — `Combobox.tsx`/
|
|
61
|
-
// `Autocomplete.tsx` need it too, and importing across that folder boundary from three call sites
|
|
62
|
-
// is worse than housing it where none of the four has to reach into a sibling's folder.
|
|
63
|
-
export interface MenuOverlayPositioning {
|
|
64
|
-
menuStyle: CSSProperties
|
|
65
|
-
placementAttr: string
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const resolveMenuOverlayPositioning = (
|
|
69
|
-
overlayStyle: CSSProperties | undefined,
|
|
70
|
-
requestedPlacement: Placement,
|
|
71
|
-
resolvedPlacement: PlacementAxis | null
|
|
72
|
-
): MenuOverlayPositioning => ({
|
|
73
|
-
menuStyle: {
|
|
74
|
-
position: overlayStyle?.position,
|
|
75
|
-
top: overlayStyle?.top,
|
|
76
|
-
left: overlayStyle?.left
|
|
77
|
-
},
|
|
78
|
-
placementAttr: resolveDataPlacement(requestedPlacement, resolvedPlacement)
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
// chassis-css's `.combobox + .menu` sibling-selector rule (`_combobox.scss`) sets
|
|
82
|
-
// `--menu-max-height`/`--menu-overflow-y` from `$combobox-menu-max-height`/
|
|
83
|
-
// `$combobox-menu-overflow-y` (320px/auto by default) — but only while the panel is an adjacent
|
|
84
|
-
// DOM sibling of `.combobox`. `Autocomplete`/`Combobox` portal their panel to `document.body` (or
|
|
85
|
-
// an enclosing open `<dialog>`, via `useFloatingOverlay`), breaking that adjacency, so both inline
|
|
86
|
-
// this as a fallback matching the shipped Sass defaults instead of the generic, uncapped `.menu`
|
|
87
|
-
// fallback (`max-height: none`). A consumer who customized either Sass variable needs to
|
|
88
|
-
// re-override `--menu-max-height`/`--menu-overflow-y` on `.menu` directly, since the
|
|
89
|
-
// sibling-selector auto-application can no longer reach a portaled panel.
|
|
90
|
-
export const COMBOBOX_MENU_OVERLAY_STYLE: CSSProperties = {
|
|
91
|
-
'--menu-max-height': '320px',
|
|
92
|
-
'--menu-overflow-y': 'auto'
|
|
93
|
-
} as CSSProperties
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Tracks, per-element, whether its most recent activation came from a real pointer click rather
|
|
2
|
-
// than a keyboard one (a `click` fired by pointer activation has `detail >= 1`; one fired by
|
|
3
|
-
// keyboard activation, e.g. Enter/Space on a focused button, has `detail === 0`) — for callers
|
|
4
|
-
// that need that information later, asynchronously, once React has committed the state update the
|
|
5
|
-
// click triggered (see `Carousel.tsx`'s disabled-end focus redirect, which needs it to decide
|
|
6
|
-
// whether `focusRedirect` should suppress Safari's script-focus-after-pointer-click ring). A
|
|
7
|
-
// `WeakSet` rather than a DOM attribute so it doesn't leak into markup/snapshots, and consuming it
|
|
8
|
-
// clears the entry so a later, unrelated keyboard activation on the same element isn't
|
|
9
|
-
// misattributed as pointer-triggered.
|
|
10
|
-
const pointerClicks = new WeakSet<HTMLElement>()
|
|
11
|
-
|
|
12
|
-
export function markPointerClick(el: HTMLElement): void {
|
|
13
|
-
pointerClicks.add(el)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function consumePointerClick(el: HTMLElement | null): boolean {
|
|
17
|
-
if (!el) return false
|
|
18
|
-
const wasPointer = pointerClicks.has(el)
|
|
19
|
-
pointerClicks.delete(el)
|
|
20
|
-
return wasPointer
|
|
21
|
-
}
|
package/src/utils/polymorphic.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ComponentPropsWithoutRef,
|
|
3
|
-
ComponentPropsWithRef,
|
|
4
|
-
ElementType,
|
|
5
|
-
ForwardRefRenderFunction,
|
|
6
|
-
forwardRef,
|
|
7
|
-
Ref
|
|
8
|
-
} from 'react'
|
|
9
|
-
|
|
10
|
-
// Ref type inferred from a polymorphic component's currently-selected `component` element type.
|
|
11
|
-
export type PolymorphicRef<C extends ElementType> = ComponentPropsWithRef<C>['ref']
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Ref type for a polymorphic component that can also pick its element from a prop *other* than
|
|
15
|
-
* `component` — `Button`, `Chip`, `Avatar`, `NavbarBrand` and `PaginationItem` all render an
|
|
16
|
-
* `<a>` when given `href`, and `PaginationItem` a `<span>` when `active`, none of which moves `C`
|
|
17
|
-
* off its default. A plain `PolymorphicRef<C>` describes only the `component` branch, so a caller
|
|
18
|
-
* holding a ref for the element that actually gets rendered (`<Button href="/x" ref={anchorRef}>`)
|
|
19
|
-
* got a spurious type error while the runtime happily populated it.
|
|
20
|
-
*
|
|
21
|
-
* `Ref` over the *union* rather than a union of `Ref`s is what makes a
|
|
22
|
-
* `createRef<HTMLButtonElement | HTMLAnchorElement>()` assignable here: `RefObject` is invariant
|
|
23
|
-
* in its type argument, so `RefObject<A | B>` satisfies `Ref<A | B>` but neither `Ref<A>` nor
|
|
24
|
-
* `Ref<B>` on its own.
|
|
25
|
-
*/
|
|
26
|
-
export type PolymorphicRefWithFallback<C extends ElementType, Fallback extends HTMLElement> =
|
|
27
|
-
PolymorphicRef<C> | Ref<Fallback>
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Props for a polymorphic component: `OwnProps` (which must declare `component?: C`) plus
|
|
31
|
-
* whatever props `C` itself accepts, minus any name already claimed by `OwnProps` so the two
|
|
32
|
-
* don't conflict. Lets consumers swap `component` for e.g. a framework's `Image` and get full
|
|
33
|
-
* type-checking/autocomplete for that component's own props at the call site.
|
|
34
|
-
*/
|
|
35
|
-
export type PolymorphicComponentProps<C extends ElementType, OwnProps extends object> = OwnProps &
|
|
36
|
-
Omit<ComponentPropsWithoutRef<C>, keyof OwnProps>
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Wraps a polymorphic component's render function in `forwardRef` and stamps `displayName` — the
|
|
40
|
-
* two-step wiring every polymorphic component in this library repeats identically. `T` is the
|
|
41
|
-
* fully generic component type (e.g. `ButtonComponent`) that `forwardRef`'s own return type can't
|
|
42
|
-
* express, since `forwardRef` only accepts a non-generic render function — the caller still casts
|
|
43
|
-
* the render function to a concrete `Element`-typed instance before passing it in here.
|
|
44
|
-
*/
|
|
45
|
-
export function createPolymorphicComponent<T>(
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
-
render: ForwardRefRenderFunction<Element, any>,
|
|
48
|
-
displayName: string
|
|
49
|
-
): T {
|
|
50
|
-
const Component = forwardRef(render) as unknown as T & { displayName?: string }
|
|
51
|
-
Component.displayName = displayName
|
|
52
|
-
return Component
|
|
53
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react'
|
|
2
|
-
|
|
3
|
-
import { Icon } from '../components/icon/Icon'
|
|
4
|
-
|
|
5
|
-
export interface MenuItemContentDef {
|
|
6
|
-
/**
|
|
7
|
-
* Icon rendered at the item's leading edge (`.menu-item-icon`).
|
|
8
|
-
*/
|
|
9
|
-
icon?: ReactNode
|
|
10
|
-
/**
|
|
11
|
-
* Label content.
|
|
12
|
-
*/
|
|
13
|
-
label: ReactNode
|
|
14
|
-
/**
|
|
15
|
-
* Secondary line of text rendered below the label (`.menu-item-description`).
|
|
16
|
-
*/
|
|
17
|
-
description?: ReactNode
|
|
18
|
-
/**
|
|
19
|
-
* Renders a `.menu-item-check` at the trailing edge when true.
|
|
20
|
-
*/
|
|
21
|
-
selected?: boolean
|
|
22
|
-
/**
|
|
23
|
-
* Icon name for the selected-state check. Defaults to chassis-css's own doc example.
|
|
24
|
-
*/
|
|
25
|
-
checkIcon?: string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Chassis-css defines identical markup for rich item content in both Menu and Combobox items
|
|
29
|
-
// (and, by extension, Autocomplete) — `.menu-item-icon` / `.menu-item-content` (label +
|
|
30
|
-
// `.menu-item-description`) / `.menu-item-check`. Shared here so every consumer produces
|
|
31
|
-
// byte-identical DOM instead of three near-duplicate implementations. Lives in `utils/` rather
|
|
32
|
-
// than `components/menu/` because it crosses that folder boundary — Combobox.tsx and
|
|
33
|
-
// Autocomplete.tsx both import it too. Renders bare `label` when there's nothing else to show,
|
|
34
|
-
// keeping simple items' markup as minimal as chassis-css's own simplest example.
|
|
35
|
-
export const renderMenuItemContent = ({
|
|
36
|
-
icon,
|
|
37
|
-
label,
|
|
38
|
-
description,
|
|
39
|
-
selected,
|
|
40
|
-
checkIcon = 'check-solid'
|
|
41
|
-
}: MenuItemContentDef): ReactNode => {
|
|
42
|
-
if (icon == null && description == null && !selected) return label
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<>
|
|
46
|
-
{icon != null && (
|
|
47
|
-
<span className="menu-item-icon" aria-hidden="true">
|
|
48
|
-
{icon}
|
|
49
|
-
</span>
|
|
50
|
-
)}
|
|
51
|
-
{description != null ? (
|
|
52
|
-
<span className="menu-item-content">
|
|
53
|
-
<span>{label}</span>
|
|
54
|
-
<small className="menu-item-description">{description}</small>
|
|
55
|
-
</span>
|
|
56
|
-
) : (
|
|
57
|
-
label
|
|
58
|
-
)}
|
|
59
|
-
{selected && <Icon name={checkIcon} className="menu-item-check" />}
|
|
60
|
-
</>
|
|
61
|
-
)
|
|
62
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { flushSync } from 'react-dom'
|
|
2
|
-
import { CalendarState, RangeCalendarState } from 'react-stately'
|
|
3
|
-
import { CalendarDate } from '@internationalized/date'
|
|
4
|
-
|
|
5
|
-
// Moves a (possibly multi-month) calendar's visible range so it starts at `desiredStart` — used by
|
|
6
|
-
// `CalendarMonthYearPicker` to jump straight to a picked month/year, in any visible block.
|
|
7
|
-
//
|
|
8
|
-
// `state.setFocusedDate` is the only way to move `visibleRange` from outside react-stately, but it
|
|
9
|
-
// doesn't just set `visibleRange.start` to wherever focus goes: react-stately keeps the visible
|
|
10
|
-
// range as separate internal state, only repositioning it when the newly focused date falls
|
|
11
|
-
// entirely *before* the current range (realigning so the range *ends* at that date's month) or
|
|
12
|
-
// entirely *after* it (realigning so it *starts* there) — a focused date that lands inside the
|
|
13
|
-
// current range moves focus without paging the range at all. That means a single `setFocusedDate`
|
|
14
|
-
// call can only land exactly on an arbitrary `desiredStart` when it's at least a full
|
|
15
|
-
// `visibleDuration` away from the current range. Anything closer — the common case here, since
|
|
16
|
-
// adjacent blocks in a multi-month calendar are only one month apart — either no-ops (desired
|
|
17
|
-
// start still inside the current range) or overshoots by up to a full `visibleDuration` (desired
|
|
18
|
-
// start just outside it, but not far enough for the realignment to land exactly).
|
|
19
|
-
//
|
|
20
|
-
// Worked around with two `setFocusedDate` hops when a single one can't reach exactly: first past
|
|
21
|
-
// `desiredStart` by one extra `visibleDuration` in the same direction (always far enough to land
|
|
22
|
-
// exactly, by the same rule), flushed synchronously so `visibleRange` actually updates before the
|
|
23
|
-
// second call runs, then back onto `desiredStart` itself — which, relative to that intermediate
|
|
24
|
-
// range, is now exactly one `visibleDuration` away and so lands exactly too.
|
|
25
|
-
export const setVisibleRangeStart = (
|
|
26
|
-
state: CalendarState<'single' | 'multiple'> | RangeCalendarState,
|
|
27
|
-
desiredStart: CalendarDate
|
|
28
|
-
): void => {
|
|
29
|
-
const { start: currentStart, end: currentEnd } = state.visibleRange
|
|
30
|
-
if (desiredStart.compare(currentStart) === 0) return
|
|
31
|
-
|
|
32
|
-
const durationMonths = state.visibleDuration.months || 1
|
|
33
|
-
const isForward = desiredStart.compare(currentStart) > 0
|
|
34
|
-
|
|
35
|
-
const reachableInOneHop = isForward
|
|
36
|
-
? desiredStart.compare(currentEnd) > 0
|
|
37
|
-
: desiredStart.add({ months: durationMonths - 1 }).compare(currentStart) < 0
|
|
38
|
-
|
|
39
|
-
if (reachableInOneHop) {
|
|
40
|
-
state.setFocusedDate(focusedDateForStart(desiredStart, isForward, durationMonths))
|
|
41
|
-
return
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const overshootStart = isForward
|
|
45
|
-
? desiredStart.add({ months: durationMonths })
|
|
46
|
-
: desiredStart.subtract({ months: durationMonths })
|
|
47
|
-
|
|
48
|
-
flushSync(() => {
|
|
49
|
-
state.setFocusedDate(focusedDateForStart(overshootStart, isForward, durationMonths))
|
|
50
|
-
})
|
|
51
|
-
// Relative to the now-updated range, `desiredStart` sits exactly one `visibleDuration` back the
|
|
52
|
-
// way we came — always far enough for a single hop to land exactly.
|
|
53
|
-
state.setFocusedDate(focusedDateForStart(desiredStart, !isForward, durationMonths))
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// react-stately's forward-paging realignment anchors the new range to whatever month
|
|
57
|
-
// `focusedDate` itself falls in; its backward-paging one anchors it `visibleDuration - 1` months
|
|
58
|
-
// *before* `focusedDate`'s month instead — so landing on a specific desired start takes a
|
|
59
|
-
// different `focusedDate` depending on which of the two is going to fire.
|
|
60
|
-
const focusedDateForStart = (
|
|
61
|
-
desiredStart: CalendarDate,
|
|
62
|
-
isForward: boolean,
|
|
63
|
-
durationMonths: number
|
|
64
|
-
): CalendarDate => (isForward ? desiredStart : desiredStart.add({ months: durationMonths - 1 }))
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Spacing } from '../types'
|
|
2
|
-
|
|
3
|
-
// A spacing prop (`gap`/`rowGap`/`gutter`/...) is typed `Spacing | 0`, but `0` is meaningful
|
|
4
|
-
// (chassis-css's `gap-0` etc. exist) while `undefined`/`false`-ish values mean "not set" — a
|
|
5
|
-
// plain truthy check would drop `0`, so every caller needs this same `typeof` guard instead.
|
|
6
|
-
// Shared by `Flex`, `Stack`, `Row`, and `CardBody`'s own `layoutClassNames`/`_className` builders,
|
|
7
|
-
// which otherwise duplicated it once per spacing prop (`gap`, `rowGap`, `columnGap`, `gutter`,
|
|
8
|
-
// `gutterX`, `gutterY`, ...).
|
|
9
|
-
export const spacingClassName = (
|
|
10
|
-
base: string,
|
|
11
|
-
value: Spacing | 0 | undefined,
|
|
12
|
-
prefix = ''
|
|
13
|
-
): string | null =>
|
|
14
|
-
typeof value === 'string' || typeof value === 'number' ? `${prefix}${base}-${value}` : null
|