@postenbring/hedwig-react 0.0.81 → 0.0.83
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/dist/accordion/accordion-content.d.ts +6 -2
- package/dist/accordion/accordion-content.d.ts.map +1 -0
- package/dist/accordion/accordion-header.d.ts +6 -2
- package/dist/accordion/accordion-header.d.ts.map +1 -0
- package/dist/accordion/accordion-item.d.ts +24 -3
- package/dist/accordion/accordion-item.d.ts.map +1 -0
- package/dist/accordion/accordion.d.ts +44 -2
- package/dist/accordion/accordion.d.ts.map +1 -0
- package/dist/accordion/accordion.js +102 -4
- package/dist/accordion/accordion.js.map +1 -1
- package/dist/accordion/accordion.mjs +5 -1
- package/dist/accordion/context.d.ts +7 -2
- package/dist/accordion/context.d.ts.map +1 -0
- package/dist/accordion/index.d.ts +9 -9
- package/dist/accordion/index.d.ts.map +1 -0
- package/dist/accordion/index.js +52 -53
- package/dist/accordion/index.js.map +1 -1
- package/dist/accordion/index.mjs +7 -7
- package/dist/badge/badge.d.ts +21 -5
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/index.d.ts +3 -6
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/box/box.d.ts +50 -4
- package/dist/box/box.d.ts.map +1 -0
- package/dist/box/box.js +15 -14
- package/dist/box/box.js.map +1 -1
- package/dist/box/box.mjs +1 -1
- package/dist/box/index.d.ts +3 -4
- package/dist/box/index.d.ts.map +1 -0
- package/dist/box/index.js +16 -19
- package/dist/box/index.js.map +1 -1
- package/dist/box/index.mjs +4 -5
- package/dist/breadcrumbs/breadcrumbs.d.ts +33 -2
- package/dist/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/breadcrumbs/index.d.ts +3 -2
- package/dist/breadcrumbs/index.d.ts.map +1 -0
- package/dist/button/button.d.ts +33 -3
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/index.d.ts +3 -3
- package/dist/button/index.d.ts.map +1 -0
- package/dist/card/card.d.ts +69 -12
- package/dist/card/card.d.ts.map +1 -0
- package/dist/card/card.js +17 -6
- package/dist/card/card.js.map +1 -1
- package/dist/card/card.mjs +1 -1
- package/dist/card/index.d.ts +3 -12
- package/dist/card/index.d.ts.map +1 -0
- package/dist/card/index.js +18 -19
- package/dist/card/index.js.map +1 -1
- package/dist/card/index.mjs +4 -5
- package/dist/{chunk-6R7AXKBR.mjs → chunk-35TXKAUH.mjs} +2 -2
- package/dist/chunk-35TXKAUH.mjs.map +1 -0
- package/dist/{chunk-XC3UHH2U.mjs → chunk-3WVRY6CC.mjs} +4 -4
- package/dist/{chunk-XC3UHH2U.mjs.map → chunk-3WVRY6CC.mjs.map} +1 -1
- package/dist/{chunk-67TP3E2D.mjs → chunk-6FBPKLWB.mjs} +3 -3
- package/dist/chunk-6FBPKLWB.mjs.map +1 -0
- package/dist/chunk-7YWW46R3.mjs +1 -0
- package/dist/{chunk-ENKVTAJB.mjs → chunk-AJWSQEDP.mjs} +18 -17
- package/dist/chunk-AJWSQEDP.mjs.map +1 -0
- package/dist/chunk-ARHJZUZG.mjs +1 -0
- package/dist/{chunk-4WQWU5TL.mjs → chunk-AXQCREUJ.mjs} +2 -2
- package/dist/chunk-AXQCREUJ.mjs.map +1 -0
- package/dist/chunk-BCFV6VOE.mjs +1 -0
- package/dist/{chunk-F2C3KZFX.mjs → chunk-BVPSZ3JI.mjs} +2 -2
- package/dist/chunk-BVPSZ3JI.mjs.map +1 -0
- package/dist/{chunk-7JRS4WEB.mjs → chunk-C34HEQXO.mjs} +33 -29
- package/dist/chunk-C34HEQXO.mjs.map +1 -0
- package/dist/chunk-CYDWEPFL.mjs +1 -0
- package/dist/{chunk-PLXB3TNA.mjs → chunk-D7QPJIUZ.mjs} +5 -5
- package/dist/{chunk-PLXB3TNA.mjs.map → chunk-D7QPJIUZ.mjs.map} +1 -1
- package/dist/{chunk-GSJPTZT3.mjs → chunk-FC4CEI2V.mjs} +34 -19
- package/dist/chunk-FC4CEI2V.mjs.map +1 -0
- package/dist/chunk-FYFJ75NX.mjs +1 -0
- package/dist/chunk-FYFJ75NX.mjs.map +1 -0
- package/dist/chunk-G65EYZFQ.mjs +1 -0
- package/dist/chunk-G65EYZFQ.mjs.map +1 -0
- package/dist/chunk-H3E546OT.mjs +1 -0
- package/dist/chunk-H3E546OT.mjs.map +1 -0
- package/dist/chunk-HQVL3ZJ2.mjs +1 -0
- package/dist/chunk-HQVL3ZJ2.mjs.map +1 -0
- package/dist/{chunk-KPGSRU4I.mjs → chunk-M3Y3XOGC.mjs} +13 -1
- package/dist/chunk-M3Y3XOGC.mjs.map +1 -0
- package/dist/{chunk-CIHZDFSQ.mjs → chunk-NU6OSFAU.mjs} +20 -9
- package/dist/chunk-NU6OSFAU.mjs.map +1 -0
- package/dist/{chunk-XUWZ4HGD.mjs → chunk-OGZ2NBMH.mjs} +49 -46
- package/dist/chunk-OGZ2NBMH.mjs.map +1 -0
- package/dist/{chunk-3MQKXNZ6.mjs → chunk-QZZIOBF4.mjs} +13 -1
- package/dist/chunk-QZZIOBF4.mjs.map +1 -0
- package/dist/chunk-RC76SXBP.mjs +1 -0
- package/dist/chunk-RC76SXBP.mjs.map +1 -0
- package/dist/{chunk-TQDUBRCZ.mjs → chunk-SQ63E7KM.mjs} +24 -22
- package/dist/chunk-SQ63E7KM.mjs.map +1 -0
- package/dist/{chunk-DEX36MFK.mjs → chunk-TDXU2IC6.mjs} +3 -4
- package/dist/chunk-TDXU2IC6.mjs.map +1 -0
- package/dist/{chunk-ES6ISHOV.mjs → chunk-UP3M3NEZ.mjs} +14 -13
- package/dist/{chunk-ES6ISHOV.mjs.map → chunk-UP3M3NEZ.mjs.map} +1 -1
- package/dist/chunk-ZKMFJZSH.mjs +1 -0
- package/dist/chunk-ZKMFJZSH.mjs.map +1 -0
- package/dist/description-list/description-list.d.ts +42 -2
- package/dist/description-list/description-list.d.ts.map +1 -0
- package/dist/description-list/index.d.ts +3 -2
- package/dist/description-list/index.d.ts.map +1 -0
- package/dist/footer/footer.d.ts +67 -7
- package/dist/footer/footer.d.ts.map +1 -0
- package/dist/footer/footer.js +79 -76
- package/dist/footer/footer.js.map +1 -1
- package/dist/footer/footer.mjs +4 -4
- package/dist/footer/index.d.ts +3 -7
- package/dist/footer/index.d.ts.map +1 -0
- package/dist/footer/index.js +80 -84
- package/dist/footer/index.js.map +1 -1
- package/dist/footer/index.mjs +7 -8
- package/dist/form/checkbox/checkbox.d.ts +28 -2
- package/dist/form/checkbox/checkbox.d.ts.map +1 -0
- package/dist/form/checkbox/index.d.ts +3 -2
- package/dist/form/checkbox/index.d.ts.map +1 -0
- package/dist/form/date-picker/date-picker.d.ts +33 -2
- package/dist/form/date-picker/date-picker.d.ts.map +1 -0
- package/dist/form/date-picker/date-picker.js +1 -1
- package/dist/form/date-picker/date-picker.js.map +1 -1
- package/dist/form/date-picker/date-picker.mjs +2 -2
- package/dist/form/date-picker/index.d.ts +3 -2
- package/dist/form/date-picker/index.d.ts.map +1 -0
- package/dist/form/date-picker/index.js +1 -1
- package/dist/form/date-picker/index.js.map +1 -1
- package/dist/form/date-picker/index.mjs +2 -2
- package/dist/form/error-message/error-message.d.ts +8 -2
- package/dist/form/error-message/error-message.d.ts.map +1 -0
- package/dist/form/error-message/index.d.ts +3 -2
- package/dist/form/error-message/index.d.ts.map +1 -0
- package/dist/form/fieldset/fieldset.d.ts +22 -3
- package/dist/form/fieldset/fieldset.d.ts.map +1 -0
- package/dist/form/fieldset/index.d.ts +3 -3
- package/dist/form/fieldset/index.d.ts.map +1 -0
- package/dist/form/index.d.ts +9 -20
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +1 -1
- package/dist/form/index.js.map +1 -1
- package/dist/form/index.mjs +2 -2
- package/dist/form/input/index.d.ts +3 -2
- package/dist/form/input/index.d.ts.map +1 -0
- package/dist/form/input/input.d.ts +5 -2
- package/dist/form/input/input.d.ts.map +1 -0
- package/dist/form/input-group/index.d.ts +3 -2
- package/dist/form/input-group/index.d.ts.map +1 -0
- package/dist/form/input-group/input-group.d.ts +27 -2
- package/dist/form/input-group/input-group.d.ts.map +1 -0
- package/dist/form/radiobutton/index.d.ts +5 -5
- package/dist/form/radiobutton/index.d.ts.map +1 -0
- package/dist/form/radiobutton/radiobutton.d.ts +17 -2
- package/dist/form/radiobutton/radiobutton.d.ts.map +1 -0
- package/dist/form/radiobutton/radiogroup.d.ts +24 -3
- package/dist/form/radiobutton/radiogroup.d.ts.map +1 -0
- package/dist/form/select/index.d.ts +3 -2
- package/dist/form/select/index.d.ts.map +1 -0
- package/dist/form/select/select.d.ts +9 -2
- package/dist/form/select/select.d.ts.map +1 -0
- package/dist/form/textarea/index.d.ts +3 -2
- package/dist/form/textarea/index.d.ts.map +1 -0
- package/dist/form/textarea/textarea.d.ts +5 -2
- package/dist/form/textarea/textarea.d.ts.map +1 -0
- package/dist/help-text/help-text.d.ts +51 -1
- package/dist/help-text/help-text.d.ts.map +1 -0
- package/dist/help-text/help-text.js +17 -20
- package/dist/help-text/help-text.js.map +1 -1
- package/dist/help-text/help-text.mjs +3 -3
- package/dist/help-text/index.d.ts +3 -1
- package/dist/help-text/index.d.ts.map +1 -0
- package/dist/help-text/index.js +17 -20
- package/dist/help-text/index.js.map +1 -1
- package/dist/help-text/index.mjs +3 -3
- package/dist/index-no-css.d.ts +26 -128
- package/dist/index-no-css.d.ts.map +1 -0
- package/dist/index-no-css.js +385 -398
- package/dist/index-no-css.js.map +1 -1
- package/dist/index-no-css.mjs +70 -68
- package/dist/index.d.ts +11 -128
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -398
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +70 -68
- package/dist/index.mjs.map +1 -1
- package/dist/layout/container/container.d.ts +23 -2
- package/dist/layout/container/container.d.ts.map +1 -0
- package/dist/layout/grid/grid.d.ts +101 -4
- package/dist/layout/grid/grid.d.ts.map +1 -0
- package/dist/layout/grid/grid.js +11 -10
- package/dist/layout/grid/grid.js.map +1 -1
- package/dist/layout/grid/grid.mjs +1 -1
- package/dist/layout/grid/index.d.ts +3 -4
- package/dist/layout/grid/index.d.ts.map +1 -0
- package/dist/layout/grid/index.js +12 -15
- package/dist/layout/grid/index.js.map +1 -1
- package/dist/layout/grid/index.mjs +4 -5
- package/dist/layout/index.d.ts +4 -10
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +12 -15
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/index.mjs +4 -5
- package/dist/layout/responsive.d.ts +10 -2
- package/dist/layout/responsive.d.ts.map +1 -0
- package/dist/layout/spacing.d.ts +33 -3
- package/dist/layout/spacing.d.ts.map +1 -0
- package/dist/layout/stack/index.d.ts +3 -4
- package/dist/layout/stack/index.d.ts.map +1 -0
- package/dist/layout/stack/stack.d.ts +62 -4
- package/dist/layout/stack/stack.d.ts.map +1 -0
- package/dist/link/index.d.ts +3 -2
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/link.d.ts +20 -2
- package/dist/link/link.d.ts.map +1 -0
- package/dist/list/index.d.ts +5 -5
- package/dist/list/index.d.ts.map +1 -0
- package/dist/list/link-list.d.ts +12 -2
- package/dist/list/link-list.d.ts.map +1 -0
- package/dist/list/list.d.ts +40 -3
- package/dist/list/list.d.ts.map +1 -0
- package/dist/message/index.d.ts +3 -3
- package/dist/message/index.d.ts.map +1 -0
- package/dist/message/index.js +36 -38
- package/dist/message/index.js.map +1 -1
- package/dist/message/index.mjs +5 -6
- package/dist/message/message.d.ts +36 -4
- package/dist/message/message.d.ts.map +1 -0
- package/dist/message/message.js +35 -32
- package/dist/message/message.js.map +1 -1
- package/dist/message/message.mjs +2 -2
- package/dist/modal/index.d.ts +3 -5
- package/dist/modal/index.d.ts.map +1 -0
- package/dist/modal/index.js +61 -63
- package/dist/modal/index.js.map +1 -1
- package/dist/modal/index.mjs +6 -7
- package/dist/modal/modal.d.ts +81 -5
- package/dist/modal/modal.d.ts.map +1 -0
- package/dist/modal/modal.js +60 -56
- package/dist/modal/modal.js.map +1 -1
- package/dist/modal/modal.mjs +3 -3
- package/dist/navbar/icons.d.ts +3 -2
- package/dist/navbar/icons.d.ts.map +1 -0
- package/dist/navbar/index.d.ts +4 -13
- package/dist/navbar/index.d.ts.map +1 -0
- package/dist/navbar/index.js +145 -146
- package/dist/navbar/index.js.map +1 -1
- package/dist/navbar/index.mjs +6 -7
- package/dist/navbar/navbar-expandable-menu.d.ts +35 -7
- package/dist/navbar/navbar-expandable-menu.d.ts.map +1 -0
- package/dist/navbar/navbar-expandable-menu.js +1 -1
- package/dist/navbar/navbar-expandable-menu.js.map +1 -1
- package/dist/navbar/navbar-expandable-menu.mjs +2 -2
- package/dist/navbar/navbar.d.ts +130 -9
- package/dist/navbar/navbar.d.ts.map +1 -0
- package/dist/navbar/navbar.js +237 -28
- package/dist/navbar/navbar.js.map +1 -1
- package/dist/navbar/navbar.mjs +4 -1
- package/dist/show-more/index.d.ts +5 -4
- package/dist/show-more/index.d.ts.map +1 -0
- package/dist/show-more/index.js +3 -3
- package/dist/show-more/index.js.map +1 -1
- package/dist/show-more/index.mjs +2 -2
- package/dist/show-more/show-more.d.ts +42 -2
- package/dist/show-more/show-more.d.ts.map +1 -0
- package/dist/skeleton/index.d.ts +3 -2
- package/dist/skeleton/index.d.ts.map +1 -0
- package/dist/skeleton/skeleton.d.ts +67 -2
- package/dist/skeleton/skeleton.d.ts.map +1 -0
- package/dist/step-indicator/index.d.ts +3 -1
- package/dist/step-indicator/index.d.ts.map +1 -0
- package/dist/step-indicator/step-indicator.d.ts +36 -1
- package/dist/step-indicator/step-indicator.d.ts.map +1 -0
- package/dist/styled-html/index.d.ts +3 -2
- package/dist/styled-html/index.d.ts.map +1 -0
- package/dist/styled-html/styled-html.d.ts +36 -2
- package/dist/styled-html/styled-html.d.ts.map +1 -0
- package/dist/table/index.d.ts +3 -1
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/table.d.ts +25 -1
- package/dist/table/table.d.ts.map +1 -0
- package/dist/tabs/context.d.ts +8 -3
- package/dist/tabs/context.d.ts.map +1 -0
- package/dist/tabs/index.d.ts +7 -10
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.js +35 -38
- package/dist/tabs/index.js.map +1 -1
- package/dist/tabs/index.mjs +6 -6
- package/dist/tabs/tabs-content.d.ts +26 -4
- package/dist/tabs/tabs-content.d.ts.map +1 -0
- package/dist/tabs/tabs-list.d.ts +21 -4
- package/dist/tabs/tabs-list.d.ts.map +1 -0
- package/dist/tabs/tabs-list.js +1 -1
- package/dist/tabs/tabs-list.js.map +1 -1
- package/dist/tabs/tabs-list.mjs +2 -2
- package/dist/tabs/tabs.d.ts +26 -2
- package/dist/tabs/tabs.d.ts.map +1 -0
- package/dist/tabs/tabs.js +205 -8
- package/dist/tabs/tabs.js.map +1 -1
- package/dist/tabs/tabs.mjs +4 -1
- package/dist/text/index.d.ts +4 -2
- package/dist/text/index.d.ts.map +1 -0
- package/dist/text/text.d.ts +58 -2
- package/dist/text/text.d.ts.map +1 -0
- package/dist/utils/auto-animate-height.d.ts +33 -0
- package/dist/utils/auto-animate-height.d.ts.map +1 -0
- package/dist/{utilities → utils}/auto-animate-height.js +3 -3
- package/dist/utils/auto-animate-height.js.map +1 -0
- package/dist/utils/auto-animate-height.mjs +9 -0
- package/dist/utils/auto-animate-height.mjs.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{utilities → utils}/index.js +81 -11
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +19 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/utils.d.ts +24 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/{utils.js → utils/utils.js} +1 -3
- package/dist/utils/utils.js.map +1 -0
- package/dist/utils/utils.mjs +14 -0
- package/dist/utils/utils.mjs.map +1 -0
- package/dist/warning-banner/index.d.ts +3 -2
- package/dist/warning-banner/index.d.ts.map +1 -0
- package/dist/warning-banner/index.js +16 -19
- package/dist/warning-banner/index.js.map +1 -1
- package/dist/warning-banner/index.mjs +3 -3
- package/dist/warning-banner/warning-banner.d.ts +8 -2
- package/dist/warning-banner/warning-banner.d.ts.map +1 -0
- package/dist/warning-banner/warning-banner.js +16 -19
- package/dist/warning-banner/warning-banner.js.map +1 -1
- package/dist/warning-banner/warning-banner.mjs +3 -3
- package/package.json +12 -8
- package/src/accordion/accordion-content.tsx +31 -0
- package/src/accordion/accordion-header.tsx +36 -0
- package/src/accordion/accordion-item.tsx +62 -0
- package/src/accordion/accordion.stories.tsx +154 -0
- package/src/accordion/accordion.tsx +68 -0
- package/src/accordion/context.ts +8 -0
- package/src/accordion/index.tsx +9 -0
- package/src/badge/badge.stories.tsx +44 -0
- package/src/badge/badge.tsx +63 -0
- package/src/badge/index.tsx +3 -0
- package/src/box/box.stories.tsx +112 -0
- package/src/box/box.tsx +122 -0
- package/src/box/index.tsx +3 -0
- package/src/breadcrumbs/breadcrumbs.stories.tsx +50 -0
- package/src/breadcrumbs/breadcrumbs.tsx +47 -0
- package/src/breadcrumbs/index.tsx +3 -0
- package/src/button/button.stories.tsx +104 -0
- package/src/button/button.tsx +87 -0
- package/src/button/index.tsx +3 -0
- package/src/card/card.stories.tsx +82 -0
- package/src/card/card.tsx +222 -0
- package/src/card/index.tsx +14 -0
- package/src/description-list/description-list.stories.tsx +95 -0
- package/src/description-list/description-list.tsx +61 -0
- package/src/description-list/index.tsx +2 -0
- package/src/footer/footer.tsx +169 -0
- package/src/footer/index.tsx +9 -0
- package/src/form/checkbox/checkbox.stories.tsx +104 -0
- package/src/form/checkbox/checkbox.tsx +82 -0
- package/src/form/checkbox/index.tsx +2 -0
- package/src/form/date-picker/date-picker.stories.tsx +27 -0
- package/src/form/date-picker/date-picker.tsx +85 -0
- package/src/form/date-picker/index.tsx +2 -0
- package/src/form/error-message/error-message.stories.tsx +19 -0
- package/src/form/error-message/error-message.tsx +25 -0
- package/src/form/error-message/index.tsx +2 -0
- package/src/form/fieldset/fieldset.stories.tsx +86 -0
- package/src/form/fieldset/fieldset.tsx +64 -0
- package/src/form/fieldset/index.tsx +2 -0
- package/src/form/index.tsx +8 -0
- package/src/form/input/index.tsx +2 -0
- package/src/form/input/input.stories.tsx +166 -0
- package/src/form/input/input.tsx +30 -0
- package/src/form/input-group/index.tsx +2 -0
- package/src/form/input-group/input-group.tsx +106 -0
- package/src/form/radiobutton/index.tsx +4 -0
- package/src/form/radiobutton/radiobutton.stories.tsx +93 -0
- package/src/form/radiobutton/radiobutton.tsx +85 -0
- package/src/form/radiobutton/radiogroup.stories.tsx +39 -0
- package/src/form/radiobutton/radiogroup.tsx +52 -0
- package/src/form/select/index.tsx +2 -0
- package/src/form/select/select.stories.tsx +93 -0
- package/src/form/select/select.tsx +33 -0
- package/src/form/textarea/index.tsx +2 -0
- package/src/form/textarea/textarea.stories.tsx +106 -0
- package/src/form/textarea/textarea.tsx +33 -0
- package/src/help-text/help-text.tsx +98 -0
- package/src/help-text/index.ts +2 -0
- package/src/index-no-css.tsx +25 -0
- package/src/index.tsx +11 -0
- package/src/layout/container/container.stories.tsx +62 -0
- package/src/layout/container/container.tsx +47 -0
- package/src/layout/grid/grid.tsx +163 -0
- package/src/layout/grid/index.tsx +3 -0
- package/src/layout/index.tsx +3 -0
- package/src/layout/responsive.ts +26 -0
- package/src/layout/spacing.ts +37 -0
- package/src/layout/stack/index.tsx +2 -0
- package/src/layout/stack/stack.tsx +128 -0
- package/src/link/index.tsx +3 -0
- package/src/link/link.stories.tsx +64 -0
- package/src/link/link.tsx +46 -0
- package/src/list/index.tsx +5 -0
- package/src/list/link-list.stories.tsx +38 -0
- package/src/list/link-list.tsx +26 -0
- package/src/list/list.stories.tsx +71 -0
- package/src/list/list.tsx +65 -0
- package/src/message/index.tsx +2 -0
- package/src/message/message.stories.tsx +93 -0
- package/src/message/message.tsx +89 -0
- package/src/modal/index.tsx +3 -0
- package/src/modal/modal.stories.tsx +147 -0
- package/src/modal/modal.tsx +199 -0
- package/src/navbar/icons.tsx +21 -0
- package/src/navbar/index.tsx +18 -0
- package/src/navbar/navbar-expandable-menu.tsx +176 -0
- package/src/navbar/navbar.stories.tsx +99 -0
- package/src/navbar/navbar.tsx +264 -0
- package/src/show-more/index.ts +5 -0
- package/src/show-more/show-more.stories.tsx +119 -0
- package/src/show-more/show-more.tsx +66 -0
- package/src/skeleton/index.ts +2 -0
- package/src/skeleton/skeleton.stories.tsx +152 -0
- package/src/skeleton/skeleton.tsx +114 -0
- package/src/step-indicator/index.ts +2 -0
- package/src/step-indicator/step-indicator.stories.tsx +50 -0
- package/src/step-indicator/step-indicator.tsx +116 -0
- package/src/styled-html/index.ts +2 -0
- package/src/styled-html/styled-html.stories.tsx +189 -0
- package/src/styled-html/styled-html.tsx +59 -0
- package/src/table/index.ts +2 -0
- package/src/table/table.tsx +59 -0
- package/src/tabs/context.ts +18 -0
- package/src/tabs/index.tsx +7 -0
- package/src/tabs/tabs-content.tsx +62 -0
- package/src/tabs/tabs-list.tsx +129 -0
- package/src/tabs/tabs.stories.tsx +138 -0
- package/src/tabs/tabs.tsx +50 -0
- package/src/text/index.tsx +4 -0
- package/src/text/text.stories.tsx +112 -0
- package/src/text/text.tsx +129 -0
- package/src/utils/auto-animate-height.tsx +139 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/utils.ts +110 -0
- package/src/warning-banner/index.tsx +2 -0
- package/src/warning-banner/warning-banner.stories.tsx +43 -0
- package/src/warning-banner/warning-banner.tsx +79 -0
- package/dist/_tsup-dts-rollup.d.mts +0 -2600
- package/dist/_tsup-dts-rollup.d.ts +0 -2600
- package/dist/accordion/accordion-content.d.mts +0 -2
- package/dist/accordion/accordion-header.d.mts +0 -2
- package/dist/accordion/accordion-item.d.mts +0 -3
- package/dist/accordion/accordion.d.mts +0 -2
- package/dist/accordion/context.d.mts +0 -2
- package/dist/accordion/index.d.mts +0 -9
- package/dist/badge/badge.d.mts +0 -5
- package/dist/badge/index.d.mts +0 -6
- package/dist/box/box.d.mts +0 -4
- package/dist/box/index.d.mts +0 -4
- package/dist/breadcrumbs/breadcrumbs.d.mts +0 -2
- package/dist/breadcrumbs/index.d.mts +0 -2
- package/dist/button/button.d.mts +0 -3
- package/dist/button/index.d.mts +0 -3
- package/dist/card/card.d.mts +0 -12
- package/dist/card/index.d.mts +0 -12
- package/dist/chunk-3MQKXNZ6.mjs.map +0 -1
- package/dist/chunk-3NDUE23B.mjs +0 -19
- package/dist/chunk-3NDUE23B.mjs.map +0 -1
- package/dist/chunk-3NL3TOZF.mjs +0 -13
- package/dist/chunk-3NL3TOZF.mjs.map +0 -1
- package/dist/chunk-3ZFEUABU.mjs +0 -23
- package/dist/chunk-3ZFEUABU.mjs.map +0 -1
- package/dist/chunk-4WQWU5TL.mjs.map +0 -1
- package/dist/chunk-67TP3E2D.mjs.map +0 -1
- package/dist/chunk-6R7AXKBR.mjs.map +0 -1
- package/dist/chunk-722MZPXO.mjs +0 -13
- package/dist/chunk-722MZPXO.mjs.map +0 -1
- package/dist/chunk-7JRS4WEB.mjs.map +0 -1
- package/dist/chunk-CIHZDFSQ.mjs.map +0 -1
- package/dist/chunk-CYEYGPRH.mjs +0 -17
- package/dist/chunk-CYEYGPRH.mjs.map +0 -1
- package/dist/chunk-DEX36MFK.mjs.map +0 -1
- package/dist/chunk-DZNH5JHY.mjs +0 -1
- package/dist/chunk-ENKVTAJB.mjs.map +0 -1
- package/dist/chunk-F2C3KZFX.mjs.map +0 -1
- package/dist/chunk-GSJPTZT3.mjs.map +0 -1
- package/dist/chunk-IJAX6APL.mjs +0 -23
- package/dist/chunk-IJAX6APL.mjs.map +0 -1
- package/dist/chunk-IKJJWKXM.mjs +0 -15
- package/dist/chunk-IKJJWKXM.mjs.map +0 -1
- package/dist/chunk-KPGSRU4I.mjs.map +0 -1
- package/dist/chunk-PT5H3QV6.mjs +0 -29
- package/dist/chunk-PT5H3QV6.mjs.map +0 -1
- package/dist/chunk-TQDUBRCZ.mjs.map +0 -1
- package/dist/chunk-V6UKKHKD.mjs +0 -33
- package/dist/chunk-V6UKKHKD.mjs.map +0 -1
- package/dist/chunk-XUWZ4HGD.mjs.map +0 -1
- package/dist/description-list/description-list.d.mts +0 -2
- package/dist/description-list/index.d.mts +0 -2
- package/dist/footer/footer.d.mts +0 -7
- package/dist/footer/index.d.mts +0 -7
- package/dist/form/checkbox/checkbox.d.mts +0 -2
- package/dist/form/checkbox/index.d.mts +0 -2
- package/dist/form/date-picker/date-picker.d.mts +0 -2
- package/dist/form/date-picker/index.d.mts +0 -2
- package/dist/form/error-message/error-message.d.mts +0 -2
- package/dist/form/error-message/index.d.mts +0 -2
- package/dist/form/fieldset/fieldset.d.mts +0 -3
- package/dist/form/fieldset/index.d.mts +0 -3
- package/dist/form/index.d.mts +0 -20
- package/dist/form/input/index.d.mts +0 -2
- package/dist/form/input/input.d.mts +0 -2
- package/dist/form/input-group/index.d.mts +0 -2
- package/dist/form/input-group/input-group.d.mts +0 -2
- package/dist/form/radiobutton/index.d.mts +0 -5
- package/dist/form/radiobutton/radiobutton.d.mts +0 -2
- package/dist/form/radiobutton/radiogroup.d.mts +0 -3
- package/dist/form/select/index.d.mts +0 -2
- package/dist/form/select/select.d.mts +0 -2
- package/dist/form/textarea/index.d.mts +0 -2
- package/dist/form/textarea/textarea.d.mts +0 -2
- package/dist/help-text/help-text.d.mts +0 -1
- package/dist/help-text/index.d.mts +0 -1
- package/dist/index-no-css.d.mts +0 -128
- package/dist/index.d.mts +0 -128
- package/dist/layout/container/container.d.mts +0 -2
- package/dist/layout/grid/grid.d.mts +0 -4
- package/dist/layout/grid/index.d.mts +0 -4
- package/dist/layout/index.d.mts +0 -10
- package/dist/layout/responsive.d.mts +0 -2
- package/dist/layout/spacing.d.mts +0 -3
- package/dist/layout/stack/index.d.mts +0 -4
- package/dist/layout/stack/stack.d.mts +0 -4
- package/dist/link/index.d.mts +0 -2
- package/dist/link/link.d.mts +0 -2
- package/dist/list/index.d.mts +0 -5
- package/dist/list/link-list.d.mts +0 -2
- package/dist/list/list.d.mts +0 -3
- package/dist/message/index.d.mts +0 -3
- package/dist/message/message.d.mts +0 -4
- package/dist/modal/index.d.mts +0 -5
- package/dist/modal/modal.d.mts +0 -5
- package/dist/navbar/icons.d.mts +0 -2
- package/dist/navbar/index.d.mts +0 -13
- package/dist/navbar/navbar-expandable-menu.d.mts +0 -7
- package/dist/navbar/navbar.d.mts +0 -9
- package/dist/show-more/index.d.mts +0 -4
- package/dist/show-more/show-more.d.mts +0 -2
- package/dist/skeleton/index.d.mts +0 -2
- package/dist/skeleton/skeleton.d.mts +0 -2
- package/dist/step-indicator/index.d.mts +0 -1
- package/dist/step-indicator/step-indicator.d.mts +0 -1
- package/dist/styled-html/index.d.mts +0 -2
- package/dist/styled-html/styled-html.d.mts +0 -2
- package/dist/table/index.d.mts +0 -1
- package/dist/table/table.d.mts +0 -1
- package/dist/tabs/context.d.mts +0 -3
- package/dist/tabs/index.d.mts +0 -10
- package/dist/tabs/tabs-content.d.mts +0 -4
- package/dist/tabs/tabs-list.d.mts +0 -4
- package/dist/tabs/tabs.d.mts +0 -2
- package/dist/text/index.d.mts +0 -2
- package/dist/text/text.d.mts +0 -2
- package/dist/utilities/auto-animate-height.d.mts +0 -2
- package/dist/utilities/auto-animate-height.d.ts +0 -2
- package/dist/utilities/auto-animate-height.js.map +0 -1
- package/dist/utilities/auto-animate-height.mjs +0 -9
- package/dist/utilities/index.d.mts +0 -2
- package/dist/utilities/index.d.ts +0 -2
- package/dist/utilities/index.js.map +0 -1
- package/dist/utilities/index.mjs +0 -10
- package/dist/utils.d.mts +0 -5
- package/dist/utils.d.ts +0 -5
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -16
- package/dist/warning-banner/index.d.mts +0 -2
- package/dist/warning-banner/warning-banner.d.mts +0 -2
- /package/dist/{chunk-DZNH5JHY.mjs.map → chunk-7YWW46R3.mjs.map} +0 -0
- /package/dist/{utilities/auto-animate-height.mjs.map → chunk-ARHJZUZG.mjs.map} +0 -0
- /package/dist/{utilities/index.mjs.map → chunk-BCFV6VOE.mjs.map} +0 -0
- /package/dist/{utils.mjs.map → chunk-CYDWEPFL.mjs.map} +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies -- storybook story */
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import { PrimaryButton } from "../button";
|
|
5
|
+
import { Link } from "../link";
|
|
6
|
+
import { Message } from "../message";
|
|
7
|
+
import { StyledHtml } from "../styled-html";
|
|
8
|
+
import { HStack } from "../layout";
|
|
9
|
+
import { Modal } from ".";
|
|
10
|
+
|
|
11
|
+
const meta: Meta<typeof Modal> = {
|
|
12
|
+
title: "Modal",
|
|
13
|
+
component: Modal,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default meta;
|
|
17
|
+
|
|
18
|
+
type Story = StoryObj<typeof Modal>;
|
|
19
|
+
export const Main = {
|
|
20
|
+
render: function Render(args) {
|
|
21
|
+
const modalRef = useRef<HTMLDialogElement>(null);
|
|
22
|
+
const onClose = () => modalRef.current?.close();
|
|
23
|
+
const onMainAction = () => modalRef.current?.close();
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
<PrimaryButton onClick={() => modalRef.current?.showModal()}>Open Modal</PrimaryButton>
|
|
28
|
+
<Modal ref={modalRef} {...args}>
|
|
29
|
+
<Modal.Header>Dialog header</Modal.Header>
|
|
30
|
+
<Modal.Content>
|
|
31
|
+
<p>
|
|
32
|
+
Dialog header Dialog description - a description of what is about to happen and maybe
|
|
33
|
+
something about the consequences.
|
|
34
|
+
</p>
|
|
35
|
+
</Modal.Content>
|
|
36
|
+
<Modal.Footer>
|
|
37
|
+
<HStack gap="16" wrap>
|
|
38
|
+
<PrimaryButton onClick={onMainAction}>Main action</PrimaryButton>
|
|
39
|
+
<PrimaryButton fill="outline" onClick={onClose}>
|
|
40
|
+
Cancel
|
|
41
|
+
</PrimaryButton>
|
|
42
|
+
</HStack>
|
|
43
|
+
</Modal.Footer>
|
|
44
|
+
</Modal>
|
|
45
|
+
</>
|
|
46
|
+
);
|
|
47
|
+
},
|
|
48
|
+
} satisfies Story;
|
|
49
|
+
|
|
50
|
+
export const ShareParcelModal = {
|
|
51
|
+
render: function Render(args) {
|
|
52
|
+
const modalRef = useRef<HTMLDialogElement>(null);
|
|
53
|
+
const open = window.location.search.includes("viewMode=story");
|
|
54
|
+
return (
|
|
55
|
+
<>
|
|
56
|
+
<PrimaryButton onClick={() => modalRef.current?.showModal()}>Open Modal</PrimaryButton>
|
|
57
|
+
<Modal ref={modalRef} {...args} closeOnBackdropClick open={open}>
|
|
58
|
+
<Modal.Header>Legg til pakken</Modal.Header>
|
|
59
|
+
<Modal.Content>
|
|
60
|
+
<StyledHtml>
|
|
61
|
+
For å kunne hente pakken, må du legge den til i appen fra mobilen din.
|
|
62
|
+
<br />
|
|
63
|
+
<br />
|
|
64
|
+
<strong>Viktig!</strong>
|
|
65
|
+
<br />
|
|
66
|
+
Appen må allerede være innstallert på mobilen før du kan legge den til
|
|
67
|
+
</StyledHtml>
|
|
68
|
+
</Modal.Content>
|
|
69
|
+
<Modal.Footer>
|
|
70
|
+
<PrimaryButton fullWidth="mobile">Legg til pakken i Posten-appen </PrimaryButton>
|
|
71
|
+
</Modal.Footer>
|
|
72
|
+
</Modal>
|
|
73
|
+
</>
|
|
74
|
+
);
|
|
75
|
+
},
|
|
76
|
+
} satisfies Story;
|
|
77
|
+
|
|
78
|
+
export const MuchContentBelow: Story = {
|
|
79
|
+
render: function Render(args) {
|
|
80
|
+
return (
|
|
81
|
+
<>
|
|
82
|
+
<div
|
|
83
|
+
style={{
|
|
84
|
+
height: 3200,
|
|
85
|
+
background: "linear-gradient(to bottom, #051937, #004d7a, #008793, #00bf72, #a8eb12)",
|
|
86
|
+
}}
|
|
87
|
+
/>
|
|
88
|
+
{Main.render(args)}
|
|
89
|
+
<div style={{ height: 1600, background: "deeppink" }} />
|
|
90
|
+
</>
|
|
91
|
+
);
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const AsAReadMore: Story = {
|
|
96
|
+
name: "As a read more",
|
|
97
|
+
render: function Render(args) {
|
|
98
|
+
const modalRef = useRef<HTMLDialogElement>(null);
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
<>
|
|
102
|
+
<Message variant="attention">
|
|
103
|
+
<Message.Title>Kunne ikke leveres hjem</Message.Title>
|
|
104
|
+
<Message.Description>
|
|
105
|
+
Vi møtte på utfordringer da vi skulle levere pakken hjem til deg. Derfor har vi sendt
|
|
106
|
+
den til ditt nærmeste hentested.{" "}
|
|
107
|
+
<Link variant="solid" asChild>
|
|
108
|
+
<button type="button" onClick={() => modalRef.current?.showModal()}>
|
|
109
|
+
Les mer
|
|
110
|
+
</button>
|
|
111
|
+
</Link>
|
|
112
|
+
</Message.Description>
|
|
113
|
+
</Message>
|
|
114
|
+
|
|
115
|
+
<Modal ref={modalRef} {...args}>
|
|
116
|
+
<Modal.Header>Kunne ikke leveres hjem til deg</Modal.Header>
|
|
117
|
+
|
|
118
|
+
<Modal.Content asChild>
|
|
119
|
+
<StyledHtml>
|
|
120
|
+
<p>
|
|
121
|
+
Noen ganger kan vi ikke levere pakken til postkassen din, eller utenfor døren. Det
|
|
122
|
+
kan være ulike grunner til dette, for eksempel:
|
|
123
|
+
</p>
|
|
124
|
+
<ul>
|
|
125
|
+
<li>Pakken var for stor for postkassen din</li>
|
|
126
|
+
<li>Det var ikke mulig å sette den utenfor døren din</li>
|
|
127
|
+
<li>Ingen var hjemme</li>
|
|
128
|
+
<li>Døren var ikke merket med navn</li>
|
|
129
|
+
<li>Andre årsaker</li>
|
|
130
|
+
</ul>
|
|
131
|
+
<p>
|
|
132
|
+
Pakken blir videresendt til ditt nærmeste hentested når den ikke kan leveres hjem.
|
|
133
|
+
Den vil vanligvis være klar til henting der etter én til to virkedager.
|
|
134
|
+
</p>
|
|
135
|
+
</StyledHtml>
|
|
136
|
+
</Modal.Content>
|
|
137
|
+
|
|
138
|
+
<Modal.Footer>
|
|
139
|
+
<PrimaryButton fullWidth="mobile" onClick={() => modalRef.current?.close()}>
|
|
140
|
+
Lukk
|
|
141
|
+
</PrimaryButton>
|
|
142
|
+
</Modal.Footer>
|
|
143
|
+
</Modal>
|
|
144
|
+
</>
|
|
145
|
+
);
|
|
146
|
+
},
|
|
147
|
+
};
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { forwardRef, useEffect, useRef } from "react";
|
|
2
|
+
import { clsx } from "@postenbring/hedwig-css/typed-classname";
|
|
3
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
4
|
+
import { Box } from "../box/box";
|
|
5
|
+
import { useMergeRefs } from "../utils/utils";
|
|
6
|
+
|
|
7
|
+
interface ModalHeaderProps extends React.HTMLAttributes<HTMLHeadingElement> {
|
|
8
|
+
/**
|
|
9
|
+
* Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
10
|
+
*
|
|
11
|
+
* @default false
|
|
12
|
+
*/
|
|
13
|
+
asChild?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export const ModalHeader = forwardRef<HTMLHeadingElement, ModalHeaderProps>(
|
|
16
|
+
({ asChild, className, ...rest }, ref) => {
|
|
17
|
+
const Component = asChild ? Slot : "h1";
|
|
18
|
+
return (
|
|
19
|
+
<Component
|
|
20
|
+
className={clsx("hds-modal__header", className as undefined)}
|
|
21
|
+
ref={ref}
|
|
22
|
+
{...rest}
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
},
|
|
26
|
+
);
|
|
27
|
+
ModalHeader.displayName = "Modal.Header";
|
|
28
|
+
|
|
29
|
+
interface ModalContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
30
|
+
/**
|
|
31
|
+
* Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
32
|
+
*
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
asChild?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(
|
|
38
|
+
({ asChild, className, ...rest }, ref) => {
|
|
39
|
+
const Component = asChild ? Slot : "div";
|
|
40
|
+
return (
|
|
41
|
+
<Component
|
|
42
|
+
className={clsx("hds-modal__content", className as undefined)}
|
|
43
|
+
ref={ref}
|
|
44
|
+
{...rest}
|
|
45
|
+
/>
|
|
46
|
+
);
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
ModalContent.displayName = "Modal.Content";
|
|
50
|
+
|
|
51
|
+
interface ModalFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
52
|
+
/**
|
|
53
|
+
* Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
54
|
+
*
|
|
55
|
+
* @default false
|
|
56
|
+
*/
|
|
57
|
+
asChild?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(
|
|
60
|
+
({ asChild, className, ...rest }, ref) => {
|
|
61
|
+
const Component = asChild ? Slot : "footer";
|
|
62
|
+
return (
|
|
63
|
+
<Component
|
|
64
|
+
className={clsx("hds-modal__footer", className as undefined)}
|
|
65
|
+
ref={ref}
|
|
66
|
+
{...rest}
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
},
|
|
70
|
+
);
|
|
71
|
+
ModalFooter.displayName = "Modal.Footer";
|
|
72
|
+
|
|
73
|
+
export interface ModalProps extends React.HTMLAttributes<HTMLDialogElement> {
|
|
74
|
+
children: React.ReactNode;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Controls the open state of the modal
|
|
78
|
+
*/
|
|
79
|
+
open?: boolean;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Whether to close when clicking on the backdrop.
|
|
83
|
+
*/
|
|
84
|
+
closeOnBackdropClick?: boolean;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* A modal dialog is a window that forces the user to interact with it before they can return to other parts of the application.
|
|
89
|
+
*
|
|
90
|
+
* Uses the native [`dialog`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) element.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```tsx
|
|
94
|
+
* const modalRef = useRef<HTMLDialogElement>(null);
|
|
95
|
+
* const onClose = () => modalRef.current?.close();
|
|
96
|
+
*
|
|
97
|
+
* return (
|
|
98
|
+
* <>
|
|
99
|
+
* <PrimaryButton onClick={() => modalRef.current?.showModal()}>Open Modal</PrimaryButton>
|
|
100
|
+
* <Modal ref={modalRef}>
|
|
101
|
+
* <Modal.Header>Dialog header</Modal.Header>
|
|
102
|
+
* <Modal.Content>
|
|
103
|
+
* <p>
|
|
104
|
+
* Dialog header Dialog description - a description of what is about to happen and maybe
|
|
105
|
+
* something about the consequences.
|
|
106
|
+
* </p>
|
|
107
|
+
* </Modal.Content>
|
|
108
|
+
* <Modal.Footer>
|
|
109
|
+
* <HStack gap="16" wrap>
|
|
110
|
+
* <PrimaryButton onClick={onMainAction}>Main action</PrimaryButton>
|
|
111
|
+
* <PrimaryButton fill="outline" onClick={onClose}>
|
|
112
|
+
* Cancel
|
|
113
|
+
* </PrimaryButton>
|
|
114
|
+
* </HStack>
|
|
115
|
+
* </Modal.Footer>
|
|
116
|
+
* </Modal>
|
|
117
|
+
* </>
|
|
118
|
+
* );
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export const Modal = forwardRef<HTMLDialogElement, ModalProps>(
|
|
122
|
+
({ children, className, open, closeOnBackdropClick, onClick, ...rest }, ref) => {
|
|
123
|
+
const modalRef = useRef<HTMLDialogElement>(null);
|
|
124
|
+
const mergedRef = useMergeRefs([modalRef, ref]);
|
|
125
|
+
|
|
126
|
+
// The X close button that comes from the `Box` component
|
|
127
|
+
function onCloseButtonClick() {
|
|
128
|
+
modalRef.current?.close();
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// No scroll when modal is open
|
|
133
|
+
useScrollLock(modalRef, "hds-modal-scroll-lock");
|
|
134
|
+
|
|
135
|
+
// `open` prop
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (modalRef.current && open !== undefined) {
|
|
138
|
+
if (open && !modalRef.current.open) {
|
|
139
|
+
modalRef.current.showModal();
|
|
140
|
+
} else if (!open && modalRef.current.open) {
|
|
141
|
+
modalRef.current.close();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}, [modalRef, open]);
|
|
145
|
+
|
|
146
|
+
function onDialogClick(e: React.MouseEvent<HTMLElement>) {
|
|
147
|
+
if (closeOnBackdropClick && e.target === modalRef.current) {
|
|
148
|
+
modalRef.current.close();
|
|
149
|
+
}
|
|
150
|
+
onClick?.(e as React.MouseEvent<HTMLDialogElement>);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return (
|
|
154
|
+
<Box
|
|
155
|
+
asChild
|
|
156
|
+
className={clsx("hds-modal", className as undefined)}
|
|
157
|
+
closeable
|
|
158
|
+
onClick={onDialogClick}
|
|
159
|
+
onClose={onCloseButtonClick}
|
|
160
|
+
variant="white"
|
|
161
|
+
>
|
|
162
|
+
<dialog ref={mergedRef} {...rest}>
|
|
163
|
+
{children}
|
|
164
|
+
</dialog>
|
|
165
|
+
</Box>
|
|
166
|
+
);
|
|
167
|
+
},
|
|
168
|
+
) as ModalType;
|
|
169
|
+
Modal.displayName = "Modal";
|
|
170
|
+
|
|
171
|
+
type ModalType = ReturnType<typeof forwardRef<HTMLDialogElement, ModalProps>> & {
|
|
172
|
+
Header: typeof ModalHeader;
|
|
173
|
+
Content: typeof ModalContent;
|
|
174
|
+
Footer: typeof ModalFooter;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
Modal.Header = ModalHeader;
|
|
178
|
+
Modal.Content = ModalContent;
|
|
179
|
+
Modal.Footer = ModalFooter;
|
|
180
|
+
|
|
181
|
+
function useScrollLock(modalRef: React.RefObject<HTMLDialogElement>, bodyClass: string) {
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
if (!modalRef.current) return;
|
|
184
|
+
if (modalRef.current.open) document.body.classList.add(bodyClass);
|
|
185
|
+
|
|
186
|
+
const observer = new MutationObserver(() => {
|
|
187
|
+
if (modalRef.current?.open) document.body.classList.add(bodyClass);
|
|
188
|
+
else document.body.classList.remove(bodyClass);
|
|
189
|
+
});
|
|
190
|
+
observer.observe(modalRef.current, {
|
|
191
|
+
attributes: true,
|
|
192
|
+
attributeFilter: ["open"],
|
|
193
|
+
});
|
|
194
|
+
return () => {
|
|
195
|
+
observer.disconnect();
|
|
196
|
+
document.body.classList.remove(bodyClass);
|
|
197
|
+
};
|
|
198
|
+
}, [bodyClass, modalRef]);
|
|
199
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function CloseIcon() {
|
|
2
|
+
return (
|
|
3
|
+
<svg aria-hidden xmlns="http://www.w3.org/2000/svg" width={24} height={24}>
|
|
4
|
+
<path
|
|
5
|
+
fill="currentColor"
|
|
6
|
+
d="m13.16 12.25 3.621-3.586.739-.738c.105-.106.105-.281 0-.422l-.774-.774c-.14-.105-.316-.105-.422 0L12 11.09 7.64 6.73c-.105-.105-.28-.105-.421 0l-.774.774c-.105.14-.105.316 0 .422l4.36 4.324-4.36 4.36c-.105.105-.105.28 0 .421l.774.774c.14.105.316.105.422 0L12 13.445l3.586 3.621.738.739c.106.105.281.105.422 0l.774-.774c.105-.14.105-.316 0-.422l-4.36-4.359Z"
|
|
7
|
+
/>
|
|
8
|
+
</svg>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function MenuIcon() {
|
|
13
|
+
return (
|
|
14
|
+
<svg aria-hidden xmlns="http://www.w3.org/2000/svg" width={32} height={32}>
|
|
15
|
+
<path
|
|
16
|
+
fill="currentColor"
|
|
17
|
+
d="M25.938 10.146a.57.57 0 0 0 .562-.563v-1.5c0-.281-.281-.562-.563-.562H6.063a.57.57 0 0 0-.562.562v1.5c0 .328.234.563.563.563h19.875Zm0 7.5a.57.57 0 0 0 .562-.563v-1.5c0-.281-.281-.563-.563-.563H6.063a.57.57 0 0 0-.562.563v1.5c0 .328.234.563.563.563h19.875Zm0 7.5a.57.57 0 0 0 .562-.563v-1.5c0-.281-.281-.563-.563-.563H6.063a.57.57 0 0 0-.562.563v1.5c0 .328.234.563.563.563h19.875Z"
|
|
18
|
+
/>
|
|
19
|
+
</svg>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export {
|
|
2
|
+
Navbar,
|
|
3
|
+
NavbarLogo,
|
|
4
|
+
NavbarItem,
|
|
5
|
+
NavbarButtonItem,
|
|
6
|
+
NavbarLinkItem,
|
|
7
|
+
NavbarItemIcon,
|
|
8
|
+
NavbarNavigation,
|
|
9
|
+
NavbarLogoAndServiceText,
|
|
10
|
+
} from "./navbar";
|
|
11
|
+
export {
|
|
12
|
+
useNavbarExpendableMenuContext,
|
|
13
|
+
NavbarExpandableMenu,
|
|
14
|
+
NavbarExpandableMenuTrigger,
|
|
15
|
+
NavbarExpandableMenuContent,
|
|
16
|
+
} from "./navbar-expandable-menu";
|
|
17
|
+
|
|
18
|
+
export type * from "./navbar";
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { createContext, useContext, forwardRef, useState, useEffect, useId } from "react";
|
|
2
|
+
import { clsx } from "@postenbring/hedwig-css/typed-classname";
|
|
3
|
+
import { focusTrap } from "../utils/utils";
|
|
4
|
+
import { CloseIcon, MenuIcon } from "./icons";
|
|
5
|
+
|
|
6
|
+
const expandableMenuContext = createContext([
|
|
7
|
+
false as boolean,
|
|
8
|
+
() => {
|
|
9
|
+
// Empty
|
|
10
|
+
},
|
|
11
|
+
] as const);
|
|
12
|
+
export const useNavbarExpendableMenuContext = () => useContext(expandableMenuContext);
|
|
13
|
+
|
|
14
|
+
export interface NavbarExpandableMenuProps {
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Expandable Menu Provider
|
|
20
|
+
* Handles scroll and focus locking,
|
|
21
|
+
* as well as scrolling the user to the top of the page.
|
|
22
|
+
*
|
|
23
|
+
* If we want a sticky header in the future the scrolling should be configurable
|
|
24
|
+
*/
|
|
25
|
+
export function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {
|
|
26
|
+
const [open, setOpen] = useState(false);
|
|
27
|
+
function toggleOpen() {
|
|
28
|
+
setOpen((prev) => !prev);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (open) {
|
|
33
|
+
window.scrollTo(0, 0);
|
|
34
|
+
document.body.classList.add(clsx("hds-navbar-scroll-lock"));
|
|
35
|
+
const releaseFocusTrap = focusTrap(
|
|
36
|
+
document.getElementsByClassName(clsx("hds-navbar"))[0] as HTMLElement,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
return () => {
|
|
40
|
+
document.body.classList.remove(clsx("hds-navbar-scroll-lock"));
|
|
41
|
+
releaseFocusTrap();
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}, [open]);
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<expandableMenuContext.Provider value={[open, toggleOpen]}>
|
|
48
|
+
{children}
|
|
49
|
+
</expandableMenuContext.Provider>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
NavbarExpandableMenu.displayName = "NavbarExpandableMenu";
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Trigger
|
|
56
|
+
*/
|
|
57
|
+
export interface NavbarExpandableMenuTriggerProps
|
|
58
|
+
extends Omit<React.HTMLAttributes<HTMLButtonElement>, "children"> {
|
|
59
|
+
whenClosedText: React.ReactNode;
|
|
60
|
+
whenClosedHelperTitle?: string;
|
|
61
|
+
|
|
62
|
+
whenOpenText: React.ReactNode;
|
|
63
|
+
whenOpenHelperTitle?: string;
|
|
64
|
+
}
|
|
65
|
+
export const NavbarExpandableMenuTrigger = forwardRef<
|
|
66
|
+
HTMLButtonElement,
|
|
67
|
+
NavbarExpandableMenuTriggerProps
|
|
68
|
+
>(
|
|
69
|
+
(
|
|
70
|
+
{
|
|
71
|
+
whenClosedText,
|
|
72
|
+
whenClosedHelperTitle,
|
|
73
|
+
|
|
74
|
+
whenOpenText,
|
|
75
|
+
whenOpenHelperTitle,
|
|
76
|
+
|
|
77
|
+
style,
|
|
78
|
+
className,
|
|
79
|
+
...rest
|
|
80
|
+
},
|
|
81
|
+
ref,
|
|
82
|
+
) => {
|
|
83
|
+
const [open, toggleOpen] = useNavbarExpendableMenuContext();
|
|
84
|
+
|
|
85
|
+
// Measure the width of the text when open and closed and choose the widest one
|
|
86
|
+
// This is to ensure that the button doesn't change size when the text changes
|
|
87
|
+
const [textWidth, setTextWidth] = useState<number | undefined>(undefined);
|
|
88
|
+
const measurementId = useId();
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const widthWhenOpen =
|
|
91
|
+
document.getElementById(`${measurementId}-when-open`)?.getBoundingClientRect().width ?? 0;
|
|
92
|
+
const widthWhenClosed =
|
|
93
|
+
document.getElementById(`${measurementId}-when-closed`)?.getBoundingClientRect().width ?? 0;
|
|
94
|
+
|
|
95
|
+
setTextWidth(widthWhenOpen < widthWhenClosed ? widthWhenClosed : widthWhenOpen);
|
|
96
|
+
}, [measurementId]);
|
|
97
|
+
|
|
98
|
+
const text = open ? whenOpenText : whenClosedText;
|
|
99
|
+
const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;
|
|
100
|
+
const icon = open ? <CloseIcon /> : <MenuIcon />;
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<button
|
|
104
|
+
className={clsx("hds-navbar__item", className as undefined)}
|
|
105
|
+
onClick={toggleOpen}
|
|
106
|
+
ref={ref}
|
|
107
|
+
title={title}
|
|
108
|
+
type="button"
|
|
109
|
+
style={{ position: "relative", ...style }}
|
|
110
|
+
{...rest}
|
|
111
|
+
>
|
|
112
|
+
{/* Measurement elements, not shown to the user */}
|
|
113
|
+
<span
|
|
114
|
+
id={`${measurementId}-when-closed`}
|
|
115
|
+
aria-hidden
|
|
116
|
+
style={{
|
|
117
|
+
position: "absolute",
|
|
118
|
+
visibility: "hidden",
|
|
119
|
+
pointerEvents: "none",
|
|
120
|
+
whiteSpace: "nowrap",
|
|
121
|
+
}}
|
|
122
|
+
>
|
|
123
|
+
{whenOpenText}
|
|
124
|
+
</span>
|
|
125
|
+
<span
|
|
126
|
+
id={`${measurementId}-when-open`}
|
|
127
|
+
aria-hidden
|
|
128
|
+
style={{
|
|
129
|
+
position: "absolute",
|
|
130
|
+
visibility: "hidden",
|
|
131
|
+
pointerEvents: "none",
|
|
132
|
+
whiteSpace: "nowrap",
|
|
133
|
+
}}
|
|
134
|
+
>
|
|
135
|
+
{whenClosedText}
|
|
136
|
+
</span>
|
|
137
|
+
|
|
138
|
+
{/* Actual content */}
|
|
139
|
+
<span
|
|
140
|
+
style={{ width: textWidth, whiteSpace: "nowrap" }}
|
|
141
|
+
className={clsx("hds-navbar__item-responsive-text")}
|
|
142
|
+
>
|
|
143
|
+
{text}
|
|
144
|
+
</span>
|
|
145
|
+
<span style={{ width: 32, height: 32 }}>{icon}</span>
|
|
146
|
+
</button>
|
|
147
|
+
);
|
|
148
|
+
},
|
|
149
|
+
);
|
|
150
|
+
NavbarExpandableMenuTrigger.displayName = "Navbar.ExpandableMenuTrigger";
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Content
|
|
154
|
+
*/
|
|
155
|
+
export interface NavbarExpandableMenuContentProps {
|
|
156
|
+
children: React.ReactNode;
|
|
157
|
+
className?: string;
|
|
158
|
+
}
|
|
159
|
+
export const NavbarExpandableMenuContent = forwardRef<
|
|
160
|
+
HTMLDivElement,
|
|
161
|
+
NavbarExpandableMenuContentProps
|
|
162
|
+
>(({ children, className, ...rest }, ref) => {
|
|
163
|
+
const [open] = useNavbarExpendableMenuContext();
|
|
164
|
+
return (
|
|
165
|
+
<section
|
|
166
|
+
{...rest}
|
|
167
|
+
className={clsx("hds-navbar__expandable-menu-content", className as undefined)}
|
|
168
|
+
data-state={open ? "open" : "closed"}
|
|
169
|
+
{...{ inert: open ? undefined : "true" }}
|
|
170
|
+
ref={ref}
|
|
171
|
+
>
|
|
172
|
+
<div className={clsx("hds-navbar__expandable-menu-content-inner")}>{children}</div>
|
|
173
|
+
</section>
|
|
174
|
+
);
|
|
175
|
+
});
|
|
176
|
+
NavbarExpandableMenuContent.displayName = "Navbar.ExpandableMenuContent";
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies -- storybook story */
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
3
|
+
import { Accordion } from "../accordion";
|
|
4
|
+
import { Link } from "../link";
|
|
5
|
+
import { LinkList } from "../list";
|
|
6
|
+
import { ArticleContent } from "../styled-html/styled-html.stories";
|
|
7
|
+
import { Container } from "../layout";
|
|
8
|
+
import { Navbar } from ".";
|
|
9
|
+
|
|
10
|
+
const meta: Meta<typeof Navbar> = {
|
|
11
|
+
title: "🚧 Navbar",
|
|
12
|
+
component: Navbar,
|
|
13
|
+
parameters: {
|
|
14
|
+
layout: "fullscreen",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default meta;
|
|
19
|
+
|
|
20
|
+
const globeIcon = (
|
|
21
|
+
<svg
|
|
22
|
+
aria-hidden
|
|
23
|
+
fill="none"
|
|
24
|
+
height="24"
|
|
25
|
+
viewBox="0 0 24 24"
|
|
26
|
+
width="24"
|
|
27
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
28
|
+
>
|
|
29
|
+
<path
|
|
30
|
+
d="M12 19.3125C12.2602 19.3125 12.9492 19.0594 13.6734 17.6109C13.9828 16.9887 14.25 16.2328 14.4469 15.375H9.55312C9.75 16.2328 10.0172 16.9887 10.3266 17.6109C11.0508 19.0594 11.7398 19.3125 12 19.3125ZM9.27539 13.6875H14.7246C14.7809 13.1496 14.8125 12.5836 14.8125 12C14.8125 11.4164 14.7809 10.8504 14.7246 10.3125H9.27539C9.21914 10.8504 9.1875 11.4164 9.1875 12C9.1875 12.5836 9.21914 13.1496 9.27539 13.6875ZM9.55312 8.625H14.4469C14.25 7.76719 13.9828 7.01133 13.6734 6.38906C12.9492 4.94063 12.2602 4.6875 12 4.6875C11.7398 4.6875 11.0508 4.94063 10.3266 6.38906C10.0172 7.01133 9.75 7.76719 9.55312 8.625ZM16.4191 10.3125C16.4719 10.8574 16.4965 11.4234 16.4965 12C16.4965 12.5766 16.4684 13.1426 16.4191 13.6875H19.1156C19.2422 13.1461 19.3125 12.5801 19.3125 12C19.3125 11.4199 19.2457 10.8539 19.1156 10.3125H16.4227H16.4191ZM18.4863 8.625C17.734 7.18008 16.5141 6.01992 15.027 5.34141C15.5227 6.24141 15.9164 7.36289 16.173 8.625H18.4898H18.4863ZM7.82344 8.625C8.08008 7.36289 8.47383 6.24492 8.96953 5.34141C7.48242 6.01992 6.2625 7.18008 5.51016 8.625H7.82695H7.82344ZM4.88437 10.3125C4.75781 10.8539 4.6875 11.4199 4.6875 12C4.6875 12.5801 4.7543 13.1461 4.88437 13.6875H7.58086C7.52813 13.1426 7.50352 12.5766 7.50352 12C7.50352 11.4234 7.53164 10.8574 7.58086 10.3125H4.88437ZM15.027 18.6586C16.5141 17.9801 17.734 16.8199 18.4863 15.375H16.173C15.9164 16.6371 15.5227 17.7551 15.027 18.6586ZM8.97305 18.6586C8.47734 17.7586 8.08359 16.6371 7.82695 15.375H5.51016C6.2625 16.8199 7.48242 17.9801 8.96953 18.6586H8.97305ZM12 21C9.61305 21 7.32387 20.0518 5.63604 18.364C3.94821 16.6761 3 14.3869 3 12C3 9.61305 3.94821 7.32387 5.63604 5.63604C7.32387 3.94821 9.61305 3 12 3C14.3869 3 16.6761 3.94821 18.364 5.63604C20.0518 7.32387 21 9.61305 21 12C21 14.3869 20.0518 16.6761 18.364 18.364C16.6761 20.0518 14.3869 21 12 21Z"
|
|
31
|
+
fill="currentColor"
|
|
32
|
+
/>
|
|
33
|
+
</svg>
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const userIcon = (
|
|
37
|
+
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
|
|
38
|
+
<path
|
|
39
|
+
d="M368 208A160 160 0 1 0 48 208a160 160 0 1 0 320 0zM337.1 371.1C301.7 399.2 256.8 416 208 416C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208c0 48.8-16.8 93.7-44.9 129.1L505 471c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L337.1 371.1z"
|
|
40
|
+
fill="currentColor"
|
|
41
|
+
/>
|
|
42
|
+
</svg>
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
type Story = StoryObj<typeof Navbar>;
|
|
46
|
+
export const Default: Story = {
|
|
47
|
+
render: () => (
|
|
48
|
+
<>
|
|
49
|
+
<Navbar>
|
|
50
|
+
<Navbar.Logo asChild>
|
|
51
|
+
<a href="https://www.posten.no/" title="Til forsiden" />
|
|
52
|
+
</Navbar.Logo>
|
|
53
|
+
<Navbar.Navigation>
|
|
54
|
+
<Navbar.LinkItem title="Link" href="https://www.posten.no/">
|
|
55
|
+
English
|
|
56
|
+
<Navbar.ItemIcon>{globeIcon}</Navbar.ItemIcon>
|
|
57
|
+
</Navbar.LinkItem>
|
|
58
|
+
<Navbar.ButtonItem title="Button">
|
|
59
|
+
Search
|
|
60
|
+
<Navbar.ItemIcon>{userIcon}</Navbar.ItemIcon>
|
|
61
|
+
</Navbar.ButtonItem>
|
|
62
|
+
<Navbar.ExpandableMenu>
|
|
63
|
+
<Navbar.ExpandableMenuTrigger whenClosedText="Meny" whenOpenText="Close" />
|
|
64
|
+
<Navbar.ExpandableMenuContent>
|
|
65
|
+
<Container>
|
|
66
|
+
<h2>Menu contents</h2>
|
|
67
|
+
<Accordion>
|
|
68
|
+
<Accordion.Item>
|
|
69
|
+
<Accordion.Header>Tjenester</Accordion.Header>
|
|
70
|
+
<Accordion.Content>
|
|
71
|
+
<LinkList>
|
|
72
|
+
<li>
|
|
73
|
+
<Link href="#">Post</Link>
|
|
74
|
+
</li>
|
|
75
|
+
<li>
|
|
76
|
+
<Link href="#">Pakker og gods</Link>
|
|
77
|
+
</li>
|
|
78
|
+
<li>
|
|
79
|
+
<Link href="#">Bud og ekspress</Link>
|
|
80
|
+
</li>
|
|
81
|
+
</LinkList>
|
|
82
|
+
</Accordion.Content>
|
|
83
|
+
</Accordion.Item>
|
|
84
|
+
</Accordion>
|
|
85
|
+
</Container>
|
|
86
|
+
</Navbar.ExpandableMenuContent>
|
|
87
|
+
</Navbar.ExpandableMenu>
|
|
88
|
+
</Navbar.Navigation>
|
|
89
|
+
</Navbar>
|
|
90
|
+
<Container as="main">
|
|
91
|
+
<h1>Some content to be hidden when the menu opens</h1>
|
|
92
|
+
{
|
|
93
|
+
// @ts-expect-error -- It's ok
|
|
94
|
+
ArticleContent.render({})
|
|
95
|
+
}
|
|
96
|
+
</Container>
|
|
97
|
+
</>
|
|
98
|
+
),
|
|
99
|
+
};
|