@purpur/library 9.5.0 → 9.7.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/CHANGELOG.json +66 -0
- package/CHANGELOG.md +29 -1
- package/dist/LICENSE.txt +27 -6
- package/dist/ThemeProvider-D7oXcAde.js +2 -0
- package/dist/{ThemeProvider-Dy771oix.js.map → ThemeProvider-D7oXcAde.js.map} +1 -1
- package/dist/ThemeProvider-DiDBfyFA.mjs +348 -0
- package/dist/{ThemeProvider-CkX-BNWN.mjs.map → ThemeProvider-DiDBfyFA.mjs.map} +1 -1
- package/dist/avatar-CYnD57o4.js +2 -0
- package/dist/avatar-CYnD57o4.js.map +1 -0
- package/dist/avatar-CzbDD1MK.mjs +27 -0
- package/dist/avatar-CzbDD1MK.mjs.map +1 -0
- package/dist/avatar.cjs.js +2 -0
- package/dist/avatar.cjs.js.map +1 -0
- package/dist/avatar.es.js +5 -0
- package/dist/avatar.es.js.map +1 -0
- package/dist/carousel-BIKcwvYz.mjs +1658 -0
- package/dist/carousel-BIKcwvYz.mjs.map +1 -0
- package/dist/carousel-DnSaLDZf.js +2 -0
- package/dist/carousel-DnSaLDZf.js.map +1 -0
- package/dist/carousel.cjs.js +1 -1
- package/dist/carousel.es.js +1 -1
- package/dist/color-dot-BEE5rKco.js +2 -0
- package/dist/color-dot-BEE5rKco.js.map +1 -0
- package/dist/color-dot-Dz9yzVX3.mjs +28 -0
- package/dist/color-dot-Dz9yzVX3.mjs.map +1 -0
- package/dist/color-dot.cjs.js +1 -1
- package/dist/color-dot.es.js +4 -3
- package/dist/comparison-table-0UDB2BTU.js +2 -0
- package/dist/comparison-table-0UDB2BTU.js.map +1 -0
- package/dist/comparison-table-CjTE-fHN.mjs +292 -0
- package/dist/comparison-table-CjTE-fHN.mjs.map +1 -0
- package/dist/comparison-table.cjs.js +1 -1
- package/dist/comparison-table.es.js +1 -1
- package/dist/components/avatar/src/avatar-constants.d.ts +2 -0
- package/dist/components/avatar/src/avatar-constants.d.ts.map +1 -0
- package/dist/components/avatar/src/avatar.d.ts +26 -0
- package/dist/components/avatar/src/avatar.d.ts.map +1 -0
- package/dist/components/button/src/button.visual.fixtures.d.ts +43 -0
- package/dist/components/button/src/button.visual.fixtures.d.ts.map +1 -0
- package/dist/components/carousel/src/carousel.d.ts.map +1 -1
- package/dist/components/color-dot/src/color-dot.d.ts +18 -8
- package/dist/components/color-dot/src/color-dot.d.ts.map +1 -1
- package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts.map +1 -1
- package/dist/components/date-picker/src/date-picker.d.ts +8 -0
- package/dist/components/date-picker/src/date-picker.d.ts.map +1 -1
- package/dist/components/drawer/src/drawer-content.d.ts +21 -0
- package/dist/components/drawer/src/drawer-content.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner.visual.fixtures.d.ts +14 -0
- package/dist/components/hero-banner/src/hero-banner.visual.fixtures.d.ts.map +1 -0
- package/dist/components/loading/src/loading-dots.d.ts +19 -0
- package/dist/components/loading/src/loading-dots.d.ts.map +1 -0
- package/dist/components/loading/src/loading-text.d.ts +21 -0
- package/dist/components/loading/src/loading-text.d.ts.map +1 -0
- package/dist/components/loading/src/loading.d.ts +10 -0
- package/dist/components/loading/src/loading.d.ts.map +1 -0
- package/dist/components/message/src/message-bubble.d.ts +22 -0
- package/dist/components/message/src/message-bubble.d.ts.map +1 -0
- package/dist/components/message/src/message-stamp.d.ts +26 -0
- package/dist/components/message/src/message-stamp.d.ts.map +1 -0
- package/dist/components/message/src/message-utils.d.ts +3 -0
- package/dist/components/message/src/message-utils.d.ts.map +1 -0
- package/dist/components/message/src/message.d.ts +42 -0
- package/dist/components/message/src/message.d.ts.map +1 -0
- package/dist/components/modal/src/modal-content.d.ts +21 -0
- package/dist/components/modal/src/modal-content.d.ts.map +1 -1
- package/dist/components/modal/src/modal.d.ts +2 -0
- package/dist/components/modal/src/modal.d.ts.map +1 -1
- package/dist/components/popover/src/popover-content.d.ts +14 -0
- package/dist/components/popover/src/popover-content.d.ts.map +1 -1
- package/dist/components/radio-card-group/src/is-radio-card-item.d.ts +4 -0
- package/dist/components/radio-card-group/src/is-radio-card-item.d.ts.map +1 -0
- package/dist/components/radio-card-group/src/radio-card-group.constants.d.ts +5 -0
- package/dist/components/radio-card-group/src/radio-card-group.constants.d.ts.map +1 -0
- package/dist/components/radio-card-group/src/radio-card-group.d.ts +5 -6
- package/dist/components/radio-card-group/src/radio-card-group.d.ts.map +1 -1
- package/dist/components/radio-card-group/src/radio-card-item.d.ts +1 -2
- package/dist/components/radio-card-group/src/radio-card-item.d.ts.map +1 -1
- package/dist/components/search-field/src/search-field-autocomplete.d.ts +6 -3
- package/dist/components/search-field/src/search-field-autocomplete.d.ts.map +1 -1
- package/dist/components/search-field/src/search-field-base.d.ts +10 -3
- package/dist/components/search-field/src/search-field-base.d.ts.map +1 -1
- package/dist/components/search-field/src/search-field-button.d.ts +3 -1
- package/dist/components/search-field/src/search-field-button.d.ts.map +1 -1
- package/dist/components/search-field/src/search-field.d.ts +12 -6
- package/dist/components/search-field/src/search-field.d.ts.map +1 -1
- package/dist/components/table/src/drag-indicator-circle.d.ts +8 -1
- package/dist/components/table/src/drag-indicator-circle.d.ts.map +1 -1
- package/dist/components/table/src/table.d.ts.map +1 -1
- package/dist/components/tooltip/src/tooltip.d.ts +21 -0
- package/dist/components/tooltip/src/tooltip.d.ts.map +1 -1
- package/dist/components-metadata.js +33 -4
- package/dist/date-picker-CIizn3Pv.js +2 -0
- package/dist/{date-picker-uyPKJulK.js.map → date-picker-CIizn3Pv.js.map} +1 -1
- package/dist/date-picker-DixxW60s.mjs +1617 -0
- package/dist/{date-picker-CzxhZxsw.mjs.map → date-picker-DixxW60s.mjs.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/drawer-BzkRd9F0.mjs +577 -0
- package/dist/drawer-BzkRd9F0.mjs.map +1 -0
- package/dist/drawer-DyhsP34o.js +2 -0
- package/dist/drawer-DyhsP34o.js.map +1 -0
- package/dist/drawer.cjs.js +1 -1
- package/dist/drawer.es.js +1 -1
- package/dist/{footer-D9AcPwlH.js → footer-3Y-664-8.js} +2 -2
- package/dist/{footer-D9AcPwlH.js.map → footer-3Y-664-8.js.map} +1 -1
- package/dist/{footer-BLPlXaZK.mjs → footer-DenAcikt.mjs} +3 -3
- package/dist/{footer-BLPlXaZK.mjs.map → footer-DenAcikt.mjs.map} +1 -1
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/{hero-banner-DkC_BqM7.mjs → hero-banner-B7xrDfzN.mjs} +2 -2
- package/dist/{hero-banner-DkC_BqM7.mjs.map → hero-banner-B7xrDfzN.mjs.map} +1 -1
- package/dist/{hero-banner-D1A-_qou.js → hero-banner-DthITuQ7.js} +2 -2
- package/dist/{hero-banner-D1A-_qou.js.map → hero-banner-DthITuQ7.js.map} +1 -1
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/libraries/library/src/avatar.d.ts +6 -0
- package/dist/libraries/library/src/avatar.d.ts.map +1 -0
- package/dist/libraries/library/src/library.d.ts +3 -0
- package/dist/libraries/library/src/library.d.ts.map +1 -1
- package/dist/libraries/library/src/loading.d.ts +6 -0
- package/dist/libraries/library/src/loading.d.ts.map +1 -0
- package/dist/libraries/library/src/message.d.ts +6 -0
- package/dist/libraries/library/src/message.d.ts.map +1 -0
- package/dist/libraries/theme/src/ThemeProvider.d.ts.map +1 -1
- package/dist/libraries/theme/src/theme.d.ts +1 -0
- package/dist/libraries/theme/src/theme.d.ts.map +1 -1
- package/dist/libraries/theme/src/types.d.ts +7 -0
- package/dist/libraries/theme/src/types.d.ts.map +1 -1
- package/dist/libraries/theme/src/useThemePortalContainer.d.ts +12 -0
- package/dist/libraries/theme/src/useThemePortalContainer.d.ts.map +1 -0
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +630 -623
- package/dist/library.es.js.map +1 -1
- package/dist/loading-Dwtkjstg.js +2 -0
- package/dist/loading-Dwtkjstg.js.map +1 -0
- package/dist/loading-r23nxJSz.mjs +107 -0
- package/dist/loading-r23nxJSz.mjs.map +1 -0
- package/dist/loading.cjs.js +2 -0
- package/dist/loading.cjs.js.map +1 -0
- package/dist/loading.es.js +5 -0
- package/dist/loading.es.js.map +1 -0
- package/dist/message-0yTS5pOF.js +3 -0
- package/dist/message-0yTS5pOF.js.map +1 -0
- package/dist/message-D9CDwcw9.mjs +132 -0
- package/dist/message-D9CDwcw9.mjs.map +1 -0
- package/dist/message.cjs.js +2 -0
- package/dist/message.cjs.js.map +1 -0
- package/dist/message.es.js +5 -0
- package/dist/message.es.js.map +1 -0
- package/dist/modal-DJn9idcw.js +2 -0
- package/dist/modal-DJn9idcw.js.map +1 -0
- package/dist/{modal-fp37VbrH.mjs → modal-EIP36327.mjs} +83 -80
- package/dist/modal-EIP36327.mjs.map +1 -0
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{popover-I26xNbTz.mjs → popover-DERrvReO.mjs} +328 -325
- package/dist/popover-DERrvReO.mjs.map +1 -0
- package/dist/popover-DnGgzfQr.js +2 -0
- package/dist/popover-DnGgzfQr.js.map +1 -0
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{product-card-CoY1KggV.js → product-card-8X-Ld2d_.js} +2 -2
- package/dist/{product-card-CoY1KggV.js.map → product-card-8X-Ld2d_.js.map} +1 -1
- package/dist/{product-card-C3_N0t-R.mjs → product-card-Bt-F0wKr.mjs} +10 -10
- package/dist/{product-card-C3_N0t-R.mjs.map → product-card-Bt-F0wKr.mjs.map} +1 -1
- package/dist/product-card.cjs.js +1 -1
- package/dist/product-card.es.js +1 -1
- package/dist/{promotion-card-BiHnQvhn.mjs → promotion-card-BnzIVNQ4.mjs} +2 -2
- package/dist/{promotion-card-BiHnQvhn.mjs.map → promotion-card-BnzIVNQ4.mjs.map} +1 -1
- package/dist/{promotion-card-Bag64gqP.js → promotion-card-DKc2Cx1h.js} +2 -2
- package/dist/{promotion-card-Bag64gqP.js.map → promotion-card-DKc2Cx1h.js.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/radio-card-group-ZBXjYcQs.mjs +166 -0
- package/dist/radio-card-group-ZBXjYcQs.mjs.map +1 -0
- package/dist/radio-card-group-nrDi5EPK.js +2 -0
- package/dist/radio-card-group-nrDi5EPK.js.map +1 -0
- package/dist/radio-card-group.cjs.js +1 -1
- package/dist/radio-card-group.es.js +3 -5
- package/dist/search-field-2vdDbiT0.js +2 -0
- package/dist/search-field-2vdDbiT0.js.map +1 -0
- package/dist/search-field-DKyNh7pE.mjs +167 -0
- package/dist/search-field-DKyNh7pE.mjs.map +1 -0
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/{stepper-CWR2vGPj.mjs → stepper-BDsSa6yr.mjs} +2 -2
- package/dist/{stepper-CWR2vGPj.mjs.map → stepper-BDsSa6yr.mjs.map} +1 -1
- package/dist/{stepper-Df4X7DDR.js → stepper-DpauItjx.js} +2 -2
- package/dist/{stepper-Df4X7DDR.js.map → stepper-DpauItjx.js.map} +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-gnGUejtb.js → table-BOCcBzSO.js} +4 -4
- package/dist/table-BOCcBzSO.js.map +1 -0
- package/dist/{table-g_n68i4s.mjs → table-i1Gs9e0e.mjs} +440 -440
- package/dist/table-i1Gs9e0e.mjs.map +1 -0
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/{text-area-peNKG7g4.js → text-area-D0truMT1.js} +2 -2
- package/dist/{text-area-peNKG7g4.js.map → text-area-D0truMT1.js.map} +1 -1
- package/dist/{text-area-kJvg6cFp.mjs → text-area-IVH-k4MM.mjs} +3 -3
- package/dist/{text-area-kJvg6cFp.mjs.map → text-area-IVH-k4MM.mjs.map} +1 -1
- package/dist/text-area.cjs.js +1 -1
- package/dist/text-area.es.js +1 -1
- package/dist/theme.cjs.js +1 -1
- package/dist/theme.es.js +8 -6
- package/dist/theme.es.js.map +1 -1
- package/dist/tooltip-CJGmJDFQ.js +2 -0
- package/dist/{tooltip-C8Zxnqdb.js.map → tooltip-CJGmJDFQ.js.map} +1 -1
- package/dist/{tooltip-LU2Cy-QC.mjs → tooltip-RA-03bKs.mjs} +277 -274
- package/dist/{tooltip-LU2Cy-QC.mjs.map → tooltip-RA-03bKs.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/{useColorScheme-tAkY9LHt.mjs → useColorScheme-B9DWd-LN.mjs} +2 -2
- package/dist/{useColorScheme-tAkY9LHt.mjs.map → useColorScheme-B9DWd-LN.mjs.map} +1 -1
- package/dist/useColorScheme-DbTQjxNB.js +2 -0
- package/dist/{useColorScheme-DNyjsWX9.js.map → useColorScheme-DbTQjxNB.js.map} +1 -1
- package/dist/useThemePortalContainer-D9BYjEvT.js +2 -0
- package/dist/useThemePortalContainer-D9BYjEvT.js.map +1 -0
- package/dist/useThemePortalContainer-tFLTaYKN.mjs +9 -0
- package/dist/useThemePortalContainer-tFLTaYKN.mjs.map +1 -0
- package/package.json +27 -24
- package/src/aliases.ts +12 -0
- package/src/avatar.ts +6 -0
- package/src/entries.js +3 -0
- package/src/library.ts +5 -68
- package/src/loading.ts +6 -0
- package/src/message.ts +6 -0
- package/dist/ThemeProvider-CkX-BNWN.mjs +0 -337
- package/dist/ThemeProvider-Dy771oix.js +0 -2
- package/dist/carousel-DLkTL9sj.mjs +0 -1633
- package/dist/carousel-DLkTL9sj.mjs.map +0 -1
- package/dist/carousel-DXrtxRz5.js +0 -2
- package/dist/carousel-DXrtxRz5.js.map +0 -1
- package/dist/color-dot-6Mxngvce.mjs +0 -34
- package/dist/color-dot-6Mxngvce.mjs.map +0 -1
- package/dist/color-dot-B9w_ucWb.js +0 -2
- package/dist/color-dot-B9w_ucWb.js.map +0 -1
- package/dist/comparison-table-C74IAVqz.js +0 -2
- package/dist/comparison-table-C74IAVqz.js.map +0 -1
- package/dist/comparison-table-DctKxmX9.mjs +0 -267
- package/dist/comparison-table-DctKxmX9.mjs.map +0 -1
- package/dist/date-picker-CzxhZxsw.mjs +0 -1611
- package/dist/date-picker-uyPKJulK.js +0 -2
- package/dist/drawer-8Acg4wkV.mjs +0 -574
- package/dist/drawer-8Acg4wkV.mjs.map +0 -1
- package/dist/drawer-BLHgcEqb.js +0 -2
- package/dist/drawer-BLHgcEqb.js.map +0 -1
- package/dist/modal-Baisuc6m.js +0 -2
- package/dist/modal-Baisuc6m.js.map +0 -1
- package/dist/modal-fp37VbrH.mjs.map +0 -1
- package/dist/popover-B0XJZ5mj.js +0 -2
- package/dist/popover-B0XJZ5mj.js.map +0 -1
- package/dist/popover-I26xNbTz.mjs.map +0 -1
- package/dist/radio-card-group-CneOprGY.mjs +0 -168
- package/dist/radio-card-group-CneOprGY.mjs.map +0 -1
- package/dist/radio-card-group-Ctuvg61o.js +0 -2
- package/dist/radio-card-group-Ctuvg61o.js.map +0 -1
- package/dist/search-field-CpkHGIYi.mjs +0 -151
- package/dist/search-field-CpkHGIYi.mjs.map +0 -1
- package/dist/search-field-Z0PqDARl.js +0 -2
- package/dist/search-field-Z0PqDARl.js.map +0 -1
- package/dist/table-g_n68i4s.mjs.map +0 -1
- package/dist/table-gnGUejtb.js.map +0 -1
- package/dist/tooltip-C8Zxnqdb.js +0 -2
- package/dist/useColorScheme-DNyjsWX9.js +0 -2
- package/tokens/_dark.scss +0 -9
- package/tokens/_index.scss +0 -9
- package/tokens/border/variables.css +0 -13
- package/tokens/border/variables.d.ts +0 -10
- package/tokens/border/variables.dark.css +0 -12
- package/tokens/border/variables.dark.d.ts +0 -10
- package/tokens/border/variables.dark.js +0 -10
- package/tokens/border/variables.dark.json +0 -18
- package/tokens/border/variables.dark.scss +0 -10
- package/tokens/border/variables.js +0 -10
- package/tokens/border/variables.json +0 -18
- package/tokens/border/variables.scss +0 -10
- package/tokens/breakpoint/variables.css +0 -11
- package/tokens/breakpoint/variables.d.ts +0 -8
- package/tokens/breakpoint/variables.dark.css +0 -10
- package/tokens/breakpoint/variables.dark.d.ts +0 -8
- package/tokens/breakpoint/variables.dark.js +0 -8
- package/tokens/breakpoint/variables.dark.json +0 -14
- package/tokens/breakpoint/variables.dark.scss +0 -8
- package/tokens/breakpoint/variables.js +0 -8
- package/tokens/breakpoint/variables.json +0 -14
- package/tokens/breakpoint/variables.scss +0 -8
- package/tokens/color/variables.css +0 -262
- package/tokens/color/variables.d.ts +0 -253
- package/tokens/color/variables.dark.css +0 -262
- package/tokens/color/variables.dark.d.ts +0 -252
- package/tokens/color/variables.dark.js +0 -252
- package/tokens/color/variables.dark.json +0 -306
- package/tokens/color/variables.dark.scss +0 -252
- package/tokens/color/variables.js +0 -253
- package/tokens/color/variables.json +0 -307
- package/tokens/color/variables.scss +0 -253
- package/tokens/dark.css +0 -9
- package/tokens/dark.d.ts +0 -9
- package/tokens/dark.js +0 -9
- package/tokens/filter/variables.css +0 -4
- package/tokens/filter/variables.d.ts +0 -1
- package/tokens/filter/variables.dark.css +0 -3
- package/tokens/filter/variables.dark.d.ts +0 -1
- package/tokens/filter/variables.dark.js +0 -1
- package/tokens/filter/variables.dark.json +0 -7
- package/tokens/filter/variables.dark.scss +0 -1
- package/tokens/filter/variables.js +0 -1
- package/tokens/filter/variables.json +0 -7
- package/tokens/filter/variables.scss +0 -1
- package/tokens/gradient/variables.css +0 -53
- package/tokens/gradient/variables.d.ts +0 -9
- package/tokens/gradient/variables.dark.css +0 -51
- package/tokens/gradient/variables.dark.d.ts +0 -9
- package/tokens/gradient/variables.dark.js +0 -18
- package/tokens/gradient/variables.dark.json +0 -27
- package/tokens/gradient/variables.dark.scss +0 -36
- package/tokens/gradient/variables.js +0 -18
- package/tokens/gradient/variables.json +0 -27
- package/tokens/gradient/variables.scss +0 -42
- package/tokens/index.css +0 -18
- package/tokens/index.d.ts +0 -9
- package/tokens/index.js +0 -9
- package/tokens/motion/variables.css +0 -14
- package/tokens/motion/variables.d.ts +0 -11
- package/tokens/motion/variables.dark.css +0 -13
- package/tokens/motion/variables.dark.d.ts +0 -11
- package/tokens/motion/variables.dark.js +0 -11
- package/tokens/motion/variables.dark.json +0 -19
- package/tokens/motion/variables.dark.scss +0 -11
- package/tokens/motion/variables.js +0 -11
- package/tokens/motion/variables.json +0 -19
- package/tokens/motion/variables.scss +0 -11
- package/tokens/shadow/variables.css +0 -11
- package/tokens/shadow/variables.d.ts +0 -4
- package/tokens/shadow/variables.dark.css +0 -10
- package/tokens/shadow/variables.dark.d.ts +0 -4
- package/tokens/shadow/variables.dark.js +0 -4
- package/tokens/shadow/variables.dark.json +0 -8
- package/tokens/shadow/variables.dark.scss +0 -4
- package/tokens/shadow/variables.js +0 -4
- package/tokens/shadow/variables.json +0 -8
- package/tokens/shadow/variables.scss +0 -4
- package/tokens/spacing/variables.css +0 -26
- package/tokens/spacing/variables.d.ts +0 -23
- package/tokens/spacing/variables.dark.css +0 -17
- package/tokens/spacing/variables.dark.d.ts +0 -15
- package/tokens/spacing/variables.dark.js +0 -15
- package/tokens/spacing/variables.dark.json +0 -19
- package/tokens/spacing/variables.dark.scss +0 -15
- package/tokens/spacing/variables.js +0 -23
- package/tokens/spacing/variables.json +0 -31
- package/tokens/spacing/variables.scss +0 -23
- package/tokens/typography/variables.css +0 -30
- package/tokens/typography/variables.d.ts +0 -26
- package/tokens/typography/variables.dark.css +0 -29
- package/tokens/typography/variables.dark.d.ts +0 -26
- package/tokens/typography/variables.dark.js +0 -28
- package/tokens/typography/variables.dark.json +0 -38
- package/tokens/typography/variables.dark.scss +0 -26
- package/tokens/typography/variables.js +0 -28
- package/tokens/typography/variables.json +0 -38
- package/tokens/typography/variables.scss +0 -26
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-8Acg4wkV.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 * 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 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 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\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>\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>\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","disableCloseOnClickOutside","zIndex","drawerContext","useContext","isModal","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-BLHgcEqb.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const r=require("react/jsx-runtime"),_=require("react"),$=require("./index-2cFVyGXq.js"),O=require("./bind-DeUYJ6m9.js"),k=require("./button-DmybVApa.js"),M=require("./heading-drD5ugCC.js"),lr=require("./chevron-left.es-B0vPg5XM.js"),pr=require("./close.es-VL3lKi1O.js"),X=require("./visually-hidden-C2CKovZx.js"),U=require("./index-CoR7YA3H.js"),J=_.createContext(null),_r="_slideUp_9zrj7_1",wr="_slideDown_9zrj7_1",fr="_slideInRight_9zrj7_1",hr="_slideInLeft_9zrj7_1",mr="_slideOutRight_9zrj7_1",jr="_slideOutLeft_9zrj7_1",$r="_fadeIn_9zrj7_1",xr="_fadeOut_9zrj7_1",vr={"purpur-drawer-content":"_purpur-drawer-content_9zrj7_1",slideUp:_r,slideDown:wr,"purpur-drawer-content--left":"_purpur-drawer-content--left_9zrj7_21","purpur-drawer-content--right":"_purpur-drawer-content--right_9zrj7_24","purpur-drawer-content--fit-to-content":"_purpur-drawer-content--fit-to-content_9zrj7_27",slideInRight:fr,slideInLeft:hr,slideOutRight:mr,slideOutLeft:jr,"purpur-drawer-content__content-container":"_purpur-drawer-content__content-container_9zrj7_63","purpur-drawer-content__description":"_purpur-drawer-content__description_9zrj7_68","purpur-drawer-content--ai":"_purpur-drawer-content--ai_9zrj7_78","purpur-drawer-overlay":"_purpur-drawer-overlay_9zrj7_82",fadeIn:$r,fadeOut:xr},yr={"purpur-drawer-container--header":"_purpur-drawer-container--header_1csed_1","purpur-drawer-container--ai":"_purpur-drawer-container--ai_1csed_4","purpur-drawer-container--body":"_purpur-drawer-container--body_1csed_7","purpur-drawer-container--sticky":"_purpur-drawer-container--sticky_1csed_15","purpur-drawer-container--footer":"_purpur-drawer-container--footer_1csed_23"},gr=O.c.bind(yr),H="purpur-drawer-container",A=_.forwardRef(({["data-testid"]:e="purpur-drawer-container",children:a,className:s,drawerVariant:n="default",variant:d="body",stickyFooter:c,...o},u)=>{const l=gr([H,{[`${H}--${d}`]:d,[`${H}--sticky`]:c,[`${H}--ai`]:n==="ai"},s]);return r.jsx("div",{className:l,"data-testid":e,ref:u,...o,children:a})});A.displayName="DrawerContainer";const br={"purpur-drawer-frame":"_purpur-drawer-frame_vjt35_1","purpur-drawer-frame--ai":"_purpur-drawer-frame--ai_vjt35_11","purpur-drawer-frame--without-back-button":"_purpur-drawer-frame--without-back-button_vjt35_14","purpur-drawer-frame__header":"_purpur-drawer-frame__header_vjt35_14","purpur-drawer-frame--with-back-button":"_purpur-drawer-frame--with-back-button_vjt35_17","purpur-drawer-frame--left":"_purpur-drawer-frame--left_vjt35_21","purpur-drawer-frame--right":"_purpur-drawer-frame--right_vjt35_25","purpur-drawer-frame--sticky-footer":"_purpur-drawer-frame--sticky-footer_vjt35_36","purpur-drawer-frame__body":"_purpur-drawer-frame__body_vjt35_42","purpur-drawer-frame--fit-to-content":"_purpur-drawer-frame--fit-to-content_vjt35_46","purpur-drawer-frame__footer":"_purpur-drawer-frame__footer_vjt35_55","purpur-drawer-frame__content-container":"_purpur-drawer-frame__content-container_vjt35_58","purpur-drawer-frame__content-container--no-footer":"_purpur-drawer-frame__content-container--no-footer_vjt35_63"},Nr={"purpur-drawer-handle":"_purpur-drawer-handle_lz3ca_1","purpur-drawer-handle--ai":"_purpur-drawer-handle--ai_lz3ca_22"},Dr=(e,a,s,n,d,c)=>({onPointerDown:t=>{e.current={y:t.clientY}},onPointerMove:t=>{if(!e.current)return;const i=t.clientY-e.current.y,h=!!a.current,m=Math.max(0,i),w=t.pointerType==="touch"?10:2,p={y:m},y={originalEvent:t,delta:p};h?(a.current=p,n(y)):B(p,0)?(a.current=p,s(),t.target.setPointerCapture(t.pointerId)):Math.abs(i)>w&&(e.current=null)},onPointerUp:t=>{const i=a.current,h=t.target;if(h.hasPointerCapture(t.pointerId)&&h.releasePointerCapture(t.pointerId),a.current=null,e.current=null,i){const m=t.currentTarget,w={originalEvent:t,delta:i};B(i,0)&&i.y>200?c(w):d(),m.addEventListener("click",p=>p.preventDefault(),{once:!0})}}}),B=(e,a=0)=>Math.abs(e.y)>a,Pr=O.c.bind(Nr),G="purpur-drawer-handle",Q=_.forwardRef(({["data-testid"]:e="purpur-drawer-handle",className:a,onSwipeStart:s,onSwipeMove:n,onSwipeCancel:d,onSwipeEnd:c,variant:o="default",...u},l)=>{const t=Pr([G,{[`${G}--ai`]:o==="ai"},a]),i=_.useRef(null),h=_.useRef(null),{onPointerDown:m,onPointerMove:w,onPointerUp:p}=Dr(h,i,s,n,d,c);return r.jsx("div",{className:t,"data-testid":e,onPointerDown:m,onPointerMove:w,onPointerUp:p,ref:l,...u})});Q.displayName="DrawerHandle";const zr={"purpur-drawer-header":"_purpur-drawer-header_1dlfk_1","purpur-drawer-header__row":"_purpur-drawer-header__row_1dlfk_4","purpur-drawer-header__row--with-back-button":"_purpur-drawer-header__row--with-back-button_1dlfk_7","purpur-drawer-header__left":"_purpur-drawer-header__left_1dlfk_10","purpur-drawer-header__right":"_purpur-drawer-header__right_1dlfk_13","purpur-drawer-header__close-button":"_purpur-drawer-header__close-button_1dlfk_16","purpur-drawer-header__back-button--only-icon":"_purpur-drawer-header__back-button--only-icon_1dlfk_27","purpur-drawer-header__title":"_purpur-drawer-header__title_1dlfk_30"},N=O.c.bind(zr),v="purpur-drawer-header",Z=_.forwardRef(({["data-testid"]:e="purpur-drawer-header",backButton:a,backButtonText:s,backButtonOnlyIcon:n,className:d,closeButtonAriaLabel:c,headerContent:o,onBackButtonClick:u,onCloseClick:l,title:t,variant:i="default",...h},m)=>{const w=N([v,{[`${v}--ai`]:i==="ai"},d]),p=!!(a&&s&&u),y=i==="ai",b=l?_.Fragment:$.Close;return r.jsxs("div",{className:w,"data-testid":e,ref:m,...h,children:[r.jsxs("div",{className:N([`${v}__row`,{[`${v}__row--with-back-button`]:p}]),"data-testid":`${e}-row`,children:[r.jsx("div",{className:N(`${v}__left`),children:p?r.jsxs(k.Button,{"aria-label":n?s:"",className:N([`${v}__back-button`,{[`${v}__back-button--only-icon`]:n}]),"data-testid":`${e}-back-button`,iconOnly:n,negative:y,onClick:u,size:"sm",variant:n?k.BUTTON_VARIANT.TERTIARY_PURPLE:k.BUTTON_VARIANT.TEXT,children:[r.jsx(lr.l,{size:"sm"}),!n&&s]}):o?r.jsxs(r.Fragment,{children:[o,r.jsx(X.VisuallyHidden,{asChild:!0,children:r.jsx($.Title,{children:t})})]}):r.jsx($.Title,{asChild:!0,children:r.jsx(M.Heading,{className:N(`${v}__title`),"data-testid":`${e}-title`,negative:y,tag:"h2",variant:M.DisplayVariant.DISPLAY10,tabIndex:-1,children:t})})}),r.jsx("div",{className:N(`${v}__right`),children:r.jsx(b,{...l?{}:{asChild:!0},children:r.jsx(k.Button,{"aria-label":c,className:N(`${v}__close-button`),iconOnly:!0,negative:y,onClick:l,size:"sm",variant:k.BUTTON_VARIANT.TERTIARY_PURPLE,children:r.jsx(pr.r,{size:"sm"})})})})]}),p&&(o?r.jsxs(r.Fragment,{children:[o,r.jsx(X.VisuallyHidden,{asChild:!0,children:r.jsx($.Title,{children:t})})]}):r.jsx($.Title,{asChild:!0,children:r.jsx(M.Heading,{"data-testid":`${e}-title-with-back-button`,className:N(`${v}__title`),negative:y,tag:"h2",tabIndex:-1,variant:M.DisplayVariant.DISPLAY10,children:t})}))]})});Z.displayName="DrawerHeader";const Sr={"purpur-drawer-scroll-area__root":"_purpur-drawer-scroll-area__root_vzgxi_1","purpur-drawer-scroll-area__root--fit-to-content":"_purpur-drawer-scroll-area__root--fit-to-content_vzgxi_4","purpur-drawer-scroll-area__viewport":"_purpur-drawer-scroll-area__viewport_vzgxi_10","purpur-drawer-scroll-area__scrollbar":"_purpur-drawer-scroll-area__scrollbar_vzgxi_14","purpur-drawer-scroll-area--ai":"_purpur-drawer-scroll-area--ai_vzgxi_25","purpur-drawer-scroll-area__thumb":"_purpur-drawer-scroll-area__thumb_vzgxi_29"},R=O.c.bind(Sr),P="purpur-drawer-scroll-area",F=_.forwardRef(({["data-testid"]:e="purpur-drawer-scroll-area",children:a,className:s,drawerVariant:n="default",fitToContent:d=!1,...c},o)=>{const u=R([P,{[`${P}--ai`]:n==="ai"},s]);return r.jsx("div",{className:u,"data-testid":e,ref:o,...c,children:r.jsxs(U.Root,{className:R(`${P}__root`,{[`${P}__root--fit-to-content`]:d}),children:[r.jsx(U.Viewport,{className:R(`${P}__viewport`),children:a}),r.jsx(U.Scrollbar,{className:R(`${P}__scrollbar`),orientation:"vertical",children:r.jsx(U.Thumb,{className:R(`${P}__thumb`)})})]})})});F.displayName="DrawerScrollArea";const z=O.c.bind(br),j="purpur-drawer-frame",rr=_.forwardRef(({["data-testid"]:e="purpur-drawer-frame",backButton:a,backButtonText:s,backButtonOnlyIcon:n,children:d,className:c,closeButtonAriaLabel:o,fitToContent:u=!1,footerContent:l,headerContent:t,onBackButtonClick:i,onCloseClick:h,onSwipeStart:m,onSwipeMove:w,onSwipeCancel:p,onSwipeEnd:y,title:b,stickyFooter:g,position:C="right",variant:f="default",...V},E)=>{const L=!!(a&&s&&i),Y=f==="ai",q=z([j,{[`${j}--fit-to-content`]:u,[`${j}--sticky-footer`]:g,[`${j}--left`]:C==="left",[`${j}--right`]:C==="right",[`${j}--without-back-button`]:!L,[`${j}--with-back-button`]:L,[`${j}--ai`]:Y},c]);return r.jsxs("div",{className:q,"data-testid":e,ref:E,...V,children:[r.jsx(Q,{onSwipeStart:m,onSwipeMove:w,onSwipeCancel:p,onSwipeEnd:y,variant:f}),r.jsx(A,{className:z(`${j}__header`),variant:"header",stickyFooter:g,drawerVariant:f,children:r.jsx(Z,{title:b,headerContent:t,backButtonOnlyIcon:n,backButton:a,backButtonText:s,closeButtonAriaLabel:o,onBackButtonClick:i,onCloseClick:h,variant:f})}),g?r.jsxs(r.Fragment,{children:[r.jsx(F,{className:z(`${j}__body`),"data-testid":`${e}-sticky-footer-scroll-area`,fitToContent:u,drawerVariant:f,children:r.jsx(A,{stickyFooter:!0,drawerVariant:f,children:d})}),l&&r.jsx(A,{className:z(`${j}__footer`),"data-testid":`${e}-sticky-footer`,variant:"footer",stickyFooter:g,drawerVariant:f,children:l})]}):r.jsx(F,{className:z(`${j}__body`),"data-testid":`${e}-scroll-area`,fitToContent:u,drawerVariant:f,children:r.jsxs("div",{className:z([`${j}__content-container`,{[`${j}__content-container--no-footer`]:!l}]),children:[r.jsx(A,{stickyFooter:g,drawerVariant:f,children:d}),l&&r.jsx(A,{"data-testid":`${e}-footer`,stickyFooter:g,variant:"footer",drawerVariant:f,children:l})]})})]})});rr.displayName="DrawerFrame";const Ar=(e,a)=>({onSwipeStart:()=>{e.current&&e.current.setAttribute("data-swipe","start")},onSwipeMove:o=>{if(!e.current)return;const{y:u}=o.delta;e.current.setAttribute("data-swipe","move"),e.current.style.setProperty("--purpur-drawer-swipe-move-y",`${u}px`)},onSwipeCancel:()=>{e.current&&(e.current.setAttribute("data-swipe","cancel"),e.current.style.removeProperty("--purpur-drawer-swipe-move-y"),e.current.style.removeProperty("--purpur-drawer-swipe-end-y"))},onSwipeEnd:o=>{if(!e.current)return;const{y:u}=o.delta;e.current.setAttribute("data-swipe","end"),e.current.style.removeProperty("--purpur-drawer-swipe-move-y"),e.current.style.setProperty("--purpur-drawer-swipe-end-y",`${u}px`),a?.(!1)}}),S=O.c.bind(vr),D="purpur-drawer-content",er=_.forwardRef(({["data-testid"]:e="purpur-drawer-content",backButton:a=!1,backButtonText:s,backButtonOnlyIcon:n=!1,bodyText:d,children:c,className:o,closeButtonAriaLabel:u,disableCloseOnClickOutside:l=!1,fitToContent:t=!1,footerContent:i,headerContent:h,onBackButtonClick:m,onCloseClick:w,stickyFooter:p=!1,title:y,zIndex:b,position:g="right",...C},f)=>{const V=_.useContext(J),E=V?.variant??"default",L=V?.isModal??!0,Y=S([D,{[`${D}--fit-to-content`]:t,[`${D}--left`]:g==="left",[`${D}--right`]:g==="right",[`${D}--ai`]:E==="ai"},o]),q=_.useRef(null),I=_.useRef(null),ar=x=>{I.current=x,typeof f=="function"?f(x):f&&(f.current=x)},{onSwipeStart:nr,onSwipeMove:sr,onSwipeCancel:or,onSwipeEnd:ur}=Ar(I,V?.onOpenChange??null),dr=x=>{if(l){x.preventDefault();return}w&&(x.preventDefault(),w())},ir=x=>{w&&(x.preventDefault(),w())},cr=()=>{const x=q.current;if(x){const W=x.querySelector("h2");W&&setTimeout(()=>{W.focus()})}},K=r.jsx($.Content,{onPointerDownOutside:dr,onEscapeKeyDown:ir,onOpenAutoFocus:cr,className:Y,"data-testid":e,ref:ar,...!d&&{"aria-describedby":void 0},...C,children:r.jsx(rr,{backButton:a,backButtonText:s,backButtonOnlyIcon:n,closeButtonAriaLabel:u,className:S(`${D}__drawer-frame`),fitToContent:t,footerContent:i,headerContent:h,ref:q,onBackButtonClick:m,onCloseClick:w,onSwipeStart:nr,onSwipeMove:sr,onSwipeCancel:or,onSwipeEnd:ur,stickyFooter:p,title:y,position:g,variant:E,children:d?r.jsxs("div",{className:S(`${D}__content-container`),children:[r.jsx($.Description,{className:S(`${D}__description`),"data-testid":`${e}-description`,children:d}),r.jsx("div",{children:c})]}):c})});return L?r.jsx($.Portal,{children:r.jsx($.Overlay,{className:S("purpur-drawer-overlay"),style:b?{zIndex:b}:void 0,"data-testid":`${e}-overlay`,children:K})}):r.jsx($.Portal,{children:r.jsx("div",{className:S("purpur-drawer-overlay"),style:b?{zIndex:b}:void 0,"data-testid":`${e}-overlay`,children:K})})});er.displayName="DrawerContent";const tr=_.forwardRef(({["data-testid"]:e="purpur-drawer-trigger",children:a,...s},n)=>r.jsx($.Trigger,{asChild:!0,"data-testid":e,ref:n,...s,children:a}));tr.displayName="DrawerTrigger";const T=({["data-testid"]:e="purpur-drawer",children:a,className:s,isModal:n=!0,onOpenChange:d,open:c=!1,variant:o="default",...u})=>{const[l,t]=_.useState(c),i=m=>{t(m),d?.(m)};_.useEffect(()=>{t(c)},[c]);const h={isModal:n,onOpenChange:i,variant:o};return r.jsx(J.Provider,{value:h,children:r.jsx("div",{className:s,"data-testid":e,...u,children:r.jsx($.Root,{open:l,onOpenChange:i,modal:n,children:a})})})};T.Trigger=tr;T.Content=er;T.displayName="Drawer";exports.Drawer=T;
|
|
2
|
-
//# sourceMappingURL=drawer-BLHgcEqb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-BLHgcEqb.js","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 * 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 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 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\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>\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>\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","disableCloseOnClickOutside","zIndex","drawerContext","useContext","isModal","drawerFrameRef","useRef","internalDrawerContentRef","setRef","node","handlePointerDownOutside","handleEscapeKeyDown","handleInitialFocus","frame","heading","dialogContent","RadixDialog.Content","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/modal-Baisuc6m.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("react/jsx-runtime"),c=require("./index-2cFVyGXq.js"),s=require("react"),F=require("./button-DmybVApa.js"),L=require("./heading-drD5ugCC.js"),U=require("./close.es-VL3lKi1O.js"),V=require("./paragraph-By4jMjnH.js"),K=require("./visually-hidden-C2CKovZx.js"),k=require("./bind-DeUYJ6m9.js"),G="_fadeIn_1nrj3_1",J="_fadeOut_1nrj3_1",Q="_slideUp_1nrj3_1",X="_slideDown_1nrj3_1",Y={"purpur-modal-content":"_purpur-modal-content_1nrj3_1",fadeIn:G,fadeOut:J,slideUp:Q,slideDown:X,"purpur-modal-content__overlay":"_purpur-modal-content__overlay_1nrj3_49","purpur-modal-content__close-button":"_purpur-modal-content__close-button_1nrj3_65","purpur-modal-content__wrapper":"_purpur-modal-content__wrapper_1nrj3_75","purpur-modal-content__wrapper-inner":"_purpur-modal-content__wrapper-inner_1nrj3_85","purpur-modal-content__image-wrapper":"_purpur-modal-content__image-wrapper_1nrj3_89","purpur-modal-content__header":"_purpur-modal-content__header_1nrj3_112","purpur-modal-content__title":"_purpur-modal-content__title_1nrj3_125","purpur-modal-content__heading":"_purpur-modal-content__heading_1nrj3_128","purpur-modal-content__description":"_purpur-modal-content__description_1nrj3_131","purpur-modal-content__body":"_purpur-modal-content__body_1nrj3_134","purpur-modal-content__body-inner":"_purpur-modal-content__body-inner_1nrj3_142","purpur-modal-content__actions-buttons":"_purpur-modal-content__actions-buttons_1nrj3_154","purpur-modal-content__notification":"_purpur-modal-content__notification_1nrj3_172","purpur-modal-content--with-image":"_purpur-modal-content--with-image_1nrj3_175","purpur-modal-content--overflow":"_purpur-modal-content--overflow_1nrj3_175","purpur-modal-content__actions":"_purpur-modal-content__actions_1nrj3_154","purpur-modal-content__actions-separator":"_purpur-modal-content__actions-separator_1nrj3_206","purpur-modal-content--sticky-footer":"_purpur-modal-content--sticky-footer_1nrj3_216"},N=n=>n.showCloseButton===!0,r=k.c.bind(Y),t="purpur-modal-content",Z=s.forwardRef(({["data-testid"]:n,actions:o,children:a,className:u,description:i,disableCloseOnClickOutside:y,hideDescription:b,image:p,stickyButtons:v=!0,title:q,notification:x=void 0,zIndex:$,onCloseAutoFocus:D,...g},O)=>{const{closeButtonAriaLabel:h,showCloseButton:E,...H}=g,[I,M]=s.useState(!1),[P,S]=s.useState(0),m=s.useRef(null),j=s.useRef(null),B=r(t,{[`${t}--with-image`]:!!p},{[`${t}--overflow`]:I},{[`${t}--sticky-footer`]:v},u),d=l=>n?`${n} ${l}`:void 0,T=l=>{y&&l.preventDefault()},_=s.useCallback(()=>{if(!m.current||!j.current)return;const l=window.getComputedStyle(m.current,null),f=parseFloat(l.getPropertyValue("height")),A=j.current.offsetHeight;M(f<A),S((m.current.offsetWidth??0)-(m.current.clientWidth??0))},[]),W=()=>{const l=j.current;if(l){const f=l.querySelector("h2");f&&setTimeout(()=>{f.focus()})}},z=l=>{y&&!E&&l.preventDefault()};return s.useEffect(()=>(window.addEventListener("resize",_),()=>{window.removeEventListener("resize",_)}),[_]),s.useEffect(()=>{_()},[x,a,_]),e.jsxs(c.Portal,{children:[e.jsx(c.Overlay,{className:r(`${t}__overlay`),style:{zIndex:$}}),e.jsxs(c.Content,{...H,className:B,"data-testid":n,ref:O,...!i&&{"aria-describedby":void 0},onPointerDownOutside:T,onOpenAutoFocus:()=>{_(),W()},onEscapeKeyDown:z,onCloseAutoFocus:D,style:{zIndex:`calc(${$} + 1)`},children:[e.jsxs("div",{ref:m,className:r(`${t}__wrapper`),children:[N(g)&&h&&p&&e.jsx(C,{"aria-label":h,hasImage:!0,scrollbarWidth:P,"data-testid":d("close-button")}),e.jsxs("div",{ref:j,className:r(`${t}__wrapper-inner`),children:[e.jsxs("div",{className:r(`${t}__header`),children:[N(g)&&h&&!p&&e.jsx(C,{"aria-label":h,"data-testid":d("close-button")}),e.jsx(c.Title,{asChild:!0,className:r(`${t}__title`),"data-testid":d("title"),children:e.jsx(L.Heading,{tag:"h2",variant:"display-10",tabIndex:-1,className:r(`${t}__heading`),children:q})})]}),p&&e.jsx("div",{className:r(`${t}__image-wrapper`),"data-testid":d("image"),children:p}),e.jsx("div",{className:r(`${t}__body`),children:e.jsxs("div",{className:r(`${t}__body-inner`),children:[i&&b&&e.jsx(K.VisuallyHidden,{asChild:!0,children:e.jsx(c.Description,{"data-testid":d("description"),children:i})}),i&&!b&&e.jsx(c.Description,{asChild:!0,className:r(`${t}__description`),"data-testid":d("description"),children:e.jsx(V.Paragraph,{variant:"paragraph-100",children:i})}),e.jsx("div",{children:a}),!v&&e.jsx(R,{actions:o,notification:x})]})})]})]}),v&&e.jsx(R,{actions:o,notification:x})]})]})}),C=({["aria-label"]:n,hasImage:o,scrollbarWidth:a,["data-testid"]:u})=>e.jsx(c.Close,{asChild:!0,children:e.jsx(F.Button,{variant:o?"primary":"tertiary-purple",negative:o,size:"sm",iconOnly:!0,"aria-label":n,className:r(`${t}__close-button`),style:{right:`calc(var(--purpur-spacing-100) + ${a||0}px)`},"data-testid":u,children:e.jsx(U.r,{})})}),R=({actions:n,notification:o})=>{const a=s.useRef(null);return s.useEffect(()=>{o&&a?.current?.scrollIntoView?.(!1)},[o]),n?e.jsxs("div",{className:r(`${t}__actions`),children:[e.jsx("div",{className:r(`${t}__actions-buttons`),"data-testid":"modal actions",children:n}),o&&e.jsx("div",{className:r(`${t}__notification`),ref:a,children:o}),e.jsx("span",{className:r(`${t}__actions-separator`)})]}):null},ee=s.forwardRef(({children:n,...o},a)=>e.jsx(c.Trigger,{asChild:!0,ref:a,...o,children:n})),w=({["data-testid"]:n,children:o,open:a,onOpenChange:u})=>e.jsx(c.Root,{open:a,onOpenChange:u,"data-testid":n,children:o});w.Trigger=ee;w.Content=Z;w.displayName="Modal";exports.Modal=w;
|
|
2
|
-
//# sourceMappingURL=modal-Baisuc6m.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modal-Baisuc6m.js","sources":["../../../components/modal/src/modal-content.tsx","../../../components/modal/src/modal-trigger.tsx","../../../components/modal/src/modal.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport {\n Close as RadixClose,\n Content as RadixContent,\n Description as RadixDescription,\n Overlay as RadixOverlay,\n Portal as RadixPortal,\n Title as RadixTitle,\n} from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport \"@purpur/notification/styles\";\nimport styles from \"./modal-content.module.scss\";\n\nexport type DefaultProps = Omit<BaseProps, \"children\"> & {\n /**\n * One or several CTA links or buttons\n * */\n actions?: ReactNode;\n children: ReactNode;\n /**\n * An optional accessible description to be announced when the dialog is opened.\n * */\n description?: string;\n /**\n * Prevents the modal from closing on click outside if set to `true`.\n * */\n disableCloseOnClickOutside?: boolean;\n /**\n * Visually hides the description if set to `true`.\n * */\n hideDescription?: boolean;\n /**\n * An optional image to be displayed at the top of the modal.\n * */\n image?: ReactNode;\n /**\n * Provide a Purpur Notification which will render beneath the modal buttons, otherwise leave it undefined.\n * */\n notification?: ReactNode;\n /**\n * Determines whether the button group should be fixed at the bottom or scroll with the content.\n * */\n stickyButtons?: boolean;\n /**\n * An accessible title to be announced when the dialog is opened.\n * */\n title: string;\n /**\n * z-index of the modal\n * */\n zIndex?: number;\n /**\n * Event handler called when focus moves to the trigger after closing.\n * */\n onCloseAutoFocus?: (e: Event) => void;\n};\n\ntype NoCloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel?: never;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton?: false;\n};\n\ntype CloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel: string;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton: true;\n};\n\nexport type ModalContentProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst hasCloseButtonProps = (\n props: CloseButtonProps | NoCloseButtonProps\n): props is CloseButtonProps => (props as CloseButtonProps).showCloseButton === true;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-modal-content\";\n\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n actions,\n children,\n className,\n description,\n disableCloseOnClickOutside,\n hideDescription,\n image,\n stickyButtons = true,\n title,\n notification = undefined,\n zIndex,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const { closeButtonAriaLabel, showCloseButton, ...rest } = props;\n const [contentOverflow, setContentOverflow] = useState(false);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperInnerRef = useRef<HTMLDivElement>(null);\n\n const classes = cx(\n rootClassName,\n { [`${rootClassName}--with-image`]: !!image },\n { [`${rootClassName}--overflow`]: contentOverflow },\n { [`${rootClassName}--sticky-footer`]: stickyButtons },\n className\n );\n\n const getTestId = (id: string) => (dataTestId ? `${dataTestId} ${id}` : undefined);\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n }\n };\n\n const handleContentOverflow = useCallback(() => {\n if (!wrapperRef.current || !wrapperInnerRef.current) {\n return;\n }\n\n const computedStyle = window.getComputedStyle(wrapperRef.current, null);\n const wrapperHeight = parseFloat(computedStyle.getPropertyValue(\"height\"));\n const innerHeight = wrapperInnerRef.current.offsetHeight;\n\n setContentOverflow(wrapperHeight < innerHeight);\n\n setScrollbarWidth(\n (wrapperRef.current.offsetWidth ?? 0) - (wrapperRef.current.clientWidth ?? 0)\n );\n }, []);\n\n const handleInitialFocus = () => {\n const frame = wrapperInnerRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (disableCloseOnClickOutside && !showCloseButton) {\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleContentOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", handleContentOverflow);\n };\n }, [handleContentOverflow]);\n\n useEffect(() => {\n handleContentOverflow();\n }, [notification, children, handleContentOverflow]);\n\n return (\n <RadixPortal>\n <RadixOverlay className={cx(`${rootClassName}__overlay`)} style={{ zIndex }} />\n <RadixContent\n {...rest}\n className={classes}\n data-testid={dataTestId}\n ref={ref}\n {...(!description && { [\"aria-describedby\"]: undefined })}\n onPointerDownOutside={handlePointerDownOutside}\n onOpenAutoFocus={() => {\n handleContentOverflow();\n handleInitialFocus();\n }}\n onEscapeKeyDown={handleEscapeKeyDown}\n onCloseAutoFocus={onCloseAutoFocus}\n style={{ zIndex: `calc(${zIndex} + 1)` }}\n >\n <div ref={wrapperRef} className={cx(`${rootClassName}__wrapper`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n hasImage\n scrollbarWidth={scrollbarWidth}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <div ref={wrapperInnerRef} className={cx(`${rootClassName}__wrapper-inner`)}>\n <div className={cx(`${rootClassName}__header`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && !image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <RadixTitle\n asChild\n className={cx(`${rootClassName}__title`)}\n data-testid={getTestId(\"title\")}\n >\n <Heading\n tag=\"h2\"\n variant=\"display-10\"\n tabIndex={-1}\n className={cx(`${rootClassName}__heading`)}\n >\n {title}\n </Heading>\n </RadixTitle>\n </div>\n {image && (\n <div\n className={cx(`${rootClassName}__image-wrapper`)}\n data-testid={getTestId(\"image\")}\n >\n {image}\n </div>\n )}\n <div className={cx(`${rootClassName}__body`)}>\n <div className={cx(`${rootClassName}__body-inner`)}>\n {description && hideDescription && (\n <VisuallyHidden asChild>\n <RadixDescription data-testid={getTestId(\"description\")}>\n {description}\n </RadixDescription>\n </VisuallyHidden>\n )}\n {description && !hideDescription && (\n <RadixDescription\n asChild\n className={cx(`${rootClassName}__description`)}\n data-testid={getTestId(\"description\")}\n >\n <Paragraph variant=\"paragraph-100\">{description}</Paragraph>\n </RadixDescription>\n )}\n <div>{children}</div>\n {!stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </div>\n </div>\n </div>\n </div>\n\n {stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </RadixContent>\n </RadixPortal>\n );\n }\n);\n\nconst CloseButton = ({\n [\"aria-label\"]: ariaLabel,\n hasImage,\n scrollbarWidth,\n [\"data-testid\"]: dataTestId,\n}: {\n [\"aria-label\"]: string;\n hasImage?: boolean;\n scrollbarWidth?: number;\n [\"data-testid\"]?: string;\n}) => (\n <RadixClose asChild>\n <Button\n variant={hasImage ? \"primary\" : \"tertiary-purple\"}\n negative={hasImage}\n size=\"sm\"\n iconOnly\n aria-label={ariaLabel}\n className={cx(`${rootClassName}__close-button`)}\n style={{ right: `calc(var(--purpur-spacing-100) + ${scrollbarWidth || 0}px)` }}\n data-testid={dataTestId}\n >\n <IconClose />\n </Button>\n </RadixClose>\n);\n\nexport const MAX_NUMBER_OF_ACTIONS = 3;\n\nexport const ModalActions = ({\n actions,\n notification,\n}: Pick<ModalContentProps, \"actions\" | \"notification\">) => {\n const notificationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (notification) {\n notificationRef?.current?.scrollIntoView?.(false);\n }\n }, [notification]);\n\n return actions ? (\n <div className={cx(`${rootClassName}__actions`)}>\n <div className={cx(`${rootClassName}__actions-buttons`)} data-testid=\"modal actions\">\n {actions}\n </div>\n {notification && (\n <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>\n {notification}\n </div>\n )}\n <span className={cx(`${rootClassName}__actions-separator`)} />\n </div>\n ) : null;\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Trigger as RadixTrigger } from \"@radix-ui/react-dialog\";\n\nexport type ModalTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(\n ({ children, ...props }, ref) => {\n return (\n <RadixTrigger asChild ref={ref} {...props}>\n {children}\n </RadixTrigger>\n );\n }\n);\n","import React, { type ReactNode } from \"react\";\nimport { Root as RadixRoot } from \"@radix-ui/react-dialog\";\n\nimport { ModalContent } from \"./modal-content\";\nimport { ModalTrigger } from \"./modal-trigger\";\n\nexport type ModalProps = {\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * Event handler called when the open state of the dialog changes.\n * */\n onOpenChange?: (value: boolean) => void;\n /**\n * The controlled open state of the dialog. Must be used in conjunction with `onOpenChange`.\n * */\n open?: boolean;\n};\n\nexport const Modal = ({\n [\"data-testid\"]: dataTestId,\n children,\n open,\n onOpenChange,\n}: ModalProps) => (\n <RadixRoot open={open} onOpenChange={onOpenChange} data-testid={dataTestId}>\n {children}\n </RadixRoot>\n);\n\nModal.Trigger = ModalTrigger;\nModal.Content = ModalContent;\n\nModal.displayName = \"Modal\";\n"],"names":["hasCloseButtonProps","props","cx","c","styles","rootClassName","ModalContent","forwardRef","dataTestId","actions","children","className","description","disableCloseOnClickOutside","hideDescription","image","stickyButtons","title","notification","zIndex","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","RadixPortal","jsx","RadixOverlay","jsxs","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modal-fp37VbrH.mjs","sources":["../../../components/modal/src/modal-content.tsx","../../../components/modal/src/modal-trigger.tsx","../../../components/modal/src/modal.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Heading } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { VisuallyHidden } from \"@purpur/visually-hidden\";\nimport {\n Close as RadixClose,\n Content as RadixContent,\n Description as RadixDescription,\n Overlay as RadixOverlay,\n Portal as RadixPortal,\n Title as RadixTitle,\n} from \"@radix-ui/react-dialog\";\nimport c from \"classnames/bind\";\n\nimport \"@purpur/notification/styles\";\nimport styles from \"./modal-content.module.scss\";\n\nexport type DefaultProps = Omit<BaseProps, \"children\"> & {\n /**\n * One or several CTA links or buttons\n * */\n actions?: ReactNode;\n children: ReactNode;\n /**\n * An optional accessible description to be announced when the dialog is opened.\n * */\n description?: string;\n /**\n * Prevents the modal from closing on click outside if set to `true`.\n * */\n disableCloseOnClickOutside?: boolean;\n /**\n * Visually hides the description if set to `true`.\n * */\n hideDescription?: boolean;\n /**\n * An optional image to be displayed at the top of the modal.\n * */\n image?: ReactNode;\n /**\n * Provide a Purpur Notification which will render beneath the modal buttons, otherwise leave it undefined.\n * */\n notification?: ReactNode;\n /**\n * Determines whether the button group should be fixed at the bottom or scroll with the content.\n * */\n stickyButtons?: boolean;\n /**\n * An accessible title to be announced when the dialog is opened.\n * */\n title: string;\n /**\n * z-index of the modal\n * */\n zIndex?: number;\n /**\n * Event handler called when focus moves to the trigger after closing.\n * */\n onCloseAutoFocus?: (e: Event) => void;\n};\n\ntype NoCloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel?: never;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton?: false;\n};\n\ntype CloseButtonProps = {\n /**\n * An accessible label for the close button.\n * */\n closeButtonAriaLabel: string;\n /**\n * Shows the close button if set to `true`. Must be used in conjunction with `closeButtonAriaLabel`.\n * */\n showCloseButton: true;\n};\n\nexport type ModalContentProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst hasCloseButtonProps = (\n props: CloseButtonProps | NoCloseButtonProps\n): props is CloseButtonProps => (props as CloseButtonProps).showCloseButton === true;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-modal-content\";\n\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n actions,\n children,\n className,\n description,\n disableCloseOnClickOutside,\n hideDescription,\n image,\n stickyButtons = true,\n title,\n notification = undefined,\n zIndex,\n onCloseAutoFocus,\n ...props\n },\n ref\n ) => {\n const { closeButtonAriaLabel, showCloseButton, ...rest } = props;\n const [contentOverflow, setContentOverflow] = useState(false);\n const [scrollbarWidth, setScrollbarWidth] = useState(0);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const wrapperInnerRef = useRef<HTMLDivElement>(null);\n\n const classes = cx(\n rootClassName,\n { [`${rootClassName}--with-image`]: !!image },\n { [`${rootClassName}--overflow`]: contentOverflow },\n { [`${rootClassName}--sticky-footer`]: stickyButtons },\n className\n );\n\n const getTestId = (id: string) => (dataTestId ? `${dataTestId} ${id}` : undefined);\n\n const handlePointerDownOutside = (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n if (disableCloseOnClickOutside) {\n event.preventDefault();\n }\n };\n\n const handleContentOverflow = useCallback(() => {\n if (!wrapperRef.current || !wrapperInnerRef.current) {\n return;\n }\n\n const computedStyle = window.getComputedStyle(wrapperRef.current, null);\n const wrapperHeight = parseFloat(computedStyle.getPropertyValue(\"height\"));\n const innerHeight = wrapperInnerRef.current.offsetHeight;\n\n setContentOverflow(wrapperHeight < innerHeight);\n\n setScrollbarWidth(\n (wrapperRef.current.offsetWidth ?? 0) - (wrapperRef.current.clientWidth ?? 0)\n );\n }, []);\n\n const handleInitialFocus = () => {\n const frame = wrapperInnerRef.current;\n if (frame) {\n const heading = frame.querySelector(\"h2\");\n\n heading &&\n setTimeout(() => {\n heading.focus();\n });\n }\n };\n\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n if (disableCloseOnClickOutside && !showCloseButton) {\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleContentOverflow);\n\n return () => {\n window.removeEventListener(\"resize\", handleContentOverflow);\n };\n }, [handleContentOverflow]);\n\n useEffect(() => {\n handleContentOverflow();\n }, [notification, children, handleContentOverflow]);\n\n return (\n <RadixPortal>\n <RadixOverlay className={cx(`${rootClassName}__overlay`)} style={{ zIndex }} />\n <RadixContent\n {...rest}\n className={classes}\n data-testid={dataTestId}\n ref={ref}\n {...(!description && { [\"aria-describedby\"]: undefined })}\n onPointerDownOutside={handlePointerDownOutside}\n onOpenAutoFocus={() => {\n handleContentOverflow();\n handleInitialFocus();\n }}\n onEscapeKeyDown={handleEscapeKeyDown}\n onCloseAutoFocus={onCloseAutoFocus}\n style={{ zIndex: `calc(${zIndex} + 1)` }}\n >\n <div ref={wrapperRef} className={cx(`${rootClassName}__wrapper`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n hasImage\n scrollbarWidth={scrollbarWidth}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <div ref={wrapperInnerRef} className={cx(`${rootClassName}__wrapper-inner`)}>\n <div className={cx(`${rootClassName}__header`)}>\n {hasCloseButtonProps(props) && closeButtonAriaLabel && !image && (\n <CloseButton\n aria-label={closeButtonAriaLabel}\n data-testid={getTestId(\"close-button\")}\n />\n )}\n <RadixTitle\n asChild\n className={cx(`${rootClassName}__title`)}\n data-testid={getTestId(\"title\")}\n >\n <Heading\n tag=\"h2\"\n variant=\"display-10\"\n tabIndex={-1}\n className={cx(`${rootClassName}__heading`)}\n >\n {title}\n </Heading>\n </RadixTitle>\n </div>\n {image && (\n <div\n className={cx(`${rootClassName}__image-wrapper`)}\n data-testid={getTestId(\"image\")}\n >\n {image}\n </div>\n )}\n <div className={cx(`${rootClassName}__body`)}>\n <div className={cx(`${rootClassName}__body-inner`)}>\n {description && hideDescription && (\n <VisuallyHidden asChild>\n <RadixDescription data-testid={getTestId(\"description\")}>\n {description}\n </RadixDescription>\n </VisuallyHidden>\n )}\n {description && !hideDescription && (\n <RadixDescription\n asChild\n className={cx(`${rootClassName}__description`)}\n data-testid={getTestId(\"description\")}\n >\n <Paragraph variant=\"paragraph-100\">{description}</Paragraph>\n </RadixDescription>\n )}\n <div>{children}</div>\n {!stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </div>\n </div>\n </div>\n </div>\n\n {stickyButtons && <ModalActions actions={actions} notification={notification} />}\n </RadixContent>\n </RadixPortal>\n );\n }\n);\n\nconst CloseButton = ({\n [\"aria-label\"]: ariaLabel,\n hasImage,\n scrollbarWidth,\n [\"data-testid\"]: dataTestId,\n}: {\n [\"aria-label\"]: string;\n hasImage?: boolean;\n scrollbarWidth?: number;\n [\"data-testid\"]?: string;\n}) => (\n <RadixClose asChild>\n <Button\n variant={hasImage ? \"primary\" : \"tertiary-purple\"}\n negative={hasImage}\n size=\"sm\"\n iconOnly\n aria-label={ariaLabel}\n className={cx(`${rootClassName}__close-button`)}\n style={{ right: `calc(var(--purpur-spacing-100) + ${scrollbarWidth || 0}px)` }}\n data-testid={dataTestId}\n >\n <IconClose />\n </Button>\n </RadixClose>\n);\n\nexport const MAX_NUMBER_OF_ACTIONS = 3;\n\nexport const ModalActions = ({\n actions,\n notification,\n}: Pick<ModalContentProps, \"actions\" | \"notification\">) => {\n const notificationRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (notification) {\n notificationRef?.current?.scrollIntoView?.(false);\n }\n }, [notification]);\n\n return actions ? (\n <div className={cx(`${rootClassName}__actions`)}>\n <div className={cx(`${rootClassName}__actions-buttons`)} data-testid=\"modal actions\">\n {actions}\n </div>\n {notification && (\n <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>\n {notification}\n </div>\n )}\n <span className={cx(`${rootClassName}__actions-separator`)} />\n </div>\n ) : null;\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Trigger as RadixTrigger } from \"@radix-ui/react-dialog\";\n\nexport type ModalTriggerProps = Omit<BaseProps<\"button\">, \"children\"> & {\n children: ReactNode;\n};\n\nexport const ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(\n ({ children, ...props }, ref) => {\n return (\n <RadixTrigger asChild ref={ref} {...props}>\n {children}\n </RadixTrigger>\n );\n }\n);\n","import React, { type ReactNode } from \"react\";\nimport { Root as RadixRoot } from \"@radix-ui/react-dialog\";\n\nimport { ModalContent } from \"./modal-content\";\nimport { ModalTrigger } from \"./modal-trigger\";\n\nexport type ModalProps = {\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * Event handler called when the open state of the dialog changes.\n * */\n onOpenChange?: (value: boolean) => void;\n /**\n * The controlled open state of the dialog. Must be used in conjunction with `onOpenChange`.\n * */\n open?: boolean;\n};\n\nexport const Modal = ({\n [\"data-testid\"]: dataTestId,\n children,\n open,\n onOpenChange,\n}: ModalProps) => (\n <RadixRoot open={open} onOpenChange={onOpenChange} data-testid={dataTestId}>\n {children}\n </RadixRoot>\n);\n\nModal.Trigger = ModalTrigger;\nModal.Content = ModalContent;\n\nModal.displayName = \"Modal\";\n"],"names":["hasCloseButtonProps","props","cx","c","styles","rootClassName","ModalContent","forwardRef","dataTestId","actions","children","className","description","disableCloseOnClickOutside","hideDescription","image","stickyButtons","title","notification","zIndex","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","RadixPortal","jsx","RadixOverlay","jsxs","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"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"}
|
package/dist/popover-B0XJZ5mj.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const a=require("react/jsx-runtime"),X=require("./button-DmybVApa.js"),l=require("react"),dt=require("./variables-Buqm4JZc.js"),y=require("./index-DlMXYAr3.js"),U=require("./index-_XxjJPRD.js"),$=require("./index-kcwFA4Dv.js"),M=require("./index-DA01QPpC.js"),ft=require("./index-BtWPC8xc.js"),R=require("./floating-ui.react-dom-Cc_YSprQ.js"),ht=require("./index-DOFLOnao.js"),we=require("./index-CleLBinl.js"),gt=require("./close.es-VL3lKi1O.js"),xe=require("./paragraph-By4jMjnH.js"),H=require("./bind-DeUYJ6m9.js"),vt=require("./heading-drD5ugCC.js");function _t(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const g=_t(l),te=l.createContext(null),re=()=>{const e=l.useContext(te);if(!e)throw new Error("usePopoverFlow must be used within a PopoverFlow provider");return e},B=()=>l.useContext(te),mt=({children:e,initialStep:t=1,onComplete:r,onDismiss:o,separatorText:n,stepText:s,backLabel:i,nextLabel:c,finishLabel:p,openDelay:u=0})=>{const[v,d]=l.useState(t),[h,m]=l.useState(new Set),x=l.useCallback(w=>{m(C=>{const S=new Set(C);return S.add(w),S})},[]),f=l.useCallback(w=>{m(C=>{const S=new Set(C);return S.delete(w),S})},[]),O=l.useCallback(()=>{d(w=>{const C=w+1;return C>h.size?(r?.(),w):C})},[h.size,r]),j=l.useCallback(()=>{d(w=>Math.max(1,w-1))},[]),N=l.useCallback(()=>{d(0),o?.()},[o]),E=l.useMemo(()=>({currentStep:v,totalSteps:h.size,next:O,back:j,dismiss:N,registerStep:x,unregisterStep:f,separatorText:n,stepText:s,backLabel:i,nextLabel:c,finishLabel:p,openDelay:u}),[v,h.size,O,j,N,x,f,n,s,i,c,p,u]);return a.jsx(te.Provider,{value:E,children:e})},oe=l.createContext(null),K=()=>l.useContext(oe),Pe=l.createContext({negative:!1}),ne=()=>l.useContext(Pe),wt=150,_e={MAX_MD:`(max-width: ${dt.purpurBreakpointMd})`},se=()=>{const e=window.matchMedia(_e.MAX_MD);function t(){o(e.matches)}const[r,o]=l.useState(()=>typeof window>"u"?!1:window.matchMedia(_e.MAX_MD).matches),n=l.useCallback(()=>{let s;return()=>{clearTimeout(s),s=setTimeout(()=>t(),wt)}},[t]);return l.useEffect(()=>{if(!(typeof window>"u"))return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[n]),{isMdOrSmaller:r}},ie=({children:e,onClick:t})=>{const{back:r}=re(),{negative:o}=ne(),{isMdOrSmaller:n}=se(),s=!o,i=()=>{t?.(),r()};return a.jsx(X.Button,{size:"sm",variant:"secondary",onClick:i,negative:s,fullWidth:n,children:e})};ie.displayName="PopoverBack";var xt="Arrow",Ce=g.forwardRef((e,t)=>{const{children:r,width:o=10,height:n=5,...s}=e;return a.jsx(y.Primitive.svg,{...s,ref:t,width:o,height:n,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?r:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});Ce.displayName=xt;var Pt=Ce,ae="Popper",[Se,ye]=$.createContextScope(ae),[Ct,je]=Se(ae),Oe=e=>{const{__scopePopper:t,children:r}=e,[o,n]=g.useState(null);return a.jsx(Ct,{scope:t,anchor:o,onAnchorChange:n,children:r})};Oe.displayName=ae;var Re="PopperAnchor",be=g.forwardRef((e,t)=>{const{__scopePopper:r,virtualRef:o,...n}=e,s=je(Re,r),i=g.useRef(null),c=U.useComposedRefs(t,i),p=g.useRef(null);return g.useEffect(()=>{const u=p.current;p.current=o?.current||i.current,u!==p.current&&s.onAnchorChange(p.current)}),o?null:a.jsx(y.Primitive.div,{...n,ref:c})});be.displayName=Re;var ce="PopperContent",[St,yt]=Se(ce),Ae=g.forwardRef((e,t)=>{const{__scopePopper:r,side:o="bottom",sideOffset:n=0,align:s="center",alignOffset:i=0,arrowPadding:c=0,avoidCollisions:p=!0,collisionBoundary:u=[],collisionPadding:v=0,sticky:d="partial",hideWhenDetached:h=!1,updatePositionStrategy:m="optimized",onPlaced:x,...f}=e,O=je(ce,r),[j,N]=g.useState(null),E=U.useComposedRefs(t,I=>N(I)),[w,C]=g.useState(null),S=ht.useSize(w),V=S?.width??0,W=S?.height??0,Z=o+(s!=="center"?"-"+s:""),Q=typeof v=="number"?v:{top:0,right:0,bottom:0,left:0,...v},_=Array.isArray(u)?u:[u],P=_.length>0,k={padding:Q,boundary:_.filter(Ot),altBoundary:P},{refs:et,floatingStyles:fe,placement:tt,isPositioned:L,middlewareData:F}=R.useFloating({strategy:"fixed",placement:Z,whileElementsMounted:(...I)=>R.autoUpdate(...I,{animationFrame:m==="always"}),elements:{reference:O.anchor},middleware:[R.offset({mainAxis:n+W,alignmentAxis:i}),p&&R.shift({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?R.limitShift():void 0,...k}),p&&R.flip({...k}),R.size({...k,apply:({elements:I,rects:ve,availableWidth:ct,availableHeight:pt})=>{const{width:lt,height:ut}=ve.reference,Y=I.floating.style;Y.setProperty("--radix-popper-available-width",`${ct}px`),Y.setProperty("--radix-popper-available-height",`${pt}px`),Y.setProperty("--radix-popper-anchor-width",`${lt}px`),Y.setProperty("--radix-popper-anchor-height",`${ut}px`)}}),w&&R.arrow({element:w,padding:c}),Rt({arrowWidth:V,arrowHeight:W}),h&&R.hide({strategy:"referenceHidden",...k})]}),[he,rt]=ke(tt),ge=$.useCallbackRef(x);$.useLayoutEffect2(()=>{L&&ge?.()},[L,ge]);const ot=F.arrow?.x,nt=F.arrow?.y,st=F.arrow?.centerOffset!==0,[it,at]=g.useState();return $.useLayoutEffect2(()=>{j&&at(window.getComputedStyle(j).zIndex)},[j]),a.jsx("div",{ref:et.setFloating,"data-radix-popper-content-wrapper":"",style:{...fe,transform:L?fe.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:it,"--radix-popper-transform-origin":[F.transformOrigin?.x,F.transformOrigin?.y].join(" "),...F.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:a.jsx(St,{scope:r,placedSide:he,onArrowChange:C,arrowX:ot,arrowY:nt,shouldHideArrow:st,children:a.jsx(y.Primitive.div,{"data-side":he,"data-align":rt,...f,ref:E,style:{...f.style,animation:L?void 0:"none"}})})})});Ae.displayName=ce;var Ne="PopperArrow",jt={top:"bottom",right:"left",bottom:"top",left:"right"},Ee=g.forwardRef(function(t,r){const{__scopePopper:o,...n}=t,s=yt(Ne,o),i=jt[s.placedSide];return a.jsx("span",{ref:s.onArrowChange,style:{position:"absolute",left:s.arrowX,top:s.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[s.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[s.placedSide],visibility:s.shouldHideArrow?"hidden":void 0},children:a.jsx(Pt,{...n,ref:r,style:{...n.style,display:"block"}})})});Ee.displayName=Ne;function Ot(e){return e!==null}var Rt=e=>({name:"transformOrigin",options:e,fn(t){const{placement:r,rects:o,middlewareData:n}=t,i=n.arrow?.centerOffset!==0,c=i?0:e.arrowWidth,p=i?0:e.arrowHeight,[u,v]=ke(r),d={start:"0%",center:"50%",end:"100%"}[v],h=(n.arrow?.x??0)+c/2,m=(n.arrow?.y??0)+p/2;let x="",f="";return u==="bottom"?(x=i?d:`${h}px`,f=`${-p}px`):u==="top"?(x=i?d:`${h}px`,f=`${o.floating.height+p}px`):u==="right"?(x=`${-p}px`,f=i?d:`${m}px`):u==="left"&&(x=`${o.floating.width+p}px`,f=i?d:`${m}px`),{data:{x,y:f}}}});function ke(e){const[t,r="center"]=e.split("-");return[t,r]}var bt=Oe,Fe=be,At=Ae,Nt=Ee,G="Popover",[Te]=$.createContextScope(G,[ye]),z=ye(),[Et,A]=Te(G),Me=e=>{const{__scopePopover:t,children:r,open:o,defaultOpen:n,onOpenChange:s,modal:i=!1}=e,c=z(t),p=g.useRef(null),[u,v]=g.useState(!1),[d,h]=y.useControllableState({prop:o,defaultProp:n??!1,onChange:s,caller:G});return a.jsx(bt,{...c,children:a.jsx(Et,{scope:t,contentId:ft.useId(),triggerRef:p,open:d,onOpenChange:h,onOpenToggle:g.useCallback(()=>h(m=>!m),[h]),hasCustomAnchor:u,onCustomAnchorAdd:g.useCallback(()=>v(!0),[]),onCustomAnchorRemove:g.useCallback(()=>v(!1),[]),modal:i,children:r})})};Me.displayName=G;var De="PopoverAnchor",kt=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(De,r),s=z(r),{onCustomAnchorAdd:i,onCustomAnchorRemove:c}=n;return g.useEffect(()=>(i(),()=>c()),[i,c]),a.jsx(Fe,{...s,...o,ref:t})});kt.displayName=De;var Ie="PopoverTrigger",$e=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(Ie,r),s=z(r),i=U.useComposedRefs(t,n.triggerRef),c=a.jsx(y.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":Ye(n.open),...o,ref:i,onClick:y.composeEventHandlers(e.onClick,n.onOpenToggle)});return n.hasCustomAnchor?c:a.jsx(Fe,{asChild:!0,...s,children:c})});$e.displayName=Ie;var pe="PopoverPortal",[Ft,Tt]=Te(pe,{forceMount:void 0}),He=e=>{const{__scopePopover:t,forceMount:r,children:o,container:n}=e,s=A(pe,t);return a.jsx(Ft,{scope:t,forceMount:r,children:a.jsx(we.Presence,{present:r||s.open,children:a.jsx(M.Portal,{asChild:!0,container:n,children:o})})})};He.displayName=pe;var D="PopoverContent",Be=g.forwardRef((e,t)=>{const r=Tt(D,e.__scopePopover),{forceMount:o=r.forceMount,...n}=e,s=A(D,e.__scopePopover);return a.jsx(we.Presence,{present:o||s.open,children:s.modal?a.jsx(Dt,{...n,ref:t}):a.jsx(It,{...n,ref:t})})});Be.displayName=D;var Mt=y.createSlot("PopoverContent.RemoveScroll"),Dt=g.forwardRef((e,t)=>{const r=A(D,e.__scopePopover),o=g.useRef(null),n=U.useComposedRefs(t,o),s=g.useRef(!1);return g.useEffect(()=>{const i=o.current;if(i)return M.hideOthers(i)},[]),a.jsx(M.ReactRemoveScroll,{as:Mt,allowPinchZoom:!0,children:a.jsx(ze,{...e,ref:n,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:y.composeEventHandlers(e.onCloseAutoFocus,i=>{i.preventDefault(),s.current||r.triggerRef.current?.focus()}),onPointerDownOutside:y.composeEventHandlers(e.onPointerDownOutside,i=>{const c=i.detail.originalEvent,p=c.button===0&&c.ctrlKey===!0,u=c.button===2||p;s.current=u},{checkForDefaultPrevented:!1}),onFocusOutside:y.composeEventHandlers(e.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1})})})}),It=g.forwardRef((e,t)=>{const r=A(D,e.__scopePopover),o=g.useRef(!1),n=g.useRef(!1);return a.jsx(ze,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{e.onCloseAutoFocus?.(s),s.defaultPrevented||(o.current||r.triggerRef.current?.focus(),s.preventDefault()),o.current=!1,n.current=!1},onInteractOutside:s=>{e.onInteractOutside?.(s),s.defaultPrevented||(o.current=!0,s.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const i=s.target;r.triggerRef.current?.contains(i)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&n.current&&s.preventDefault()}})}),ze=g.forwardRef((e,t)=>{const{__scopePopover:r,trapFocus:o,onOpenAutoFocus:n,onCloseAutoFocus:s,disableOutsidePointerEvents:i,onEscapeKeyDown:c,onPointerDownOutside:p,onFocusOutside:u,onInteractOutside:v,...d}=e,h=A(D,r),m=z(r);return M.useFocusGuards(),a.jsx(M.FocusScope,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:n,onUnmountAutoFocus:s,children:a.jsx(M.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:i,onInteractOutside:v,onEscapeKeyDown:c,onPointerDownOutside:p,onFocusOutside:u,onDismiss:()=>h.onOpenChange(!1),children:a.jsx(At,{"data-state":Ye(h.open),role:"dialog",id:h.contentId,...m,...d,ref:t,style:{...d.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),qe="PopoverClose",We=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(qe,r);return a.jsx(y.Primitive.button,{type:"button",...o,ref:t,onClick:y.composeEventHandlers(e.onClick,()=>n.onOpenChange(!1))})});We.displayName=qe;var $t="PopoverArrow",Le=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=z(r);return a.jsx(Nt,{...n,...o,ref:t})});Le.displayName=$t;function Ye(e){return e?"open":"closed"}var Xe=Me,Ht=$e,Bt=He,zt=Be,Ue=We,qt=Le;const le=({children:e,asChild:t,onClick:r,variant:o="primary",dismiss:n=!0,fullWidth:s})=>{const i=B(),{isMdOrSmaller:c}=se(),{negative:p}=ne(),u=!p,v=()=>{r?.(),n&&i?.dismiss()},d=s??c,h=t?e:a.jsx(X.Button,{variant:o,size:"sm",fullWidth:d,negative:u,onClick:v,children:e});return n?a.jsx(Ue,{asChild:!0,children:h}):h};le.displayName="PopoverButton";const Wt="_highlightState1_1w9je_1",Lt="_fadeIn_1w9je_1",Yt="_slideFromTop_1w9je_1",Xt="_slideFromBottom_1w9je_1",Ut="_slideFromLeft_1w9je_1",Kt="_slideFromRight_1w9je_1",Gt="_fadeOut_1w9je_1",Vt="_slideToTop_1w9je_1",Zt="_slideToBottom_1w9je_1",Qt="_slideToLeft_1w9je_1",Jt="_slideToRight_1w9je_1",q={"purpur-popover__trigger":"_purpur-popover__trigger_1w9je_1","purpur-popover__trigger-highlight":"_purpur-popover__trigger-highlight_1w9je_5","purpur-popover__trigger-highlight--state1":"_purpur-popover__trigger-highlight--state1_1w9je_14",highlightState1:Wt,"purpur-popover__trigger-highlight--negative":"_purpur-popover__trigger-highlight--negative_1w9je_29","purpur-popover__trigger-highlight--state2":"_purpur-popover__trigger-highlight--state2_1w9je_33","purpur-popover__inner":"_purpur-popover__inner_1w9je_45","purpur-popover__content":"_purpur-popover__content_1w9je_52",fadeIn:Lt,slideFromTop:Yt,slideFromBottom:Xt,slideFromLeft:Ut,slideFromRight:Kt,fadeOut:Gt,slideToTop:Vt,slideToBottom:Zt,slideToLeft:Qt,slideToRight:Jt,"purpur-popover__arrow":"_purpur-popover__arrow_1w9je_103","purpur-popover__body":"_purpur-popover__body_1w9je_106","purpur-popover__icon":"_purpur-popover__icon_1w9je_107","purpur-popover__steps":"_purpur-popover__steps_1w9je_108","purpur-popover__title":"_purpur-popover__title_1w9je_109","purpur-popover__content--negative":"_purpur-popover__content--negative_1w9je_112","purpur-popover__header-content":"_purpur-popover__header-content_1w9je_124","purpur-popover__close":"_purpur-popover__close_1w9je_137","purpur-popover__footer":"_purpur-popover__footer_1w9je_142","purpur-popover__footer-button-group":"_purpur-popover__footer-button-group_1w9je_155"},er=H.c.bind(q),Ke=()=>{const e=re(),r=K()?.walkthroughStep||e.currentStep,{totalSteps:o,separatorText:n,stepText:s}=e;return a.jsx(a.Fragment,{children:a.jsxs(xe.Paragraph,{className:er("purpur-popover__steps"),role:"status","aria-live":"polite","aria-atomic":"true",children:[s," ",r," ",n," ",o]})})};Ke.displayName="PopoverSteps";const me=H.c.bind(q),ue=({children:e,className:t})=>{const r=B(),o=K(),n=r&&o&&o.walkthroughStep>0;return a.jsxs("div",{className:me("purpur-popover__footer",t),children:[n&&a.jsx(Ke,{}),a.jsx("div",{className:me("purpur-popover__footer-button-group"),children:e})]})};ue.displayName="PopoverFooter";const J=H.c.bind(q),Ge=l.forwardRef(({title:e,icon:t},r)=>a.jsxs("div",{ref:r,className:J("purpur-popover__header-content"),children:[t&&a.jsx("span",{className:J("purpur-popover__icon"),children:t}),a.jsx(vt.Heading,{tag:"h2",variant:"title-100",className:J("purpur-popover__title"),id:"popover-heading",children:e})]}));Ge.displayName="PopoverHeader";const de=({children:e,onClick:t})=>{const{next:r}=re(),{negative:o}=ne(),{isMdOrSmaller:n}=se(),s=!o,i=()=>{t?.(),r()};return a.jsx(X.Button,{size:"sm",variant:"primary",onClick:i,negative:s,fullWidth:n,children:e})};de.displayName="PopoverNext";const T=H.c.bind(q),Ve=l.forwardRef(({children:e,className:t,beakPosition:r="down",align:o="center",alignOffset:n=0,sideOffset:s=5,negative:i=!1,closeIconAriaLabel:c,title:p,icon:u,body:v,onAction:d,zIndex:h=210,...m},x)=>{const f=B(),O=K(),j=l.useRef(null),E={up:"bottom",right:"left",down:"top",left:"right",none:"bottom"}[r],w=r!=="none";let C=e;if(f&&!e){const _=O?.walkthroughStep||f.currentStep,P=_===1,k=_===f.totalSteps;C=a.jsxs(ue,{children:[!P&&a.jsx(ie,{onClick:()=>d?.({type:"back",step:_}),children:f.backLabel}),k?a.jsx(le,{onClick:()=>d?.({type:"finish",step:_}),dismiss:!0,children:f.finishLabel}):a.jsx(de,{onClick:()=>d?.({type:"next",step:_}),children:f.nextLabel})]})}const S=_=>{if(_.preventDefault(),f){const P=_.currentTarget;setTimeout(()=>{P.setAttribute("tabindex","-1"),P.focus()},0)}m.onOpenAutoFocus?.(_)},V=_=>{f&&_.preventDefault(),m.onCloseAutoFocus?.(_)},W=_=>{const P=window.matchMedia("(prefers-reduced-motion: reduce)").matches;f&&!P?(_.preventDefault(),setTimeout(()=>{d?.({type:"dismiss",step:f.currentStep}),f.dismiss()},200)):(d?.({type:"dismiss",step:f?.currentStep}),f?.dismiss())},Z=_=>{const P=window.matchMedia("(prefers-reduced-motion: reduce)").matches;f&&!P?(_.preventDefault(),setTimeout(()=>{d?.({type:"dismiss",step:f.currentStep}),f.dismiss()},200)):(d?.({type:"dismiss",step:f?.currentStep}),f?.dismiss())},Q=_=>{if(O?.disableClickOutside){_.preventDefault();return}if(f){const P=_.target;P.closest("[role='dialog']")||P.closest(".purpur-popover__trigger")||P.closest("button[aria-haspopup='dialog']")||(d?.({type:"dismiss",step:f.currentStep}),setTimeout(()=>{f.dismiss()},0))}};return a.jsx(Bt,{children:a.jsxs(zt,{"data-testid":"popover-content",role:"dialog","aria-modal":"true","aria-labelledby":m["aria-label"]?void 0:"popover-heading",ref:x,side:E,sideOffset:s,align:o,alignOffset:n,style:{"--popover-z-index":h},className:T("purpur-popover__content",{"purpur-popover__content--negative":i},t),onOpenAutoFocus:S,onCloseAutoFocus:V,onEscapeKeyDown:Z,onInteractOutside:Q,...m,children:[a.jsxs(Pe.Provider,{value:{negative:i},children:[a.jsxs("div",{className:T("purpur-popover__inner"),children:[a.jsx(Ge,{ref:j,title:p,icon:u}),a.jsx(xe.Paragraph,{className:T("purpur-popover__body"),children:v})]}),C,a.jsx(Ue,{asChild:!0,onClick:W,children:a.jsx(X.Button,{variant:i?"text":"tertiary-purple",size:"sm","aria-label":c,className:T("purpur-popover__close"),negative:!i,iconOnly:!0,children:a.jsx(gt.r,{size:"xs",className:T("purpur-popover__icon")})})})]}),w&&a.jsx(qt,{className:T("purpur-popover__arrow"),"aria-hidden":"true",tabIndex:-1})]})})});Ve.displayName="PopoverContent";const Ze=({children:e,open:t,defaultOpen:r=!1,onOpenChange:o,disableClickOutside:n,...s})=>{const[i,c]=l.useState(r),p=t!==void 0,u=p?t:i,v=d=>{p||c(d),o?.(d)};return a.jsx(Xe,{open:u,onOpenChange:v,...s,children:a.jsx(oe.Provider,{value:{isOpen:u,walkthroughStep:0,disableClickOutside:n},children:e})})};Ze.displayName="PopoverStandalone";const tr=e=>{const t=l.useRef(null),r=l.useCallback(()=>{t.current&&(cancelAnimationFrame(t.current),t.current=null)},[]);return{scrollToElement:l.useCallback((n,s=600)=>{const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,c=n.getBoundingClientRect(),p=c.top+window.pageYOffset,u=c.height,v=window.innerHeight;let d=p-v/2+u/2;const h=document.documentElement.scrollHeight,m=Math.max(0,h-v);if(d=Math.max(0,Math.min(d,m)),i){window.scrollTo(0,d),e?.();return}const x=window.pageYOffset,f=d-x,O=performance.now(),j=N=>{const E=N-O,w=Math.min(E/s,1),C=w<.5?2*w*w:1-Math.pow(-2*w+2,2)/2,S=x+f*C;window.scrollTo(0,S),w<1?t.current=requestAnimationFrame(j):(t.current=null,e?.())};r(),t.current=requestAnimationFrame(j)},[e,r]),cancelScroll:r}};function rr(e){const t=l.useRef(null),r=K(),o=B(),n=l.useRef(!1),{scrollToElement:s,cancelScroll:i}=tr(r?.onScrollComplete);return l.useEffect(()=>{typeof e=="function"?e(t.current):e&&(e.current=t.current)},[e]),l.useEffect(()=>{if(o&&r?.walkthroughStep!==void 0&&o.currentStep===r.walkthroughStep&&t.current&&!n.current){const p=t.current,u=p.getBoundingClientRect(),v=100;u.top>=-v&&u.bottom<=window.innerHeight+v&&u.left>=-v&&u.right<=window.innerWidth+v?r?.onScrollComplete?.():(r?.onScrollStart?.(),s(p)),n.current=!0}else o?.currentStep!==r?.walkthroughStep&&(n.current=!1,i())},[o?.currentStep,r?.walkthroughStep,o,s,i,r]),l.useEffect(()=>i,[i]),{triggerRef:t,context:r}}const ee=H.c.bind(q),Qe=l.forwardRef(({children:e,className:t,highlight:r=!0,negative:o=!1,...n},s)=>{const{triggerRef:i,context:c}=rr(s);return a.jsxs("div",{className:ee("purpur-popover__trigger",{"purpur-popover__trigger--highlight":c?.isOpen&&r},t),children:[c?.isOpen&&r&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:ee("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state1",{"purpur-popover__trigger-highlight--negative":o}),"aria-hidden":"true"}),a.jsx("div",{className:ee("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state2",{"purpur-popover__trigger-highlight--negative":o}),"aria-hidden":"true"})]}),a.jsx(Ht,{ref:i,asChild:!0,"aria-expanded":c?.isOpen??!1,"aria-haspopup":"dialog",...n,children:e})]})});Qe.displayName="PopoverTrigger";function or(e){const t=B(),[r,o]=l.useState(!1),[n,s]=l.useState(!1),i=l.useRef(null),c=l.useRef(0);l.useEffect(()=>t?(t.registerStep(e),()=>t.unregisterStep(e)):()=>{},[t,e]);const p=t?.currentStep===e,u=l.useCallback(()=>{s(!0)},[]),v=l.useCallback(()=>{if(s(!1),p){const h=t.openDelay;i.current=window.setTimeout(()=>{o(!0),c.current=Date.now()},h)}},[p,t]);l.useEffect(()=>{if(i.current&&(clearTimeout(i.current),i.current=null),p){if(!n){const h=t.openDelay;i.current=window.setTimeout(()=>{o(!0),c.current=Date.now()},h)}}else o(!1),s(!1),c.current=0;return()=>{i.current&&(clearTimeout(i.current),i.current=null)}},[p,n,t]);const d=l.useCallback((h,m)=>{if(m?.(h),!h&&r&&t&&t.currentStep===e){if(Date.now()-c.current<10||i.current!==null)return;t.dismiss()}},[r,t,e]);return{actuallyOpen:r,onScrollStart:u,onScrollComplete:v,handleOpenChange:d}}const Je=({children:e,step:t,onOpenChange:r,disableClickOutside:o=!0,...n})=>{const{actuallyOpen:s,onScrollStart:i,onScrollComplete:c,handleOpenChange:p}=or(t);return a.jsx(Xe,{open:s,onOpenChange:u=>p(u,r),...n,children:a.jsx(oe.Provider,{value:{isOpen:s,walkthroughStep:t,onScrollStart:i,onScrollComplete:c,disableClickOutside:o},children:e})})};Je.displayName="PopoverWalkthrough";const b=e=>{const{multistep:t=!1,disableClickOutside:r,...o}=e;return t?a.jsx(Je,{...o,disableClickOutside:r??!0}):a.jsx(Ze,{...o,disableClickOutside:r})};b.Back=ie;b.Button=le;b.Content=Ve;b.Flow=mt;b.Footer=ue;b.Next=de;b.Trigger=Qe;b.displayName="Popover";exports.Popover=b;
|
|
2
|
-
//# sourceMappingURL=popover-B0XJZ5mj.js.map
|