@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
|
@@ -1,87 +1,134 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import UI from '../ui'
|
|
3
|
+
import { useDisabledState } from '../../hooks/use-disabled-state'
|
|
3
4
|
|
|
4
|
-
export type TextareaProps
|
|
5
|
-
|
|
5
|
+
export type { TextareaProps } from './form.types'
|
|
6
|
+
import type { TextareaProps } from './form.types'
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
|
-
* Textarea component
|
|
9
|
+
* Textarea component - Accessible multi-line text input with validation support
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @
|
|
11
|
+
* A flexible textarea component that supports validation states, proper ARIA attributes
|
|
12
|
+
* for accessibility, and an onEnter handler for keyboard interactions. The onEnter handler
|
|
13
|
+
* fires only on Enter without Shift, allowing Shift+Enter to create new lines as expected.
|
|
14
|
+
*
|
|
15
|
+
* @component
|
|
16
|
+
* @example
|
|
17
|
+
* // Basic textarea
|
|
18
|
+
* <Textarea
|
|
19
|
+
* id="message"
|
|
20
|
+
* name="message"
|
|
21
|
+
* placeholder="Enter your message"
|
|
22
|
+
* required
|
|
23
|
+
* />
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Textarea with Enter key handler for quick submission
|
|
27
|
+
* <Textarea
|
|
28
|
+
* id="comment"
|
|
29
|
+
* name="comment"
|
|
30
|
+
* onEnter={(e) => handleSubmit()}
|
|
31
|
+
* placeholder="Press Enter to submit, Shift+Enter for new line"
|
|
32
|
+
* />
|
|
33
|
+
*
|
|
34
|
+
* @param {TextareaProps} props - Component props
|
|
35
|
+
* @returns {JSX.Element} Textarea element with proper accessibility attributes
|
|
36
|
+
*
|
|
37
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/keyboard.html|WCAG 2.1.1 Keyboard}
|
|
38
|
+
* @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html|WCAG 4.1.2 Name, Role, Value}
|
|
25
39
|
*/
|
|
26
|
-
export const Textarea = (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
export const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
|
|
41
|
+
(
|
|
42
|
+
{
|
|
43
|
+
id,
|
|
44
|
+
classes,
|
|
45
|
+
value,
|
|
46
|
+
rows = 5,
|
|
47
|
+
cols = 25,
|
|
48
|
+
name,
|
|
49
|
+
required,
|
|
50
|
+
disabled,
|
|
51
|
+
readOnly,
|
|
52
|
+
validationState = 'none',
|
|
53
|
+
errorMessage,
|
|
54
|
+
hintText,
|
|
55
|
+
onBlur,
|
|
56
|
+
onPointerDown,
|
|
57
|
+
onChange,
|
|
58
|
+
onKeyDown,
|
|
59
|
+
onEnter,
|
|
60
|
+
styles,
|
|
61
|
+
placeholder,
|
|
62
|
+
...props
|
|
63
|
+
},
|
|
64
|
+
ref
|
|
65
|
+
) => {
|
|
66
|
+
// Use the disabled state hook with enhanced API for automatic className merging
|
|
67
|
+
const { disabledProps, handlers } = useDisabledState<HTMLTextAreaElement>(
|
|
68
|
+
disabled,
|
|
69
|
+
{
|
|
70
|
+
handlers: {
|
|
71
|
+
onChange,
|
|
72
|
+
onBlur,
|
|
73
|
+
onPointerDown,
|
|
74
|
+
onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
|
|
75
|
+
// Handle Enter key press for accessibility
|
|
76
|
+
// Only triggers onEnter when Enter is pressed WITHOUT Shift modifier
|
|
77
|
+
// This allows Shift+Enter to create new lines as expected
|
|
78
|
+
if (e.key === 'Enter' && !e.shiftKey && onEnter) {
|
|
79
|
+
onEnter(e)
|
|
80
|
+
}
|
|
81
|
+
// Always call consumer's onKeyDown if provided
|
|
82
|
+
if (onKeyDown) {
|
|
83
|
+
onKeyDown(e)
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
// Automatic className merging - hook combines disabled class with user classes
|
|
88
|
+
className: classes,
|
|
89
|
+
}
|
|
90
|
+
)
|
|
49
91
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
onBlur?.(e)
|
|
53
|
-
}
|
|
54
|
-
}
|
|
92
|
+
// Determine aria-invalid based on validation state
|
|
93
|
+
const isInvalid = validationState === 'invalid'
|
|
55
94
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
95
|
+
// Generate describedby IDs for error and hint text
|
|
96
|
+
const describedByIds: string[] = []
|
|
97
|
+
if (errorMessage && id) {
|
|
98
|
+
describedByIds.push(`${id}-error`)
|
|
99
|
+
}
|
|
100
|
+
if (hintText && id) {
|
|
101
|
+
describedByIds.push(`${id}-hint`)
|
|
59
102
|
}
|
|
103
|
+
const ariaDescribedBy =
|
|
104
|
+
describedByIds.length > 0 ? describedByIds.join(' ') : undefined
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<UI
|
|
108
|
+
as="textarea"
|
|
109
|
+
id={id}
|
|
110
|
+
name={name}
|
|
111
|
+
rows={rows}
|
|
112
|
+
cols={cols}
|
|
113
|
+
styles={styles}
|
|
114
|
+
className={disabledProps.className}
|
|
115
|
+
data-style="textarea"
|
|
116
|
+
required={required}
|
|
117
|
+
value={value}
|
|
118
|
+
aria-disabled={disabledProps['aria-disabled']}
|
|
119
|
+
aria-required={required}
|
|
120
|
+
aria-invalid={isInvalid}
|
|
121
|
+
aria-describedby={ariaDescribedBy}
|
|
122
|
+
readOnly={readOnly}
|
|
123
|
+
{...handlers}
|
|
124
|
+
ref={ref}
|
|
125
|
+
placeholder={placeholder || `${required ? '*' : ''} Message`}
|
|
126
|
+
{...props}
|
|
127
|
+
/>
|
|
128
|
+
)
|
|
60
129
|
}
|
|
130
|
+
)
|
|
61
131
|
|
|
62
|
-
|
|
63
|
-
<UI
|
|
64
|
-
as="textarea"
|
|
65
|
-
id={id}
|
|
66
|
-
name={name}
|
|
67
|
-
rows={rows}
|
|
68
|
-
cols={cols}
|
|
69
|
-
styles={styles}
|
|
70
|
-
className={classes}
|
|
71
|
-
data-style="textarea"
|
|
72
|
-
required={required}
|
|
73
|
-
value={value}
|
|
74
|
-
aria-disabled={disabled}
|
|
75
|
-
readOnly={readOnly}
|
|
76
|
-
onChange={handleChange}
|
|
77
|
-
onBlur={handleBlur}
|
|
78
|
-
onPointerDown={handlePointerDown}
|
|
79
|
-
ref={ref}
|
|
80
|
-
placeholder={placeholder || `${required ? '*' : ''} Message`}
|
|
81
|
-
{...props}
|
|
82
|
-
/>
|
|
83
|
-
)
|
|
84
|
-
}
|
|
132
|
+
Textarea.displayName = 'Textarea'
|
|
85
133
|
|
|
86
134
|
export default Textarea
|
|
87
|
-
Textarea.displayName = 'Textarea'
|
package/src/components/fp.tsx
CHANGED
|
@@ -1,28 +1,55 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { ComponentProps } from '../types'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated This type is deprecated. Use `PolymorphicRef` from './ui.tsx' instead.
|
|
6
|
+
* The UI component provides better type safety and accessibility features.
|
|
7
|
+
*/
|
|
8
|
+
type PolymorphicRef<C extends React.ElementType> = React.Ref<
|
|
9
|
+
React.ElementRef<C>
|
|
10
|
+
>
|
|
6
11
|
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated This type is deprecated. Use `AsProp` from './ui.tsx' instead.
|
|
14
|
+
* The UI component provides better type safety and accessibility features.
|
|
15
|
+
*/
|
|
7
16
|
type AsProp<C extends React.ElementType> = {
|
|
8
17
|
as?: C
|
|
9
18
|
}
|
|
10
19
|
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated This type is deprecated. Use `PropsToOmit` from './ui.tsx' instead.
|
|
22
|
+
* The UI component provides better type safety and accessibility features.
|
|
23
|
+
*/
|
|
11
24
|
type PropsToOmit<C extends React.ElementType, P> = keyof (AsProp<C> & P)
|
|
12
25
|
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated This type is deprecated. Use `PolymorphicComponentProp` from './ui.tsx' instead.
|
|
28
|
+
* The UI component provides better type safety and accessibility features.
|
|
29
|
+
*/
|
|
13
30
|
type PolymorphicComponentProp<
|
|
14
31
|
C extends React.ElementType,
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
15
33
|
Props = {},
|
|
16
34
|
> = React.PropsWithChildren<Props & AsProp<C>> &
|
|
17
35
|
Omit<React.ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>
|
|
18
36
|
|
|
37
|
+
/**
|
|
38
|
+
* @deprecated This type is deprecated. Use `PolymorphicComponentPropWithRef` from './ui.tsx' instead.
|
|
39
|
+
* The UI component provides better type safety and accessibility features.
|
|
40
|
+
*/
|
|
19
41
|
type PolymorphicComponentPropWithRef<
|
|
20
42
|
C extends React.ElementType,
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
21
44
|
Props = {},
|
|
22
45
|
> = PolymorphicComponentProp<C, Props> & {
|
|
23
|
-
ref?: PolymorphicRef<C>
|
|
46
|
+
ref?: PolymorphicRef<C> | React.ForwardedRef<React.ElementRef<C>>
|
|
24
47
|
}
|
|
25
48
|
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated This type is deprecated. Use `UIProps` from './ui.tsx' instead.
|
|
51
|
+
* The UI component provides better type safety and accessibility features.
|
|
52
|
+
*/
|
|
26
53
|
type FPProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<
|
|
27
54
|
C,
|
|
28
55
|
{
|
|
@@ -32,21 +59,62 @@ type FPProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<
|
|
|
32
59
|
}
|
|
33
60
|
>
|
|
34
61
|
|
|
35
|
-
|
|
62
|
+
/**
|
|
36
63
|
* FPComponent type definition
|
|
37
64
|
*
|
|
38
|
-
*
|
|
65
|
+
* @deprecated This type is deprecated. Use the `UI` component from './ui.tsx' instead.
|
|
66
|
+
* The UI component provides enhanced accessibility documentation, better type safety,
|
|
67
|
+
* and comprehensive WCAG 2.1 AA compliance guidance.
|
|
39
68
|
*
|
|
40
69
|
* @typeParam C - The HTML element type to render
|
|
41
70
|
* @param props - The component props
|
|
42
71
|
* @returns React component
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // Migration from FP to UI
|
|
76
|
+
* // Before:
|
|
77
|
+
* import FP from '@fpkit/acss/components/fp';
|
|
78
|
+
* <FP as="button" styles={{ padding: '1rem' }}>Click me</FP>
|
|
79
|
+
*
|
|
80
|
+
* // After:
|
|
81
|
+
* import UI from '@fpkit/acss/components/ui';
|
|
82
|
+
* <UI as="button" styles={{ padding: '1rem' }}>Click me</UI>
|
|
83
|
+
* ```
|
|
43
84
|
*/
|
|
44
|
-
type FPComponent =
|
|
45
|
-
|
|
46
|
-
|
|
85
|
+
type FPComponent = {
|
|
86
|
+
<C extends React.ElementType = 'span'>(
|
|
87
|
+
props: FPProps<C>,
|
|
88
|
+
): React.ReactElement | null
|
|
89
|
+
displayName?: string
|
|
90
|
+
}
|
|
47
91
|
|
|
48
92
|
/**
|
|
49
|
-
*
|
|
93
|
+
* @deprecated **DEPRECATED:** This component is deprecated and will be removed in a future version.
|
|
94
|
+
* Please use the `UI` component from `./ui.tsx` instead.
|
|
95
|
+
*
|
|
96
|
+
* The UI component is a drop-in replacement with the same API but provides:
|
|
97
|
+
* - Enhanced accessibility documentation and WCAG 2.1 AA compliance guidance
|
|
98
|
+
* - Better TypeScript type safety with detailed JSDoc comments
|
|
99
|
+
* - Comprehensive examples for accessible component patterns
|
|
100
|
+
* - More robust style merging with defaultStyles support
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* // Migration Guide
|
|
105
|
+
* // Before:
|
|
106
|
+
* import FP from '@fpkit/acss/components/fp';
|
|
107
|
+
* <FP as="button" styles={{ padding: '1rem' }} classes="btn">
|
|
108
|
+
* Click me
|
|
109
|
+
* </FP>
|
|
110
|
+
*
|
|
111
|
+
* // After:
|
|
112
|
+
* import UI from '@fpkit/acss/components/ui';
|
|
113
|
+
* <UI as="button" styles={{ padding: '1rem' }} classes="btn">
|
|
114
|
+
* Click me
|
|
115
|
+
* </UI>
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
50
118
|
* @param {Object} props - Component props
|
|
51
119
|
* @param {React.ElementType} props.as - The HTML element to render. Defaults to 'div'.
|
|
52
120
|
* @param {boolean} props.renderStyles - Whether to render styles or not. Defaults to true.
|
|
@@ -55,7 +123,7 @@ type FPComponent = <C extends React.ElementType = 'span'>(
|
|
|
55
123
|
* @param {React.ReactNode} props.children - The children to render inside the component.
|
|
56
124
|
* @returns {React.ReactElement} - A React component that renders an HTML element with optional styles.
|
|
57
125
|
*/
|
|
58
|
-
const FP
|
|
126
|
+
const FP = React.forwardRef(
|
|
59
127
|
<C extends React.ElementType>(
|
|
60
128
|
{ as, styles, classes, children, defaultStyles, ...props }: FPProps<C>,
|
|
61
129
|
ref?: PolymorphicRef<C>,
|
|
@@ -70,7 +138,14 @@ const FP: FPComponent = React.forwardRef(
|
|
|
70
138
|
</Component>
|
|
71
139
|
)
|
|
72
140
|
},
|
|
73
|
-
)
|
|
141
|
+
) as FPComponent
|
|
142
|
+
|
|
143
|
+
FP.displayName = 'FP'
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @deprecated This interface is deprecated. Use the `UI` component from './ui.tsx' instead.
|
|
147
|
+
* The UI component provides better type safety and accessibility features.
|
|
148
|
+
*/
|
|
74
149
|
export interface BoxProps extends ComponentProps {
|
|
75
150
|
renderStyles: true
|
|
76
151
|
}
|
|
@@ -3,22 +3,62 @@ import { within, expect } from "storybook/test";
|
|
|
3
3
|
|
|
4
4
|
import Heading from "./heading";
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated This component is deprecated. Use Title component instead.
|
|
8
|
+
*/
|
|
6
9
|
const meta: Meta<typeof Heading> = {
|
|
7
|
-
title: "FP.REACT Components/Heading",
|
|
10
|
+
title: "FP.REACT Components/Heading (Deprecated)",
|
|
8
11
|
component: Heading,
|
|
9
|
-
tags: ["version:1.0.0"],
|
|
12
|
+
tags: ["version:1.0.0", "deprecated"],
|
|
10
13
|
parameters: {
|
|
11
14
|
actions: { argTypesRegex: "^on.*" },
|
|
12
15
|
docs: {
|
|
13
16
|
description: {
|
|
14
|
-
component:
|
|
17
|
+
component: `
|
|
18
|
+
# ⚠️ DEPRECATED: Use Title Component Instead
|
|
19
|
+
|
|
20
|
+
The \`Heading\` component is **deprecated** and will be removed in **v3.0.0**.
|
|
21
|
+
|
|
22
|
+
Please migrate to the new [\`Title\`](?path=/docs/fp-react-components-title--docs) component.
|
|
23
|
+
|
|
24
|
+
## Migration Guide
|
|
25
|
+
|
|
26
|
+
\`\`\`tsx
|
|
27
|
+
// ❌ Old API (deprecated):
|
|
28
|
+
import { Heading } from '@fpkit/acss';
|
|
29
|
+
<Heading type="h2">Section Title</Heading>
|
|
30
|
+
|
|
31
|
+
// ✅ New API:
|
|
32
|
+
import { Title } from '@fpkit/acss';
|
|
33
|
+
<Title level="h2">Section Title</Title>
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
### Key Changes
|
|
37
|
+
|
|
38
|
+
1. **Component Name**: \`Heading\` → \`Title\`
|
|
39
|
+
2. **Prop Name**: \`type\` → \`level\`
|
|
40
|
+
3. **Default Level**: Changed from \`h3\` to \`h2\` (update if you relied on the default)
|
|
41
|
+
|
|
42
|
+
### Why the Change?
|
|
43
|
+
|
|
44
|
+
- **Better API**: \`level\` is more semantic than \`type\`
|
|
45
|
+
- **Improved Accessibility**: Enhanced WCAG 2.1 compliance
|
|
46
|
+
- **Better Documentation**: Comprehensive JSDoc comments
|
|
47
|
+
- **Performance**: Memoization to prevent unnecessary re-renders
|
|
48
|
+
|
|
49
|
+
## Current Behavior
|
|
50
|
+
|
|
51
|
+
This component still works for backwards compatibility but will log deprecation warnings in development mode.
|
|
52
|
+
|
|
53
|
+
**Removal Timeline**: v3.0.0 (TBD)
|
|
54
|
+
`,
|
|
15
55
|
},
|
|
16
56
|
},
|
|
17
57
|
},
|
|
18
58
|
args: {
|
|
19
59
|
children: "Default title",
|
|
20
60
|
},
|
|
21
|
-
}
|
|
61
|
+
} satisfies Meta<typeof Heading>;
|
|
22
62
|
|
|
23
63
|
export default meta;
|
|
24
64
|
type Story = StoryObj<typeof Heading>;
|
|
@@ -1,27 +1,93 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import
|
|
3
|
-
import { type } from 'os'
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Title from "#components/title/title";
|
|
4
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated Use `Title` component instead. This component will be removed in v3.0.0.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* The `Heading` component has been deprecated in favor of the new `Title` component
|
|
9
|
+
* which offers improved API design and better accessibility features.
|
|
10
|
+
*
|
|
11
|
+
* **Migration Guide:**
|
|
12
|
+
* - Rename `Heading` → `Title`
|
|
13
|
+
* - Rename prop `type` → `level`
|
|
14
|
+
* - Default level changed from `h3` → `h2` (update if you relied on the default)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Before (deprecated):
|
|
18
|
+
* <Heading type="h2">Section Title</Heading>
|
|
19
|
+
*
|
|
20
|
+
* // After:
|
|
21
|
+
* <Title level="h2">Section Title</Title>
|
|
22
|
+
*
|
|
23
|
+
* @see {@link Title} for the new component
|
|
24
|
+
*/
|
|
5
25
|
export type TitleProps = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Use `level` prop on the `Title` component instead.
|
|
28
|
+
*/
|
|
29
|
+
children: React.ReactNode;
|
|
10
30
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
ui,
|
|
16
|
-
children,
|
|
17
|
-
...props
|
|
18
|
-
}: TitleProps) => {
|
|
19
|
-
return (
|
|
20
|
-
<UI as={type} id={id} styles={styles} data-ui={ui} {...props}>
|
|
21
|
-
{children}
|
|
22
|
-
</UI>
|
|
23
|
-
)
|
|
24
|
-
}
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Use `level` prop on the `Title` component instead.
|
|
33
|
+
*/
|
|
34
|
+
type?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
25
35
|
|
|
26
|
-
|
|
27
|
-
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Use `ui` prop on the `Title` component.
|
|
38
|
+
*/
|
|
39
|
+
ui?: string;
|
|
40
|
+
} & Omit<React.ComponentPropsWithoutRef<typeof Title>, 'level'>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Heading - Deprecated component wrapper for Title.
|
|
44
|
+
*
|
|
45
|
+
* @deprecated Use {@link Title} component instead. Will be removed in v3.0.0.
|
|
46
|
+
*
|
|
47
|
+
* This component provides backwards compatibility for existing code using
|
|
48
|
+
* the old `Heading` component API. It forwards all props to the new `Title`
|
|
49
|
+
* component with appropriate prop name mapping.
|
|
50
|
+
*
|
|
51
|
+
* **Breaking Changes in v3.0.0:**
|
|
52
|
+
* - This component will be removed
|
|
53
|
+
* - Migrate to `Title` component before upgrading
|
|
54
|
+
*
|
|
55
|
+
* **Migration Steps:**
|
|
56
|
+
* 1. Replace all `<Heading>` imports with `<Title>`
|
|
57
|
+
* 2. Rename `type` prop to `level`
|
|
58
|
+
* 3. Review default behavior (default changed from h3 to h2)
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Old API (still works but deprecated):
|
|
62
|
+
* import { Heading } from '@fpkit/acss';
|
|
63
|
+
* <Heading type="h2">Section</Heading>
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* // New API (recommended):
|
|
67
|
+
* import { Title } from '@fpkit/acss';
|
|
68
|
+
* <Title level="h2">Section</Title>
|
|
69
|
+
*
|
|
70
|
+
* @param {TitleProps} props - Component props (maps old API to new)
|
|
71
|
+
* @returns {React.ReactElement} The rendered Title component
|
|
72
|
+
*/
|
|
73
|
+
const Heading = React.forwardRef<HTMLHeadingElement, TitleProps>(
|
|
74
|
+
({ type = "h3", ...props }, ref) => {
|
|
75
|
+
// Development warning for deprecated usage
|
|
76
|
+
if (process.env.NODE_ENV === "development") {
|
|
77
|
+
// eslint-disable-next-line no-console
|
|
78
|
+
console.warn(
|
|
79
|
+
`[@fpkit/acss] Heading component is deprecated and will be removed in v3.0.0. ` +
|
|
80
|
+
`Please use the Title component instead.\n` +
|
|
81
|
+
`Migration: <Heading type="${type}"> → <Title level="${type}">\n` +
|
|
82
|
+
`See documentation: https://fpkit.dev/components/title`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Map old 'type' prop to new 'level' prop
|
|
87
|
+
return <Title level={type} ref={ref} {...props} />;
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
Heading.displayName = "Heading (Deprecated)";
|
|
92
|
+
|
|
93
|
+
export default Heading;
|