@fpkit/acss 0.5.12 → 0.6.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/README.md +89 -0
- package/libs/chunk-2NRIP6RB.cjs +17 -0
- package/libs/chunk-2NRIP6RB.cjs.map +1 -0
- package/libs/chunk-33PNJ4LO.cjs +15 -0
- package/libs/chunk-33PNJ4LO.cjs.map +1 -0
- package/libs/chunk-4BZKFPEC.cjs +17 -0
- package/libs/chunk-4BZKFPEC.cjs.map +1 -0
- package/libs/{chunk-O6QZBB6G.js → chunk-5QD3DWFI.js} +5 -5
- package/libs/chunk-5QD3DWFI.js.map +1 -0
- package/libs/chunk-6SAHIYCZ.js +7 -0
- package/libs/chunk-6SAHIYCZ.js.map +1 -0
- package/libs/{chunk-KKLTUJFB.cjs → chunk-6WTC4JXH.cjs} +5 -5
- package/libs/chunk-6WTC4JXH.cjs.map +1 -0
- package/libs/chunk-75QHTLFO.js +7 -0
- package/libs/chunk-75QHTLFO.js.map +1 -0
- package/libs/{chunk-YWOYVRFT.js → chunk-7XPFW7CB.js} +3 -3
- package/libs/chunk-BFK62VX5.js +5 -0
- package/libs/chunk-BFK62VX5.js.map +1 -0
- package/libs/{chunk-ICCKQ2GC.cjs → chunk-DKTHCQ5P.cjs} +4 -4
- package/libs/{chunk-6TE5QEVE.cjs → chunk-E2AJURUW.cjs} +3 -3
- package/libs/chunk-E2AJURUW.cjs.map +1 -0
- package/libs/chunk-ENTCUJ3A.cjs +13 -0
- package/libs/chunk-ENTCUJ3A.cjs.map +1 -0
- package/libs/chunk-F5EYMVQM.js +10 -0
- package/libs/chunk-F5EYMVQM.js.map +1 -0
- package/libs/chunk-FVROL3V5.js +9 -0
- package/libs/chunk-FVROL3V5.js.map +1 -0
- package/libs/chunk-GT77BX4L.cjs +17 -0
- package/libs/chunk-GT77BX4L.cjs.map +1 -0
- package/libs/chunk-GUJSMQ3V.cjs +16 -0
- package/libs/chunk-GUJSMQ3V.cjs.map +1 -0
- package/libs/chunk-HHLNOC5T.js +7 -0
- package/libs/chunk-HHLNOC5T.js.map +1 -0
- package/libs/chunk-HRRHPLER.js +8 -0
- package/libs/chunk-HRRHPLER.js.map +1 -0
- package/libs/chunk-IEB64SWY.js +8 -0
- package/libs/chunk-IEB64SWY.js.map +1 -0
- package/libs/{chunk-LIQJ7ZZR.js → chunk-IQ76HGVP.js} +2 -2
- package/libs/chunk-IRLFZ3OL.js +9 -0
- package/libs/chunk-IRLFZ3OL.js.map +1 -0
- package/libs/chunk-KK47SYZI.js +8 -0
- package/libs/chunk-KK47SYZI.js.map +1 -0
- package/libs/chunk-O3JIHC5M.cjs +15 -0
- package/libs/chunk-O3JIHC5M.cjs.map +1 -0
- package/libs/chunk-O5XAJ7BY.cjs +18 -0
- package/libs/chunk-O5XAJ7BY.cjs.map +1 -0
- package/libs/chunk-OVWLQYMK.js +10 -0
- package/libs/chunk-OVWLQYMK.js.map +1 -0
- package/libs/chunk-PNWIRCG3.cjs +7 -0
- package/libs/chunk-PNWIRCG3.cjs.map +1 -0
- package/libs/chunk-QVW6W76L.cjs +18 -0
- package/libs/chunk-QVW6W76L.cjs.map +1 -0
- package/libs/chunk-T4T6GWYQ.cjs +17 -0
- package/libs/chunk-T4T6GWYQ.cjs.map +1 -0
- package/libs/chunk-TON2YGMD.cjs +9 -0
- package/libs/chunk-TON2YGMD.cjs.map +1 -0
- package/libs/chunk-UEPAWMDF.js +8 -0
- package/libs/chunk-UEPAWMDF.js.map +1 -0
- package/libs/{chunk-LT5KZ2QW.cjs → chunk-US2I5GI7.cjs} +3 -3
- package/libs/{chunk-E3XP6BEX.cjs → chunk-W2UIN7EV.cjs} +3 -3
- package/libs/chunk-W5TKWBFC.cjs +18 -0
- package/libs/chunk-W5TKWBFC.cjs.map +1 -0
- package/libs/chunk-WXBFBWYF.cjs +16 -0
- package/libs/chunk-WXBFBWYF.cjs.map +1 -0
- package/libs/chunk-X3JCTEPD.js +11 -0
- package/libs/chunk-X3JCTEPD.js.map +1 -0
- package/libs/chunk-X5LGFCWG.js +9 -0
- package/libs/chunk-X5LGFCWG.js.map +1 -0
- package/libs/{chunk-5M57K4SW.js → chunk-Y2PFDELK.js} +2 -2
- package/libs/chunk-ZFJ4U45S.js +10 -0
- package/libs/chunk-ZFJ4U45S.js.map +1 -0
- package/libs/{component-props-a8a2f97e.d.ts → component-props-67d978a2.d.ts} +4 -4
- package/libs/components/alert/alert.css +1 -1
- package/libs/components/alert/alert.css.map +1 -1
- package/libs/components/alert/alert.min.css +2 -2
- package/libs/components/badge/badge.css +1 -1
- package/libs/components/badge/badge.css.map +1 -1
- package/libs/components/badge/badge.min.css +2 -2
- package/libs/components/breadcrumbs/breadcrumb.cjs +9 -5
- package/libs/components/breadcrumbs/breadcrumb.d.cts +275 -36
- package/libs/components/breadcrumbs/breadcrumb.d.ts +275 -36
- package/libs/components/breadcrumbs/breadcrumb.js +3 -3
- package/libs/components/button.cjs +6 -4
- package/libs/components/button.d.cts +97 -4
- package/libs/components/button.d.ts +97 -4
- package/libs/components/button.js +4 -2
- package/libs/components/buttons/button.css +1 -1
- package/libs/components/buttons/button.css.map +1 -1
- package/libs/components/buttons/button.min.css +2 -2
- package/libs/components/card.cjs +7 -7
- package/libs/components/card.d.cts +278 -34
- package/libs/components/card.d.ts +278 -34
- package/libs/components/card.js +2 -2
- package/libs/components/cards/card.css +1 -1
- package/libs/components/cards/card.css.map +1 -1
- package/libs/components/cards/card.min.css +2 -2
- package/libs/components/details/details.css +1 -1
- package/libs/components/details/details.css.map +1 -1
- package/libs/components/details/details.min.css +2 -2
- package/libs/components/dialog/dialog.cjs +9 -7
- package/libs/components/dialog/dialog.css +1 -1
- package/libs/components/dialog/dialog.css.map +1 -1
- package/libs/components/dialog/dialog.d.cts +88 -34
- package/libs/components/dialog/dialog.d.ts +88 -34
- package/libs/components/dialog/dialog.js +7 -5
- package/libs/components/dialog/dialog.min.css +2 -2
- package/libs/components/form/fields.cjs +4 -4
- package/libs/components/form/fields.d.cts +16 -7
- package/libs/components/form/fields.d.ts +16 -7
- package/libs/components/form/fields.js +2 -2
- package/libs/components/form/inputs.cjs +6 -4
- package/libs/components/form/inputs.d.cts +50 -2
- package/libs/components/form/inputs.d.ts +50 -2
- package/libs/components/form/inputs.js +4 -2
- package/libs/components/form/textarea.cjs +5 -4
- package/libs/components/form/textarea.d.cts +32 -23
- package/libs/components/form/textarea.d.ts +32 -23
- package/libs/components/form/textarea.js +3 -2
- package/libs/components/heading/heading.cjs +3 -3
- package/libs/components/heading/heading.d.cts +3 -14
- package/libs/components/heading/heading.d.ts +3 -14
- package/libs/components/heading/heading.js +2 -2
- package/libs/components/icons/icon.cjs +4 -4
- package/libs/components/icons/icon.d.cts +183 -39
- package/libs/components/icons/icon.d.ts +183 -39
- package/libs/components/icons/icon.js +2 -2
- package/libs/components/images/img.css +1 -1
- package/libs/components/images/img.css.map +1 -1
- package/libs/components/images/img.min.css +2 -2
- package/libs/components/link/link.cjs +4 -4
- package/libs/components/link/link.css +1 -1
- package/libs/components/link/link.css.map +1 -1
- package/libs/components/link/link.d.cts +3 -19
- package/libs/components/link/link.d.ts +3 -19
- package/libs/components/link/link.js +2 -2
- package/libs/components/link/link.min.css +2 -2
- package/libs/components/list/list.cjs +5 -5
- package/libs/components/list/list.css +1 -0
- package/libs/components/list/list.css.map +1 -0
- package/libs/components/list/list.d.cts +120 -33
- package/libs/components/list/list.d.ts +120 -33
- package/libs/components/list/list.js +2 -2
- package/libs/components/list/list.min.css +3 -0
- package/libs/components/modal.cjs +6 -4
- package/libs/components/modal.d.cts +8 -8
- package/libs/components/modal.d.ts +8 -8
- package/libs/components/modal.js +5 -3
- package/libs/components/nav/nav.cjs +7 -7
- package/libs/components/nav/nav.css +1 -1
- package/libs/components/nav/nav.css.map +1 -1
- package/libs/components/nav/nav.d.cts +550 -34
- package/libs/components/nav/nav.d.ts +550 -34
- package/libs/components/nav/nav.js +3 -3
- package/libs/components/nav/nav.min.css +2 -2
- package/libs/components/popover/popover.d.cts +5 -5
- package/libs/components/popover/popover.d.ts +5 -5
- package/libs/components/tables/table.cjs +5 -5
- package/libs/components/tables/table.d.cts +8 -8
- package/libs/components/tables/table.d.ts +8 -8
- package/libs/components/tables/table.js +2 -2
- package/libs/components/tag/tag.css +1 -1
- package/libs/components/tag/tag.css.map +1 -1
- package/libs/components/tag/tag.min.css +2 -2
- package/libs/components/text/text.cjs +5 -5
- package/libs/components/text/text.d.cts +5 -5
- package/libs/components/text/text.d.ts +5 -5
- package/libs/components/text/text.js +2 -2
- package/libs/form.types-d25ebfac.d.ts +233 -0
- package/libs/heading-7446cb46.d.ts +250 -0
- package/libs/hooks.cjs +12 -0
- package/libs/hooks.d.cts +140 -1
- package/libs/hooks.d.ts +140 -1
- package/libs/hooks.js +4 -0
- package/libs/icons.cjs +3 -3
- package/libs/icons.d.cts +2 -2
- package/libs/icons.d.ts +2 -2
- package/libs/icons.js +2 -2
- package/libs/index.cjs +117 -94
- package/libs/index.cjs.map +1 -1
- package/libs/index.css +1 -1
- package/libs/index.css.map +1 -1
- package/libs/index.d.cts +834 -61
- package/libs/index.d.ts +834 -61
- package/libs/index.js +36 -22
- package/libs/index.js.map +1 -1
- package/libs/link-5192f411.d.ts +323 -0
- package/libs/list.types-d26de310.d.ts +245 -0
- package/libs/ui-d01b50d4.d.ts +289 -0
- package/package.json +4 -87
- package/src/components/README-UI.mdx +416 -0
- package/src/components/alert/ACCESSIBILITY.md +319 -0
- package/src/components/alert/README.mdx +475 -19
- package/src/components/alert/alert.scss +110 -6
- package/src/components/alert/alert.stories.tsx +372 -0
- package/src/components/alert/alert.test.tsx +762 -0
- package/src/components/alert/alert.tsx +331 -66
- package/src/components/alert/views/alert-actions.tsx +13 -0
- package/src/components/alert/views/alert-content.tsx +17 -0
- package/src/components/alert/views/alert-icon.tsx +53 -0
- package/src/components/alert/views/alert-screen-reader-text.tsx +30 -0
- package/src/components/alert/views/alert-title.tsx +23 -0
- package/src/components/alert/views/alert-view.tsx +158 -0
- package/src/components/alert/views/index.ts +12 -0
- package/src/components/badge/badge.mdx +186 -49
- package/src/components/badge/badge.scss +20 -2
- package/src/components/badge/badge.stories.tsx +160 -14
- package/src/components/badge/badge.test.tsx +179 -0
- package/src/components/badge/badge.tsx +97 -4
- package/src/components/breadcrumbs/README.mdx +364 -45
- package/src/components/breadcrumbs/__snapshots__/breadcrumb.test.tsx.snap +152 -0
- package/src/components/breadcrumbs/breadcrumb.stories.tsx +7 -3
- package/src/components/breadcrumbs/breadcrumb.test.tsx +490 -0
- package/src/components/breadcrumbs/breadcrumb.tsx +430 -170
- package/src/components/buttons/README.mdx +102 -1
- package/src/components/buttons/button.scss +34 -31
- package/src/components/buttons/button.stories.tsx +141 -0
- package/src/components/buttons/button.tsx +82 -52
- package/src/components/cards/README.mdx +657 -0
- package/src/components/cards/card.scss +22 -0
- package/src/components/cards/card.stories.tsx +167 -5
- package/src/components/cards/card.test.tsx +360 -20
- package/src/components/cards/card.tsx +200 -79
- package/src/components/cards/card.types.ts +135 -0
- package/src/components/cards/card.utils.ts +79 -0
- package/src/components/details/ACCESSIBILITY-REVIEW-LIVE.md +1050 -0
- package/src/components/details/ACCESSIBILITY-REVIEW.md +502 -0
- package/src/components/details/README.mdx +437 -69
- package/src/components/details/details.scss +16 -7
- package/src/components/details/details.test.tsx +385 -0
- package/src/components/details/details.tsx +101 -69
- package/src/components/details/details.types.ts +76 -0
- package/src/components/dialog/README.mdx +513 -110
- package/src/components/dialog/dialog-a11y-review.md +653 -0
- package/src/components/dialog/dialog-modal.tsx +79 -56
- package/src/components/dialog/dialog.scss +53 -3
- package/src/components/dialog/dialog.stories.tsx +10 -7
- package/src/components/dialog/dialog.test.tsx +450 -0
- package/src/components/dialog/dialog.tsx +69 -59
- package/src/components/dialog/dialog.types.ts +133 -0
- package/src/components/dialog/views/dialog-footer.tsx +54 -11
- package/src/components/dialog/views/dialog-header.tsx +20 -15
- package/src/components/form/README.mdx +725 -43
- package/src/components/form/WCAG-REVIEW.md +654 -0
- package/src/components/form/fields.tsx +10 -1
- package/src/components/form/form.stories.tsx +604 -23
- package/src/components/form/form.tsx +204 -63
- package/src/components/form/form.types.ts +378 -0
- package/src/components/form/input.stories.tsx +71 -3
- package/src/components/form/inputs.tsx +159 -67
- package/src/components/form/select.tsx +122 -66
- package/src/components/form/textarea.tsx +120 -73
- package/src/components/fp.tsx +86 -11
- package/src/components/heading/heading.stories.tsx +44 -4
- package/src/components/heading/heading.tsx +89 -23
- package/src/components/icons/README.mdx +332 -0
- package/src/components/icons/icon.stories.tsx +74 -1
- package/src/components/icons/icon.tsx +89 -1
- package/src/components/icons/types.ts +47 -0
- package/src/components/images/README.mdx +340 -24
- package/src/components/images/img.scss +19 -3
- package/src/components/images/img.stories.tsx +424 -15
- package/src/components/images/img.test.tsx +354 -25
- package/src/components/images/img.tsx +186 -63
- package/src/components/images/img.types.ts +211 -0
- package/src/components/link/README.mdx +923 -0
- package/src/components/link/link.scss +79 -26
- package/src/components/link/link.stories.tsx +383 -30
- package/src/components/link/link.test.tsx +677 -0
- package/src/components/link/link.tsx +163 -57
- package/src/components/link/link.types.ts +261 -0
- package/src/components/list/README.mdx +764 -0
- package/src/components/list/list.scss +285 -0
- package/src/components/list/list.stories.tsx +514 -27
- package/src/components/list/list.test.tsx +554 -0
- package/src/components/list/list.tsx +153 -51
- package/src/components/list/list.types.ts +255 -0
- package/src/components/nav/ACCESSIBILITY.md +649 -0
- package/src/components/nav/README.mdx +782 -0
- package/src/components/nav/nav.scss +32 -1
- package/src/components/nav/nav.stories.tsx +44 -6
- package/src/components/nav/nav.tsx +302 -51
- package/src/components/nav/nav.types.ts +308 -0
- package/src/components/tag/README.mdx +426 -0
- package/src/components/tag/tag.scss +101 -27
- package/src/components/tag/tag.stories.tsx +384 -10
- package/src/components/tag/tag.test.tsx +210 -0
- package/src/components/tag/tag.tsx +106 -9
- package/src/components/tag/tag.types.ts +107 -0
- package/src/components/title/MIGRATION.md +199 -0
- package/src/components/title/README.md +326 -0
- package/src/components/title/README.mdx +452 -0
- package/src/components/title/title.stories.tsx +393 -0
- package/src/components/title/title.test.tsx +251 -0
- package/src/components/title/title.tsx +219 -0
- package/src/components/ui.stories.tsx +894 -0
- package/src/components/ui.test.tsx +559 -0
- package/src/components/ui.tsx +274 -18
- package/src/components/word-count/README.md +240 -0
- package/src/hooks/use-disabled-state.test.tsx +536 -0
- package/src/hooks/use-disabled-state.ts +246 -0
- package/src/hooks/useDisabledState.md +393 -0
- package/src/hooks.ts +7 -0
- package/src/index.scss +2 -0
- package/src/index.ts +12 -3
- package/src/sass/_globals.scss +2 -7
- package/src/sass/_properties.scss +1 -0
- package/src/styles/alert/alert.css +92 -4
- package/src/styles/alert/alert.css.map +1 -1
- package/src/styles/badge/badge.css +20 -2
- package/src/styles/badge/badge.css.map +1 -1
- package/src/styles/buttons/button.css +31 -31
- package/src/styles/buttons/button.css.map +1 -1
- package/src/styles/cards/card.css +16 -0
- package/src/styles/cards/card.css.map +1 -1
- package/src/styles/details/details.css +19 -8
- package/src/styles/details/details.css.map +1 -1
- package/src/styles/dialog/dialog.css +43 -2
- package/src/styles/dialog/dialog.css.map +1 -1
- package/src/styles/images/img.css +15 -3
- package/src/styles/images/img.css.map +1 -1
- package/src/styles/index.css +691 -128
- package/src/styles/index.css.map +1 -1
- package/src/styles/link/link.css +45 -28
- package/src/styles/link/link.css.map +1 -1
- package/src/styles/list/list.css +214 -0
- package/src/styles/list/list.css.map +1 -0
- package/src/styles/nav/nav.css +21 -1
- package/src/styles/nav/nav.css.map +1 -1
- package/src/styles/tag/tag.css +113 -35
- package/src/styles/tag/tag.css.map +1 -1
- package/src/styles/utilities/_disabled.scss +58 -0
- package/src/test/setup.d.ts +9 -0
- package/src/test/setup.ts +53 -1
- package/src/types/shared.ts +43 -6
- package/src/utils/accessibility.ts +109 -0
- package/libs/chunk-5ZM4XL44.js +0 -8
- package/libs/chunk-5ZM4XL44.js.map +0 -1
- package/libs/chunk-6BVXFW7U.cjs +0 -15
- package/libs/chunk-6BVXFW7U.cjs.map +0 -1
- package/libs/chunk-6TE5QEVE.cjs.map +0 -1
- package/libs/chunk-7K76RW2A.cjs +0 -18
- package/libs/chunk-7K76RW2A.cjs.map +0 -1
- package/libs/chunk-BHRQBJRY.js +0 -8
- package/libs/chunk-BHRQBJRY.js.map +0 -1
- package/libs/chunk-BIP2NY53.js +0 -8
- package/libs/chunk-BIP2NY53.js.map +0 -1
- package/libs/chunk-BSPKFLO4.js +0 -8
- package/libs/chunk-BSPKFLO4.js.map +0 -1
- package/libs/chunk-BV5CLH44.cjs +0 -18
- package/libs/chunk-BV5CLH44.cjs.map +0 -1
- package/libs/chunk-DKGJHKGW.js +0 -9
- package/libs/chunk-DKGJHKGW.js.map +0 -1
- package/libs/chunk-DV56L5YX.cjs +0 -18
- package/libs/chunk-DV56L5YX.cjs.map +0 -1
- package/libs/chunk-ECLD37WN.cjs +0 -16
- package/libs/chunk-ECLD37WN.cjs.map +0 -1
- package/libs/chunk-EQ67LF46.js +0 -9
- package/libs/chunk-EQ67LF46.js.map +0 -1
- package/libs/chunk-HYBZBN4G.js +0 -8
- package/libs/chunk-HYBZBN4G.js.map +0 -1
- package/libs/chunk-IYUN2EW3.cjs +0 -15
- package/libs/chunk-IYUN2EW3.cjs.map +0 -1
- package/libs/chunk-KKLTUJFB.cjs.map +0 -1
- package/libs/chunk-LHVJKDMA.cjs +0 -15
- package/libs/chunk-LHVJKDMA.cjs.map +0 -1
- package/libs/chunk-LL7HTLMS.cjs +0 -15
- package/libs/chunk-LL7HTLMS.cjs.map +0 -1
- package/libs/chunk-M5QL5TAE.cjs +0 -14
- package/libs/chunk-M5QL5TAE.cjs.map +0 -1
- package/libs/chunk-NE6YXTMC.js +0 -7
- package/libs/chunk-NE6YXTMC.js.map +0 -1
- package/libs/chunk-NHYXGV3L.js +0 -8
- package/libs/chunk-NHYXGV3L.js.map +0 -1
- package/libs/chunk-O6QZBB6G.js.map +0 -1
- package/libs/chunk-P7TTEYCD.js +0 -7
- package/libs/chunk-P7TTEYCD.js.map +0 -1
- package/libs/chunk-PPOOBUOS.js +0 -8
- package/libs/chunk-PPOOBUOS.js.map +0 -1
- package/libs/chunk-QCMV4VQZ.js +0 -8
- package/libs/chunk-QCMV4VQZ.js.map +0 -1
- package/libs/chunk-QVV34QEH.cjs +0 -32
- package/libs/chunk-QVV34QEH.cjs.map +0 -1
- package/libs/chunk-S7BABR7Z.cjs +0 -13
- package/libs/chunk-S7BABR7Z.cjs.map +0 -1
- package/libs/chunk-SXVZSWX6.js +0 -11
- package/libs/chunk-SXVZSWX6.js.map +0 -1
- package/libs/chunk-X3EVB7VS.cjs +0 -15
- package/libs/chunk-X3EVB7VS.cjs.map +0 -1
- package/libs/inputs-f3a216db.d.ts +0 -45
- package/libs/ui-9a6f9f8d.d.ts +0 -24
- package/src/components/cards/README.md +0 -80
- package/src/components/dialog/hooks/useClickOutside.ts +0 -33
- /package/libs/{chunk-YWOYVRFT.js.map → chunk-7XPFW7CB.js.map} +0 -0
- /package/libs/{chunk-ICCKQ2GC.cjs.map → chunk-DKTHCQ5P.cjs.map} +0 -0
- /package/libs/{chunk-LIQJ7ZZR.js.map → chunk-IQ76HGVP.js.map} +0 -0
- /package/libs/{chunk-LT5KZ2QW.cjs.map → chunk-US2I5GI7.cjs.map} +0 -0
- /package/libs/{chunk-E3XP6BEX.cjs.map → chunk-W2UIN7EV.cjs.map} +0 -0
- /package/libs/{chunk-5M57K4SW.js.map → chunk-Y2PFDELK.js.map} +0 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { U as UI } from './ui-d01b50d4.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Valid HTML heading levels for semantic document structure.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* Heading levels establish the document outline and hierarchy for screen readers.
|
|
9
|
+
* Always maintain proper heading order (don't skip levels) for WCAG 2.1 compliance.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // ✅ GOOD: Proper heading hierarchy
|
|
13
|
+
* <Title level="h1">Main Page Title</Title>
|
|
14
|
+
* <Title level="h2">Section Heading</Title>
|
|
15
|
+
* <Title level="h3">Subsection Heading</Title>
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // ❌ BAD: Skipping heading levels
|
|
19
|
+
* <Title level="h1">Main Title</Title>
|
|
20
|
+
* <Title level="h4">Skipped h2 and h3</Title>
|
|
21
|
+
*/
|
|
22
|
+
type HeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
23
|
+
/**
|
|
24
|
+
* Props for the Title component.
|
|
25
|
+
*
|
|
26
|
+
* @typeParam TLevel - The heading level to render (h1-h6)
|
|
27
|
+
*
|
|
28
|
+
* @property {HeadingLevel} level - The semantic heading level (h1-h6). Defaults to "h2".
|
|
29
|
+
* @property {React.ReactNode} children - The text or elements to render inside the heading.
|
|
30
|
+
* @property {string} [id] - Unique identifier for the heading, useful for anchor links.
|
|
31
|
+
* @property {React.CSSProperties} [styles] - Inline styles to apply to the heading.
|
|
32
|
+
* @property {string} [ui] - Data attribute for UI framework styling hooks.
|
|
33
|
+
* @property {string} [className] - CSS class names to apply.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* This interface extends the polymorphic UI component props, providing full access
|
|
37
|
+
* to native HTML heading attributes and ARIA properties for accessibility.
|
|
38
|
+
*
|
|
39
|
+
* For AI assistants: This component ensures semantic HTML structure for document
|
|
40
|
+
* outlines, which is critical for screen reader navigation and SEO.
|
|
41
|
+
*/
|
|
42
|
+
type TitleProps$1 = {
|
|
43
|
+
/**
|
|
44
|
+
* The semantic heading level to render.
|
|
45
|
+
*
|
|
46
|
+
* @default "h2"
|
|
47
|
+
*
|
|
48
|
+
* @remarks
|
|
49
|
+
* Choose the appropriate level based on your document structure:
|
|
50
|
+
* - h1: Page title (typically one per page)
|
|
51
|
+
* - h2: Major sections
|
|
52
|
+
* - h3-h6: Subsections and nested content
|
|
53
|
+
*
|
|
54
|
+
* WCAG 2.1 requires proper heading hierarchy for screen reader users.
|
|
55
|
+
*/
|
|
56
|
+
level?: HeadingLevel;
|
|
57
|
+
/**
|
|
58
|
+
* The content to display in the heading.
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* Can be text, elements, or a combination. Ensure text content is meaningful
|
|
62
|
+
* and descriptive for users navigating with screen readers.
|
|
63
|
+
*/
|
|
64
|
+
children: React.ReactNode;
|
|
65
|
+
/**
|
|
66
|
+
* Unique identifier for the heading element.
|
|
67
|
+
*
|
|
68
|
+
* @remarks
|
|
69
|
+
* Useful for:
|
|
70
|
+
* - Creating anchor links to sections
|
|
71
|
+
* - ARIA relationships (aria-labelledby, aria-describedby)
|
|
72
|
+
* - Testing and automation
|
|
73
|
+
*/
|
|
74
|
+
id?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Data attribute for UI framework styling hooks.
|
|
77
|
+
*
|
|
78
|
+
* @remarks
|
|
79
|
+
* Used by fpkit's CSS system to apply component-specific styles.
|
|
80
|
+
* Automatically prefixed with "data-ui" when rendered.
|
|
81
|
+
*/
|
|
82
|
+
ui?: string;
|
|
83
|
+
/**
|
|
84
|
+
* CSS class names to apply to the heading.
|
|
85
|
+
*
|
|
86
|
+
* @remarks
|
|
87
|
+
* Prefer using the `ui` prop for fpkit styling, and this for
|
|
88
|
+
* utility classes or custom overrides.
|
|
89
|
+
*/
|
|
90
|
+
className?: string;
|
|
91
|
+
} & React.ComponentPropsWithoutRef<typeof UI>;
|
|
92
|
+
/**
|
|
93
|
+
* Title - A semantic heading component for document structure and hierarchy.
|
|
94
|
+
*
|
|
95
|
+
* The Title component renders semantic HTML headings (h1-h6) with proper
|
|
96
|
+
* accessibility support. It ensures WCAG 2.1 AA compliance by maintaining
|
|
97
|
+
* semantic document structure for screen readers and assistive technologies.
|
|
98
|
+
*
|
|
99
|
+
* ## Key Features
|
|
100
|
+
*
|
|
101
|
+
* - **Semantic HTML**: Renders actual heading elements (h1-h6) for proper document outline
|
|
102
|
+
* - **Accessibility**: Full ARIA support and keyboard navigation
|
|
103
|
+
* - **Flexible Styling**: Supports fpkit's UI system, custom classes, and inline styles
|
|
104
|
+
* - **Type Safety**: Fully typed with TypeScript for developer experience
|
|
105
|
+
* - **Performance**: Memoized to prevent unnecessary re-renders
|
|
106
|
+
*
|
|
107
|
+
* ## Accessibility Considerations
|
|
108
|
+
*
|
|
109
|
+
* ### WCAG 2.1 AA Compliance
|
|
110
|
+
*
|
|
111
|
+
* - **1.3.1 Info and Relationships (Level A)**: Semantic heading elements preserve
|
|
112
|
+
* document structure for screen readers
|
|
113
|
+
* - **2.4.6 Headings and Labels (Level AA)**: Headings should be descriptive and
|
|
114
|
+
* properly ordered
|
|
115
|
+
* - **2.4.10 Section Headings (Level AAA)**: Use headings to organize content
|
|
116
|
+
*
|
|
117
|
+
* ### Best Practices
|
|
118
|
+
*
|
|
119
|
+
* 1. **Maintain Heading Hierarchy**: Don't skip levels (e.g., h1 → h3)
|
|
120
|
+
* 2. **One h1 Per Page**: Use h1 for the main page title only
|
|
121
|
+
* 3. **Descriptive Text**: Headings should clearly describe the following content
|
|
122
|
+
* 4. **Avoid Empty Headings**: Always provide meaningful text content
|
|
123
|
+
*
|
|
124
|
+
* ## Usage Examples
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* // Basic usage with default h2
|
|
128
|
+
* <Title>Section Heading</Title>
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* // Page title with explicit h1
|
|
132
|
+
* <Title level="h1">Welcome to Our Application</Title>
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* // Subsection with custom styling
|
|
136
|
+
* <Title
|
|
137
|
+
* level="h3"
|
|
138
|
+
* id="getting-started"
|
|
139
|
+
* className="text-primary"
|
|
140
|
+
* >
|
|
141
|
+
* Getting Started
|
|
142
|
+
* </Title>
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* // With fpkit UI data attribute
|
|
146
|
+
* <Title level="h2" ui="section-title">
|
|
147
|
+
* Features Overview
|
|
148
|
+
* </Title>
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* // Accessible heading with aria-label for context
|
|
152
|
+
* <Title level="h2" aria-label="User dashboard overview">
|
|
153
|
+
* Dashboard
|
|
154
|
+
* </Title>
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* // Complex heading with mixed content
|
|
158
|
+
* <Title level="h2" id="stats">
|
|
159
|
+
* <Icon name="chart" aria-hidden="true" />
|
|
160
|
+
* <span>Statistics</span>
|
|
161
|
+
* </Title>
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* // ✅ GOOD: Proper heading hierarchy
|
|
165
|
+
* <Title level="h1">Page Title</Title>
|
|
166
|
+
* <Title level="h2">Main Section</Title>
|
|
167
|
+
* <Title level="h3">Subsection</Title>
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* // ❌ BAD: Skipping heading levels (accessibility violation)
|
|
171
|
+
* <Title level="h1">Page Title</Title>
|
|
172
|
+
* <Title level="h4">Skipped h2 and h3</Title>
|
|
173
|
+
*
|
|
174
|
+
* @param {TitleProps} props - Component props
|
|
175
|
+
* @returns {React.ReactElement} A semantic heading element
|
|
176
|
+
*
|
|
177
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html WCAG 1.3.1}
|
|
178
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/headings-and-labels.html WCAG 2.4.6}
|
|
179
|
+
*/
|
|
180
|
+
declare const Title: React.MemoExoticComponent<React.ForwardRefExoticComponent<Omit<TitleProps$1, "ref"> & React.RefAttributes<HTMLHeadingElement>>>;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* @deprecated Use `Title` component instead. This component will be removed in v3.0.0.
|
|
184
|
+
*
|
|
185
|
+
* @remarks
|
|
186
|
+
* The `Heading` component has been deprecated in favor of the new `Title` component
|
|
187
|
+
* which offers improved API design and better accessibility features.
|
|
188
|
+
*
|
|
189
|
+
* **Migration Guide:**
|
|
190
|
+
* - Rename `Heading` → `Title`
|
|
191
|
+
* - Rename prop `type` → `level`
|
|
192
|
+
* - Default level changed from `h3` → `h2` (update if you relied on the default)
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* // Before (deprecated):
|
|
196
|
+
* <Heading type="h2">Section Title</Heading>
|
|
197
|
+
*
|
|
198
|
+
* // After:
|
|
199
|
+
* <Title level="h2">Section Title</Title>
|
|
200
|
+
*
|
|
201
|
+
* @see {@link Title} for the new component
|
|
202
|
+
*/
|
|
203
|
+
type TitleProps = {
|
|
204
|
+
/**
|
|
205
|
+
* @deprecated Use `level` prop on the `Title` component instead.
|
|
206
|
+
*/
|
|
207
|
+
children: React.ReactNode;
|
|
208
|
+
/**
|
|
209
|
+
* @deprecated Use `level` prop on the `Title` component instead.
|
|
210
|
+
*/
|
|
211
|
+
type?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
212
|
+
/**
|
|
213
|
+
* @deprecated Use `ui` prop on the `Title` component.
|
|
214
|
+
*/
|
|
215
|
+
ui?: string;
|
|
216
|
+
} & Omit<React.ComponentPropsWithoutRef<typeof Title>, 'level'>;
|
|
217
|
+
/**
|
|
218
|
+
* Heading - Deprecated component wrapper for Title.
|
|
219
|
+
*
|
|
220
|
+
* @deprecated Use {@link Title} component instead. Will be removed in v3.0.0.
|
|
221
|
+
*
|
|
222
|
+
* This component provides backwards compatibility for existing code using
|
|
223
|
+
* the old `Heading` component API. It forwards all props to the new `Title`
|
|
224
|
+
* component with appropriate prop name mapping.
|
|
225
|
+
*
|
|
226
|
+
* **Breaking Changes in v3.0.0:**
|
|
227
|
+
* - This component will be removed
|
|
228
|
+
* - Migrate to `Title` component before upgrading
|
|
229
|
+
*
|
|
230
|
+
* **Migration Steps:**
|
|
231
|
+
* 1. Replace all `<Heading>` imports with `<Title>`
|
|
232
|
+
* 2. Rename `type` prop to `level`
|
|
233
|
+
* 3. Review default behavior (default changed from h3 to h2)
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* // Old API (still works but deprecated):
|
|
237
|
+
* import { Heading } from '@fpkit/acss';
|
|
238
|
+
* <Heading type="h2">Section</Heading>
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* // New API (recommended):
|
|
242
|
+
* import { Title } from '@fpkit/acss';
|
|
243
|
+
* <Title level="h2">Section</Title>
|
|
244
|
+
*
|
|
245
|
+
* @param {TitleProps} props - Component props (maps old API to new)
|
|
246
|
+
* @returns {React.ReactElement} The rendered Title component
|
|
247
|
+
*/
|
|
248
|
+
declare const Heading: React.ForwardRefExoticComponent<Omit<TitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
249
|
+
|
|
250
|
+
export { HeadingLevel as H, Title as T, TitleProps$1 as a, Heading as b, TitleProps as c };
|
package/libs/hooks.cjs
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkT4T6GWYQ_cjs = require('./chunk-T4T6GWYQ.cjs');
|
|
3
4
|
var chunkPDD4N5P5_cjs = require('./chunk-PDD4N5P5.cjs');
|
|
5
|
+
var chunkTON2YGMD_cjs = require('./chunk-TON2YGMD.cjs');
|
|
6
|
+
require('./chunk-33PNJ4LO.cjs');
|
|
7
|
+
require('./chunk-ENTCUJ3A.cjs');
|
|
4
8
|
|
|
5
9
|
|
|
6
10
|
|
|
11
|
+
Object.defineProperty(exports, 'useBreadcrumbSegments', {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () { return chunkT4T6GWYQ_cjs.a; }
|
|
14
|
+
});
|
|
7
15
|
Object.defineProperty(exports, 'usePopover', {
|
|
8
16
|
enumerable: true,
|
|
9
17
|
get: function () { return chunkPDD4N5P5_cjs.a; }
|
|
10
18
|
});
|
|
19
|
+
Object.defineProperty(exports, 'useDisabledState', {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return chunkTON2YGMD_cjs.a; }
|
|
22
|
+
});
|
|
11
23
|
//# sourceMappingURL=out.js.map
|
|
12
24
|
//# sourceMappingURL=hooks.cjs.map
|
package/libs/hooks.d.cts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export { useBreadcrumbSegments } from './components/breadcrumbs/breadcrumb.cjs';
|
|
2
|
+
import 'react';
|
|
3
|
+
import './ui-d01b50d4.js';
|
|
4
|
+
import './link-5192f411.js';
|
|
5
|
+
|
|
1
6
|
type Position = {
|
|
2
7
|
/**
|
|
3
8
|
* @description This is the top position of the popover.
|
|
@@ -29,4 +34,138 @@ declare const usePopover: (elementRef: React.RefObject<HTMLElement | HTMLDivElem
|
|
|
29
34
|
handlePointerLeave: () => void;
|
|
30
35
|
};
|
|
31
36
|
|
|
32
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Event handler mapping type for disabled state management.
|
|
39
|
+
* Maps event names to their handler functions for any HTML element.
|
|
40
|
+
*
|
|
41
|
+
* @template T - The HTML element type (e.g., HTMLButtonElement, HTMLInputElement)
|
|
42
|
+
*/
|
|
43
|
+
type DisabledEventHandlers<T extends HTMLElement> = {
|
|
44
|
+
onClick?: (event: React.MouseEvent<T>) => void;
|
|
45
|
+
onChange?: (event: React.ChangeEvent<T>) => void;
|
|
46
|
+
onBlur?: (event: React.FocusEvent<T>) => void;
|
|
47
|
+
onFocus?: (event: React.FocusEvent<T>) => void;
|
|
48
|
+
onPointerDown?: (event: React.PointerEvent<T>) => void;
|
|
49
|
+
onKeyDown?: (event: React.KeyboardEvent<T>) => void;
|
|
50
|
+
onKeyUp?: (event: React.KeyboardEvent<T>) => void;
|
|
51
|
+
onMouseDown?: (event: React.MouseEvent<T>) => void;
|
|
52
|
+
onMouseUp?: (event: React.MouseEvent<T>) => void;
|
|
53
|
+
onTouchStart?: (event: React.TouchEvent<T>) => void;
|
|
54
|
+
onTouchEnd?: (event: React.TouchEvent<T>) => void;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Props returned by the useDisabledState hook containing ARIA attributes and styling.
|
|
58
|
+
*/
|
|
59
|
+
interface DisabledProps {
|
|
60
|
+
/** ARIA attribute indicating disabled state */
|
|
61
|
+
'aria-disabled': boolean;
|
|
62
|
+
/** CSS class name for disabled state styling */
|
|
63
|
+
className: string;
|
|
64
|
+
/** Optional tabIndex to remove element from tab order when disabled */
|
|
65
|
+
tabIndex?: -1;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Configuration options for useDisabledState hook.
|
|
69
|
+
*
|
|
70
|
+
* @template T - The HTML element type
|
|
71
|
+
*/
|
|
72
|
+
interface UseDisabledStateOptions<T extends HTMLElement> {
|
|
73
|
+
/** Event handlers to wrap with disabled logic */
|
|
74
|
+
handlers?: Partial<DisabledEventHandlers<T>>;
|
|
75
|
+
/** Existing className to merge with disabled class */
|
|
76
|
+
className?: string;
|
|
77
|
+
/** Custom disabled className (default: 'is-disabled') */
|
|
78
|
+
disabledClassName?: string;
|
|
79
|
+
/** Whether to call preventDefault on disabled events (default: true) */
|
|
80
|
+
preventDefault?: boolean;
|
|
81
|
+
/** Whether to call stopPropagation on disabled events (default: true) */
|
|
82
|
+
stopPropagation?: boolean;
|
|
83
|
+
/** Make element non-focusable when disabled via tabIndex=-1 (default: false for a11y) */
|
|
84
|
+
removeFromTabOrder?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Return type for the useDisabledState hook.
|
|
88
|
+
*
|
|
89
|
+
* @template T - The HTML element type
|
|
90
|
+
*/
|
|
91
|
+
interface UseDisabledStateReturn<T extends HTMLElement> {
|
|
92
|
+
/** Props to spread on the element for disabled state */
|
|
93
|
+
disabledProps: DisabledProps;
|
|
94
|
+
/** Wrapped event handlers that respect disabled state */
|
|
95
|
+
handlers: Partial<DisabledEventHandlers<T>>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Manages accessible disabled state for form elements using aria-disabled pattern.
|
|
99
|
+
*
|
|
100
|
+
* This hook implements WCAG 2.1 Level AA compliant disabled state management by:
|
|
101
|
+
* - Using `aria-disabled` instead of native `disabled` attribute (keeps elements focusable)
|
|
102
|
+
* - Preventing all interaction events when disabled
|
|
103
|
+
* - Applying accessible styling via `.is-disabled` class
|
|
104
|
+
* - Maintaining keyboard focusability for screen reader discovery
|
|
105
|
+
*
|
|
106
|
+
* **Why aria-disabled instead of disabled attribute?**
|
|
107
|
+
* - Elements remain in keyboard tab order (WCAG 2.1.1 - Keyboard)
|
|
108
|
+
* - Screen readers can discover and announce disabled state
|
|
109
|
+
* - Enables tooltips and contextual help on disabled elements
|
|
110
|
+
* - Better visual styling control for WCAG contrast compliance
|
|
111
|
+
*
|
|
112
|
+
* **Performance Optimizations:**
|
|
113
|
+
* - Single memoization pass for all handlers and props
|
|
114
|
+
* - Stable handler references using refs (only recreate on disabled state change)
|
|
115
|
+
* - Automatic className merging to reduce consumer boilerplate
|
|
116
|
+
*
|
|
117
|
+
* @template T - The HTML element type (e.g., HTMLButtonElement, HTMLInputElement)
|
|
118
|
+
*
|
|
119
|
+
* @param {boolean | undefined} disabled - Whether the element should be disabled. Undefined treated as false.
|
|
120
|
+
* @param {Partial<DisabledEventHandlers<T>> | UseDisabledStateOptions<T>} handlersOrOptions -
|
|
121
|
+
* Event handlers to wrap OR configuration options object (for backward compatibility)
|
|
122
|
+
*
|
|
123
|
+
* @returns {UseDisabledStateReturn<T>} Object containing disabledProps and wrapped handlers
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* // Basic button usage (legacy API - still supported)
|
|
127
|
+
* const MyButton = ({ disabled, onClick, children }) => {
|
|
128
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, { onClick });
|
|
129
|
+
* return <button {...disabledProps} {...handlers}>{children}</button>;
|
|
130
|
+
* };
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* // Enhanced API with className merging
|
|
134
|
+
* const MyButton = ({ disabled, onClick, className, children }) => {
|
|
135
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, {
|
|
136
|
+
* handlers: { onClick },
|
|
137
|
+
* className,
|
|
138
|
+
* });
|
|
139
|
+
* return <button {...disabledProps} {...handlers}>{children}</button>;
|
|
140
|
+
* };
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* // Custom configuration
|
|
144
|
+
* const MyInput = ({ disabled, onChange, className }) => {
|
|
145
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, {
|
|
146
|
+
* handlers: { onChange },
|
|
147
|
+
* className,
|
|
148
|
+
* disabledClassName: 'custom-disabled',
|
|
149
|
+
* preventDefault: true,
|
|
150
|
+
* stopPropagation: false,
|
|
151
|
+
* });
|
|
152
|
+
* return <input {...disabledProps} {...handlers} />;
|
|
153
|
+
* };
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* // Remove from tab order when disabled
|
|
157
|
+
* const MyButton = ({ disabled, onClick }) => {
|
|
158
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, {
|
|
159
|
+
* handlers: { onClick },
|
|
160
|
+
* removeFromTabOrder: true, // Adds tabIndex=-1 when disabled
|
|
161
|
+
* });
|
|
162
|
+
* return <button {...disabledProps} {...handlers}>Click me</button>;
|
|
163
|
+
* };
|
|
164
|
+
*
|
|
165
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/keyboard WCAG 2.1.1 - Keyboard}
|
|
166
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value WCAG 4.1.2 - Name, Role, Value}
|
|
167
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum WCAG 1.4.3 - Contrast (Minimum)}
|
|
168
|
+
*/
|
|
169
|
+
declare function useDisabledState<T extends HTMLElement = HTMLElement>(disabled: boolean | undefined, handlersOrOptions?: Partial<DisabledEventHandlers<T>> | UseDisabledStateOptions<T>): UseDisabledStateReturn<T>;
|
|
170
|
+
|
|
171
|
+
export { DisabledEventHandlers, DisabledProps, UseDisabledStateReturn, useDisabledState, usePopover };
|
package/libs/hooks.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export { useBreadcrumbSegments } from './components/breadcrumbs/breadcrumb.js';
|
|
2
|
+
import 'react';
|
|
3
|
+
import './ui-d01b50d4.js';
|
|
4
|
+
import './link-5192f411.js';
|
|
5
|
+
|
|
1
6
|
type Position = {
|
|
2
7
|
/**
|
|
3
8
|
* @description This is the top position of the popover.
|
|
@@ -29,4 +34,138 @@ declare const usePopover: (elementRef: React.RefObject<HTMLElement | HTMLDivElem
|
|
|
29
34
|
handlePointerLeave: () => void;
|
|
30
35
|
};
|
|
31
36
|
|
|
32
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Event handler mapping type for disabled state management.
|
|
39
|
+
* Maps event names to their handler functions for any HTML element.
|
|
40
|
+
*
|
|
41
|
+
* @template T - The HTML element type (e.g., HTMLButtonElement, HTMLInputElement)
|
|
42
|
+
*/
|
|
43
|
+
type DisabledEventHandlers<T extends HTMLElement> = {
|
|
44
|
+
onClick?: (event: React.MouseEvent<T>) => void;
|
|
45
|
+
onChange?: (event: React.ChangeEvent<T>) => void;
|
|
46
|
+
onBlur?: (event: React.FocusEvent<T>) => void;
|
|
47
|
+
onFocus?: (event: React.FocusEvent<T>) => void;
|
|
48
|
+
onPointerDown?: (event: React.PointerEvent<T>) => void;
|
|
49
|
+
onKeyDown?: (event: React.KeyboardEvent<T>) => void;
|
|
50
|
+
onKeyUp?: (event: React.KeyboardEvent<T>) => void;
|
|
51
|
+
onMouseDown?: (event: React.MouseEvent<T>) => void;
|
|
52
|
+
onMouseUp?: (event: React.MouseEvent<T>) => void;
|
|
53
|
+
onTouchStart?: (event: React.TouchEvent<T>) => void;
|
|
54
|
+
onTouchEnd?: (event: React.TouchEvent<T>) => void;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Props returned by the useDisabledState hook containing ARIA attributes and styling.
|
|
58
|
+
*/
|
|
59
|
+
interface DisabledProps {
|
|
60
|
+
/** ARIA attribute indicating disabled state */
|
|
61
|
+
'aria-disabled': boolean;
|
|
62
|
+
/** CSS class name for disabled state styling */
|
|
63
|
+
className: string;
|
|
64
|
+
/** Optional tabIndex to remove element from tab order when disabled */
|
|
65
|
+
tabIndex?: -1;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Configuration options for useDisabledState hook.
|
|
69
|
+
*
|
|
70
|
+
* @template T - The HTML element type
|
|
71
|
+
*/
|
|
72
|
+
interface UseDisabledStateOptions<T extends HTMLElement> {
|
|
73
|
+
/** Event handlers to wrap with disabled logic */
|
|
74
|
+
handlers?: Partial<DisabledEventHandlers<T>>;
|
|
75
|
+
/** Existing className to merge with disabled class */
|
|
76
|
+
className?: string;
|
|
77
|
+
/** Custom disabled className (default: 'is-disabled') */
|
|
78
|
+
disabledClassName?: string;
|
|
79
|
+
/** Whether to call preventDefault on disabled events (default: true) */
|
|
80
|
+
preventDefault?: boolean;
|
|
81
|
+
/** Whether to call stopPropagation on disabled events (default: true) */
|
|
82
|
+
stopPropagation?: boolean;
|
|
83
|
+
/** Make element non-focusable when disabled via tabIndex=-1 (default: false for a11y) */
|
|
84
|
+
removeFromTabOrder?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Return type for the useDisabledState hook.
|
|
88
|
+
*
|
|
89
|
+
* @template T - The HTML element type
|
|
90
|
+
*/
|
|
91
|
+
interface UseDisabledStateReturn<T extends HTMLElement> {
|
|
92
|
+
/** Props to spread on the element for disabled state */
|
|
93
|
+
disabledProps: DisabledProps;
|
|
94
|
+
/** Wrapped event handlers that respect disabled state */
|
|
95
|
+
handlers: Partial<DisabledEventHandlers<T>>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Manages accessible disabled state for form elements using aria-disabled pattern.
|
|
99
|
+
*
|
|
100
|
+
* This hook implements WCAG 2.1 Level AA compliant disabled state management by:
|
|
101
|
+
* - Using `aria-disabled` instead of native `disabled` attribute (keeps elements focusable)
|
|
102
|
+
* - Preventing all interaction events when disabled
|
|
103
|
+
* - Applying accessible styling via `.is-disabled` class
|
|
104
|
+
* - Maintaining keyboard focusability for screen reader discovery
|
|
105
|
+
*
|
|
106
|
+
* **Why aria-disabled instead of disabled attribute?**
|
|
107
|
+
* - Elements remain in keyboard tab order (WCAG 2.1.1 - Keyboard)
|
|
108
|
+
* - Screen readers can discover and announce disabled state
|
|
109
|
+
* - Enables tooltips and contextual help on disabled elements
|
|
110
|
+
* - Better visual styling control for WCAG contrast compliance
|
|
111
|
+
*
|
|
112
|
+
* **Performance Optimizations:**
|
|
113
|
+
* - Single memoization pass for all handlers and props
|
|
114
|
+
* - Stable handler references using refs (only recreate on disabled state change)
|
|
115
|
+
* - Automatic className merging to reduce consumer boilerplate
|
|
116
|
+
*
|
|
117
|
+
* @template T - The HTML element type (e.g., HTMLButtonElement, HTMLInputElement)
|
|
118
|
+
*
|
|
119
|
+
* @param {boolean | undefined} disabled - Whether the element should be disabled. Undefined treated as false.
|
|
120
|
+
* @param {Partial<DisabledEventHandlers<T>> | UseDisabledStateOptions<T>} handlersOrOptions -
|
|
121
|
+
* Event handlers to wrap OR configuration options object (for backward compatibility)
|
|
122
|
+
*
|
|
123
|
+
* @returns {UseDisabledStateReturn<T>} Object containing disabledProps and wrapped handlers
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* // Basic button usage (legacy API - still supported)
|
|
127
|
+
* const MyButton = ({ disabled, onClick, children }) => {
|
|
128
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, { onClick });
|
|
129
|
+
* return <button {...disabledProps} {...handlers}>{children}</button>;
|
|
130
|
+
* };
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* // Enhanced API with className merging
|
|
134
|
+
* const MyButton = ({ disabled, onClick, className, children }) => {
|
|
135
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, {
|
|
136
|
+
* handlers: { onClick },
|
|
137
|
+
* className,
|
|
138
|
+
* });
|
|
139
|
+
* return <button {...disabledProps} {...handlers}>{children}</button>;
|
|
140
|
+
* };
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* // Custom configuration
|
|
144
|
+
* const MyInput = ({ disabled, onChange, className }) => {
|
|
145
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, {
|
|
146
|
+
* handlers: { onChange },
|
|
147
|
+
* className,
|
|
148
|
+
* disabledClassName: 'custom-disabled',
|
|
149
|
+
* preventDefault: true,
|
|
150
|
+
* stopPropagation: false,
|
|
151
|
+
* });
|
|
152
|
+
* return <input {...disabledProps} {...handlers} />;
|
|
153
|
+
* };
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* // Remove from tab order when disabled
|
|
157
|
+
* const MyButton = ({ disabled, onClick }) => {
|
|
158
|
+
* const { disabledProps, handlers } = useDisabledState(disabled, {
|
|
159
|
+
* handlers: { onClick },
|
|
160
|
+
* removeFromTabOrder: true, // Adds tabIndex=-1 when disabled
|
|
161
|
+
* });
|
|
162
|
+
* return <button {...disabledProps} {...handlers}>Click me</button>;
|
|
163
|
+
* };
|
|
164
|
+
*
|
|
165
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/keyboard WCAG 2.1.1 - Keyboard}
|
|
166
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value WCAG 4.1.2 - Name, Role, Value}
|
|
167
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum WCAG 1.4.3 - Contrast (Minimum)}
|
|
168
|
+
*/
|
|
169
|
+
declare function useDisabledState<T extends HTMLElement = HTMLElement>(disabled: boolean | undefined, handlersOrOptions?: Partial<DisabledEventHandlers<T>> | UseDisabledStateOptions<T>): UseDisabledStateReturn<T>;
|
|
170
|
+
|
|
171
|
+
export { DisabledEventHandlers, DisabledProps, UseDisabledStateReturn, useDisabledState, usePopover };
|
package/libs/hooks.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export { a as useBreadcrumbSegments } from './chunk-X5LGFCWG.js';
|
|
1
2
|
export { a as usePopover } from './chunk-GCGKYLDG.js';
|
|
3
|
+
export { a as useDisabledState } from './chunk-75QHTLFO.js';
|
|
4
|
+
import './chunk-UEPAWMDF.js';
|
|
5
|
+
import './chunk-HHLNOC5T.js';
|
|
2
6
|
//# sourceMappingURL=out.js.map
|
|
3
7
|
//# sourceMappingURL=hooks.js.map
|
package/libs/icons.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-
|
|
3
|
+
var chunk6WTC4JXH_cjs = require('./chunk-6WTC4JXH.cjs');
|
|
4
|
+
require('./chunk-ENTCUJ3A.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, 'Icon', {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunk6WTC4JXH_cjs.a; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=out.js.map
|
|
13
13
|
//# sourceMappingURL=icons.cjs.map
|
package/libs/icons.d.cts
CHANGED
package/libs/icons.d.ts
CHANGED
package/libs/icons.js
CHANGED