@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,133 @@
|
|
|
1
|
+
import { CSSProperties, ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Base properties shared by all dialog variants.
|
|
5
|
+
*
|
|
6
|
+
* @property {string} dialogTitle - The title displayed in the dialog header
|
|
7
|
+
* @property {string} [dialogLabel] - Optional accessible label for the dialog (aria-label)
|
|
8
|
+
* @property {ReactNode} children - Content to be displayed inside the dialog body
|
|
9
|
+
* @property {string} [className] - Additional CSS classes to apply to the dialog
|
|
10
|
+
* @property {CSSProperties} [styles] - Inline styles to apply to the dialog element
|
|
11
|
+
*/
|
|
12
|
+
export interface BaseDialogProps {
|
|
13
|
+
/** The title displayed in the dialog header */
|
|
14
|
+
dialogTitle: string;
|
|
15
|
+
/** Optional accessible label for the dialog (aria-label) */
|
|
16
|
+
dialogLabel?: string;
|
|
17
|
+
/** Content to be displayed inside the dialog body */
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
/** Additional CSS classes to apply to the dialog */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Inline styles to apply to the dialog element */
|
|
22
|
+
styles?: CSSProperties;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Props for the controlled Dialog component.
|
|
27
|
+
* Use this when you want to manage dialog state externally.
|
|
28
|
+
*
|
|
29
|
+
* @extends BaseDialogProps
|
|
30
|
+
* @property {boolean} isOpen - Controls whether the dialog is currently open
|
|
31
|
+
* @property {(open: boolean) => void} onOpenChange - Callback fired when dialog open state should change
|
|
32
|
+
* @property {boolean} [isAlertDialog=false] - If true, renders as non-modal inline alert using dialog.show()
|
|
33
|
+
* @property {() => void} [onClose] - Deprecated: Use onOpenChange instead. Called when dialog closes.
|
|
34
|
+
* @property {() => void | Promise<void>} [onConfirm] - Callback fired when confirm button is clicked
|
|
35
|
+
* @property {string} [confirmLabel="Confirm"] - Text label for the confirm button
|
|
36
|
+
* @property {string} [cancelLabel="Cancel"] - Text label for the cancel button
|
|
37
|
+
* @property {boolean} [hideFooter=false] - If true, hides the dialog footer with action buttons
|
|
38
|
+
*/
|
|
39
|
+
export interface DialogProps extends BaseDialogProps {
|
|
40
|
+
/** Controls whether the dialog is currently open (controlled component) */
|
|
41
|
+
isOpen: boolean;
|
|
42
|
+
/** Callback fired when dialog open state should change */
|
|
43
|
+
onOpenChange: (open: boolean) => void;
|
|
44
|
+
/** If true, renders as non-modal inline alert using dialog.show() instead of dialog.showModal() */
|
|
45
|
+
isAlertDialog?: boolean;
|
|
46
|
+
/** @deprecated Use onOpenChange instead. Called when dialog closes. */
|
|
47
|
+
onClose?: () => void;
|
|
48
|
+
/** Callback fired when confirm button is clicked */
|
|
49
|
+
onConfirm?: () => void | Promise<void>;
|
|
50
|
+
/** Text label for the confirm button */
|
|
51
|
+
confirmLabel?: string;
|
|
52
|
+
/** Text label for the cancel button */
|
|
53
|
+
cancelLabel?: string;
|
|
54
|
+
/** If true, hides the dialog footer with action buttons */
|
|
55
|
+
hideFooter?: boolean;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Props for the DialogModal wrapper component.
|
|
60
|
+
* This component manages dialog state internally and provides a trigger button.
|
|
61
|
+
* Use this for simple cases where you don't need external state management.
|
|
62
|
+
*
|
|
63
|
+
* @extends BaseDialogProps
|
|
64
|
+
* @property {boolean} [isAlertDialog=false] - If true, renders as non-modal inline alert
|
|
65
|
+
* @property {() => void} [onClose] - Callback fired when dialog is closed
|
|
66
|
+
* @property {() => void | Promise<void>} [onConfirm] - Callback fired when confirm button is clicked
|
|
67
|
+
* @property {string} [confirmLabel="Confirm"] - Text label for the confirm button
|
|
68
|
+
* @property {string} [cancelLabel="Cancel"] - Text label for the cancel button
|
|
69
|
+
* @property {boolean} [hideFooter=false] - If true, hides the dialog footer
|
|
70
|
+
* @property {string} [btnLabel="Open Dialog"] - Text label for the trigger button
|
|
71
|
+
* @property {"sm" | "md" | "lg"} [btnSize="sm"] - Size variant for the trigger button
|
|
72
|
+
* @property {() => void} [btnOnClick] - Callback fired when trigger button is clicked (before opening)
|
|
73
|
+
*/
|
|
74
|
+
export interface DialogModalProps extends BaseDialogProps {
|
|
75
|
+
/** If true, renders as non-modal inline alert using dialog.show() */
|
|
76
|
+
isAlertDialog?: boolean;
|
|
77
|
+
/** Callback fired when dialog is closed */
|
|
78
|
+
onClose?: () => void;
|
|
79
|
+
/** Callback fired when confirm button is clicked */
|
|
80
|
+
onConfirm?: () => void | Promise<void>;
|
|
81
|
+
/** Text label for the confirm button */
|
|
82
|
+
confirmLabel?: string;
|
|
83
|
+
/** Text label for the cancel button */
|
|
84
|
+
cancelLabel?: string;
|
|
85
|
+
/** If true, hides the dialog footer with action buttons */
|
|
86
|
+
hideFooter?: boolean;
|
|
87
|
+
/** Text label for the trigger button that opens the dialog */
|
|
88
|
+
btnLabel?: string;
|
|
89
|
+
/** Size variant for the trigger button */
|
|
90
|
+
btnSize?: "sm" | "md" | "lg";
|
|
91
|
+
/** Callback fired when trigger button is clicked (before opening dialog) */
|
|
92
|
+
btnOnClick?: () => void;
|
|
93
|
+
/** Additional props to pass to the trigger button component */
|
|
94
|
+
btnProps?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Props for the DialogHeader component.
|
|
99
|
+
*
|
|
100
|
+
* @property {string} dialogTitle - The title text to display in the header
|
|
101
|
+
* @property {() => void} onClick - Callback fired when the close button is clicked
|
|
102
|
+
* @property {string} [id] - Optional ID for aria-labelledby linking. Auto-generated if not provided.
|
|
103
|
+
* @property {"h1" | "h2" | "h3" | "h4" | "h5" | "h6"} [type="h3"] - Heading level for the title
|
|
104
|
+
*/
|
|
105
|
+
export interface DialogHeaderProps {
|
|
106
|
+
/** The title text to display in the header */
|
|
107
|
+
dialogTitle: string;
|
|
108
|
+
/** Callback fired when the close button is clicked */
|
|
109
|
+
onClick: () => void;
|
|
110
|
+
/** Optional ID for aria-labelledby linking. Auto-generated if not provided. */
|
|
111
|
+
id?: string;
|
|
112
|
+
/** Heading level for the title */
|
|
113
|
+
type?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Props for the DialogFooter component.
|
|
118
|
+
*
|
|
119
|
+
* @property {() => void} onClose - Callback fired when cancel button is clicked
|
|
120
|
+
* @property {() => void | Promise<void>} [onConfirm] - Callback fired when confirm button is clicked
|
|
121
|
+
* @property {string} confirmLabel - Text label for the confirm button
|
|
122
|
+
* @property {string} cancelLabel - Text label for the cancel button
|
|
123
|
+
*/
|
|
124
|
+
export interface DialogFooterProps {
|
|
125
|
+
/** Callback fired when cancel button is clicked */
|
|
126
|
+
onClose: () => void;
|
|
127
|
+
/** Callback fired when confirm button is clicked */
|
|
128
|
+
onConfirm?: () => void | Promise<void>;
|
|
129
|
+
/** Text label for the confirm button */
|
|
130
|
+
confirmLabel: string;
|
|
131
|
+
/** Text label for the cancel button */
|
|
132
|
+
cancelLabel: string;
|
|
133
|
+
}
|
|
@@ -1,26 +1,67 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
2
|
import UI from "#components/ui";
|
|
3
3
|
import Button from "#components/buttons/button";
|
|
4
|
+
import type { DialogFooterProps } from "../dialog.types";
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
/**
|
|
7
|
+
* DialogFooter component renders action buttons for dialog confirmation/cancellation.
|
|
8
|
+
*
|
|
9
|
+
* This component provides a consistent footer layout with:
|
|
10
|
+
* - Cancel button (secondary style) - Always shown if cancelLabel provided
|
|
11
|
+
* - Confirm button (primary style) - Only shown if onConfirm callback provided
|
|
12
|
+
* - Proper semantic button types
|
|
13
|
+
* - Accessible button sizing and spacing
|
|
14
|
+
* - Memoized to prevent unnecessary re-renders
|
|
15
|
+
*
|
|
16
|
+
* @component
|
|
17
|
+
* @param {DialogFooterProps} props - Component props
|
|
18
|
+
* @param {() => void} props.onClose - Callback fired when cancel button is clicked
|
|
19
|
+
* @param {() => void | Promise<void>} [props.onConfirm] - Optional callback for confirm action. If omitted, confirm button is hidden.
|
|
20
|
+
* @param {string} props.confirmLabel - Text label for the confirm button
|
|
21
|
+
* @param {string} props.cancelLabel - Text label for the cancel button
|
|
22
|
+
* @returns {JSX.Element} A footer section with action buttons
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* // Simple close-only footer
|
|
27
|
+
* <DialogFooter
|
|
28
|
+
* onClose={() => setOpen(false)}
|
|
29
|
+
* cancelLabel="Close"
|
|
30
|
+
* confirmLabel="OK"
|
|
31
|
+
* />
|
|
32
|
+
*
|
|
33
|
+
* // Confirmation dialog with both actions
|
|
34
|
+
* <DialogFooter
|
|
35
|
+
* onClose={() => setOpen(false)}
|
|
36
|
+
* onConfirm={async () => await deleteItem()}
|
|
37
|
+
* confirmLabel="Delete"
|
|
38
|
+
* cancelLabel="Cancel"
|
|
39
|
+
* />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
12
42
|
const DialogFooter: React.FC<DialogFooterProps> = ({
|
|
13
43
|
onClose,
|
|
14
44
|
onConfirm,
|
|
15
45
|
confirmLabel,
|
|
16
46
|
cancelLabel,
|
|
17
47
|
}) => {
|
|
48
|
+
// Memoize handlers to prevent unnecessary re-renders
|
|
49
|
+
const handleCancel = useCallback(() => {
|
|
50
|
+
onClose();
|
|
51
|
+
}, [onClose]);
|
|
52
|
+
|
|
53
|
+
const handleConfirm = useCallback(() => {
|
|
54
|
+
if (onConfirm) {
|
|
55
|
+
onConfirm();
|
|
56
|
+
}
|
|
57
|
+
}, [onConfirm]);
|
|
58
|
+
|
|
18
59
|
return (
|
|
19
60
|
<UI as="section" className="dialog-footer">
|
|
20
61
|
{cancelLabel && (
|
|
21
62
|
<Button
|
|
22
63
|
type="button"
|
|
23
|
-
onClick={
|
|
64
|
+
onClick={handleCancel}
|
|
24
65
|
className="dialog-button button-secondary"
|
|
25
66
|
data-btn="sm"
|
|
26
67
|
>
|
|
@@ -31,7 +72,7 @@ const DialogFooter: React.FC<DialogFooterProps> = ({
|
|
|
31
72
|
{onConfirm && (
|
|
32
73
|
<Button
|
|
33
74
|
type="button"
|
|
34
|
-
onClick={
|
|
75
|
+
onClick={handleConfirm}
|
|
35
76
|
className="dialog-button button-primary"
|
|
36
77
|
data-btn="sm"
|
|
37
78
|
>
|
|
@@ -42,4 +83,6 @@ const DialogFooter: React.FC<DialogFooterProps> = ({
|
|
|
42
83
|
);
|
|
43
84
|
};
|
|
44
85
|
|
|
45
|
-
|
|
86
|
+
DialogFooter.displayName = "DialogFooter";
|
|
87
|
+
|
|
88
|
+
export default React.memo(DialogFooter);
|
|
@@ -1,45 +1,50 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
2
|
import UI from "#components/ui";
|
|
3
3
|
import Heading from "#components/heading/heading";
|
|
4
4
|
import Button from "#components/buttons/button";
|
|
5
5
|
import Icon from "#components/icons/icon";
|
|
6
|
-
|
|
7
|
-
export type DialogHeaderProps = {
|
|
8
|
-
dialogTitle: string;
|
|
9
|
-
onClick: () => void;
|
|
10
|
-
} & React.ComponentProps<typeof Heading>;
|
|
6
|
+
import type { DialogHeaderProps } from "../dialog.types";
|
|
11
7
|
|
|
12
8
|
/**
|
|
13
9
|
* DialogHeader component displays the header section of a dialog with a title and close button.
|
|
14
10
|
*
|
|
11
|
+
* This component is optimized for accessibility with:
|
|
12
|
+
* - Unique ID for `aria-labelledby` linking to parent dialog
|
|
13
|
+
* - Semantic heading structure for screen readers
|
|
14
|
+
* - Clear close button with accessible label
|
|
15
|
+
* - Memoized to prevent unnecessary re-renders
|
|
16
|
+
*
|
|
15
17
|
* @component
|
|
16
|
-
* @param {
|
|
18
|
+
* @param {DialogHeaderProps} props - Component props
|
|
17
19
|
* @param {string} props.dialogTitle - The title text to display in the dialog header
|
|
18
20
|
* @param {() => void} props.onClick - Callback function triggered when close button is clicked
|
|
19
|
-
* @param {string} [props.
|
|
21
|
+
* @param {string} [props.id] - Optional ID for aria-labelledby linking. Auto-generated if not provided.
|
|
22
|
+
* @param {"h1" | "h2" | "h3" | "h4" | "h5" | "h6"} [props.type="h3"] - Heading level for semantic structure
|
|
20
23
|
* @returns {JSX.Element} A dialog header with title and close button
|
|
21
24
|
*
|
|
22
25
|
* @example
|
|
23
|
-
* ```
|
|
26
|
+
* ```tsx
|
|
24
27
|
* <DialogHeader
|
|
28
|
+
* id="dialog-title-1"
|
|
25
29
|
* dialogTitle="Confirm Action"
|
|
26
30
|
* onClick={() => setIsOpen(false)}
|
|
27
31
|
* type="h2"
|
|
28
32
|
* />
|
|
29
33
|
* ```
|
|
30
34
|
*/
|
|
31
|
-
|
|
32
|
-
const DialogHeader = ({
|
|
35
|
+
const DialogHeader: React.FC<DialogHeaderProps> = ({
|
|
33
36
|
dialogTitle,
|
|
34
37
|
onClick,
|
|
38
|
+
id,
|
|
35
39
|
type = "h3",
|
|
36
|
-
}
|
|
37
|
-
const handleClose = () => {
|
|
40
|
+
}) => {
|
|
41
|
+
const handleClose = useCallback(() => {
|
|
38
42
|
onClick();
|
|
39
|
-
};
|
|
43
|
+
}, [onClick]);
|
|
44
|
+
|
|
40
45
|
return (
|
|
41
46
|
<UI as="div" classes="dialog-header">
|
|
42
|
-
<Heading type={type} className="dialog-title">
|
|
47
|
+
<Heading type={type} className="dialog-title" id={id}>
|
|
43
48
|
{dialogTitle || "Dialog"}
|
|
44
49
|
</Heading>
|
|
45
50
|
<Button
|