@purpur/library 9.7.4 → 9.8.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/.lintstagedrc.mts +10 -0
- package/@types/scss.d.ts +4 -0
- package/CHANGELOG.json +4062 -0
- package/CHANGELOG.md +2118 -0
- package/dist/LICENSE.txt +7 -7
- package/dist/{ThemeProvider-DiDBfyFA.mjs → ThemeProvider-BJ25_asg.mjs} +13 -13
- package/dist/{ThemeProvider-DiDBfyFA.mjs.map → ThemeProvider-BJ25_asg.mjs.map} +1 -1
- package/dist/{ThemeProvider-D7oXcAde.js → ThemeProvider-BJGm3zai.js} +2 -2
- package/dist/{ThemeProvider-D7oXcAde.js.map → ThemeProvider-BJGm3zai.js.map} +1 -1
- package/dist/{autocomplete-BEGRn-Wh.mjs → autocomplete-A9-Ni60G.mjs} +2 -2
- package/dist/{autocomplete-BEGRn-Wh.mjs.map → autocomplete-A9-Ni60G.mjs.map} +1 -1
- package/dist/{autocomplete-3kV1btuI.js → autocomplete-Bbth0nDG.js} +2 -2
- package/dist/{autocomplete-3kV1btuI.js.map → autocomplete-Bbth0nDG.js.map} +1 -1
- package/dist/autocomplete.cjs.js +1 -1
- package/dist/autocomplete.es.js +1 -1
- package/dist/components/accordion/src/accordion.visual.fixtures.d.ts +13 -0
- package/dist/components/accordion/src/accordion.visual.fixtures.d.ts.map +1 -0
- package/dist/components/badge/src/badge.visual.fixtures.d.ts +13 -0
- package/dist/components/badge/src/badge.visual.fixtures.d.ts.map +1 -0
- package/dist/components/footer/src/telia-logo.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner-types.d.ts +48 -0
- package/dist/components/hero-banner/src/hero-banner-types.d.ts.map +1 -0
- package/dist/components/hero-banner/src/hero-banner.d.ts +5 -48
- package/dist/components/hero-banner/src/hero-banner.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner.visual.fixtures.d.ts +1 -1
- package/dist/components/hero-banner/src/hero-banner.visual.fixtures.d.ts.map +1 -1
- package/dist/components-metadata.js +2 -2
- package/dist/{date-field-BKKty89_.js → date-field-CKxEWHG3.js} +2 -2
- package/dist/{date-field-BKKty89_.js.map → date-field-CKxEWHG3.js.map} +1 -1
- package/dist/{date-field-Cv5CKR1y.mjs → date-field-HEFdHIxk.mjs} +2 -2
- package/dist/{date-field-Cv5CKR1y.mjs.map → date-field-HEFdHIxk.mjs.map} +1 -1
- package/dist/date-field.cjs.js +1 -1
- package/dist/date-field.es.js +1 -1
- package/dist/{date-picker-CIizn3Pv.js → date-picker-CDBwkAJI.js} +2 -2
- package/dist/{date-picker-CIizn3Pv.js.map → date-picker-CDBwkAJI.js.map} +1 -1
- package/dist/{date-picker-DixxW60s.mjs → date-picker-cQewKIMN.mjs} +6 -6
- package/dist/{date-picker-DixxW60s.mjs.map → date-picker-cQewKIMN.mjs.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/{date-range-field-D8vLeSwp.js → date-range-field-D7Hn9FGN.js} +2 -2
- package/dist/{date-range-field-D8vLeSwp.js.map → date-range-field-D7Hn9FGN.js.map} +1 -1
- package/dist/{date-range-field-CFcjprIl.mjs → date-range-field-_WctWD29.mjs} +2 -2
- package/dist/{date-range-field-CFcjprIl.mjs.map → date-range-field-_WctWD29.mjs.map} +1 -1
- package/dist/date-range-field.cjs.js +1 -1
- package/dist/date-range-field.es.js +1 -1
- package/dist/{drawer-DyhsP34o.js → drawer-DyLQfvEh.js} +2 -2
- package/dist/{drawer-DyhsP34o.js.map → drawer-DyLQfvEh.js.map} +1 -1
- package/dist/{drawer-BzkRd9F0.mjs → drawer-cIUx6WSZ.mjs} +3 -3
- package/dist/{drawer-BzkRd9F0.mjs.map → drawer-cIUx6WSZ.mjs.map} +1 -1
- package/dist/drawer.cjs.js +1 -1
- package/dist/drawer.es.js +1 -1
- package/dist/{footer-DenAcikt.mjs → footer-BMlXRro2.mjs} +86 -96
- package/dist/footer-BMlXRro2.mjs.map +1 -0
- package/dist/footer-cet787Iq.js +2 -0
- package/dist/footer-cet787Iq.js.map +1 -0
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/{hero-banner-B7xrDfzN.mjs → hero-banner-B08jC0Sf.mjs} +77 -77
- package/dist/hero-banner-B08jC0Sf.mjs.map +1 -0
- package/dist/hero-banner-D__doaU7.js +2 -0
- package/dist/hero-banner-D__doaU7.js.map +1 -0
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +21 -21
- package/dist/{modal-DJn9idcw.js → modal-CmPPxJ7Y.js} +2 -2
- package/dist/{modal-DJn9idcw.js.map → modal-CmPPxJ7Y.js.map} +1 -1
- package/dist/{modal-EIP36327.mjs → modal-Evh8sCBO.mjs} +3 -3
- package/dist/{modal-EIP36327.mjs.map → modal-Evh8sCBO.mjs.map} +1 -1
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{popover-DERrvReO.mjs → popover-BSUdf0Ae.mjs} +3 -3
- package/dist/{popover-DERrvReO.mjs.map → popover-BSUdf0Ae.mjs.map} +1 -1
- package/dist/{popover-DnGgzfQr.js → popover-XJqF5DHT.js} +2 -2
- package/dist/{popover-DnGgzfQr.js.map → popover-XJqF5DHT.js.map} +1 -1
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{promotion-card-DKc2Cx1h.js → promotion-card-BnXD2mkp.js} +2 -2
- package/dist/{promotion-card-DKc2Cx1h.js.map → promotion-card-BnXD2mkp.js.map} +1 -1
- package/dist/{promotion-card-BnzIVNQ4.mjs → promotion-card-DOO0VCI8.mjs} +2 -2
- package/dist/{promotion-card-BnzIVNQ4.mjs.map → promotion-card-DOO0VCI8.mjs.map} +1 -1
- package/dist/promotion-card.cjs.js +1 -1
- package/dist/promotion-card.es.js +1 -1
- package/dist/purpur.css +1 -1
- package/dist/{quantity-selector-CvBvnMeB.mjs → quantity-selector-B4YnfmNb.mjs} +2 -2
- package/dist/{quantity-selector-CvBvnMeB.mjs.map → quantity-selector-B4YnfmNb.mjs.map} +1 -1
- package/dist/{quantity-selector-CDSfcTb1.js → quantity-selector-CTBoxiPO.js} +2 -2
- package/dist/{quantity-selector-CDSfcTb1.js.map → quantity-selector-CTBoxiPO.js.map} +1 -1
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +1 -1
- package/dist/{search-field-DKyNh7pE.mjs → search-field-_h8xn-sj.mjs} +2 -2
- package/dist/{search-field-DKyNh7pE.mjs.map → search-field-_h8xn-sj.mjs.map} +1 -1
- package/dist/{search-field-2vdDbiT0.js → search-field-vh6uz5KV.js} +2 -2
- package/dist/{search-field-2vdDbiT0.js.map → search-field-vh6uz5KV.js.map} +1 -1
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/{stepper-e0qicwqd.mjs → stepper-B-nCLs2D.mjs} +2 -2
- package/dist/{stepper-e0qicwqd.mjs.map → stepper-B-nCLs2D.mjs.map} +1 -1
- package/dist/{stepper-5qMo_shq.js → stepper-CTKlnH0q.js} +2 -2
- package/dist/{stepper-5qMo_shq.js.map → stepper-CTKlnH0q.js.map} +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-i1Gs9e0e.mjs → table-DOPXfD-s.mjs} +6 -6
- package/dist/{table-i1Gs9e0e.mjs.map → table-DOPXfD-s.mjs.map} +1 -1
- package/dist/{table-BOCcBzSO.js → table-DTQe4nN8.js} +2 -2
- package/dist/{table-BOCcBzSO.js.map → table-DTQe4nN8.js.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/{text-area-D0truMT1.js → text-area-9RUldq6W.js} +2 -2
- package/dist/{text-area-D0truMT1.js.map → text-area-9RUldq6W.js.map} +1 -1
- package/dist/{text-area-IVH-k4MM.mjs → text-area-C58aZEPa.mjs} +3 -3
- package/dist/{text-area-IVH-k4MM.mjs.map → text-area-C58aZEPa.mjs.map} +1 -1
- package/dist/text-area.cjs.js +1 -1
- package/dist/text-area.es.js +1 -1
- package/dist/text-field-C2W13n15.js +2 -0
- package/dist/{text-field-CYJzQG3h.js.map → text-field-C2W13n15.js.map} +1 -1
- package/dist/{text-field-BQfxJobW.mjs → text-field-D8MMa6ij.mjs} +114 -114
- package/dist/{text-field-BQfxJobW.mjs.map → text-field-D8MMa6ij.mjs.map} +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.es.js +1 -1
- package/dist/theme.cjs.js +1 -1
- package/dist/theme.es.js +3 -3
- package/dist/tokens/color/variables.css +1 -1
- package/dist/tokens/color/variables.dark.css +1 -1
- package/dist/tokens/color/variables.dark.js +1 -1
- package/dist/tokens/color/variables.dark.json +1 -1
- package/dist/tokens/color/variables.dark.scss +1 -1
- package/dist/tokens/color/variables.js +1 -1
- package/dist/tokens/color/variables.json +1 -1
- package/dist/tokens/color/variables.scss +1 -1
- package/dist/tokens.cjs.js +1 -1
- package/dist/tokens.es.js +1 -1
- package/dist/{tooltip-CJGmJDFQ.js → tooltip-CDnJKoIA.js} +2 -2
- package/dist/{tooltip-CJGmJDFQ.js.map → tooltip-CDnJKoIA.js.map} +1 -1
- package/dist/{tooltip-RA-03bKs.mjs → tooltip-pwJMEBBP.mjs} +3 -3
- package/dist/{tooltip-RA-03bKs.mjs.map → tooltip-pwJMEBBP.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/{useColorScheme-B9DWd-LN.mjs → useColorScheme-B7lGBSe4.mjs} +2 -2
- package/dist/{useColorScheme-B9DWd-LN.mjs.map → useColorScheme-B7lGBSe4.mjs.map} +1 -1
- package/dist/useColorScheme-BHhPgv9q.js +2 -0
- package/dist/{useColorScheme-DbTQjxNB.js.map → useColorScheme-BHhPgv9q.js.map} +1 -1
- package/dist/useThemePortalContainer-CUcqV327.js +2 -0
- package/dist/{useThemePortalContainer-D9BYjEvT.js.map → useThemePortalContainer-CUcqV327.js.map} +1 -1
- package/dist/useThemePortalContainer-D13Xx24N.mjs +9 -0
- package/dist/{useThemePortalContainer-tFLTaYKN.mjs.map → useThemePortalContainer-D13Xx24N.mjs.map} +1 -1
- package/dist/{variables-B5hbV0Uy.mjs → variables-BrsAsWIF.mjs} +2 -2
- package/dist/{variables-B5hbV0Uy.mjs.map → variables-BrsAsWIF.mjs.map} +1 -1
- package/dist/{variables-DoI78zZc.js → variables-D1vNo1lO.js} +2 -2
- package/dist/{variables-DoI78zZc.js.map → variables-D1vNo1lO.js.map} +1 -1
- package/eslint.config.mjs +2 -0
- package/package.json +27 -31
- package/scripts/generate.mts +269 -0
- package/src/accordion.ts +6 -0
- package/src/alert-badge.ts +6 -0
- package/src/aliases.ts +302 -0
- package/src/autocomplete.ts +6 -0
- package/src/avatar.ts +6 -0
- package/src/badge.ts +6 -0
- package/src/breadcrumbs.ts +6 -0
- package/src/button.ts +6 -0
- package/src/calendar.ts +6 -0
- package/src/card.ts +6 -0
- package/src/carousel.ts +6 -0
- package/src/chat-field.ts +6 -0
- package/src/checkbox.ts +6 -0
- package/src/chip-group.ts +6 -0
- package/src/color-dot.ts +6 -0
- package/src/comparison-table.ts +6 -0
- package/src/container.ts +6 -0
- package/src/content-block.ts +6 -0
- package/src/countdown.ts +6 -0
- package/src/counter-badge.ts +6 -0
- package/src/cta-link.ts +6 -0
- package/src/date-field.ts +6 -0
- package/src/date-picker.ts +6 -0
- package/src/date-range-field.ts +6 -0
- package/src/dismissable-chip-group.ts +6 -0
- package/src/drawer.ts +6 -0
- package/src/dropdown.ts +6 -0
- package/src/entries.js +73 -0
- package/src/field-error-text.ts +6 -0
- package/src/field-helper-text.ts +6 -0
- package/src/footer.ts +6 -0
- package/src/grid.ts +6 -0
- package/src/heading.ts +6 -0
- package/src/hero-banner.ts +6 -0
- package/src/label.ts +6 -0
- package/src/library.ts +77 -0
- package/src/link.ts +6 -0
- package/src/listbox.ts +6 -0
- package/src/loading.ts +6 -0
- package/src/message.ts +6 -0
- package/src/modal.ts +6 -0
- package/src/notification-banner.ts +6 -0
- package/src/notification.ts +6 -0
- package/src/pagination.ts +6 -0
- package/src/paragraph.ts +6 -0
- package/src/password-field.ts +7 -0
- package/src/popover.ts +6 -0
- package/src/product-card.ts +6 -0
- package/src/promotion-card.ts +6 -0
- package/src/purpur.css +1 -0
- package/src/quantity-selector.ts +6 -0
- package/src/radio-button-group.ts +6 -0
- package/src/radio-card-group.ts +6 -0
- package/src/rich-text.ts +6 -0
- package/src/search-field.ts +6 -0
- package/src/select.ts +6 -0
- package/src/skeleton.ts +6 -0
- package/src/slider.ts +6 -0
- package/src/spacer.ts +6 -0
- package/src/spinner.ts +6 -0
- package/src/stepper.ts +6 -0
- package/src/table.ts +6 -0
- package/src/tabs.ts +6 -0
- package/src/text-area.ts +6 -0
- package/src/text-field.ts +6 -0
- package/src/text-spacing.ts +6 -0
- package/src/theme.ts +6 -0
- package/src/toggle.ts +6 -0
- package/src/tokens.ts +6 -0
- package/src/tooltip.ts +6 -0
- package/src/visually-hidden.ts +6 -0
- package/tokens/_dark.scss +9 -0
- package/tokens/_index.scss +9 -0
- package/tokens/border/variables.css +13 -0
- package/tokens/border/variables.d.ts +10 -0
- package/tokens/border/variables.dark.css +12 -0
- package/tokens/border/variables.dark.d.ts +10 -0
- package/tokens/border/variables.dark.js +10 -0
- package/tokens/border/variables.dark.json +18 -0
- package/tokens/border/variables.dark.scss +10 -0
- package/tokens/border/variables.js +10 -0
- package/tokens/border/variables.json +18 -0
- package/tokens/border/variables.scss +10 -0
- package/tokens/breakpoint/variables.css +11 -0
- package/tokens/breakpoint/variables.d.ts +8 -0
- package/tokens/breakpoint/variables.dark.css +10 -0
- package/tokens/breakpoint/variables.dark.d.ts +8 -0
- package/tokens/breakpoint/variables.dark.js +8 -0
- package/tokens/breakpoint/variables.dark.json +14 -0
- package/tokens/breakpoint/variables.dark.scss +8 -0
- package/tokens/breakpoint/variables.js +8 -0
- package/tokens/breakpoint/variables.json +14 -0
- package/tokens/breakpoint/variables.scss +8 -0
- package/tokens/color/variables.css +262 -0
- package/tokens/color/variables.d.ts +253 -0
- package/tokens/color/variables.dark.css +262 -0
- package/tokens/color/variables.dark.d.ts +252 -0
- package/tokens/color/variables.dark.js +252 -0
- package/tokens/color/variables.dark.json +306 -0
- package/tokens/color/variables.dark.scss +252 -0
- package/tokens/color/variables.js +253 -0
- package/tokens/color/variables.json +307 -0
- package/tokens/color/variables.scss +253 -0
- package/tokens/dark.css +9 -0
- package/tokens/dark.d.ts +9 -0
- package/tokens/dark.js +9 -0
- package/tokens/filter/variables.css +4 -0
- package/tokens/filter/variables.d.ts +1 -0
- package/tokens/filter/variables.dark.css +3 -0
- package/tokens/filter/variables.dark.d.ts +1 -0
- package/tokens/filter/variables.dark.js +1 -0
- package/tokens/filter/variables.dark.json +7 -0
- package/tokens/filter/variables.dark.scss +1 -0
- package/tokens/filter/variables.js +1 -0
- package/tokens/filter/variables.json +7 -0
- package/tokens/filter/variables.scss +1 -0
- package/tokens/gradient/variables.css +53 -0
- package/tokens/gradient/variables.d.ts +9 -0
- package/tokens/gradient/variables.dark.css +51 -0
- package/tokens/gradient/variables.dark.d.ts +9 -0
- package/tokens/gradient/variables.dark.js +18 -0
- package/tokens/gradient/variables.dark.json +27 -0
- package/tokens/gradient/variables.dark.scss +36 -0
- package/tokens/gradient/variables.js +18 -0
- package/tokens/gradient/variables.json +27 -0
- package/tokens/gradient/variables.scss +42 -0
- package/tokens/index.css +18 -0
- package/tokens/index.d.ts +9 -0
- package/tokens/index.js +9 -0
- package/tokens/motion/variables.css +14 -0
- package/tokens/motion/variables.d.ts +11 -0
- package/tokens/motion/variables.dark.css +13 -0
- package/tokens/motion/variables.dark.d.ts +11 -0
- package/tokens/motion/variables.dark.js +11 -0
- package/tokens/motion/variables.dark.json +19 -0
- package/tokens/motion/variables.dark.scss +11 -0
- package/tokens/motion/variables.js +11 -0
- package/tokens/motion/variables.json +19 -0
- package/tokens/motion/variables.scss +11 -0
- package/tokens/shadow/variables.css +11 -0
- package/tokens/shadow/variables.d.ts +4 -0
- package/tokens/shadow/variables.dark.css +10 -0
- package/tokens/shadow/variables.dark.d.ts +4 -0
- package/tokens/shadow/variables.dark.js +4 -0
- package/tokens/shadow/variables.dark.json +8 -0
- package/tokens/shadow/variables.dark.scss +4 -0
- package/tokens/shadow/variables.js +4 -0
- package/tokens/shadow/variables.json +8 -0
- package/tokens/shadow/variables.scss +4 -0
- package/tokens/spacing/variables.css +26 -0
- package/tokens/spacing/variables.d.ts +23 -0
- package/tokens/spacing/variables.dark.css +17 -0
- package/tokens/spacing/variables.dark.d.ts +15 -0
- package/tokens/spacing/variables.dark.js +15 -0
- package/tokens/spacing/variables.dark.json +19 -0
- package/tokens/spacing/variables.dark.scss +15 -0
- package/tokens/spacing/variables.js +23 -0
- package/tokens/spacing/variables.json +31 -0
- package/tokens/spacing/variables.scss +23 -0
- package/tokens/typography/variables.css +30 -0
- package/tokens/typography/variables.d.ts +26 -0
- package/tokens/typography/variables.dark.css +29 -0
- package/tokens/typography/variables.dark.d.ts +26 -0
- package/tokens/typography/variables.dark.js +28 -0
- package/tokens/typography/variables.dark.json +38 -0
- package/tokens/typography/variables.dark.scss +26 -0
- package/tokens/typography/variables.js +28 -0
- package/tokens/typography/variables.json +38 -0
- package/tokens/typography/variables.scss +26 -0
- package/vite-plugin-generate-components-metadata.js +62 -0
- package/dist/footer-3Y-664-8.js +0 -2
- package/dist/footer-3Y-664-8.js.map +0 -1
- package/dist/footer-DenAcikt.mjs.map +0 -1
- package/dist/hero-banner-B7xrDfzN.mjs.map +0 -1
- package/dist/hero-banner-DthITuQ7.js +0 -2
- package/dist/hero-banner-DthITuQ7.js.map +0 -1
- package/dist/text-field-CYJzQG3h.js +0 -2
- package/dist/useColorScheme-DbTQjxNB.js +0 -2
- package/dist/useThemePortalContainer-D9BYjEvT.js +0 -2
- package/dist/useThemePortalContainer-tFLTaYKN.mjs +0 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-BzkRd9F0.mjs","sources":["../../../components/drawer/src/drawer.context.ts","../../../components/drawer/src/drawer-container.tsx","../../../components/drawer/src/use-swipe-tracking.hook.ts","../../../components/drawer/src/drawer-handle.tsx","../../../components/drawer/src/drawer-header.tsx","../../../components/drawer/src/drawer-scroll-area.tsx","../../../components/drawer/src/drawer-frame.tsx","../../../components/drawer/src/use-swipe-to-dismiss.hook.ts","../../../components/drawer/src/drawer-content.tsx","../../../components/drawer/src/drawer-trigger.tsx","../../../components/drawer/src/drawer.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nimport { type DrawerVariant, type OpenHandlerFunction } from \"./types\";\n\nexport type DrawerContextValue = {\n isModal: boolean;\n onOpenChange: OpenHandlerFunction;\n variant: DrawerVariant;\n};\n\nexport const DrawerContext = createContext<DrawerContextValue | null>(null);\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-container.module.scss\";\nimport { type DrawerVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerContainerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n drawerVariant?: DrawerVariant;\n stickyFooter: boolean;\n variant?: \"header\" | \"body\" | \"footer\";\n};\n\nconst rootClassName = \"purpur-drawer-container\";\n\nexport const DrawerContainer = forwardRef<HTMLDivElement, DrawerContainerProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-container\",\n children,\n className,\n drawerVariant = \"default\",\n variant = \"body\",\n stickyFooter,\n ...props\n },\n ref\n ) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--${variant}`]: variant,\n [`${rootClassName}--sticky`]: stickyFooter,\n [`${rootClassName}--ai`]: drawerVariant === \"ai\",\n },\n className,\n ]);\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {children}\n </div>\n );\n }\n);\n\nDrawerContainer.displayName = \"DrawerContainer\";\n","import type { PointerEvent, RefObject } from \"react\";\n\nimport { type SwipeEvent } from \"./types\";\n\ntype UseSwipeTracking = {\n onPointerDown(event: PointerEvent): void;\n onPointerMove(event: PointerEvent): void;\n onPointerUp(event: PointerEvent): void;\n};\n\nexport const useSwipeTracking = (\n pointerStartRef: RefObject<{ y: number } | null>,\n swipeDeltaRef: RefObject<{ y: number } | null>,\n onSwipeStart: () => void,\n onSwipeMove: (event: SwipeEvent) => void,\n onSwipeCancel: () => void,\n onSwipeEnd: (event: SwipeEvent) => void\n): UseSwipeTracking => {\n const onPointerDown = (event: PointerEvent) => {\n pointerStartRef.current = { y: event.clientY };\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!pointerStartRef.current) {\n return;\n }\n const y = event.clientY - pointerStartRef.current.y;\n const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current);\n const clampedY = Math.max(0, y);\n const moveStartBuffer = event.pointerType === \"touch\" ? 10 : 2;\n const delta = { y: clampedY };\n const eventDetail = { originalEvent: event, delta };\n if (hasSwipeMoveStarted) {\n swipeDeltaRef.current = delta;\n onSwipeMove(eventDetail);\n } else if (isDeltaInDirection(delta, 0)) {\n swipeDeltaRef.current = delta;\n onSwipeStart();\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } else if (Math.abs(y) > moveStartBuffer) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n };\n const onPointerUp = (event: PointerEvent) => {\n const delta = swipeDeltaRef.current;\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n swipeDeltaRef.current = null;\n pointerStartRef.current = null;\n if (delta) {\n const swipeHandle = event.currentTarget;\n const eventDetail = { originalEvent: event, delta };\n if (isDeltaInDirection(delta, 0) && delta.y > 200) {\n onSwipeEnd(eventDetail);\n } else {\n onSwipeCancel();\n }\n // Prevent click event from triggering on items within the drawer when\n // pointer up is part of a swipe gesture\n swipeHandle.addEventListener(\"click\", (event) => event.preventDefault(), {\n once: true,\n });\n }\n };\n return {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n };\n};\n\nconst isDeltaInDirection = (delta: { y: number }, threshold = 0) => {\n const deltaY = Math.abs(delta.y);\n return deltaY > threshold;\n};\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-handle.module.scss\";\nimport { type DrawerVariant, type SwipeEvent } from \"./types\";\nimport { useSwipeTracking } from \"./use-swipe-tracking.hook\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerHandleProps = Omit<BaseProps, \"children\"> & {\n onSwipeStart(): void;\n onSwipeMove(event: SwipeEvent): void;\n onSwipeCancel(): void;\n onSwipeEnd(event: SwipeEvent): void;\n variant?: DrawerVariant;\n};\n\nconst rootClassName = \"purpur-drawer-handle\";\n\nexport const DrawerHandle = forwardRef<HTMLDivElement, DrawerHandleProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-handle\",\n className,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const classes = cx([rootClassName, { [`${rootClassName}--ai`]: variant === \"ai\" }, className]);\n const pointerStartRef = React.useRef<{ y: number } | null>(null);\n const swipeDeltaRef = React.useRef<{ y: number } | null>(null);\n const { onPointerDown, onPointerMove, onPointerUp } = useSwipeTracking(\n swipeDeltaRef,\n pointerStartRef,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd\n );\n\n return (\n <div\n className={classes}\n data-testid={dataTestId}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nDrawerHandle.displayName = \"DrawerHandle\";\n","import React, { forwardRef } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { DisplayVariant, Heading } from \"@purpur/heading\";\nimport { IconChevronLeft } from \"@purpur/icon/chevron-left\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-header.module.scss\";\nimport { type DrawerVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerHeaderProps = Omit<BaseProps, \"children\"> & {\n backButton: boolean;\n backButtonText?: string;\n backButtonOnlyIcon: boolean;\n closeButtonAriaLabel: string;\n headerContent?: React.ReactNode;\n onBackButtonClick?: () => void;\n onCloseClick?: () => void;\n title: string;\n variant?: DrawerVariant;\n};\n\nconst rootClassName = \"purpur-drawer-header\";\n\nexport const DrawerHeader = forwardRef<HTMLDivElement, DrawerHeaderProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-header\",\n backButton,\n backButtonText,\n backButtonOnlyIcon,\n className,\n closeButtonAriaLabel,\n headerContent,\n onBackButtonClick,\n onCloseClick,\n title,\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const classes = cx([rootClassName, { [`${rootClassName}--ai`]: variant === \"ai\" }, className]);\n const hasBackButton = !!(backButton && backButtonText && onBackButtonClick);\n const isAi = variant === \"ai\";\n\n const CloseButtonWrapper = onCloseClick ? React.Fragment : RadixDialog.Close;\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <div\n className={cx([\n `${rootClassName}__row`,\n {\n [`${rootClassName}__row--with-back-button`]: hasBackButton,\n },\n ])}\n data-testid={`${dataTestId}-row`}\n >\n <div className={cx(`${rootClassName}__left`)}>\n {hasBackButton ? (\n <Button\n aria-label={backButtonOnlyIcon ? backButtonText : \"\"}\n className={cx([\n `${rootClassName}__back-button`,\n {\n [`${rootClassName}__back-button--only-icon`]: backButtonOnlyIcon,\n },\n ])}\n data-testid={`${dataTestId}-back-button`}\n iconOnly={backButtonOnlyIcon}\n negative={isAi}\n onClick={onBackButtonClick}\n size=\"sm\"\n variant={backButtonOnlyIcon ? BUTTON_VARIANT.TERTIARY_PURPLE : BUTTON_VARIANT.TEXT}\n >\n <IconChevronLeft size=\"sm\" />\n {!backButtonOnlyIcon && backButtonText}\n </Button>\n ) : headerContent ? (\n <>\n {headerContent}\n <VisuallyHidden asChild>\n <RadixDialog.Title>{title}</RadixDialog.Title>\n </VisuallyHidden>\n </>\n ) : (\n <RadixDialog.Title asChild>\n <Heading\n className={cx(`${rootClassName}__title`)}\n data-testid={`${dataTestId}-title`}\n negative={isAi}\n tag=\"h2\"\n variant={DisplayVariant.DISPLAY10}\n tabIndex={-1}\n >\n {title}\n </Heading>\n </RadixDialog.Title>\n )}\n </div>\n\n <div className={cx(`${rootClassName}__right`)}>\n <CloseButtonWrapper {...(onCloseClick ? {} : { asChild: true })}>\n <Button\n aria-label={closeButtonAriaLabel}\n className={cx(`${rootClassName}__close-button`)}\n iconOnly\n negative={isAi}\n onClick={onCloseClick}\n size=\"sm\"\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n >\n <IconClose size=\"sm\" />\n </Button>\n </CloseButtonWrapper>\n </div>\n </div>\n {hasBackButton &&\n (headerContent ? (\n <>\n {headerContent}\n <VisuallyHidden asChild>\n <RadixDialog.Title>{title}</RadixDialog.Title>\n </VisuallyHidden>\n </>\n ) : (\n <RadixDialog.Title asChild>\n <Heading\n data-testid={`${dataTestId}-title-with-back-button`}\n className={cx(`${rootClassName}__title`)}\n negative={isAi}\n tag=\"h2\"\n tabIndex={-1}\n variant={DisplayVariant.DISPLAY10}\n >\n {title}\n </Heading>\n </RadixDialog.Title>\n ))}\n </div>\n );\n }\n);\n\nDrawerHeader.displayName = \"DrawerHeader\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-scroll-area.module.scss\";\nimport { type DrawerVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerScrollAreaProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n drawerVariant?: DrawerVariant;\n fitToContent?: boolean;\n};\n\nconst rootClassName = \"purpur-drawer-scroll-area\";\n\nexport const DrawerScrollArea = forwardRef<HTMLDivElement, DrawerScrollAreaProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-scroll-area\",\n children,\n className,\n drawerVariant = \"default\",\n fitToContent = false,\n ...props\n },\n ref\n ) => {\n const classes = cx([\n rootClassName,\n { [`${rootClassName}--ai`]: drawerVariant === \"ai\" },\n className,\n ]);\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <RadixScrollArea.Root\n className={cx(`${rootClassName}__root`, {\n [`${rootClassName}__root--fit-to-content`]: fitToContent,\n })}\n >\n <RadixScrollArea.Viewport className={cx(`${rootClassName}__viewport`)}>\n {children}\n </RadixScrollArea.Viewport>\n <RadixScrollArea.Scrollbar\n className={cx(`${rootClassName}__scrollbar`)}\n orientation=\"vertical\"\n >\n <RadixScrollArea.Thumb className={cx(`${rootClassName}__thumb`)} />\n </RadixScrollArea.Scrollbar>\n </RadixScrollArea.Root>\n </div>\n );\n }\n);\n\nDrawerScrollArea.displayName = \"DrawerScrollArea\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport { DrawerContainer } from \"./drawer-container\";\nimport styles from \"./drawer-frame.module.scss\";\nimport { DrawerHandle } from \"./drawer-handle\";\nimport { DrawerHeader } from \"./drawer-header\";\nimport { DrawerScrollArea } from \"./drawer-scroll-area\";\nimport { type DrawerVariant, type Position, type SwipeEvent } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerFrameProps = Omit<BaseProps, \"children\"> & {\n backButton: boolean;\n backButtonText?: string;\n backButtonOnlyIcon: boolean;\n children: ReactNode;\n closeButtonAriaLabel: string;\n fitToContent?: boolean;\n footerContent?: ReactNode;\n headerContent?: ReactNode;\n onBackButtonClick?: () => void;\n onCloseClick?: () => void;\n onSwipeStart(): void;\n onSwipeMove(event: SwipeEvent): void;\n onSwipeCancel(): void;\n onSwipeEnd(event: SwipeEvent): void;\n stickyFooter: boolean;\n title: string;\n position?: Position;\n variant?: DrawerVariant;\n};\n\nconst rootClassName = \"purpur-drawer-frame\";\n\nexport const DrawerFrame = forwardRef<HTMLDivElement, DrawerFrameProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-frame\",\n backButton,\n backButtonText,\n backButtonOnlyIcon,\n children,\n className,\n closeButtonAriaLabel,\n fitToContent = false,\n footerContent,\n headerContent,\n onBackButtonClick,\n onCloseClick,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n title,\n stickyFooter,\n position = \"right\",\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const hasBackButton = !!(backButton && backButtonText && onBackButtonClick);\n const isAi = variant === \"ai\";\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--fit-to-content`]: fitToContent,\n [`${rootClassName}--sticky-footer`]: stickyFooter,\n [`${rootClassName}--left`]: position === \"left\",\n [`${rootClassName}--right`]: position === \"right\",\n [`${rootClassName}--without-back-button`]: !hasBackButton,\n [`${rootClassName}--with-back-button`]: hasBackButton,\n [`${rootClassName}--ai`]: isAi,\n },\n className,\n ]);\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <DrawerHandle\n onSwipeStart={onSwipeStart}\n onSwipeMove={onSwipeMove}\n onSwipeCancel={onSwipeCancel}\n onSwipeEnd={onSwipeEnd}\n variant={variant}\n />\n <DrawerContainer\n className={cx(`${rootClassName}__header`)}\n variant=\"header\"\n stickyFooter={stickyFooter}\n drawerVariant={variant}\n >\n <DrawerHeader\n title={title}\n headerContent={headerContent}\n backButtonOnlyIcon={backButtonOnlyIcon}\n backButton={backButton}\n backButtonText={backButtonText}\n closeButtonAriaLabel={closeButtonAriaLabel}\n onBackButtonClick={onBackButtonClick}\n onCloseClick={onCloseClick}\n variant={variant}\n />\n </DrawerContainer>\n {stickyFooter ? (\n <>\n <DrawerScrollArea\n className={cx(`${rootClassName}__body`)}\n data-testid={`${dataTestId}-sticky-footer-scroll-area`}\n fitToContent={fitToContent}\n drawerVariant={variant}\n >\n <DrawerContainer stickyFooter drawerVariant={variant}>\n {children}\n </DrawerContainer>\n </DrawerScrollArea>\n {footerContent && (\n <DrawerContainer\n className={cx(`${rootClassName}__footer`)}\n data-testid={`${dataTestId}-sticky-footer`}\n variant=\"footer\"\n stickyFooter={stickyFooter}\n drawerVariant={variant}\n >\n {footerContent}\n </DrawerContainer>\n )}\n </>\n ) : (\n <DrawerScrollArea\n className={cx(`${rootClassName}__body`)}\n data-testid={`${dataTestId}-scroll-area`}\n fitToContent={fitToContent}\n drawerVariant={variant}\n >\n <div\n className={cx([\n `${rootClassName}__content-container`,\n { [`${rootClassName}__content-container--no-footer`]: !footerContent },\n ])}\n >\n <DrawerContainer stickyFooter={stickyFooter} drawerVariant={variant}>\n {children}\n </DrawerContainer>\n {footerContent && (\n <DrawerContainer\n data-testid={`${dataTestId}-footer`}\n stickyFooter={stickyFooter}\n variant=\"footer\"\n drawerVariant={variant}\n >\n {footerContent}\n </DrawerContainer>\n )}\n </div>\n </DrawerScrollArea>\n )}\n </div>\n );\n }\n);\n\nDrawerFrame.displayName = \"DrawerFrame\";\n","import type { RefObject } from \"react\";\n\nimport { type SwipeEvent } from \"./types\";\n\ntype UseSwipeToDismiss = {\n onSwipeStart(): void;\n onSwipeMove(event: SwipeEvent): void;\n onSwipeCancel(): void;\n onSwipeEnd(event: SwipeEvent): void;\n};\n\nexport const useSwipeToDismiss = <T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n handleOpenChange: ((open: boolean) => void) | null\n): UseSwipeToDismiss => {\n const onSwipeStart = () => {\n if (!containerRef.current) {\n return;\n }\n containerRef.current.setAttribute(\"data-swipe\", \"start\");\n };\n const onSwipeMove = (event: SwipeEvent) => {\n if (!containerRef.current) {\n return;\n }\n const { y } = event.delta;\n containerRef.current.setAttribute(\"data-swipe\", \"move\");\n containerRef.current.style.setProperty(\"--purpur-drawer-swipe-move-y\", `${y}px`);\n };\n const onSwipeCancel = () => {\n if (!containerRef.current) {\n return;\n }\n containerRef.current.setAttribute(\"data-swipe\", \"cancel\");\n containerRef.current.style.removeProperty(\"--purpur-drawer-swipe-move-y\");\n containerRef.current.style.removeProperty(\"--purpur-drawer-swipe-end-y\");\n };\n const onSwipeEnd = (event: SwipeEvent) => {\n if (!containerRef.current) {\n return;\n }\n const { y } = event.delta;\n containerRef.current.setAttribute(\"data-swipe\", \"end\");\n containerRef.current.style.removeProperty(\"--purpur-drawer-swipe-move-y\");\n containerRef.current.style.setProperty(\"--purpur-drawer-swipe-end-y\", `${y}px`);\n handleOpenChange?.(false);\n };\n\n return {\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n };\n};\n","import React, { forwardRef, type ReactNode, useContext, useRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { useThemePortalContainer } from \"@purpur/theme\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport { DrawerContext } from \"./drawer.context\";\nimport styles from \"./drawer-content.module.scss\";\nimport { DrawerFrame } from \"./drawer-frame\";\nimport { type Position } from \"./types\";\nimport { useSwipeToDismiss } from \"./use-swipe-to-dismiss.hook\";\n\nconst cx = c.bind(styles);\n\nexport type WithBackButton = {\n backButton: boolean;\n backButtonText: string;\n backButtonOnlyIcon?: boolean;\n onBackButtonClick: () => void;\n};\n\nexport type WithoutBackButton = {\n backButton?: never;\n backButtonText?: never;\n backButtonOnlyIcon?: never;\n onBackButtonClick?: never;\n};\n\nexport type DrawerContentProps = Omit<BaseProps, \"children\"> & {\n bodyText?: string;\n children: ReactNode;\n closeButtonAriaLabel: string;\n /**\n * Optional DOM element to portal the drawer content into. When omitted,\n * the drawer renders inside the nearest `ThemeProvider` so it inherits\n * the active color scheme. Pass `document.body` (or any other element) to\n * override. Pass `null` to fall back to Radix' default (`document.body`).\n */\n container?: HTMLElement | null;\n disableCloseOnClickOutside?: boolean;\n /**\n * If true, the drawer height will fit to its content on small screens.\n */\n fitToContent?: boolean;\n footerContent?: ReactNode;\n headerContent?: ReactNode;\n onCloseClick?: () => void;\n stickyFooter?: boolean;\n title: string;\n zIndex?: number;\n position?: Position;\n} & (WithoutBackButton | WithBackButton);\n\nconst rootClassName = \"purpur-drawer-content\";\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-content\",\n backButton = false,\n backButtonText,\n backButtonOnlyIcon = false,\n bodyText,\n children,\n className,\n closeButtonAriaLabel,\n container,\n disableCloseOnClickOutside = false,\n fitToContent = false,\n footerContent,\n headerContent,\n onBackButtonClick,\n onCloseClick,\n stickyFooter = false,\n title,\n zIndex,\n position = \"right\",\n ...props\n },\n ref\n ) => {\n const drawerContext = useContext(DrawerContext);\n const variant = drawerContext?.variant ?? \"default\";\n const isModal = drawerContext?.isModal ?? true;\n const themePortalContainer = useThemePortalContainer();\n const portalContainer =\n container === undefined ? themePortalContainer : container ?? undefined;\n\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--fit-to-content`]: fitToContent,\n [`${rootClassName}--left`]: position === \"left\",\n [`${rootClassName}--right`]: position === \"right\",\n [`${rootClassName}--ai`]: variant === \"ai\",\n },\n className,\n ]);\n\n const drawerFrameRef = useRef<HTMLDivElement>(null);\n const internalDrawerContentRef = useRef<HTMLDivElement>(null);\n\n const setRef = (node: HTMLDivElement | null) => {\n internalDrawerContentRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n const { onSwipeStart, onSwipeMove, onSwipeCancel, onSwipeEnd } = useSwipeToDismiss(\n internalDrawerContentRef,\n drawerContext?.onOpenChange ?? null\n );\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n return;\n }\n\n if (onCloseClick) {\n event.preventDefault();\n onCloseClick();\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (onCloseClick) {\n event.preventDefault();\n onCloseClick();\n }\n };\n\n const handleInitialFocus = () => {\n const frame = drawerFrameRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const dialogContent = (\n <RadixDialog.Content\n onPointerDownOutside={handlePointerDownOutside}\n onEscapeKeyDown={handleEscapeKeyDown}\n onOpenAutoFocus={handleInitialFocus}\n className={classes}\n data-testid={dataTestId}\n ref={setRef}\n {...(!bodyText && { [\"aria-describedby\"]: undefined })}\n {...props}\n >\n <DrawerFrame\n backButton={backButton}\n backButtonText={backButtonText}\n backButtonOnlyIcon={backButtonOnlyIcon}\n closeButtonAriaLabel={closeButtonAriaLabel}\n className={cx(`${rootClassName}__drawer-frame`)}\n fitToContent={fitToContent}\n footerContent={footerContent}\n headerContent={headerContent}\n ref={drawerFrameRef}\n onBackButtonClick={onBackButtonClick}\n onCloseClick={onCloseClick}\n onSwipeStart={onSwipeStart}\n onSwipeMove={onSwipeMove}\n onSwipeCancel={onSwipeCancel}\n onSwipeEnd={onSwipeEnd}\n stickyFooter={stickyFooter}\n title={title}\n position={position}\n variant={variant}\n >\n {bodyText ? (\n <div className={cx(`${rootClassName}__content-container`)}>\n <RadixDialog.Description\n className={cx(`${rootClassName}__description`)}\n data-testid={`${dataTestId}-description`}\n >\n {bodyText}\n </RadixDialog.Description>\n <div>{children}</div>\n </div>\n ) : (\n children\n )}\n </DrawerFrame>\n </RadixDialog.Content>\n );\n\n if (!isModal) {\n return (\n <RadixDialog.Portal container={portalContainer}>\n <div\n className={cx(\"purpur-drawer-overlay\")}\n style={zIndex ? { zIndex } : undefined}\n data-testid={`${dataTestId}-overlay`}\n >\n {dialogContent}\n </div>\n </RadixDialog.Portal>\n );\n }\n\n return (\n <RadixDialog.Portal container={portalContainer}>\n <RadixDialog.Overlay\n className={cx(\"purpur-drawer-overlay\")}\n style={zIndex ? { zIndex } : undefined}\n data-testid={`${dataTestId}-overlay`}\n >\n {dialogContent}\n </RadixDialog.Overlay>\n </RadixDialog.Portal>\n );\n }\n);\n\nDrawerContent.displayName = \"DrawerContent\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\n\nexport type DrawerTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n ({ [\"data-testid\"]: dataTestId = \"purpur-drawer-trigger\", children, ...props }, ref) => {\n return (\n <RadixDialog.Trigger asChild data-testid={dataTestId} ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n );\n }\n);\n\nDrawerTrigger.displayName = \"DrawerTrigger\";\n","import React, { type ReactNode, useEffect } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\n\nimport { DrawerContext } from \"./drawer.context\";\nimport { DrawerContent } from \"./drawer-content\";\nimport { DrawerTrigger } from \"./drawer-trigger\";\nimport { type DrawerVariant } from \"./types\";\n\nexport type { DrawerVariant };\n\nexport type DrawerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n /**\n * Whether the drawer should be modal. When `true` (default), focus is trapped\n * and pointer events outside the drawer are disabled. Set to `false` when rendering\n * components that use portals (e.g. DatePicker) inside the drawer.\n */\n isModal?: boolean;\n onOpenChange?: (open: boolean) => void;\n open: boolean;\n variant?: DrawerVariant;\n};\n\nexport type DrawerComponent<P> = React.FunctionComponent<P> & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n};\n\nexport const Drawer: DrawerComponent<DrawerProps> = ({\n [\"data-testid\"]: dataTestId = \"purpur-drawer\",\n children,\n className,\n isModal = true,\n onOpenChange,\n open = false,\n variant = \"default\",\n ...props\n}: DrawerProps) => {\n const [_open, _setOpen] = React.useState(open);\n\n const handleOpenChange = (newOpen: boolean) => {\n _setOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n useEffect(() => {\n _setOpen(open);\n }, [open]);\n\n const contextValue = { isModal, onOpenChange: handleOpenChange, variant };\n\n return (\n <DrawerContext.Provider value={contextValue}>\n <div className={className} data-testid={dataTestId} {...props}>\n <RadixDialog.Root open={_open} onOpenChange={handleOpenChange} modal={isModal}>\n {children}\n </RadixDialog.Root>\n </div>\n </DrawerContext.Provider>\n );\n};\n\nDrawer.Trigger = DrawerTrigger;\nDrawer.Content = DrawerContent;\nDrawer.displayName = \"Drawer\";\n"],"names":["DrawerContext","createContext","cx","c","styles","rootClassName","DrawerContainer","forwardRef","dataTestId","children","className","drawerVariant","variant","stickyFooter","props","ref","classes","jsx","useSwipeTracking","pointerStartRef","swipeDeltaRef","onSwipeStart","onSwipeMove","onSwipeCancel","onSwipeEnd","event","y","hasSwipeMoveStarted","clampedY","moveStartBuffer","delta","eventDetail","isDeltaInDirection","target","swipeHandle","threshold","DrawerHandle","React","onPointerDown","onPointerMove","onPointerUp","DrawerHeader","backButton","backButtonText","backButtonOnlyIcon","closeButtonAriaLabel","headerContent","onBackButtonClick","onCloseClick","title","hasBackButton","isAi","CloseButtonWrapper","RadixDialog.Close","jsxs","Button","BUTTON_VARIANT","IconChevronLeft","Fragment","VisuallyHidden","RadixDialog.Title","Heading","DisplayVariant","IconClose","DrawerScrollArea","fitToContent","RadixScrollArea.Root","RadixScrollArea.Viewport","RadixScrollArea.Scrollbar","RadixScrollArea.Thumb","DrawerFrame","footerContent","position","useSwipeToDismiss","containerRef","handleOpenChange","DrawerContent","bodyText","container","disableCloseOnClickOutside","zIndex","drawerContext","useContext","isModal","themePortalContainer","useThemePortalContainer","portalContainer","drawerFrameRef","useRef","internalDrawerContentRef","setRef","node","dialogContent","RadixDialog.Content","frame","heading","RadixDialog.Description","RadixDialog.Portal","RadixDialog.Overlay","DrawerTrigger","RadixDialog.Trigger","Drawer","onOpenChange","open","_open","_setOpen","newOpen","useEffect","contextValue","RadixDialog.Root"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"drawer-cIUx6WSZ.mjs","sources":["../../../components/drawer/src/drawer.context.ts","../../../components/drawer/src/drawer-container.tsx","../../../components/drawer/src/use-swipe-tracking.hook.ts","../../../components/drawer/src/drawer-handle.tsx","../../../components/drawer/src/drawer-header.tsx","../../../components/drawer/src/drawer-scroll-area.tsx","../../../components/drawer/src/drawer-frame.tsx","../../../components/drawer/src/use-swipe-to-dismiss.hook.ts","../../../components/drawer/src/drawer-content.tsx","../../../components/drawer/src/drawer-trigger.tsx","../../../components/drawer/src/drawer.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nimport { type DrawerVariant, type OpenHandlerFunction } from \"./types\";\n\nexport type DrawerContextValue = {\n isModal: boolean;\n onOpenChange: OpenHandlerFunction;\n variant: DrawerVariant;\n};\n\nexport const DrawerContext = createContext<DrawerContextValue | null>(null);\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-container.module.scss\";\nimport { type DrawerVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerContainerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n drawerVariant?: DrawerVariant;\n stickyFooter: boolean;\n variant?: \"header\" | \"body\" | \"footer\";\n};\n\nconst rootClassName = \"purpur-drawer-container\";\n\nexport const DrawerContainer = forwardRef<HTMLDivElement, DrawerContainerProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-container\",\n children,\n className,\n drawerVariant = \"default\",\n variant = \"body\",\n stickyFooter,\n ...props\n },\n ref\n ) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--${variant}`]: variant,\n [`${rootClassName}--sticky`]: stickyFooter,\n [`${rootClassName}--ai`]: drawerVariant === \"ai\",\n },\n className,\n ]);\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n {children}\n </div>\n );\n }\n);\n\nDrawerContainer.displayName = \"DrawerContainer\";\n","import type { PointerEvent, RefObject } from \"react\";\n\nimport { type SwipeEvent } from \"./types\";\n\ntype UseSwipeTracking = {\n onPointerDown(event: PointerEvent): void;\n onPointerMove(event: PointerEvent): void;\n onPointerUp(event: PointerEvent): void;\n};\n\nexport const useSwipeTracking = (\n pointerStartRef: RefObject<{ y: number } | null>,\n swipeDeltaRef: RefObject<{ y: number } | null>,\n onSwipeStart: () => void,\n onSwipeMove: (event: SwipeEvent) => void,\n onSwipeCancel: () => void,\n onSwipeEnd: (event: SwipeEvent) => void\n): UseSwipeTracking => {\n const onPointerDown = (event: PointerEvent) => {\n pointerStartRef.current = { y: event.clientY };\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!pointerStartRef.current) {\n return;\n }\n const y = event.clientY - pointerStartRef.current.y;\n const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current);\n const clampedY = Math.max(0, y);\n const moveStartBuffer = event.pointerType === \"touch\" ? 10 : 2;\n const delta = { y: clampedY };\n const eventDetail = { originalEvent: event, delta };\n if (hasSwipeMoveStarted) {\n swipeDeltaRef.current = delta;\n onSwipeMove(eventDetail);\n } else if (isDeltaInDirection(delta, 0)) {\n swipeDeltaRef.current = delta;\n onSwipeStart();\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } else if (Math.abs(y) > moveStartBuffer) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n };\n const onPointerUp = (event: PointerEvent) => {\n const delta = swipeDeltaRef.current;\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n swipeDeltaRef.current = null;\n pointerStartRef.current = null;\n if (delta) {\n const swipeHandle = event.currentTarget;\n const eventDetail = { originalEvent: event, delta };\n if (isDeltaInDirection(delta, 0) && delta.y > 200) {\n onSwipeEnd(eventDetail);\n } else {\n onSwipeCancel();\n }\n // Prevent click event from triggering on items within the drawer when\n // pointer up is part of a swipe gesture\n swipeHandle.addEventListener(\"click\", (event) => event.preventDefault(), {\n once: true,\n });\n }\n };\n return {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n };\n};\n\nconst isDeltaInDirection = (delta: { y: number }, threshold = 0) => {\n const deltaY = Math.abs(delta.y);\n return deltaY > threshold;\n};\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-handle.module.scss\";\nimport { type DrawerVariant, type SwipeEvent } from \"./types\";\nimport { useSwipeTracking } from \"./use-swipe-tracking.hook\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerHandleProps = Omit<BaseProps, \"children\"> & {\n onSwipeStart(): void;\n onSwipeMove(event: SwipeEvent): void;\n onSwipeCancel(): void;\n onSwipeEnd(event: SwipeEvent): void;\n variant?: DrawerVariant;\n};\n\nconst rootClassName = \"purpur-drawer-handle\";\n\nexport const DrawerHandle = forwardRef<HTMLDivElement, DrawerHandleProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-handle\",\n className,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const classes = cx([rootClassName, { [`${rootClassName}--ai`]: variant === \"ai\" }, className]);\n const pointerStartRef = React.useRef<{ y: number } | null>(null);\n const swipeDeltaRef = React.useRef<{ y: number } | null>(null);\n const { onPointerDown, onPointerMove, onPointerUp } = useSwipeTracking(\n swipeDeltaRef,\n pointerStartRef,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd\n );\n\n return (\n <div\n className={classes}\n data-testid={dataTestId}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nDrawerHandle.displayName = \"DrawerHandle\";\n","import React, { forwardRef } from \"react\";\nimport { Button, BUTTON_VARIANT } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { DisplayVariant, Heading } from \"@purpur/heading\";\nimport { IconChevronLeft } from \"@purpur/icon/chevron-left\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-header.module.scss\";\nimport { type DrawerVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerHeaderProps = Omit<BaseProps, \"children\"> & {\n backButton: boolean;\n backButtonText?: string;\n backButtonOnlyIcon: boolean;\n closeButtonAriaLabel: string;\n headerContent?: React.ReactNode;\n onBackButtonClick?: () => void;\n onCloseClick?: () => void;\n title: string;\n variant?: DrawerVariant;\n};\n\nconst rootClassName = \"purpur-drawer-header\";\n\nexport const DrawerHeader = forwardRef<HTMLDivElement, DrawerHeaderProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-header\",\n backButton,\n backButtonText,\n backButtonOnlyIcon,\n className,\n closeButtonAriaLabel,\n headerContent,\n onBackButtonClick,\n onCloseClick,\n title,\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const classes = cx([rootClassName, { [`${rootClassName}--ai`]: variant === \"ai\" }, className]);\n const hasBackButton = !!(backButton && backButtonText && onBackButtonClick);\n const isAi = variant === \"ai\";\n\n const CloseButtonWrapper = onCloseClick ? React.Fragment : RadixDialog.Close;\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <div\n className={cx([\n `${rootClassName}__row`,\n {\n [`${rootClassName}__row--with-back-button`]: hasBackButton,\n },\n ])}\n data-testid={`${dataTestId}-row`}\n >\n <div className={cx(`${rootClassName}__left`)}>\n {hasBackButton ? (\n <Button\n aria-label={backButtonOnlyIcon ? backButtonText : \"\"}\n className={cx([\n `${rootClassName}__back-button`,\n {\n [`${rootClassName}__back-button--only-icon`]: backButtonOnlyIcon,\n },\n ])}\n data-testid={`${dataTestId}-back-button`}\n iconOnly={backButtonOnlyIcon}\n negative={isAi}\n onClick={onBackButtonClick}\n size=\"sm\"\n variant={backButtonOnlyIcon ? BUTTON_VARIANT.TERTIARY_PURPLE : BUTTON_VARIANT.TEXT}\n >\n <IconChevronLeft size=\"sm\" />\n {!backButtonOnlyIcon && backButtonText}\n </Button>\n ) : headerContent ? (\n <>\n {headerContent}\n <VisuallyHidden asChild>\n <RadixDialog.Title>{title}</RadixDialog.Title>\n </VisuallyHidden>\n </>\n ) : (\n <RadixDialog.Title asChild>\n <Heading\n className={cx(`${rootClassName}__title`)}\n data-testid={`${dataTestId}-title`}\n negative={isAi}\n tag=\"h2\"\n variant={DisplayVariant.DISPLAY10}\n tabIndex={-1}\n >\n {title}\n </Heading>\n </RadixDialog.Title>\n )}\n </div>\n\n <div className={cx(`${rootClassName}__right`)}>\n <CloseButtonWrapper {...(onCloseClick ? {} : { asChild: true })}>\n <Button\n aria-label={closeButtonAriaLabel}\n className={cx(`${rootClassName}__close-button`)}\n iconOnly\n negative={isAi}\n onClick={onCloseClick}\n size=\"sm\"\n variant={BUTTON_VARIANT.TERTIARY_PURPLE}\n >\n <IconClose size=\"sm\" />\n </Button>\n </CloseButtonWrapper>\n </div>\n </div>\n {hasBackButton &&\n (headerContent ? (\n <>\n {headerContent}\n <VisuallyHidden asChild>\n <RadixDialog.Title>{title}</RadixDialog.Title>\n </VisuallyHidden>\n </>\n ) : (\n <RadixDialog.Title asChild>\n <Heading\n data-testid={`${dataTestId}-title-with-back-button`}\n className={cx(`${rootClassName}__title`)}\n negative={isAi}\n tag=\"h2\"\n tabIndex={-1}\n variant={DisplayVariant.DISPLAY10}\n >\n {title}\n </Heading>\n </RadixDialog.Title>\n ))}\n </div>\n );\n }\n);\n\nDrawerHeader.displayName = \"DrawerHeader\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./drawer-scroll-area.module.scss\";\nimport { type DrawerVariant } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerScrollAreaProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n drawerVariant?: DrawerVariant;\n fitToContent?: boolean;\n};\n\nconst rootClassName = \"purpur-drawer-scroll-area\";\n\nexport const DrawerScrollArea = forwardRef<HTMLDivElement, DrawerScrollAreaProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-scroll-area\",\n children,\n className,\n drawerVariant = \"default\",\n fitToContent = false,\n ...props\n },\n ref\n ) => {\n const classes = cx([\n rootClassName,\n { [`${rootClassName}--ai`]: drawerVariant === \"ai\" },\n className,\n ]);\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <RadixScrollArea.Root\n className={cx(`${rootClassName}__root`, {\n [`${rootClassName}__root--fit-to-content`]: fitToContent,\n })}\n >\n <RadixScrollArea.Viewport className={cx(`${rootClassName}__viewport`)}>\n {children}\n </RadixScrollArea.Viewport>\n <RadixScrollArea.Scrollbar\n className={cx(`${rootClassName}__scrollbar`)}\n orientation=\"vertical\"\n >\n <RadixScrollArea.Thumb className={cx(`${rootClassName}__thumb`)} />\n </RadixScrollArea.Scrollbar>\n </RadixScrollArea.Root>\n </div>\n );\n }\n);\n\nDrawerScrollArea.displayName = \"DrawerScrollArea\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport { DrawerContainer } from \"./drawer-container\";\nimport styles from \"./drawer-frame.module.scss\";\nimport { DrawerHandle } from \"./drawer-handle\";\nimport { DrawerHeader } from \"./drawer-header\";\nimport { DrawerScrollArea } from \"./drawer-scroll-area\";\nimport { type DrawerVariant, type Position, type SwipeEvent } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type DrawerFrameProps = Omit<BaseProps, \"children\"> & {\n backButton: boolean;\n backButtonText?: string;\n backButtonOnlyIcon: boolean;\n children: ReactNode;\n closeButtonAriaLabel: string;\n fitToContent?: boolean;\n footerContent?: ReactNode;\n headerContent?: ReactNode;\n onBackButtonClick?: () => void;\n onCloseClick?: () => void;\n onSwipeStart(): void;\n onSwipeMove(event: SwipeEvent): void;\n onSwipeCancel(): void;\n onSwipeEnd(event: SwipeEvent): void;\n stickyFooter: boolean;\n title: string;\n position?: Position;\n variant?: DrawerVariant;\n};\n\nconst rootClassName = \"purpur-drawer-frame\";\n\nexport const DrawerFrame = forwardRef<HTMLDivElement, DrawerFrameProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-frame\",\n backButton,\n backButtonText,\n backButtonOnlyIcon,\n children,\n className,\n closeButtonAriaLabel,\n fitToContent = false,\n footerContent,\n headerContent,\n onBackButtonClick,\n onCloseClick,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n title,\n stickyFooter,\n position = \"right\",\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const hasBackButton = !!(backButton && backButtonText && onBackButtonClick);\n const isAi = variant === \"ai\";\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--fit-to-content`]: fitToContent,\n [`${rootClassName}--sticky-footer`]: stickyFooter,\n [`${rootClassName}--left`]: position === \"left\",\n [`${rootClassName}--right`]: position === \"right\",\n [`${rootClassName}--without-back-button`]: !hasBackButton,\n [`${rootClassName}--with-back-button`]: hasBackButton,\n [`${rootClassName}--ai`]: isAi,\n },\n className,\n ]);\n\n return (\n <div className={classes} data-testid={dataTestId} ref={ref} {...props}>\n <DrawerHandle\n onSwipeStart={onSwipeStart}\n onSwipeMove={onSwipeMove}\n onSwipeCancel={onSwipeCancel}\n onSwipeEnd={onSwipeEnd}\n variant={variant}\n />\n <DrawerContainer\n className={cx(`${rootClassName}__header`)}\n variant=\"header\"\n stickyFooter={stickyFooter}\n drawerVariant={variant}\n >\n <DrawerHeader\n title={title}\n headerContent={headerContent}\n backButtonOnlyIcon={backButtonOnlyIcon}\n backButton={backButton}\n backButtonText={backButtonText}\n closeButtonAriaLabel={closeButtonAriaLabel}\n onBackButtonClick={onBackButtonClick}\n onCloseClick={onCloseClick}\n variant={variant}\n />\n </DrawerContainer>\n {stickyFooter ? (\n <>\n <DrawerScrollArea\n className={cx(`${rootClassName}__body`)}\n data-testid={`${dataTestId}-sticky-footer-scroll-area`}\n fitToContent={fitToContent}\n drawerVariant={variant}\n >\n <DrawerContainer stickyFooter drawerVariant={variant}>\n {children}\n </DrawerContainer>\n </DrawerScrollArea>\n {footerContent && (\n <DrawerContainer\n className={cx(`${rootClassName}__footer`)}\n data-testid={`${dataTestId}-sticky-footer`}\n variant=\"footer\"\n stickyFooter={stickyFooter}\n drawerVariant={variant}\n >\n {footerContent}\n </DrawerContainer>\n )}\n </>\n ) : (\n <DrawerScrollArea\n className={cx(`${rootClassName}__body`)}\n data-testid={`${dataTestId}-scroll-area`}\n fitToContent={fitToContent}\n drawerVariant={variant}\n >\n <div\n className={cx([\n `${rootClassName}__content-container`,\n { [`${rootClassName}__content-container--no-footer`]: !footerContent },\n ])}\n >\n <DrawerContainer stickyFooter={stickyFooter} drawerVariant={variant}>\n {children}\n </DrawerContainer>\n {footerContent && (\n <DrawerContainer\n data-testid={`${dataTestId}-footer`}\n stickyFooter={stickyFooter}\n variant=\"footer\"\n drawerVariant={variant}\n >\n {footerContent}\n </DrawerContainer>\n )}\n </div>\n </DrawerScrollArea>\n )}\n </div>\n );\n }\n);\n\nDrawerFrame.displayName = \"DrawerFrame\";\n","import type { RefObject } from \"react\";\n\nimport { type SwipeEvent } from \"./types\";\n\ntype UseSwipeToDismiss = {\n onSwipeStart(): void;\n onSwipeMove(event: SwipeEvent): void;\n onSwipeCancel(): void;\n onSwipeEnd(event: SwipeEvent): void;\n};\n\nexport const useSwipeToDismiss = <T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n handleOpenChange: ((open: boolean) => void) | null\n): UseSwipeToDismiss => {\n const onSwipeStart = () => {\n if (!containerRef.current) {\n return;\n }\n containerRef.current.setAttribute(\"data-swipe\", \"start\");\n };\n const onSwipeMove = (event: SwipeEvent) => {\n if (!containerRef.current) {\n return;\n }\n const { y } = event.delta;\n containerRef.current.setAttribute(\"data-swipe\", \"move\");\n containerRef.current.style.setProperty(\"--purpur-drawer-swipe-move-y\", `${y}px`);\n };\n const onSwipeCancel = () => {\n if (!containerRef.current) {\n return;\n }\n containerRef.current.setAttribute(\"data-swipe\", \"cancel\");\n containerRef.current.style.removeProperty(\"--purpur-drawer-swipe-move-y\");\n containerRef.current.style.removeProperty(\"--purpur-drawer-swipe-end-y\");\n };\n const onSwipeEnd = (event: SwipeEvent) => {\n if (!containerRef.current) {\n return;\n }\n const { y } = event.delta;\n containerRef.current.setAttribute(\"data-swipe\", \"end\");\n containerRef.current.style.removeProperty(\"--purpur-drawer-swipe-move-y\");\n containerRef.current.style.setProperty(\"--purpur-drawer-swipe-end-y\", `${y}px`);\n handleOpenChange?.(false);\n };\n\n return {\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n };\n};\n","import React, { forwardRef, type ReactNode, useContext, useRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { useThemePortalContainer } from \"@purpur/theme\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport { DrawerContext } from \"./drawer.context\";\nimport styles from \"./drawer-content.module.scss\";\nimport { DrawerFrame } from \"./drawer-frame\";\nimport { type Position } from \"./types\";\nimport { useSwipeToDismiss } from \"./use-swipe-to-dismiss.hook\";\n\nconst cx = c.bind(styles);\n\nexport type WithBackButton = {\n backButton: boolean;\n backButtonText: string;\n backButtonOnlyIcon?: boolean;\n onBackButtonClick: () => void;\n};\n\nexport type WithoutBackButton = {\n backButton?: never;\n backButtonText?: never;\n backButtonOnlyIcon?: never;\n onBackButtonClick?: never;\n};\n\nexport type DrawerContentProps = Omit<BaseProps, \"children\"> & {\n bodyText?: string;\n children: ReactNode;\n closeButtonAriaLabel: string;\n /**\n * Optional DOM element to portal the drawer content into. When omitted,\n * the drawer renders inside the nearest `ThemeProvider` so it inherits\n * the active color scheme. Pass `document.body` (or any other element) to\n * override. Pass `null` to fall back to Radix' default (`document.body`).\n */\n container?: HTMLElement | null;\n disableCloseOnClickOutside?: boolean;\n /**\n * If true, the drawer height will fit to its content on small screens.\n */\n fitToContent?: boolean;\n footerContent?: ReactNode;\n headerContent?: ReactNode;\n onCloseClick?: () => void;\n stickyFooter?: boolean;\n title: string;\n zIndex?: number;\n position?: Position;\n} & (WithoutBackButton | WithBackButton);\n\nconst rootClassName = \"purpur-drawer-content\";\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"purpur-drawer-content\",\n backButton = false,\n backButtonText,\n backButtonOnlyIcon = false,\n bodyText,\n children,\n className,\n closeButtonAriaLabel,\n container,\n disableCloseOnClickOutside = false,\n fitToContent = false,\n footerContent,\n headerContent,\n onBackButtonClick,\n onCloseClick,\n stickyFooter = false,\n title,\n zIndex,\n position = \"right\",\n ...props\n },\n ref\n ) => {\n const drawerContext = useContext(DrawerContext);\n const variant = drawerContext?.variant ?? \"default\";\n const isModal = drawerContext?.isModal ?? true;\n const themePortalContainer = useThemePortalContainer();\n const portalContainer =\n container === undefined ? themePortalContainer : container ?? undefined;\n\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--fit-to-content`]: fitToContent,\n [`${rootClassName}--left`]: position === \"left\",\n [`${rootClassName}--right`]: position === \"right\",\n [`${rootClassName}--ai`]: variant === \"ai\",\n },\n className,\n ]);\n\n const drawerFrameRef = useRef<HTMLDivElement>(null);\n const internalDrawerContentRef = useRef<HTMLDivElement>(null);\n\n const setRef = (node: HTMLDivElement | null) => {\n internalDrawerContentRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n };\n\n const { onSwipeStart, onSwipeMove, onSwipeCancel, onSwipeEnd } = useSwipeToDismiss(\n internalDrawerContentRef,\n drawerContext?.onOpenChange ?? null\n );\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n return;\n }\n\n if (onCloseClick) {\n event.preventDefault();\n onCloseClick();\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (onCloseClick) {\n event.preventDefault();\n onCloseClick();\n }\n };\n\n const handleInitialFocus = () => {\n const frame = drawerFrameRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const dialogContent = (\n <RadixDialog.Content\n onPointerDownOutside={handlePointerDownOutside}\n onEscapeKeyDown={handleEscapeKeyDown}\n onOpenAutoFocus={handleInitialFocus}\n className={classes}\n data-testid={dataTestId}\n ref={setRef}\n {...(!bodyText && { [\"aria-describedby\"]: undefined })}\n {...props}\n >\n <DrawerFrame\n backButton={backButton}\n backButtonText={backButtonText}\n backButtonOnlyIcon={backButtonOnlyIcon}\n closeButtonAriaLabel={closeButtonAriaLabel}\n className={cx(`${rootClassName}__drawer-frame`)}\n fitToContent={fitToContent}\n footerContent={footerContent}\n headerContent={headerContent}\n ref={drawerFrameRef}\n onBackButtonClick={onBackButtonClick}\n onCloseClick={onCloseClick}\n onSwipeStart={onSwipeStart}\n onSwipeMove={onSwipeMove}\n onSwipeCancel={onSwipeCancel}\n onSwipeEnd={onSwipeEnd}\n stickyFooter={stickyFooter}\n title={title}\n position={position}\n variant={variant}\n >\n {bodyText ? (\n <div className={cx(`${rootClassName}__content-container`)}>\n <RadixDialog.Description\n className={cx(`${rootClassName}__description`)}\n data-testid={`${dataTestId}-description`}\n >\n {bodyText}\n </RadixDialog.Description>\n <div>{children}</div>\n </div>\n ) : (\n children\n )}\n </DrawerFrame>\n </RadixDialog.Content>\n );\n\n if (!isModal) {\n return (\n <RadixDialog.Portal container={portalContainer}>\n <div\n className={cx(\"purpur-drawer-overlay\")}\n style={zIndex ? { zIndex } : undefined}\n data-testid={`${dataTestId}-overlay`}\n >\n {dialogContent}\n </div>\n </RadixDialog.Portal>\n );\n }\n\n return (\n <RadixDialog.Portal container={portalContainer}>\n <RadixDialog.Overlay\n className={cx(\"purpur-drawer-overlay\")}\n style={zIndex ? { zIndex } : undefined}\n data-testid={`${dataTestId}-overlay`}\n >\n {dialogContent}\n </RadixDialog.Overlay>\n </RadixDialog.Portal>\n );\n }\n);\n\nDrawerContent.displayName = \"DrawerContent\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\n\nexport type DrawerTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n ({ [\"data-testid\"]: dataTestId = \"purpur-drawer-trigger\", children, ...props }, ref) => {\n return (\n <RadixDialog.Trigger asChild data-testid={dataTestId} ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n );\n }\n);\n\nDrawerTrigger.displayName = \"DrawerTrigger\";\n","import React, { type ReactNode, useEffect } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\n\nimport { DrawerContext } from \"./drawer.context\";\nimport { DrawerContent } from \"./drawer-content\";\nimport { DrawerTrigger } from \"./drawer-trigger\";\nimport { type DrawerVariant } from \"./types\";\n\nexport type { DrawerVariant };\n\nexport type DrawerProps = Omit<BaseProps, \"children\"> & {\n children: ReactNode;\n /**\n * Whether the drawer should be modal. When `true` (default), focus is trapped\n * and pointer events outside the drawer are disabled. Set to `false` when rendering\n * components that use portals (e.g. DatePicker) inside the drawer.\n */\n isModal?: boolean;\n onOpenChange?: (open: boolean) => void;\n open: boolean;\n variant?: DrawerVariant;\n};\n\nexport type DrawerComponent<P> = React.FunctionComponent<P> & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n};\n\nexport const Drawer: DrawerComponent<DrawerProps> = ({\n [\"data-testid\"]: dataTestId = \"purpur-drawer\",\n children,\n className,\n isModal = true,\n onOpenChange,\n open = false,\n variant = \"default\",\n ...props\n}: DrawerProps) => {\n const [_open, _setOpen] = React.useState(open);\n\n const handleOpenChange = (newOpen: boolean) => {\n _setOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n useEffect(() => {\n _setOpen(open);\n }, [open]);\n\n const contextValue = { isModal, onOpenChange: handleOpenChange, variant };\n\n return (\n <DrawerContext.Provider value={contextValue}>\n <div className={className} data-testid={dataTestId} {...props}>\n <RadixDialog.Root open={_open} onOpenChange={handleOpenChange} modal={isModal}>\n {children}\n </RadixDialog.Root>\n </div>\n </DrawerContext.Provider>\n );\n};\n\nDrawer.Trigger = DrawerTrigger;\nDrawer.Content = DrawerContent;\nDrawer.displayName = \"Drawer\";\n"],"names":["DrawerContext","createContext","cx","c","styles","rootClassName","DrawerContainer","forwardRef","dataTestId","children","className","drawerVariant","variant","stickyFooter","props","ref","classes","jsx","useSwipeTracking","pointerStartRef","swipeDeltaRef","onSwipeStart","onSwipeMove","onSwipeCancel","onSwipeEnd","event","y","hasSwipeMoveStarted","clampedY","moveStartBuffer","delta","eventDetail","isDeltaInDirection","target","swipeHandle","threshold","DrawerHandle","React","onPointerDown","onPointerMove","onPointerUp","DrawerHeader","backButton","backButtonText","backButtonOnlyIcon","closeButtonAriaLabel","headerContent","onBackButtonClick","onCloseClick","title","hasBackButton","isAi","CloseButtonWrapper","RadixDialog.Close","jsxs","Button","BUTTON_VARIANT","IconChevronLeft","Fragment","VisuallyHidden","RadixDialog.Title","Heading","DisplayVariant","IconClose","DrawerScrollArea","fitToContent","RadixScrollArea.Root","RadixScrollArea.Viewport","RadixScrollArea.Scrollbar","RadixScrollArea.Thumb","DrawerFrame","footerContent","position","useSwipeToDismiss","containerRef","handleOpenChange","DrawerContent","bodyText","container","disableCloseOnClickOutside","zIndex","drawerContext","useContext","isModal","themePortalContainer","useThemePortalContainer","portalContainer","drawerFrameRef","useRef","internalDrawerContentRef","setRef","node","dialogContent","RadixDialog.Content","frame","heading","RadixDialog.Description","RadixDialog.Portal","RadixDialog.Overlay","DrawerTrigger","RadixDialog.Trigger","Drawer","onOpenChange","open","_open","_setOpen","newOpen","useEffect","contextValue","RadixDialog.Root"],"mappings":"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"}
|
package/dist/drawer.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./drawer-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./drawer-DyLQfvEh.js");exports.Drawer=e.Drawer;
|
|
2
2
|
//# sourceMappingURL=drawer.cjs.js.map
|
package/dist/drawer.es.js
CHANGED
|
@@ -3,8 +3,8 @@ import { createElement as f } from "react";
|
|
|
3
3
|
import { C as w } from "./container-DLjBTB_w.mjs";
|
|
4
4
|
import { a as $ } from "./link-DY5WLpyc.mjs";
|
|
5
5
|
import { S as x } from "./select-BEmu_fh9.mjs";
|
|
6
|
-
import { a as F } from "./ThemeProvider-
|
|
7
|
-
import { u as S } from "./useColorScheme-
|
|
6
|
+
import { a as F } from "./ThemeProvider-BJ25_asg.mjs";
|
|
7
|
+
import { u as S } from "./useColorScheme-B7lGBSe4.mjs";
|
|
8
8
|
import { c as g } from "./bind-CU-R61T-.mjs";
|
|
9
9
|
import { A as y } from "./accordion-CIU4U8-4.mjs";
|
|
10
10
|
import { b as T } from "./icon.es-CZcKxTaM.mjs";
|
|
@@ -32,15 +32,15 @@ const r = "purpur-footer", C = {
|
|
|
32
32
|
"purpur-footer__additional": "_purpur-footer__additional_yqb4h_263",
|
|
33
33
|
"purpur-footer__additional-links": "_purpur-footer__additional-links_yqb4h_280",
|
|
34
34
|
"purpur-footer__custom-content": "_purpur-footer__custom-content_yqb4h_292"
|
|
35
|
-
}, u = g.bind(C), N = ({ links: l, customLink: _ }) => /* @__PURE__ */ o("ul", { children: l.map(({ href: t, text: e, ...
|
|
35
|
+
}, u = g.bind(C), N = ({ links: l, customLink: _ }) => /* @__PURE__ */ o("ul", { children: l.map(({ href: t, text: e, ...s }, p) => /* @__PURE__ */ o("li", { children: _ ? /* @__PURE__ */ o(
|
|
36
36
|
_,
|
|
37
37
|
{
|
|
38
|
-
...
|
|
38
|
+
...s,
|
|
39
39
|
href: t,
|
|
40
40
|
className: u(`${r}__custom-link-navigation`),
|
|
41
41
|
children: e
|
|
42
42
|
}
|
|
43
|
-
) : /* @__PURE__ */ o($, { ...
|
|
43
|
+
) : /* @__PURE__ */ o($, { ...s, variant: "navigation", negative: !0, href: t, disableVisited: !0, children: e }) }, p)) }), j = ({
|
|
44
44
|
navigationLinks: l,
|
|
45
45
|
sectionProps: _,
|
|
46
46
|
customLink: t
|
|
@@ -54,10 +54,10 @@ const r = "purpur-footer", C = {
|
|
|
54
54
|
`${r}__navigation--lg`,
|
|
55
55
|
_?.className
|
|
56
56
|
),
|
|
57
|
-
children: l.map((e,
|
|
57
|
+
children: l.map((e, s) => /* @__PURE__ */ c("div", { className: u(`${r}__navigation-section`), children: [
|
|
58
58
|
/* @__PURE__ */ o("h3", { className: u(`${r}__navigation-section-heading`), children: e.heading }),
|
|
59
59
|
/* @__PURE__ */ o(N, { links: e.links, customLink: t })
|
|
60
|
-
] },
|
|
60
|
+
] }, s))
|
|
61
61
|
}
|
|
62
62
|
),
|
|
63
63
|
/* @__PURE__ */ o(
|
|
@@ -69,7 +69,7 @@ const r = "purpur-footer", C = {
|
|
|
69
69
|
`${r}__navigation--sm`,
|
|
70
70
|
_?.className
|
|
71
71
|
),
|
|
72
|
-
children: /* @__PURE__ */ o(y, { negative: !0, children: l.map((e,
|
|
72
|
+
children: /* @__PURE__ */ o(y, { negative: !0, children: l.map((e, s) => /* @__PURE__ */ o(
|
|
73
73
|
y.Item,
|
|
74
74
|
{
|
|
75
75
|
title: e.heading,
|
|
@@ -77,7 +77,7 @@ const r = "purpur-footer", C = {
|
|
|
77
77
|
className: u(`${r}__navigation-section`),
|
|
78
78
|
children: /* @__PURE__ */ o(N, { links: e.links, customLink: t })
|
|
79
79
|
},
|
|
80
|
-
|
|
80
|
+
s
|
|
81
81
|
)) })
|
|
82
82
|
}
|
|
83
83
|
)
|
|
@@ -91,83 +91,73 @@ const r = "purpur-footer", C = {
|
|
|
91
91
|
target: "_blank",
|
|
92
92
|
children: /* @__PURE__ */ o(T, { svg: l })
|
|
93
93
|
}
|
|
94
|
-
), B = () => /* @__PURE__ */ c(
|
|
95
|
-
"
|
|
96
|
-
{
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
{
|
|
157
|
-
d: "M17.5721 15.8923C25.1562 12.24 30.4387 7.04427 29.5177 3.6C28.0058 0.993067 24.9457 0 21.6644 0C11.9381 0 0 6.4 0 14.5653C0 15.6149 0.231859 16.7883 0.647496 18.0181C2.86565 20.9568 9.64833 19.7077 17.5721 15.8923Z",
|
|
158
|
-
fill: "currentColor"
|
|
159
|
-
}
|
|
160
|
-
)
|
|
161
|
-
] }),
|
|
162
|
-
/* @__PURE__ */ o("defs", { children: /* @__PURE__ */ o("clipPath", { id: "clip0_5309_7721", children: /* @__PURE__ */ o("rect", { width: "81", height: "32", fill: "currentColor" }) }) })
|
|
163
|
-
]
|
|
164
|
-
}
|
|
165
|
-
), i = g.bind(C), E = ({
|
|
94
|
+
), B = () => /* @__PURE__ */ c("svg", { width: "81", height: "32", viewBox: "0 0 81 32", xmlns: "http://www.w3.org/2000/svg", role: "img", children: [
|
|
95
|
+
/* @__PURE__ */ o("title", { children: "Telia" }),
|
|
96
|
+
/* @__PURE__ */ c("g", { clipPath: "url(#clip0_5309_7721)", children: [
|
|
97
|
+
/* @__PURE__ */ o(
|
|
98
|
+
"path",
|
|
99
|
+
{
|
|
100
|
+
d: "M81.28 16.8043V25.2064H78.5458V23.8293C77.6183 25.04 76.1438 25.4912 74.9076 25.4912C72.3401 25.4912 70.8186 23.8773 70.8186 21.8592C70.8186 19.5573 73.4107 17.6821 76.5723 17.6821C77.1909 17.6821 77.8566 17.7301 78.4507 17.92V17.1371C78.4507 15.9499 77.7615 15.3333 76.3586 15.3333C75.0989 15.3333 73.9812 15.9744 73.2921 16.8053L71.2235 15.2864C72.3882 13.9339 74.3862 12.9845 76.4067 12.9845C79.5683 12.9824 81.28 14.3595 81.28 16.8043ZM78.4507 20.6251V20.1024C77.9752 19.936 77.4762 19.8891 76.8576 19.8891C74.7174 19.8891 73.6244 20.7435 73.6244 21.7877C73.6244 22.6421 74.3616 23.1883 75.4792 23.1883C76.9527 23.1883 78.4507 22.3104 78.4507 20.6251Z",
|
|
101
|
+
fill: "currentColor"
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
/* @__PURE__ */ o(
|
|
105
|
+
"path",
|
|
106
|
+
{
|
|
107
|
+
d: "M65.8021 9.968C65.8021 9.04214 66.6109 8.28267 67.5373 8.28267C68.4412 8.28267 69.249 9.04214 69.249 9.968C69.249 10.8939 68.4401 11.6533 67.5373 11.6533C66.6109 11.6533 65.8021 10.8939 65.8021 9.968ZM66.0638 25.2064V13.3387H68.9883V25.2064H66.0638Z",
|
|
108
|
+
fill: "currentColor"
|
|
109
|
+
}
|
|
110
|
+
),
|
|
111
|
+
/* @__PURE__ */ o(
|
|
112
|
+
"path",
|
|
113
|
+
{
|
|
114
|
+
d: "M64.2806 25.2533C63.8286 25.3483 63.3531 25.3717 62.9257 25.3717C60.8337 25.3717 59.9062 24.3744 59.9062 22.3573V8.59093H62.8306V21.9541C62.8306 22.9749 63.4493 23.1168 64.2806 23.0219V25.2533Z",
|
|
115
|
+
fill: "currentColor"
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
/* @__PURE__ */ o(
|
|
119
|
+
"path",
|
|
120
|
+
{
|
|
121
|
+
d: "M58.0513 20.1035H49.2781C49.5869 21.8603 50.8477 23.0229 52.4643 23.0229C53.677 23.0229 54.6514 22.4768 55.2466 21.5755L57.5769 22.976C56.3877 24.5664 54.4388 25.5157 52.4653 25.5157C49.2086 25.5157 46.3793 22.9291 46.3793 19.2256C46.3793 15.5221 49.1851 12.96 52.3232 12.96C56.4347 12.9589 58.4552 16.2347 58.0513 20.1035ZM49.3732 17.8955H55.222C54.8651 16.3531 53.8672 15.3792 52.3211 15.3792C50.8712 15.3803 49.7771 16.3765 49.3732 17.8955Z",
|
|
122
|
+
fill: "currentColor"
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
/* @__PURE__ */ o(
|
|
126
|
+
"path",
|
|
127
|
+
{
|
|
128
|
+
d: "M48.6359 11.2971H43.69V25.2064H40.5518V11.2971H35.5589V8.59093H48.6359V11.2971Z",
|
|
129
|
+
fill: "currentColor"
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
/* @__PURE__ */ o(
|
|
133
|
+
"path",
|
|
134
|
+
{
|
|
135
|
+
d: "M16.9321 27.4656C11.5983 29.6245 8.54567 28.9365 6.85855 27.5904L6.83397 27.5712C9.44532 30.1717 12.4221 32.0011 15.0324 32.0011C19.6033 32.0011 25.8614 26.4651 28.8232 17.8805C27.1542 20.9792 23.5727 24.7861 16.9321 27.4656Z",
|
|
136
|
+
fill: "currentColor"
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
/* @__PURE__ */ o(
|
|
140
|
+
"path",
|
|
141
|
+
{
|
|
142
|
+
d: "M20.9806 22.4843C25.137 20.0779 28.8809 15.9968 30.0616 13.0869C30.3971 10.6784 30.4654 10.3744 30.506 7.7248C30.5114 7.35787 30.4889 7.00587 30.4548 6.6688C30.2122 10.56 25.1743 15.4528 18.5092 18.6496C10.4689 22.5056 4.43738 23.5435 1.74589 20.6027C2.6808 22.4459 3.29411 23.3408 4.34549 24.7083C7.45048 27.4539 13.9853 26.5355 20.9806 22.4843Z",
|
|
143
|
+
fill: "currentColor"
|
|
144
|
+
}
|
|
145
|
+
),
|
|
146
|
+
/* @__PURE__ */ o(
|
|
147
|
+
"path",
|
|
148
|
+
{
|
|
149
|
+
d: "M17.5721 15.8923C25.1562 12.24 30.4387 7.04427 29.5177 3.6C28.0058 0.993067 24.9457 0 21.6644 0C11.9381 0 0 6.4 0 14.5653C0 15.6149 0.231859 16.7883 0.647496 18.0181C2.86565 20.9568 9.64833 19.7077 17.5721 15.8923Z",
|
|
150
|
+
fill: "currentColor"
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
] }),
|
|
154
|
+
/* @__PURE__ */ o("defs", { children: /* @__PURE__ */ o("clipPath", { id: "clip0_5309_7721", children: /* @__PURE__ */ o("rect", { width: "81", height: "32", fill: "currentColor" }) }) })
|
|
155
|
+
] }), i = g.bind(C), E = ({
|
|
166
156
|
className: l,
|
|
167
157
|
navigation: _,
|
|
168
158
|
social: t,
|
|
169
159
|
contacts: e,
|
|
170
|
-
additional:
|
|
160
|
+
additional: s,
|
|
171
161
|
custom: p,
|
|
172
162
|
payments: d,
|
|
173
163
|
logo: v,
|
|
@@ -195,7 +185,7 @@ const r = "purpur-footer", C = {
|
|
|
195
185
|
`${r}__social--md`,
|
|
196
186
|
t.sectionProps?.className
|
|
197
187
|
),
|
|
198
|
-
children: t.links.map(({ icon:
|
|
188
|
+
children: t.links.map(({ icon: a, href: n, ...m }) => /* @__PURE__ */ f(b, { ...m, icon: a, href: n, key: n }))
|
|
199
189
|
}
|
|
200
190
|
),
|
|
201
191
|
_ && /* @__PURE__ */ o(
|
|
@@ -213,12 +203,12 @@ const r = "purpur-footer", C = {
|
|
|
213
203
|
className: i(`${r}__payments`, d.sectionProps?.className),
|
|
214
204
|
children: [
|
|
215
205
|
d.content,
|
|
216
|
-
d.images?.map(({ alt:
|
|
206
|
+
d.images?.map(({ alt: a, src: n }) => /* @__PURE__ */ o(
|
|
217
207
|
"img",
|
|
218
208
|
{
|
|
219
209
|
className: i(`${r}__payments-image`),
|
|
220
210
|
src: n,
|
|
221
|
-
alt:
|
|
211
|
+
alt: a
|
|
222
212
|
},
|
|
223
213
|
n
|
|
224
214
|
))
|
|
@@ -232,8 +222,8 @@ const r = "purpur-footer", C = {
|
|
|
232
222
|
label: h.label,
|
|
233
223
|
options: h.options,
|
|
234
224
|
negative: !0,
|
|
235
|
-
onChange: (
|
|
236
|
-
Z(
|
|
225
|
+
onChange: (a) => {
|
|
226
|
+
Z(a.target.value);
|
|
237
227
|
}
|
|
238
228
|
}
|
|
239
229
|
) }),
|
|
@@ -258,7 +248,7 @@ const r = "purpur-footer", C = {
|
|
|
258
248
|
]
|
|
259
249
|
}
|
|
260
250
|
),
|
|
261
|
-
(p ||
|
|
251
|
+
(p || s) && /* @__PURE__ */ c("div", { className: i(`${r}__additional`), children: [
|
|
262
252
|
p && /* @__PURE__ */ o(
|
|
263
253
|
"section",
|
|
264
254
|
{
|
|
@@ -267,22 +257,22 @@ const r = "purpur-footer", C = {
|
|
|
267
257
|
children: p.content
|
|
268
258
|
}
|
|
269
259
|
),
|
|
270
|
-
|
|
260
|
+
s && /* @__PURE__ */ o(
|
|
271
261
|
"section",
|
|
272
262
|
{
|
|
273
|
-
...
|
|
263
|
+
...s.sectionProps,
|
|
274
264
|
className: i(
|
|
275
265
|
`${r}__additional-links`,
|
|
276
|
-
|
|
266
|
+
s.sectionProps?.className
|
|
277
267
|
),
|
|
278
|
-
children:
|
|
268
|
+
children: s?.links?.map(({ href: a, text: n, ...m }) => /* @__PURE__ */ f(
|
|
279
269
|
$,
|
|
280
270
|
{
|
|
281
271
|
...m,
|
|
282
272
|
variant: "standalone",
|
|
283
273
|
negative: !0,
|
|
284
|
-
href:
|
|
285
|
-
key:
|
|
274
|
+
href: a,
|
|
275
|
+
key: a,
|
|
286
276
|
disableVisited: !0
|
|
287
277
|
},
|
|
288
278
|
n
|
|
@@ -299,7 +289,7 @@ const r = "purpur-footer", C = {
|
|
|
299
289
|
`${r}__social--sm`,
|
|
300
290
|
t.sectionProps?.className
|
|
301
291
|
),
|
|
302
|
-
children: t.links.map(({ icon:
|
|
292
|
+
children: t.links.map(({ icon: a, href: n, ...m }) => /* @__PURE__ */ f(b, { ...m, icon: a, href: n, key: n }))
|
|
303
293
|
}
|
|
304
294
|
)
|
|
305
295
|
] }) }) });
|
|
@@ -308,4 +298,4 @@ E.displayName = "Footer";
|
|
|
308
298
|
export {
|
|
309
299
|
E as F
|
|
310
300
|
};
|
|
311
|
-
//# sourceMappingURL=footer-
|
|
301
|
+
//# sourceMappingURL=footer-BMlXRro2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer-BMlXRro2.mjs","sources":["../../../components/footer/src/constants.ts","../../../components/footer/src/footer-navigation.tsx","../../../components/footer/src/footer-social-link.tsx","../../../components/footer/src/telia-logo.tsx","../../../components/footer/src/footer.tsx"],"sourcesContent":["export const rootClassName = \"purpur-footer\";\n","import React, { type AnchorHTMLAttributes, type ForwardRefExoticComponent } from \"react\";\nimport { Accordion } from \"@purpur/accordion\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Link } from \"@purpur/link\";\nimport c from \"classnames/bind\";\n\nimport { rootClassName } from \"./constants\";\nimport styles from \"./footer.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type FooterNavigationItemLink = Omit<BaseProps<\"a\">, \"href\"> & {\n text: string;\n href: string;\n};\n\nexport type FooterNavigationItem = {\n heading: string;\n links: FooterNavigationItemLink[];\n};\n\nexport type CustomLinkType =\n | ForwardRefExoticComponent<AnchorHTMLAttributes<HTMLAnchorElement>>\n | \"a\";\n\ntype NavigationLinksProps = {\n links: FooterNavigationItemLink[];\n customLink?: CustomLinkType;\n};\n\nconst NavigationLinks = ({ links, customLink: CustomLink }: NavigationLinksProps) => (\n <ul>\n {links.map(({ href, text, ...linkProps }, j) => (\n <li key={j}>\n {CustomLink ? (\n <CustomLink\n {...linkProps}\n href={href}\n className={cx(`${rootClassName}__custom-link-navigation`)}\n >\n {text}\n </CustomLink>\n ) : (\n <Link {...linkProps} variant=\"navigation\" negative href={href} disableVisited={true}>\n {text}\n </Link>\n )}\n </li>\n ))}\n </ul>\n);\n\ntype FooterNavigationProps = {\n customLink?: CustomLinkType;\n sectionProps?: Omit<BaseProps<\"section\">, \"children\">;\n navigationLinks: FooterNavigationItem[];\n};\n\nexport const FooterNavigation = ({\n navigationLinks,\n sectionProps,\n customLink,\n}: FooterNavigationProps) => (\n <>\n <section\n {...sectionProps}\n className={cx(\n `${rootClassName}__navigation`,\n `${rootClassName}__navigation--lg`,\n sectionProps?.className\n )}\n >\n {navigationLinks.map((section, i) => (\n <div key={i} className={cx(`${rootClassName}__navigation-section`)}>\n <h3 className={cx(`${rootClassName}__navigation-section-heading`)}>{section.heading}</h3>\n <NavigationLinks links={section.links} customLink={customLink} />\n </div>\n ))}\n </section>\n <section\n {...sectionProps}\n className={cx(\n `${rootClassName}__navigation`,\n `${rootClassName}__navigation--sm`,\n sectionProps?.className\n )}\n >\n <Accordion negative>\n {navigationLinks.map((section, i) => (\n <Accordion.Item\n key={i}\n title={section.heading}\n titleTag=\"h2\"\n className={cx(`${rootClassName}__navigation-section`)}\n >\n <NavigationLinks links={section.links} customLink={customLink} />\n </Accordion.Item>\n ))}\n </Accordion>\n </section>\n </>\n);\n","import React from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Icon, type IconProps } from \"@purpur/icon\";\nimport c from \"classnames/bind\";\n\nimport { rootClassName } from \"./constants\";\nimport styles from \"./footer.module.scss\";\n\nexport type FooterSocialLinkProps = Omit<BaseProps<\"a\">, \"aria-label\" | \"href\" | \"children\"> & {\n \"aria-label\": string;\n icon: IconProps[\"svg\"];\n href: string;\n};\n\nconst cx = c.bind(styles);\n\nexport const FooterSocialLink = ({ icon, href, ...props }: FooterSocialLinkProps) => (\n <a\n {...props}\n href={href}\n className={cx(`${rootClassName}__social-link`)}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Icon svg={icon} />\n </a>\n);\n","import React from \"react\";\n\nexport const TeliaLogo = () => (\n <svg width=\"81\" height=\"32\" viewBox=\"0 0 81 32\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\">\n <title>Telia</title>\n <g clipPath=\"url(#clip0_5309_7721)\">\n <path\n d=\"M81.28 16.8043V25.2064H78.5458V23.8293C77.6183 25.04 76.1438 25.4912 74.9076 25.4912C72.3401 25.4912 70.8186 23.8773 70.8186 21.8592C70.8186 19.5573 73.4107 17.6821 76.5723 17.6821C77.1909 17.6821 77.8566 17.7301 78.4507 17.92V17.1371C78.4507 15.9499 77.7615 15.3333 76.3586 15.3333C75.0989 15.3333 73.9812 15.9744 73.2921 16.8053L71.2235 15.2864C72.3882 13.9339 74.3862 12.9845 76.4067 12.9845C79.5683 12.9824 81.28 14.3595 81.28 16.8043ZM78.4507 20.6251V20.1024C77.9752 19.936 77.4762 19.8891 76.8576 19.8891C74.7174 19.8891 73.6244 20.7435 73.6244 21.7877C73.6244 22.6421 74.3616 23.1883 75.4792 23.1883C76.9527 23.1883 78.4507 22.3104 78.4507 20.6251Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M65.8021 9.968C65.8021 9.04214 66.6109 8.28267 67.5373 8.28267C68.4412 8.28267 69.249 9.04214 69.249 9.968C69.249 10.8939 68.4401 11.6533 67.5373 11.6533C66.6109 11.6533 65.8021 10.8939 65.8021 9.968ZM66.0638 25.2064V13.3387H68.9883V25.2064H66.0638Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M64.2806 25.2533C63.8286 25.3483 63.3531 25.3717 62.9257 25.3717C60.8337 25.3717 59.9062 24.3744 59.9062 22.3573V8.59093H62.8306V21.9541C62.8306 22.9749 63.4493 23.1168 64.2806 23.0219V25.2533Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M58.0513 20.1035H49.2781C49.5869 21.8603 50.8477 23.0229 52.4643 23.0229C53.677 23.0229 54.6514 22.4768 55.2466 21.5755L57.5769 22.976C56.3877 24.5664 54.4388 25.5157 52.4653 25.5157C49.2086 25.5157 46.3793 22.9291 46.3793 19.2256C46.3793 15.5221 49.1851 12.96 52.3232 12.96C56.4347 12.9589 58.4552 16.2347 58.0513 20.1035ZM49.3732 17.8955H55.222C54.8651 16.3531 53.8672 15.3792 52.3211 15.3792C50.8712 15.3803 49.7771 16.3765 49.3732 17.8955Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M48.6359 11.2971H43.69V25.2064H40.5518V11.2971H35.5589V8.59093H48.6359V11.2971Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M16.9321 27.4656C11.5983 29.6245 8.54567 28.9365 6.85855 27.5904L6.83397 27.5712C9.44532 30.1717 12.4221 32.0011 15.0324 32.0011C19.6033 32.0011 25.8614 26.4651 28.8232 17.8805C27.1542 20.9792 23.5727 24.7861 16.9321 27.4656Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M20.9806 22.4843C25.137 20.0779 28.8809 15.9968 30.0616 13.0869C30.3971 10.6784 30.4654 10.3744 30.506 7.7248C30.5114 7.35787 30.4889 7.00587 30.4548 6.6688C30.2122 10.56 25.1743 15.4528 18.5092 18.6496C10.4689 22.5056 4.43738 23.5435 1.74589 20.6027C2.6808 22.4459 3.29411 23.3408 4.34549 24.7083C7.45048 27.4539 13.9853 26.5355 20.9806 22.4843Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M17.5721 15.8923C25.1562 12.24 30.4387 7.04427 29.5177 3.6C28.0058 0.993067 24.9457 0 21.6644 0C11.9381 0 0 6.4 0 14.5653C0 15.6149 0.231859 16.7883 0.647496 18.0181C2.86565 20.9568 9.64833 19.7077 17.5721 15.8923Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_5309_7721\">\n <rect width=\"81\" height=\"32\" fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React, { type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Container } from \"@purpur/container\";\nimport { Link, type LinkProps } from \"@purpur/link\";\nimport { Select } from \"@purpur/select\";\nimport { type ColorOptions, type ColorScheme, useColorScheme, useTheme } from \"@purpur/theme\";\nimport c from \"classnames/bind\";\n\nimport { rootClassName } from \"./constants\";\nimport styles from \"./footer.module.scss\";\nimport {\n type CustomLinkType,\n FooterNavigation,\n type FooterNavigationItem,\n type FooterNavigationItemLink,\n} from \"./footer-navigation\";\nimport { FooterSocialLink, type FooterSocialLinkProps } from \"./footer-social-link\";\nimport { TeliaLogo } from \"./telia-logo\";\n\nconst cx = c.bind(styles);\n\ntype AdditionalLink = FooterNavigationItemLink &\n Omit<LinkProps, \"href\" | \"variant\" | \"negative\" | \"children\" | \"disableVisited\">;\n\ntype SectionProps = Omit<BaseProps<\"section\">, \"children\">;\n\nexport type FooterProps = BaseProps<\"footer\"> & {\n /**\n * Navigation section of the footer.\n */\n navigation?: {\n customLink?: CustomLinkType;\n links: FooterNavigationItem[];\n sectionProps?: SectionProps;\n };\n /**\n * Social links section of the footer.\n */\n social?: {\n links: FooterSocialLinkProps[];\n sectionProps?: SectionProps;\n };\n /**\n * Contacts section of the footer.\n */\n contacts?: {\n copyright?: string;\n address?: {\n content: ReactElement;\n addressProps?: Omit<BaseProps<\"address\">, \"children\">;\n };\n sectionProps?: SectionProps;\n };\n /**\n * Additional links section of the footer.\n */\n additional?: {\n links: AdditionalLink[];\n sectionProps?: SectionProps;\n };\n /**\n * Custom content section of the footer.\n */\n custom?: {\n content: ReactElement;\n sectionProps?: SectionProps;\n };\n /**\n * Payment images section of the footer.\n */\n payments?: {\n /**\n * @deprecated use content instead\n */\n images?: { src: string; alt: string }[];\n content?: ReactElement | ReactElement[];\n sectionProps?: SectionProps;\n };\n /**\n * Custom logo that replaces the default Telia logo.\n */\n logo?: ReactNode;\n themeSelect?: {\n label: string;\n options: { value: ColorOptions; label: string }[];\n };\n forceColorScheme?: ColorScheme;\n};\n\nexport const Footer = ({\n className,\n navigation,\n social,\n contacts,\n additional,\n custom,\n payments,\n logo,\n themeSelect,\n forceColorScheme,\n ...props\n}: FooterProps) => {\n const classes = cx(className, rootClassName);\n\n const { options } = useTheme();\n const [colorScheme, setColorScheme] = useColorScheme();\n\n const resolvedColorScheme = forceColorScheme ?? options?.footerColorScheme;\n\n return (\n <footer data-color-scheme={resolvedColorScheme} className={classes} {...props}>\n <Container>\n <div className={cx(`${rootClassName}__container`)}>\n <div\n className={cx(`${rootClassName}__logo`, {\n [`${rootClassName}__logo--telia`]: !logo,\n })}\n >\n {logo ?? <TeliaLogo />}\n </div>\n {social && (\n <section\n {...social.sectionProps}\n className={cx(\n `${rootClassName}__social`,\n `${rootClassName}__social--md`,\n social.sectionProps?.className\n )}\n >\n {social.links.map(({ icon, href, ...socialLinkProps }) => (\n <FooterSocialLink {...socialLinkProps} icon={icon} href={href} key={href} />\n ))}\n </section>\n )}\n {navigation && (\n <FooterNavigation\n customLink={navigation.customLink}\n navigationLinks={navigation.links}\n sectionProps={navigation.sectionProps}\n />\n )}\n {payments && (\n <section\n {...payments.sectionProps}\n className={cx(`${rootClassName}__payments`, payments.sectionProps?.className)}\n >\n {payments.content}\n {payments.images?.map(({ alt, src }) => (\n <img\n className={cx(`${rootClassName}__payments-image`)}\n src={src}\n alt={alt}\n key={src}\n />\n ))}\n </section>\n )}\n {themeSelect && (\n <section className={cx(`${rootClassName}__theme-select`)}>\n <Select\n value={colorScheme}\n label={themeSelect.label}\n options={themeSelect.options}\n negative\n onChange={(event) => {\n setColorScheme(event.target.value as ColorOptions);\n }}\n />\n </section>\n )}\n {contacts && (\n <section\n {...contacts.sectionProps}\n className={cx(`${rootClassName}__contacts`, contacts.sectionProps?.className)}\n >\n {contacts.copyright && (\n <div className={cx(`${rootClassName}__contacts-copyright`)}>\n {contacts.copyright}\n </div>\n )}\n {contacts.address && (\n <address\n {...contacts.address.addressProps}\n className={cx(\n `${rootClassName}__contacts-address`,\n contacts.address.addressProps?.className\n )}\n >\n {contacts.address.content}\n </address>\n )}\n </section>\n )}\n {(custom || additional) && (\n <div className={cx(`${rootClassName}__additional`)}>\n {custom && (\n <section\n {...custom.sectionProps}\n className={cx(`${rootClassName}__custom-content`, custom.sectionProps?.className)}\n >\n {custom.content}\n </section>\n )}\n {additional && (\n <section\n {...additional.sectionProps}\n className={cx(\n `${rootClassName}__additional-links`,\n additional.sectionProps?.className\n )}\n >\n {additional?.links?.map(({ href, text, ...additionalLinkProps }) => (\n <Link\n {...additionalLinkProps}\n variant=\"standalone\"\n negative\n href={href}\n key={href}\n disableVisited={true}\n >\n {text}\n </Link>\n ))}\n </section>\n )}\n </div>\n )}\n {social && (\n <section\n {...social.sectionProps}\n className={cx(\n `${rootClassName}__social`,\n `${rootClassName}__social--sm`,\n social.sectionProps?.className\n )}\n >\n {social.links.map(({ icon, href, ...socialLinkProps }) => (\n <FooterSocialLink {...socialLinkProps} icon={icon} href={href} key={href} />\n ))}\n </section>\n )}\n </div>\n </Container>\n </footer>\n );\n};\n\nFooter.displayName = \"Footer\";\n"],"names":["rootClassName","cx","c","styles","NavigationLinks","links","CustomLink","href","text","linkProps","j","jsx","Link","FooterNavigation","navigationLinks","sectionProps","customLink","jsxs","Fragment","section","i","Accordion","FooterSocialLink","icon","props","Icon","TeliaLogo","Footer","className","navigation","social","contacts","additional","custom","payments","logo","themeSelect","forceColorScheme","classes","options","useTheme","colorScheme","setColorScheme","useColorScheme","resolvedColorScheme","Container","socialLinkProps","createElement","alt","src","Select","event","additionalLinkProps"],"mappings":"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"}
|