@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,199 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef, HTMLAttributes } from 'react'
|
|
2
|
-
import { Icon } from '../icon'
|
|
3
|
-
import classNames from 'classnames'
|
|
4
|
-
|
|
5
|
-
import { PaginationItem } from './PaginationItem'
|
|
6
|
-
import { usePagination } from '../../hooks'
|
|
7
|
-
|
|
8
|
-
export interface PaginationProps extends HTMLAttributes<HTMLElement> {
|
|
9
|
-
/**
|
|
10
|
-
* Current active page (1-indexed). Used with `pages` for data-driven mode.
|
|
11
|
-
*/
|
|
12
|
-
activePage?: number
|
|
13
|
-
/**
|
|
14
|
-
* Set the alignment of pagination components.
|
|
15
|
-
*/
|
|
16
|
-
align?: 'start' | 'center' | 'end'
|
|
17
|
-
/**
|
|
18
|
-
* Accessible label for the pagination `<nav>` landmark. Override for non-English locales,
|
|
19
|
-
* or when multiple paginators appear on the same page.
|
|
20
|
-
*
|
|
21
|
-
* @default 'Pagination'
|
|
22
|
-
*/
|
|
23
|
-
'aria-label'?: string
|
|
24
|
-
/**
|
|
25
|
-
* A string of all className you want applied to the base component.
|
|
26
|
-
*/
|
|
27
|
-
className?: string
|
|
28
|
-
/**
|
|
29
|
-
* Maximum number of visible page buttons (default: 5). Flanking pages are collapsed to ellipsis.
|
|
30
|
-
*/
|
|
31
|
-
maxVisiblePages?: number
|
|
32
|
-
/**
|
|
33
|
-
* Accessible label for the "next page" control, used in smart pagination mode. Override for
|
|
34
|
-
* non-English locales.
|
|
35
|
-
*
|
|
36
|
-
* @default 'Next'
|
|
37
|
-
*/
|
|
38
|
-
nextLabel?: string
|
|
39
|
-
/**
|
|
40
|
-
* Callback fired when the active page changes.
|
|
41
|
-
*/
|
|
42
|
-
onActivePageChange?: (page: number) => void
|
|
43
|
-
/**
|
|
44
|
-
* Total number of pages. When provided alongside `activePage` and `onActivePageChange`,
|
|
45
|
-
* the component renders a fully-controlled smart paginator with Prev/Next and ellipsis.
|
|
46
|
-
*/
|
|
47
|
-
pages?: number
|
|
48
|
-
/**
|
|
49
|
-
* Accessible label for the "previous page" control, used in smart pagination mode. Override
|
|
50
|
-
* for non-English locales.
|
|
51
|
-
*
|
|
52
|
-
* @default 'Previous'
|
|
53
|
-
*/
|
|
54
|
-
previousLabel?: string
|
|
55
|
-
/**
|
|
56
|
-
* Show the numbered page buttons in smart pagination mode. Set `false` alongside
|
|
57
|
-
* `showPrevNext` to build a Prev/Next-only paginator.
|
|
58
|
-
*
|
|
59
|
-
* @default true
|
|
60
|
-
*/
|
|
61
|
-
showPageNumbers?: boolean
|
|
62
|
-
/**
|
|
63
|
-
* Show the Prev/Next controls in smart pagination mode. Set `false` alongside
|
|
64
|
-
* `showPageNumbers` to build a page-numbers-only paginator.
|
|
65
|
-
*
|
|
66
|
-
* @default true
|
|
67
|
-
*/
|
|
68
|
-
showPrevNext?: boolean
|
|
69
|
-
/**
|
|
70
|
-
* Size the component sm or lg.
|
|
71
|
-
*/
|
|
72
|
-
size?: 'sm' | 'lg'
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function getPageRange(activePage: number, pages: number, maxVisible: number): (number | '...')[] {
|
|
76
|
-
const safeMaxVisible = Math.max(1, maxVisible)
|
|
77
|
-
|
|
78
|
-
if (pages <= safeMaxVisible) {
|
|
79
|
-
return Array.from({ length: pages }, (_, i) => i + 1)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const half = Math.floor(safeMaxVisible / 2)
|
|
83
|
-
let start = Math.max(1, activePage - half)
|
|
84
|
-
const end = Math.min(pages, start + safeMaxVisible - 1)
|
|
85
|
-
|
|
86
|
-
if (end - start < safeMaxVisible - 1) {
|
|
87
|
-
start = Math.max(1, end - safeMaxVisible + 1)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const result: (number | '...')[] = []
|
|
91
|
-
|
|
92
|
-
if (start > 1) {
|
|
93
|
-
result.push(1)
|
|
94
|
-
if (start > 2) result.push('...')
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
for (let i = start; i <= end; i++) {
|
|
98
|
-
result.push(i)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (end < pages) {
|
|
102
|
-
if (end < pages - 1) result.push('...')
|
|
103
|
-
result.push(pages)
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return result
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
110
|
-
(
|
|
111
|
-
{
|
|
112
|
-
activePage = 1,
|
|
113
|
-
align,
|
|
114
|
-
'aria-label': ariaLabel = 'Pagination',
|
|
115
|
-
children,
|
|
116
|
-
className,
|
|
117
|
-
maxVisiblePages = 5,
|
|
118
|
-
nextLabel = 'Next',
|
|
119
|
-
onActivePageChange,
|
|
120
|
-
pages,
|
|
121
|
-
previousLabel = 'Previous',
|
|
122
|
-
showPageNumbers = true,
|
|
123
|
-
showPrevNext = true,
|
|
124
|
-
size,
|
|
125
|
-
...rest
|
|
126
|
-
},
|
|
127
|
-
ref
|
|
128
|
-
) => {
|
|
129
|
-
const _className = classNames(
|
|
130
|
-
'pagination',
|
|
131
|
-
size,
|
|
132
|
-
{
|
|
133
|
-
[`justify-content-${align}`]: align
|
|
134
|
-
},
|
|
135
|
-
className
|
|
136
|
-
)
|
|
137
|
-
|
|
138
|
-
const clampedActivePage = pages ? Math.min(Math.max(activePage, 1), pages) : activePage
|
|
139
|
-
const prevDisabled = pages ? clampedActivePage <= 1 : false
|
|
140
|
-
const nextDisabled = pages ? clampedActivePage >= pages : false
|
|
141
|
-
|
|
142
|
-
const { prevRef, nextRef, handlePrevClick, handleNextClick } = usePagination({
|
|
143
|
-
prevDisabled,
|
|
144
|
-
nextDisabled,
|
|
145
|
-
onPrev: () => onActivePageChange && onActivePageChange(clampedActivePage - 1),
|
|
146
|
-
onNext: () => onActivePageChange && onActivePageChange(clampedActivePage + 1)
|
|
147
|
-
})
|
|
148
|
-
|
|
149
|
-
const smartContent = pages ? (
|
|
150
|
-
<>
|
|
151
|
-
{showPrevNext && (
|
|
152
|
-
<PaginationItem
|
|
153
|
-
ref={prevRef}
|
|
154
|
-
disabled={prevDisabled}
|
|
155
|
-
onClick={handlePrevClick}
|
|
156
|
-
aria-label={previousLabel}
|
|
157
|
-
>
|
|
158
|
-
<Icon name="chevron-left-solid" className="directional-icon" />
|
|
159
|
-
</PaginationItem>
|
|
160
|
-
)}
|
|
161
|
-
{showPageNumbers &&
|
|
162
|
-
getPageRange(clampedActivePage, pages, maxVisiblePages).map((page, idx) =>
|
|
163
|
-
page === '...' ? (
|
|
164
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
165
|
-
<PaginationItem key={`ellipsis-${idx}`} disabled component="span" aria-hidden="true">
|
|
166
|
-
…
|
|
167
|
-
</PaginationItem>
|
|
168
|
-
) : (
|
|
169
|
-
<PaginationItem
|
|
170
|
-
key={page}
|
|
171
|
-
active={page === clampedActivePage}
|
|
172
|
-
onClick={() => onActivePageChange && onActivePageChange(page)}
|
|
173
|
-
>
|
|
174
|
-
{page}
|
|
175
|
-
</PaginationItem>
|
|
176
|
-
)
|
|
177
|
-
)}
|
|
178
|
-
{showPrevNext && (
|
|
179
|
-
<PaginationItem
|
|
180
|
-
ref={nextRef}
|
|
181
|
-
disabled={nextDisabled}
|
|
182
|
-
onClick={handleNextClick}
|
|
183
|
-
aria-label={nextLabel}
|
|
184
|
-
>
|
|
185
|
-
<Icon name="chevron-right-solid" className="directional-icon" />
|
|
186
|
-
</PaginationItem>
|
|
187
|
-
)}
|
|
188
|
-
</>
|
|
189
|
-
) : null
|
|
190
|
-
|
|
191
|
-
return (
|
|
192
|
-
<nav aria-label={ariaLabel} ref={ref} {...rest}>
|
|
193
|
-
<ul className={_className}>{smartContent ?? children}</ul>
|
|
194
|
-
</nav>
|
|
195
|
-
)
|
|
196
|
-
}
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
Pagination.displayName = 'Pagination'
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
ElementType,
|
|
3
|
-
ForwardRefRenderFunction,
|
|
4
|
-
MouseEvent,
|
|
5
|
-
MouseEventHandler,
|
|
6
|
-
ReactElement,
|
|
7
|
-
Ref
|
|
8
|
-
} from 'react'
|
|
9
|
-
import classNames from 'classnames'
|
|
10
|
-
import { mergeProps } from 'react-aria'
|
|
11
|
-
|
|
12
|
-
import { useButtonSemantics } from '../../hooks'
|
|
13
|
-
import {
|
|
14
|
-
createPolymorphicComponent,
|
|
15
|
-
PolymorphicComponentProps,
|
|
16
|
-
PolymorphicRef,
|
|
17
|
-
PolymorphicRefWithFallback
|
|
18
|
-
} from '../../utils/polymorphic'
|
|
19
|
-
|
|
20
|
-
type PaginationItemOwnProps<C extends ElementType> = {
|
|
21
|
-
/**
|
|
22
|
-
* Toggle the active state for the component.
|
|
23
|
-
*/
|
|
24
|
-
active?: boolean
|
|
25
|
-
/**
|
|
26
|
-
* Component used for the root node. Either a string to use a HTML element or a component.
|
|
27
|
-
*/
|
|
28
|
-
component?: C
|
|
29
|
-
/**
|
|
30
|
-
* Toggle the disabled state for the component.
|
|
31
|
-
*/
|
|
32
|
-
disabled?: boolean
|
|
33
|
-
/**
|
|
34
|
-
* The href attribute. When provided the item renders as an `<a>` tag; otherwise as a `<button>`.
|
|
35
|
-
*/
|
|
36
|
-
href?: string
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export type PaginationItemProps<C extends ElementType = 'button'> = PolymorphicComponentProps<
|
|
40
|
-
C,
|
|
41
|
-
PaginationItemOwnProps<C>
|
|
42
|
-
>
|
|
43
|
-
|
|
44
|
-
type PaginationItemComponent = (<C extends ElementType = 'button'>(
|
|
45
|
-
props: PaginationItemProps<C> & {
|
|
46
|
-
ref?: PolymorphicRefWithFallback<C, HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement>
|
|
47
|
-
}
|
|
48
|
-
) => ReactElement | null) & { displayName?: string }
|
|
49
|
-
|
|
50
|
-
function PaginationItemRender<C extends ElementType = 'button'>(
|
|
51
|
-
{
|
|
52
|
-
active,
|
|
53
|
-
children,
|
|
54
|
-
className,
|
|
55
|
-
component,
|
|
56
|
-
disabled,
|
|
57
|
-
href,
|
|
58
|
-
onClick,
|
|
59
|
-
...rest
|
|
60
|
-
}: PaginationItemProps<C>,
|
|
61
|
-
ref: PolymorphicRef<C>
|
|
62
|
-
) {
|
|
63
|
-
const _className = classNames(
|
|
64
|
-
'pagination-item',
|
|
65
|
-
{
|
|
66
|
-
active,
|
|
67
|
-
disabled
|
|
68
|
-
},
|
|
69
|
-
className
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
// The active page keeps whatever element it would render anyway (`<button>`, or `<a>` when
|
|
73
|
-
// given `href`) rather than collapsing to a `<span>`. Swapping the tag on activation made React
|
|
74
|
-
// unmount the focused control and mount a different element in its place, so a keyboard user who
|
|
75
|
-
// activated a page was dropped to `<body>` and had to tab in from the top of the document again
|
|
76
|
-
// (WCAG 2.4.3). The `<span>` wasn't even inert: `Pagination`'s smart mode passes an `onClick`,
|
|
77
|
-
// so `useButtonSemantics` gave it `role="button"` and `tabIndex={0}` — a synthetic button,
|
|
78
|
-
// strictly worse than the real one it replaced. Styling is unaffected either way: chassis-css
|
|
79
|
-
// matches `.pagination-link { &.active, .active > & }`, and `active` still lands on the `<li>`.
|
|
80
|
-
const Component = (component ?? (href ? 'a' : 'button')) as ElementType
|
|
81
|
-
|
|
82
|
-
// `<a>` has no real `disabled` attribute, so a disabled anchor pagination item still fires
|
|
83
|
-
// click (and still navigates) unless it's blocked here, same guard `Button` applies.
|
|
84
|
-
const handleClick = (event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {
|
|
85
|
-
if (Component === 'a' && disabled) {
|
|
86
|
-
event.preventDefault()
|
|
87
|
-
return
|
|
88
|
-
}
|
|
89
|
-
onClick?.(event as never)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// A custom `component`/default (non-`button`/`a`) branch gets a raw `onClick` with no keyboard
|
|
93
|
-
// semantics otherwise — the same gap `Link` fills via `useButtonSemantics`.
|
|
94
|
-
const needsButtonSemantics = Component !== 'button' && Component !== 'a' && !!onClick
|
|
95
|
-
const { buttonProps, forkedRef } = useButtonSemantics<HTMLElement>(ref as Ref<HTMLElement>, {
|
|
96
|
-
disabled,
|
|
97
|
-
onClick: onClick as MouseEventHandler<HTMLElement> | undefined
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
// `aria-current="page"` goes on the control itself, not the wrapping `<li>` — that's where the
|
|
101
|
-
// WAI-ARIA pagination pattern puts it, and it's what a screen reader conveys when focus lands on
|
|
102
|
-
// the control. On the `<li>` it was attached to a presentational list item nothing focuses.
|
|
103
|
-
const currentProps = active ? { 'aria-current': 'page' as const } : {}
|
|
104
|
-
|
|
105
|
-
return (
|
|
106
|
-
<li className={_className}>
|
|
107
|
-
{Component === 'button' ? (
|
|
108
|
-
<button
|
|
109
|
-
{...(rest as Record<string, unknown>)}
|
|
110
|
-
className="pagination-link"
|
|
111
|
-
type="button"
|
|
112
|
-
disabled={disabled}
|
|
113
|
-
onClick={handleClick}
|
|
114
|
-
{...currentProps}
|
|
115
|
-
ref={ref as Ref<HTMLButtonElement>}
|
|
116
|
-
>
|
|
117
|
-
{children}
|
|
118
|
-
</button>
|
|
119
|
-
) : Component === 'a' ? (
|
|
120
|
-
<a
|
|
121
|
-
{...(rest as Record<string, unknown>)}
|
|
122
|
-
className="pagination-link"
|
|
123
|
-
href={href}
|
|
124
|
-
onClick={handleClick}
|
|
125
|
-
{...(disabled && { 'aria-disabled': true, tabIndex: -1 })}
|
|
126
|
-
{...currentProps}
|
|
127
|
-
ref={ref as Ref<HTMLAnchorElement>}
|
|
128
|
-
>
|
|
129
|
-
{children}
|
|
130
|
-
</a>
|
|
131
|
-
) : (
|
|
132
|
-
<Component
|
|
133
|
-
className="pagination-link"
|
|
134
|
-
{...(mergeProps(rest, needsButtonSemantics ? buttonProps : {}) as Record<
|
|
135
|
-
string,
|
|
136
|
-
unknown
|
|
137
|
-
>)}
|
|
138
|
-
{...(!needsButtonSemantics && { onClick: handleClick })}
|
|
139
|
-
{...currentProps}
|
|
140
|
-
ref={needsButtonSemantics ? forkedRef : ref}
|
|
141
|
-
>
|
|
142
|
-
{children}
|
|
143
|
-
</Component>
|
|
144
|
-
)}
|
|
145
|
-
</li>
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export const PaginationItem = createPolymorphicComponent<PaginationItemComponent>(
|
|
150
|
-
PaginationItemRender as ForwardRefRenderFunction<Element, PaginationItemProps<ElementType>>,
|
|
151
|
-
'PaginationItem'
|
|
152
|
-
)
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import React, { Fragment, HTMLAttributes, useEffect, useMemo, useRef } from 'react'
|
|
2
|
-
import classNames from 'classnames'
|
|
3
|
-
import { useMeter } from 'react-aria'
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
calculateScore,
|
|
7
|
-
defaultMessages,
|
|
8
|
-
defaultThresholds,
|
|
9
|
-
defaultWeights,
|
|
10
|
-
scoreToStrength,
|
|
11
|
-
STRENGTH_LEVELS,
|
|
12
|
-
StrengthLevel,
|
|
13
|
-
StrengthWeights
|
|
14
|
-
} from './strengthScore'
|
|
15
|
-
|
|
16
|
-
export interface PasswordStrengthProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
17
|
-
/**
|
|
18
|
-
* An accessible label for the meter. Defaults to `"Password strength"`.
|
|
19
|
-
*/
|
|
20
|
-
'aria-label'?: string
|
|
21
|
-
/**
|
|
22
|
-
* A string of all className you want applied to the base component.
|
|
23
|
-
*/
|
|
24
|
-
className?: string
|
|
25
|
-
/**
|
|
26
|
-
* `id` forwarded to the meter element.
|
|
27
|
-
*/
|
|
28
|
-
id?: string
|
|
29
|
-
/**
|
|
30
|
-
* The maximum possible score, used to compute the meter's `aria-valuemax`. Defaults to the sum
|
|
31
|
-
* of `weights`' values — set this explicitly when pairing a custom `scorer` whose scale doesn't
|
|
32
|
-
* match the built-in criteria weights, otherwise `aria-valuenow`/`aria-valuemax` get silently
|
|
33
|
-
* clamped to the built-in max.
|
|
34
|
-
*/
|
|
35
|
-
maxScore?: number
|
|
36
|
-
/**
|
|
37
|
-
* Minimum password length required to earn the first strength point. Defaults to `8`.
|
|
38
|
-
*/
|
|
39
|
-
minLength?: number
|
|
40
|
-
/**
|
|
41
|
-
* Feedback message shown for each strength level, when `showText` is `true`.
|
|
42
|
-
*/
|
|
43
|
-
messages?: Partial<Record<StrengthLevel, string>>
|
|
44
|
-
/**
|
|
45
|
-
* Callback fired whenever the strength level changes, including once on mount with the
|
|
46
|
-
* initial `value`'s strength.
|
|
47
|
-
*/
|
|
48
|
-
onStrengthChange?: (result: { score: number; strength: StrengthLevel | null }) => void
|
|
49
|
-
/**
|
|
50
|
-
* Custom scoring function overriding the built-in criteria. Receives the password and returns
|
|
51
|
-
* a numeric score.
|
|
52
|
-
*/
|
|
53
|
-
scorer?: (password: string) => number
|
|
54
|
-
/**
|
|
55
|
-
* Renders a `.strength-text` element below the meter with the current level's message.
|
|
56
|
-
* Defaults to `true`.
|
|
57
|
-
*/
|
|
58
|
-
showText?: boolean
|
|
59
|
-
/**
|
|
60
|
-
* Score boundaries `[weak, fair, good]` — scores above the last value are `"strong"`. Defaults
|
|
61
|
-
* to `[2, 4, 6]`.
|
|
62
|
-
*/
|
|
63
|
-
thresholds?: [number, number, number]
|
|
64
|
-
/**
|
|
65
|
-
* The current password value to evaluate.
|
|
66
|
-
*/
|
|
67
|
-
value: string
|
|
68
|
-
/**
|
|
69
|
-
* Render as four discrete segments, or a single growing bar. Defaults to `"segmented"`.
|
|
70
|
-
*/
|
|
71
|
-
variant?: 'bar' | 'segmented'
|
|
72
|
-
/**
|
|
73
|
-
* Point values for each scoring criterion. Set a criterion to `0` to disable it. Merged with
|
|
74
|
-
* the built-in defaults.
|
|
75
|
-
*/
|
|
76
|
-
weights?: Partial<StrengthWeights>
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export const PasswordStrength = ({
|
|
80
|
-
'aria-label': ariaLabel = 'Password strength',
|
|
81
|
-
className,
|
|
82
|
-
id,
|
|
83
|
-
maxScore,
|
|
84
|
-
messages,
|
|
85
|
-
minLength = 8,
|
|
86
|
-
onStrengthChange,
|
|
87
|
-
scorer,
|
|
88
|
-
showText = true,
|
|
89
|
-
thresholds = defaultThresholds,
|
|
90
|
-
value,
|
|
91
|
-
variant = 'segmented',
|
|
92
|
-
weights,
|
|
93
|
-
...rest
|
|
94
|
-
}: PasswordStrengthProps) => {
|
|
95
|
-
const mergedWeights = useMemo(() => ({ ...defaultWeights, ...weights }), [weights])
|
|
96
|
-
const mergedMessages = useMemo(() => ({ ...defaultMessages, ...messages }), [messages])
|
|
97
|
-
|
|
98
|
-
const score = useMemo(
|
|
99
|
-
() => calculateScore(value, { minLength, scorer, weights: mergedWeights }),
|
|
100
|
-
[value, minLength, scorer, mergedWeights]
|
|
101
|
-
)
|
|
102
|
-
const strength = useMemo(() => scoreToStrength(score, thresholds), [score, thresholds])
|
|
103
|
-
const resolvedMaxScore = useMemo(
|
|
104
|
-
() => maxScore ?? Object.values(mergedWeights).reduce((total, weight) => total + weight, 0),
|
|
105
|
-
[maxScore, mergedWeights]
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
// Deliberately not initialized to `strength` — that would make the effect below skip firing
|
|
109
|
-
// for the mount-time value, and a consumer using this to gate e.g. a submit button needs the
|
|
110
|
-
// real initial state, not just subsequent changes.
|
|
111
|
-
const previousStrength = useRef<StrengthLevel | null | undefined>(undefined)
|
|
112
|
-
useEffect(() => {
|
|
113
|
-
if (previousStrength.current !== strength) {
|
|
114
|
-
previousStrength.current = strength
|
|
115
|
-
onStrengthChange?.({ score, strength })
|
|
116
|
-
}
|
|
117
|
-
}, [strength, score, onStrengthChange])
|
|
118
|
-
|
|
119
|
-
const { meterProps } = useMeter({
|
|
120
|
-
'aria-label': ariaLabel,
|
|
121
|
-
maxValue: resolvedMaxScore,
|
|
122
|
-
minValue: 0,
|
|
123
|
-
value: score,
|
|
124
|
-
valueLabel: strength ? mergedMessages[strength] : undefined
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
const strengthIndex = strength ? STRENGTH_LEVELS.indexOf(strength) : -1
|
|
128
|
-
|
|
129
|
-
return (
|
|
130
|
-
<Fragment>
|
|
131
|
-
<div
|
|
132
|
-
{...meterProps}
|
|
133
|
-
className={classNames(variant === 'bar' ? 'strength-bar' : 'strength', className)}
|
|
134
|
-
data-cx-strength={strength ?? undefined}
|
|
135
|
-
id={id}
|
|
136
|
-
{...rest}
|
|
137
|
-
>
|
|
138
|
-
{variant === 'segmented' &&
|
|
139
|
-
STRENGTH_LEVELS.map((level, index) => (
|
|
140
|
-
<div
|
|
141
|
-
className={classNames('strength-segment', { active: index <= strengthIndex })}
|
|
142
|
-
key={level}
|
|
143
|
-
/>
|
|
144
|
-
))}
|
|
145
|
-
</div>
|
|
146
|
-
{showText && (
|
|
147
|
-
<span aria-live="polite" className="strength-text" data-cx-strength={strength ?? undefined}>
|
|
148
|
-
{strength ? mergedMessages[strength] : ''}
|
|
149
|
-
</span>
|
|
150
|
-
)}
|
|
151
|
-
</Fragment>
|
|
152
|
-
)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
PasswordStrength.displayName = 'PasswordStrength'
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
export type StrengthLevel = 'weak' | 'fair' | 'good' | 'strong'
|
|
2
|
-
|
|
3
|
-
export const STRENGTH_LEVELS: StrengthLevel[] = ['weak', 'fair', 'good', 'strong']
|
|
4
|
-
|
|
5
|
-
export interface StrengthWeights {
|
|
6
|
-
extraLength: number
|
|
7
|
-
lowercase: number
|
|
8
|
-
longPassword: number
|
|
9
|
-
minLength: number
|
|
10
|
-
multipleSpecial: number
|
|
11
|
-
numbers: number
|
|
12
|
-
special: number
|
|
13
|
-
uppercase: number
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const defaultWeights: StrengthWeights = {
|
|
17
|
-
extraLength: 1,
|
|
18
|
-
lowercase: 1,
|
|
19
|
-
longPassword: 1,
|
|
20
|
-
minLength: 1,
|
|
21
|
-
multipleSpecial: 1,
|
|
22
|
-
numbers: 1,
|
|
23
|
-
special: 1,
|
|
24
|
-
uppercase: 1
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export const defaultMessages: Record<StrengthLevel, string> = {
|
|
28
|
-
fair: 'Fair',
|
|
29
|
-
good: 'Good',
|
|
30
|
-
strong: 'Strong',
|
|
31
|
-
weak: 'Weak'
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export const defaultThresholds: [number, number, number] = [2, 4, 6]
|
|
35
|
-
|
|
36
|
-
const SPECIAL_CHARS = /[!"#$%&()*,.:<>?@^{|}]/
|
|
37
|
-
const MULTIPLE_SPECIAL_CHARS = /[!"#$%&()*,.:<>?@^{|}].*[!"#$%&()*,.:<>?@^{|}]/
|
|
38
|
-
|
|
39
|
-
interface CalculateScoreOptions {
|
|
40
|
-
minLength: number
|
|
41
|
-
scorer?: (password: string) => number
|
|
42
|
-
weights: StrengthWeights
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Ported from chassis-css's vanilla strength.js `_calculateScore` — kept in lockstep with it so
|
|
46
|
-
// a password scores identically whether evaluated by the vanilla JS or this component.
|
|
47
|
-
export const calculateScore = (
|
|
48
|
-
password: string,
|
|
49
|
-
{ minLength, scorer, weights }: CalculateScoreOptions
|
|
50
|
-
): number => {
|
|
51
|
-
if (!password) return 0
|
|
52
|
-
if (scorer) return scorer(password)
|
|
53
|
-
|
|
54
|
-
let score = 0
|
|
55
|
-
|
|
56
|
-
if (password.length >= minLength) score += weights.minLength
|
|
57
|
-
if (password.length >= minLength + 4) score += weights.extraLength
|
|
58
|
-
if (/[a-z]/.test(password)) score += weights.lowercase
|
|
59
|
-
if (/[A-Z]/.test(password)) score += weights.uppercase
|
|
60
|
-
if (/\d/.test(password)) score += weights.numbers
|
|
61
|
-
if (SPECIAL_CHARS.test(password)) score += weights.special
|
|
62
|
-
if (MULTIPLE_SPECIAL_CHARS.test(password)) score += weights.multipleSpecial
|
|
63
|
-
if (password.length >= 16) score += weights.longPassword
|
|
64
|
-
|
|
65
|
-
return score
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const scoreToStrength = (
|
|
69
|
-
score: number,
|
|
70
|
-
thresholds: [number, number, number]
|
|
71
|
-
): StrengthLevel | null => {
|
|
72
|
-
if (score === 0) return null
|
|
73
|
-
|
|
74
|
-
const [weak, fair, good] = thresholds
|
|
75
|
-
if (score <= weak) return 'weak'
|
|
76
|
-
if (score <= fair) return 'fair'
|
|
77
|
-
if (score <= good) return 'good'
|
|
78
|
-
return 'strong'
|
|
79
|
-
}
|