@purpur/library 9.10.1 → 10.0.1
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 +118 -0
- package/CHANGELOG.md +51 -1
- package/dist/LICENSE.txt +234 -179
- package/dist/{RichText-IejAKqm2.js → RichText-B865Qkzj.js} +2 -2
- package/dist/{RichText-IejAKqm2.js.map → RichText-B865Qkzj.js.map} +1 -1
- package/dist/{RichText-2_z57EYi.mjs → RichText-CPkBwXNI.mjs} +2 -2
- package/dist/{RichText-2_z57EYi.mjs.map → RichText-CPkBwXNI.mjs.map} +1 -1
- package/dist/accordion-aEZas0k1.mjs +122 -0
- package/dist/accordion-aEZas0k1.mjs.map +1 -0
- package/dist/accordion-zwsF1oUj.js +2 -0
- package/dist/accordion-zwsF1oUj.js.map +1 -0
- package/dist/accordion.cjs.js +1 -1
- package/dist/accordion.es.js +1 -1
- package/dist/button-C5CYysw5.js +2 -0
- package/dist/button-C5CYysw5.js.map +1 -0
- package/dist/button-mHw_J7JU.mjs +106 -0
- package/dist/button-mHw_J7JU.mjs.map +1 -0
- package/dist/button.cjs.js +1 -1
- package/dist/button.es.js +1 -1
- package/dist/{calendar-CTWhxuS4.mjs → calendar-DTL_g0ue.mjs} +4 -14
- package/dist/{calendar-CTWhxuS4.mjs.map → calendar-DTL_g0ue.mjs.map} +1 -1
- package/dist/{calendar-Cwzqytai.js → calendar-DVOrK53J.js} +2 -2
- package/dist/{calendar-Cwzqytai.js.map → calendar-DVOrK53J.js.map} +1 -1
- package/dist/calendar.cjs.js +1 -1
- package/dist/calendar.es.js +1 -1
- package/dist/{card-t2ZkZ82G.mjs → card-C0yhMN5d.mjs} +3 -3
- package/dist/card-C0yhMN5d.mjs.map +1 -0
- package/dist/{card-pdsBEJif.js → card-CIlY38WI.js} +2 -2
- package/dist/card-CIlY38WI.js.map +1 -0
- package/dist/card.cjs.js +1 -1
- package/dist/card.es.js +1 -1
- package/dist/{carousel-DiKGSL-7.mjs → carousel-Dq9yzk_-.mjs} +2 -2
- package/dist/{carousel-DiKGSL-7.mjs.map → carousel-Dq9yzk_-.mjs.map} +1 -1
- package/dist/{carousel-Dz_bUGo4.js → carousel-j-s6M1hu.js} +2 -2
- package/dist/{carousel-Dz_bUGo4.js.map → carousel-j-s6M1hu.js.map} +1 -1
- package/dist/carousel.cjs.js +1 -1
- package/dist/carousel.es.js +1 -1
- package/dist/{chat-field-B2jmpVNr.js → chat-field-CLAjIHlM.js} +2 -2
- package/dist/{chat-field-B2jmpVNr.js.map → chat-field-CLAjIHlM.js.map} +1 -1
- package/dist/{chat-field-8cKqYcKi.mjs → chat-field-nxFRXoQx.mjs} +2 -2
- package/dist/{chat-field-8cKqYcKi.mjs.map → chat-field-nxFRXoQx.mjs.map} +1 -1
- package/dist/chat-field.cjs.js +1 -1
- package/dist/chat-field.es.js +1 -1
- package/dist/{chip-group-B775zvKD.js → chip-group-BLuG0MC6.js} +2 -2
- package/dist/{chip-group-B775zvKD.js.map → chip-group-BLuG0MC6.js.map} +1 -1
- package/dist/{chip-group-xuOe7nL3.mjs → chip-group-Bo4kJ8Vq.mjs} +2 -2
- package/dist/{chip-group-xuOe7nL3.mjs.map → chip-group-Bo4kJ8Vq.mjs.map} +1 -1
- package/dist/chip-group.cjs.js +1 -1
- package/dist/chip-group.es.js +1 -1
- package/dist/color-dot-BEE5rKco.js.map +1 -1
- package/dist/color-dot-Dz9yzVX3.mjs.map +1 -1
- package/dist/{comparison-table-N5G3k2kr.js → comparison-table-CRWRijfG.js} +2 -2
- package/dist/{comparison-table-N5G3k2kr.js.map → comparison-table-CRWRijfG.js.map} +1 -1
- package/dist/{comparison-table-CmtSOUfK.mjs → comparison-table-DYaRaP9Z.mjs} +3 -3
- package/dist/{comparison-table-CmtSOUfK.mjs.map → comparison-table-DYaRaP9Z.mjs.map} +1 -1
- package/dist/comparison-table.cjs.js +1 -1
- package/dist/comparison-table.es.js +1 -1
- package/dist/components/accordion/src/accordion-item.d.ts +5 -5
- package/dist/components/accordion/src/accordion-item.d.ts.map +1 -1
- package/dist/components/accordion/src/accordion.d.ts +2 -6
- package/dist/components/accordion/src/accordion.d.ts.map +1 -1
- package/dist/components/accordion/src/accordion.visual.fixtures.d.ts.map +1 -1
- package/dist/components/alert-badge/src/alert-badge.d.ts +1 -1
- package/dist/components/badge/src/badge.d.ts +1 -1
- package/dist/components/button/src/button.d.ts +3 -4
- package/dist/components/button/src/button.d.ts.map +1 -1
- package/dist/components/button/src/button.visual.fixtures.d.ts +1 -1
- package/dist/components/calendar/src/calendar.d.ts.map +1 -1
- package/dist/components/card/src/card-badge.d.ts +1 -1
- package/dist/components/card/src/card-content-container.d.ts +1 -1
- package/dist/components/card/src/card-content.d.ts +1 -1
- package/dist/components/card/src/card-heading.d.ts +5 -5
- package/dist/components/card/src/card-heading.d.ts.map +1 -1
- package/dist/components/card/src/card-root.d.ts +1 -1
- package/dist/components/color-dot/src/color-dot.d.ts +2 -1
- 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 +1 -1
- package/dist/components/content-block/src/content-block-group.d.ts +1 -1
- package/dist/components/content-block/src/content-block.d.ts +2 -2
- package/dist/components/content-block/src/content-block.d.ts.map +1 -1
- package/dist/components/counter-badge/src/counter-badge.d.ts +1 -1
- package/dist/components/country-flag-icon/src/all-country-flag-assets.d.ts +0 -1
- package/dist/components/country-flag-icon/src/all-country-flag-assets.d.ts.map +1 -1
- package/dist/components/country-flag-icon/src/country-flag-icon.d.ts +1 -1
- package/dist/components/cta-link/src/cta-link.d.ts +10 -10
- package/dist/components/date-field/src/date-field.d.ts +1 -1
- package/dist/components/date-picker/src/date-picker.d.ts +1 -1
- package/dist/components/date-range-field/src/date-range-field.d.ts +2 -2
- package/dist/components/date-range-field/src/date-range-field.d.ts.map +1 -1
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +2 -2
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts.map +1 -1
- package/dist/components/drawer/src/drawer-container.d.ts +1 -1
- package/dist/components/drawer/src/drawer-container.d.ts.map +1 -1
- package/dist/components/drawer/src/drawer-frame.d.ts +2 -2
- package/dist/components/drawer/src/drawer-handle.d.ts +1 -1
- package/dist/components/drawer/src/drawer-header.d.ts +1 -1
- package/dist/components/drawer/src/drawer-scroll-area.d.ts +1 -1
- package/dist/components/drawer/src/drawer-trigger.d.ts +1 -1
- package/dist/components/drawer/src/drawer.context.d.ts +2 -0
- package/dist/components/drawer/src/drawer.context.d.ts.map +1 -1
- package/dist/components/drawer/src/drawer.d.ts +2 -0
- package/dist/components/drawer/src/drawer.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-combobox.d.ts +2 -34
- package/dist/components/dropdown/src/dropdown-combobox.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-select.d.ts +2 -34
- package/dist/components/dropdown/src/dropdown-select.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown-shared.d.ts +2 -1
- package/dist/components/dropdown/src/dropdown-shared.d.ts.map +1 -1
- package/dist/components/dropdown/src/dropdown.types.d.ts +24 -13
- package/dist/components/dropdown/src/dropdown.types.d.ts.map +1 -1
- package/dist/components/dropdown/src/useDropdown.d.ts +1 -1
- package/dist/components/dropdown/src/useDropdown.d.ts.map +1 -1
- package/dist/components/dropdown/src/useDropdownFilter.d.ts.map +1 -1
- package/dist/components/dropdown/src/useDropdownInput.d.ts.map +1 -1
- package/dist/components/field-helper-text/src/field-helper-text.d.ts +1 -1
- package/dist/components/file-upload/src/file-upload-button.d.ts +22 -0
- package/dist/components/file-upload/src/file-upload-button.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload-drag-and-drop.d.ts +10 -0
- package/dist/components/file-upload/src/file-upload-drag-and-drop.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload-file-name-label.d.ts +8 -0
- package/dist/components/file-upload/src/file-upload-file-name-label.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload-icon.d.ts +8 -0
- package/dist/components/file-upload/src/file-upload-icon.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload-types.d.ts +82 -0
- package/dist/components/file-upload/src/file-upload-types.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload-utils.d.ts +7 -0
- package/dist/components/file-upload/src/file-upload-utils.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload.d.ts +6 -0
- package/dist/components/file-upload/src/file-upload.d.ts.map +1 -0
- package/dist/components/file-upload/src/file-upload.visual.fixtures.d.ts +14 -0
- package/dist/components/file-upload/src/file-upload.visual.fixtures.d.ts.map +1 -0
- package/dist/components/footer/src/footer-social-link.d.ts +3 -3
- package/dist/components/heading/src/heading.d.ts +22 -4
- package/dist/components/heading/src/heading.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner-types.d.ts +4 -4
- package/dist/components/hero-banner/src/hero-banner-types.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner.d.ts +1 -1
- package/dist/components/hero-banner/src/hero-banner.d.ts.map +1 -1
- package/dist/components/icon/src/icon.d.ts +2 -2
- package/dist/components/illustrative-icon/src/static-illustrative-icon.d.ts +2 -2
- package/dist/components/label/src/label.d.ts +1 -1
- package/dist/components/listbox/src/listbox.d.ts +1 -1
- package/dist/components/loading/src/loading-illustrative.d.ts +1 -1
- package/dist/components/logo/src/logo.types.d.ts +1 -1
- package/dist/components/modal/src/modal-content.d.ts +1 -1
- package/dist/components/modal/src/modal-content.d.ts.map +1 -1
- package/dist/components/notification-banner/src/notification-banner.d.ts +3 -3
- package/dist/components/notification-banner/src/notification-banner.d.ts.map +1 -1
- package/dist/components/pagination/src/pagination-page-size-selector.d.ts +2 -2
- package/dist/components/pagination/src/pagination-page-trigger.d.ts +1 -1
- package/dist/components/pagination/src/pagination-pages.d.ts +2 -2
- package/dist/components/pagination/src/pagination-step-trigger.d.ts +2 -2
- package/dist/components/pagination/src/pagination-truncation-separator.d.ts +1 -1
- package/dist/components/pagination/src/types.d.ts +1 -1
- package/dist/components/pagination/src/use-page-options.hook.d.ts +1 -1
- package/dist/components/pagination/src/use-page-size-options.hook.d.ts +1 -1
- package/dist/components/paragraph/src/paragraph.d.ts +1 -1
- package/dist/components/password-field/src/password-strength-indicator.d.ts +1 -1
- package/dist/components/popover/src/popover-button.d.ts +2 -2
- package/dist/components/product-card/src/product-card.d.ts +1 -1
- package/dist/components/promotion-card/src/promotion-card.d.ts +10 -10
- package/dist/components/promotion-card/src/promotion-card.d.ts.map +1 -1
- package/dist/components/quantity-selector/src/quantity-selector-button.d.ts +2 -3
- package/dist/components/quantity-selector/src/quantity-selector-button.d.ts.map +1 -1
- package/dist/components/quantity-selector/src/quantity-selector.d.ts +3 -6
- package/dist/components/quantity-selector/src/quantity-selector.d.ts.map +1 -1
- package/dist/components/radio-button-group/src/radio-button-group-root.d.ts +1 -1
- package/dist/components/radio-card-group/src/radio-card-item.d.ts +1 -1
- package/dist/components/rich-text/src/types.d.ts +3 -3
- package/dist/components/search-field/src/search-field-autocomplete.d.ts +1 -1
- package/dist/components/search-field/src/search-field-base.d.ts +1 -1
- package/dist/components/select/src/select.d.ts +1 -1
- package/dist/components/skeleton/src/skeleton.d.ts +1 -1
- package/dist/components/spacer/src/spacer.d.ts +2 -2
- package/dist/components/spinner/src/spinner.d.ts +3 -3
- package/dist/components/stepper/src/stepper-container.d.ts +1 -1
- package/dist/components/stepper/src/{stepper-button.d.ts → stepper-link.d.ts} +5 -4
- package/dist/components/stepper/src/stepper-link.d.ts.map +1 -0
- package/dist/components/stepper/src/stepper-nav-items.d.ts +1 -0
- package/dist/components/stepper/src/stepper-nav-items.d.ts.map +1 -1
- package/dist/components/stepper/src/stepper.d.ts +2 -2
- package/dist/components/stepper/src/stepper.d.ts.map +1 -1
- package/dist/components/stepper/src/types.d.ts +2 -2
- package/dist/components/stepper/src/types.d.ts.map +1 -1
- package/dist/components/stepper/src/use-content-focus.hook.d.ts.map +1 -1
- package/dist/components/table/src/cell-types/button-group-cell.d.ts +2 -2
- package/dist/components/table/src/draggable-table.d.ts.map +1 -1
- package/dist/components/table/src/empty-table.d.ts +2 -2
- package/dist/components/table/src/table-column-header-cell.d.ts +1 -2
- package/dist/components/table/src/table-column-header-cell.d.ts.map +1 -1
- package/dist/components/table/src/table-content.d.ts +1 -1
- package/dist/components/table/src/table-headers.d.ts +2 -3
- package/dist/components/table/src/table-headers.d.ts.map +1 -1
- package/dist/components/table/src/table-settings-drawer.d.ts +11 -20
- package/dist/components/table/src/table-settings-drawer.d.ts.map +1 -1
- package/dist/components/table/src/table.d.ts +1 -8
- package/dist/components/table/src/table.d.ts.map +1 -1
- package/dist/components/table/src/test-utils/helpers.d.ts +10 -19
- package/dist/components/table/src/test-utils/helpers.d.ts.map +1 -1
- package/dist/components/tabs/src/tab-content.d.ts +4 -2
- package/dist/components/tabs/src/tab-content.d.ts.map +1 -1
- package/dist/components/text-field/src/text-field-ai.d.ts +4 -4
- package/dist/components/text-field/src/text-field-base.d.ts +4 -4
- package/dist/components/text-field/src/text-field.d.ts +5 -5
- package/dist/components/text-spacing/src/text-spacing.d.ts +1 -1
- package/dist/components/toggle/src/toggle.d.ts +1 -1
- package/dist/components/tooltip/src/tooltip.d.ts +4 -6
- package/dist/components/tooltip/src/tooltip.d.ts.map +1 -1
- package/dist/components-metadata.js +20 -10
- package/dist/{content-block-CDMrz41K.mjs → content-block-BCM0I3Y2.mjs} +2 -2
- package/dist/content-block-BCM0I3Y2.mjs.map +1 -0
- package/dist/{content-block-DyYAnL2e.js → content-block-DQppQumZ.js} +2 -2
- package/dist/content-block-DQppQumZ.js.map +1 -0
- package/dist/content-block.cjs.js +1 -1
- package/dist/content-block.es.js +1 -1
- package/dist/core.esm-BmIwrKkJ.js +6 -0
- package/dist/core.esm-BmIwrKkJ.js.map +1 -0
- package/dist/core.esm-CKGHpLM_.mjs +2892 -0
- package/dist/core.esm-CKGHpLM_.mjs.map +1 -0
- package/dist/country-flag-icon/LICENSE.txt +11 -0
- package/dist/country-flag-icon/all-country-flag-assets.cjs.js +1 -1
- package/dist/country-flag-icon/all-country-flag-assets.cjs.js.map +1 -1
- package/dist/country-flag-icon/all-country-flag-assets.d.ts +0 -1
- package/dist/country-flag-icon/all-country-flag-assets.d.ts.map +1 -1
- package/dist/country-flag-icon/all-country-flag-assets.es.js +0 -1
- package/dist/country-flag-icon/all-country-flag-assets.es.js.map +1 -1
- package/dist/country-flag-icon/dynamic-country-flag-icon.cjs.js +2 -0
- package/dist/country-flag-icon/dynamic-country-flag-icon.cjs.js.map +1 -0
- package/dist/country-flag-icon/dynamic-country-flag-icon.es.js +366 -0
- package/dist/country-flag-icon/dynamic-country-flag-icon.es.js.map +1 -0
- package/dist/{date-field-CwZ64buh.js → date-field-CtpWDaSh.js} +2 -2
- package/dist/{date-field-CwZ64buh.js.map → date-field-CtpWDaSh.js.map} +1 -1
- package/dist/{date-field-ChYx0N2j.mjs → date-field-_rCuf15v.mjs} +2 -2
- package/dist/{date-field-ChYx0N2j.mjs.map → date-field-_rCuf15v.mjs.map} +1 -1
- package/dist/date-field.cjs.js +1 -1
- package/dist/date-field.es.js +1 -1
- package/dist/{date-picker-BWMKTOq6.js → date-picker-BYlszX1W.js} +2 -2
- package/dist/{date-picker-BWMKTOq6.js.map → date-picker-BYlszX1W.js.map} +1 -1
- package/dist/{date-picker-CTyqgBRB.mjs → date-picker-sqcNAplg.mjs} +6 -6
- package/dist/{date-picker-CTyqgBRB.mjs.map → date-picker-sqcNAplg.mjs.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/date-range-field-B33XeBW8.js +2 -0
- package/dist/date-range-field-B33XeBW8.js.map +1 -0
- package/dist/{date-range-field-DDr-qEGX.mjs → date-range-field-BmjQeiOv.mjs} +23 -23
- package/dist/date-range-field-BmjQeiOv.mjs.map +1 -0
- package/dist/date-range-field.cjs.js +1 -1
- package/dist/date-range-field.es.js +1 -1
- package/dist/{dismissable-chip-group-2updhyuR.js → dismissable-chip-group-5ALErhD2.js} +2 -2
- package/dist/dismissable-chip-group-5ALErhD2.js.map +1 -0
- package/dist/{dismissable-chip-group-Cfs2s2BH.mjs → dismissable-chip-group-DMNU7g5e.mjs} +3 -3
- package/dist/dismissable-chip-group-DMNU7g5e.mjs.map +1 -0
- package/dist/dismissable-chip-group.cjs.js +1 -1
- package/dist/dismissable-chip-group.es.js +1 -1
- package/dist/{drawer-Cnk2OKgi.mjs → drawer-Chx3H8EU.mjs} +241 -233
- package/dist/drawer-Chx3H8EU.mjs.map +1 -0
- package/dist/drawer-oFJcxW58.js +2 -0
- package/dist/drawer-oFJcxW58.js.map +1 -0
- package/dist/drawer.cjs.js +1 -1
- package/dist/drawer.es.js +1 -1
- package/dist/dropdown-Bn7WvsL2.js +2 -0
- package/dist/dropdown-Bn7WvsL2.js.map +1 -0
- package/dist/dropdown-CrufJnb4.mjs +945 -0
- package/dist/dropdown-CrufJnb4.mjs.map +1 -0
- package/dist/dropdown.cjs.js +1 -1
- package/dist/dropdown.es.js +1 -1
- package/dist/file-upload-Ctw6LCTU.mjs +589 -0
- package/dist/file-upload-Ctw6LCTU.mjs.map +1 -0
- package/dist/file-upload-MvNuX4ks.js +2 -0
- package/dist/file-upload-MvNuX4ks.js.map +1 -0
- package/dist/file-upload.cjs.js +2 -0
- package/dist/file-upload.cjs.js.map +1 -0
- package/dist/file-upload.es.js +5 -0
- package/dist/file-upload.es.js.map +1 -0
- package/dist/{floating-ui.react-dom-EredA301.mjs → floating-ui.react-dom-1kwKo24Z.mjs} +15 -15
- package/dist/{floating-ui.react-dom-EredA301.mjs.map → floating-ui.react-dom-1kwKo24Z.mjs.map} +1 -1
- package/dist/footer-Bbemct3Z.js +2 -0
- package/dist/footer-Bbemct3Z.js.map +1 -0
- package/dist/{footer-D5YkHmCo.mjs → footer-DkVmTd-f.mjs} +24 -24
- package/dist/footer-DkVmTd-f.mjs.map +1 -0
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/{heading-xwBuT_-9.mjs → heading-BG7JTFO1.mjs} +25 -24
- package/dist/heading-BG7JTFO1.mjs.map +1 -0
- package/dist/{heading-drD5ugCC.js → heading-BPeRwNYu.js} +2 -2
- package/dist/heading-BPeRwNYu.js.map +1 -0
- package/dist/heading.cjs.js +1 -1
- package/dist/heading.es.js +6 -5
- package/dist/{hero-banner-BXRArPWP.mjs → hero-banner-ChDoFRhq.mjs} +4 -4
- package/dist/hero-banner-ChDoFRhq.mjs.map +1 -0
- package/dist/{hero-banner-CW7DIEZe.js → hero-banner-Mag1OwL4.js} +2 -2
- package/dist/hero-banner-Mag1OwL4.js.map +1 -0
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/index-BPY_9ddu.js +2 -0
- package/dist/index-BPY_9ddu.js.map +1 -0
- package/dist/index-Fewa56cA.mjs +440 -0
- package/dist/index-Fewa56cA.mjs.map +1 -0
- package/dist/libraries/library/src/calendar.d.ts +1 -1
- package/dist/libraries/library/src/card.d.ts +1 -1
- package/dist/libraries/library/src/container.d.ts +1 -1
- package/dist/libraries/library/src/content-block.d.ts +1 -1
- package/dist/libraries/library/src/dismissable-chip-group.d.ts +1 -1
- package/dist/libraries/library/src/drawer.d.ts +1 -1
- package/dist/libraries/library/src/file-upload.d.ts +6 -0
- package/dist/libraries/library/src/file-upload.d.ts.map +1 -0
- package/dist/libraries/library/src/library.d.ts +1 -1
- package/dist/libraries/library/src/library.d.ts.map +1 -1
- package/dist/libraries/library/src/notification-banner.d.ts +1 -1
- package/dist/libraries/library/src/notification.d.ts +1 -1
- package/dist/libraries/theme/src/ThemeProvider.d.ts +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +595 -596
- package/dist/{modal-CnC4Zyjk.js → modal-CXOYUsJm.js} +2 -2
- package/dist/modal-CXOYUsJm.js.map +1 -0
- package/dist/{modal-BuUQrUYJ.mjs → modal-Pwvhrzn-.mjs} +31 -31
- package/dist/modal-Pwvhrzn-.mjs.map +1 -0
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{notification-CeoAXDXq.js → notification-BkM2vLzI.js} +2 -2
- package/dist/{notification-CeoAXDXq.js.map → notification-BkM2vLzI.js.map} +1 -1
- package/dist/{notification-C3f3N1K1.mjs → notification-Cbn0UN1p.mjs} +3 -3
- package/dist/{notification-C3f3N1K1.mjs.map → notification-Cbn0UN1p.mjs.map} +1 -1
- package/dist/notification-banner-B9RhXAZ8.js +2 -0
- package/dist/notification-banner-B9RhXAZ8.js.map +1 -0
- package/dist/{notification-banner-BvAy8dlg.mjs → notification-banner-C4NVekCZ.mjs} +5 -5
- package/dist/notification-banner-C4NVekCZ.mjs.map +1 -0
- package/dist/notification-banner.cjs.js +1 -1
- package/dist/notification-banner.es.js +1 -1
- package/dist/notification.cjs.js +1 -1
- package/dist/notification.es.js +1 -1
- package/dist/{password-field-C_E4563x.mjs → password-field-Cy_E-D_G.mjs} +29 -29
- package/dist/{password-field-C_E4563x.mjs.map → password-field-Cy_E-D_G.mjs.map} +1 -1
- package/dist/{password-field-BjKdBoIK.js → password-field-lKyWHjQS.js} +2 -2
- package/dist/{password-field-BjKdBoIK.js.map → password-field-lKyWHjQS.js.map} +1 -1
- package/dist/password-field.cjs.js +1 -1
- package/dist/password-field.es.js +1 -1
- package/dist/popover-B6ntmuEK.mjs +614 -0
- package/dist/popover-B6ntmuEK.mjs.map +1 -0
- package/dist/popover-DJHMEFXP.js +2 -0
- package/dist/popover-DJHMEFXP.js.map +1 -0
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{product-card-CxfHfJVV.mjs → product-card-BMseoNrG.mjs} +3 -3
- package/dist/{product-card-CxfHfJVV.mjs.map → product-card-BMseoNrG.mjs.map} +1 -1
- package/dist/{product-card-XxBwuxM-.js → product-card-D0jX5-up.js} +2 -2
- package/dist/{product-card-XxBwuxM-.js.map → product-card-D0jX5-up.js.map} +1 -1
- package/dist/product-card.cjs.js +1 -1
- package/dist/product-card.es.js +1 -1
- package/dist/{promotion-card-C1UoxzcV.js → promotion-card-B3mz__m7.js} +2 -2
- package/dist/promotion-card-B3mz__m7.js.map +1 -0
- package/dist/{promotion-card-CooYPpFo.mjs → promotion-card-Co6qAkTZ.mjs} +5 -5
- package/dist/promotion-card-Co6qAkTZ.mjs.map +1 -0
- package/dist/promotion-card.cjs.js +1 -1
- package/dist/promotion-card.es.js +1 -1
- package/dist/purpur.css +1 -1
- package/dist/quantity-selector-Cy0aJGGX.js +2 -0
- package/dist/quantity-selector-Cy0aJGGX.js.map +1 -0
- package/dist/quantity-selector-k6ZaVrk1.mjs +162 -0
- package/dist/quantity-selector-k6ZaVrk1.mjs.map +1 -0
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +2 -3
- package/dist/{radio-button-group-D_F6kWD6.mjs → radio-button-group-DjiTo3b1.mjs} +2 -2
- package/dist/{radio-button-group-D_F6kWD6.mjs.map → radio-button-group-DjiTo3b1.mjs.map} +1 -1
- package/dist/{radio-button-group-CdUrC7h9.js → radio-button-group-uCRGh1H5.js} +2 -2
- package/dist/{radio-button-group-CdUrC7h9.js.map → radio-button-group-uCRGh1H5.js.map} +1 -1
- package/dist/radio-button-group.cjs.js +1 -1
- package/dist/radio-button-group.es.js +1 -1
- package/dist/{radio-card-group-B9_jOJnM.mjs → radio-card-group-DoM7qYO1.mjs} +2 -2
- package/dist/{radio-card-group-B9_jOJnM.mjs.map → radio-card-group-DoM7qYO1.mjs.map} +1 -1
- package/dist/{radio-card-group-DcdGkfOp.js → radio-card-group-_9wJC-s3.js} +2 -2
- package/dist/{radio-card-group-DcdGkfOp.js.map → radio-card-group-_9wJC-s3.js.map} +1 -1
- package/dist/radio-card-group.cjs.js +1 -1
- package/dist/radio-card-group.es.js +1 -1
- package/dist/rich-text.cjs.js +1 -1
- package/dist/rich-text.es.js +1 -1
- package/dist/{search-field-BTqVE1-l.mjs → search-field-BTJtRyw5.mjs} +3 -3
- package/dist/{search-field-BTqVE1-l.mjs.map → search-field-BTJtRyw5.mjs.map} +1 -1
- package/dist/{search-field-DkJrwzJB.js → search-field-nzVXak1a.js} +2 -2
- package/dist/{search-field-DkJrwzJB.js.map → search-field-nzVXak1a.js.map} +1 -1
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/stepper-D59T-Y2_.mjs +469 -0
- package/dist/stepper-D59T-Y2_.mjs.map +1 -0
- package/dist/stepper-Dao4XaDV.js +2 -0
- package/dist/stepper-Dao4XaDV.js.map +1 -0
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/table-DRSgesQ4.mjs +4545 -0
- package/dist/table-DRSgesQ4.mjs.map +1 -0
- package/dist/table-zBs9JALh.js +5 -0
- package/dist/table-zBs9JALh.js.map +1 -0
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/tabs-D2__wbCs.js +2 -0
- package/dist/tabs-D2__wbCs.js.map +1 -0
- package/dist/tabs-DOG5g2wf.mjs +440 -0
- package/dist/tabs-DOG5g2wf.mjs.map +1 -0
- package/dist/tabs.cjs.js +1 -1
- package/dist/tabs.es.js +1 -1
- package/dist/{text-field-CS0PT5T6.js → text-field-BSgqJjpv.js} +2 -2
- package/dist/text-field-BSgqJjpv.js.map +1 -0
- package/dist/{text-field-C9LX7LBf.mjs → text-field-MQHeITxy.mjs} +3 -3
- package/dist/text-field-MQHeITxy.mjs.map +1 -0
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.es.js +1 -1
- package/dist/tooltip-DeP1UsPW.js +2 -0
- package/dist/{tooltip-COFCRUKv.js.map → tooltip-DeP1UsPW.js.map} +1 -1
- package/dist/{tooltip-FH9R2MAA.mjs → tooltip-bqdd2lJL.mjs} +347 -309
- package/dist/{tooltip-FH9R2MAA.mjs.map → tooltip-bqdd2lJL.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/package.json +25 -25
- package/src/aliases.ts +4 -4
- package/src/entries.js +1 -1
- package/src/{autocomplete.ts → file-upload.ts} +1 -1
- package/src/library.ts +1 -1
- package/src/purpur.css +4 -0
- package/dist/accordion-B6OoQ4uZ.mjs +0 -128
- package/dist/accordion-B6OoQ4uZ.mjs.map +0 -1
- package/dist/accordion-BfpN5h4C.js +0 -2
- package/dist/accordion-BfpN5h4C.js.map +0 -1
- package/dist/autocomplete-C6AqdYaZ.mjs +0 -228
- package/dist/autocomplete-C6AqdYaZ.mjs.map +0 -1
- package/dist/autocomplete-yrPbF5gq.js +0 -2
- package/dist/autocomplete-yrPbF5gq.js.map +0 -1
- package/dist/autocomplete.cjs.js +0 -2
- package/dist/autocomplete.cjs.js.map +0 -1
- package/dist/autocomplete.es.js +0 -6
- package/dist/autocomplete.es.js.map +0 -1
- package/dist/button-DZgtrGqN.js +0 -2
- package/dist/button-DZgtrGqN.js.map +0 -1
- package/dist/button-EVRfctR8.mjs +0 -109
- package/dist/button-EVRfctR8.mjs.map +0 -1
- package/dist/card-pdsBEJif.js.map +0 -1
- package/dist/card-t2ZkZ82G.mjs.map +0 -1
- package/dist/components/autocomplete/src/autocomplete.d.ts +0 -18
- package/dist/components/autocomplete/src/autocomplete.d.ts.map +0 -1
- package/dist/components/autocomplete/src/useAutocomplete.d.ts +0 -59
- package/dist/components/autocomplete/src/useAutocomplete.d.ts.map +0 -1
- package/dist/components/autocomplete/src/utils.d.ts +0 -7
- package/dist/components/autocomplete/src/utils.d.ts.map +0 -1
- package/dist/components/stepper/src/stepper-button.d.ts.map +0 -1
- package/dist/content-block-CDMrz41K.mjs.map +0 -1
- package/dist/content-block-DyYAnL2e.js.map +0 -1
- package/dist/date-range-field-CvzOl-eC.js +0 -2
- package/dist/date-range-field-CvzOl-eC.js.map +0 -1
- package/dist/date-range-field-DDr-qEGX.mjs.map +0 -1
- package/dist/dismissable-chip-group-2updhyuR.js.map +0 -1
- package/dist/dismissable-chip-group-Cfs2s2BH.mjs.map +0 -1
- package/dist/drawer-BnqxUIPM.js +0 -2
- package/dist/drawer-BnqxUIPM.js.map +0 -1
- package/dist/drawer-Cnk2OKgi.mjs.map +0 -1
- package/dist/dropdown-C8VsfTQw.mjs +0 -936
- package/dist/dropdown-C8VsfTQw.mjs.map +0 -1
- package/dist/dropdown-p4R2yCnJ.js +0 -2
- package/dist/dropdown-p4R2yCnJ.js.map +0 -1
- package/dist/footer-B8rzVSrZ.js +0 -2
- package/dist/footer-B8rzVSrZ.js.map +0 -1
- package/dist/footer-D5YkHmCo.mjs.map +0 -1
- package/dist/heading-drD5ugCC.js.map +0 -1
- package/dist/heading-xwBuT_-9.mjs.map +0 -1
- package/dist/hero-banner-BXRArPWP.mjs.map +0 -1
- package/dist/hero-banner-CW7DIEZe.js.map +0 -1
- package/dist/libraries/library/src/autocomplete.d.ts +0 -6
- package/dist/libraries/library/src/autocomplete.d.ts.map +0 -1
- package/dist/modal-BuUQrUYJ.mjs.map +0 -1
- package/dist/modal-CnC4Zyjk.js.map +0 -1
- package/dist/notification-banner-BvAy8dlg.mjs.map +0 -1
- package/dist/notification-banner-DUe4fT1r.js +0 -2
- package/dist/notification-banner-DUe4fT1r.js.map +0 -1
- package/dist/popover-4phnhJLj.js +0 -2
- package/dist/popover-4phnhJLj.js.map +0 -1
- package/dist/popover-DhObSx97.mjs +0 -1043
- package/dist/popover-DhObSx97.mjs.map +0 -1
- package/dist/promotion-card-C1UoxzcV.js.map +0 -1
- package/dist/promotion-card-CooYPpFo.mjs.map +0 -1
- package/dist/quantity-selector-Ds7d4MnV.js +0 -2
- package/dist/quantity-selector-Ds7d4MnV.js.map +0 -1
- package/dist/quantity-selector-DwkKKmFy.mjs +0 -172
- package/dist/quantity-selector-DwkKKmFy.mjs.map +0 -1
- package/dist/stepper-5rQ3cK18.js +0 -2
- package/dist/stepper-5rQ3cK18.js.map +0 -1
- package/dist/stepper-B3p9r3gv.mjs +0 -449
- package/dist/stepper-B3p9r3gv.mjs.map +0 -1
- package/dist/table-BIyaTsOh.js +0 -9
- package/dist/table-BIyaTsOh.js.map +0 -1
- package/dist/table-BtymEUG4.mjs +0 -7428
- package/dist/table-BtymEUG4.mjs.map +0 -1
- package/dist/tabs-Bye5lgZ1.mjs +0 -424
- package/dist/tabs-Bye5lgZ1.mjs.map +0 -1
- package/dist/tabs-D-nfZHIA.js +0 -2
- package/dist/tabs-D-nfZHIA.js.map +0 -1
- package/dist/text-field-C9LX7LBf.mjs.map +0 -1
- package/dist/text-field-CS0PT5T6.js.map +0 -1
- package/dist/tooltip-COFCRUKv.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"heading-xwBuT_-9.mjs","sources":["../../../components/heading/src/heading.tsx"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames\";\n\nimport styles from \"./heading.module.scss\";\n\nexport const HeadingTag = {\n H1: \"h1\",\n H2: \"h2\",\n H3: \"h3\",\n H4: \"h4\",\n H5: \"h5\",\n H6: \"h6\",\n} as const;\n\nexport type HeadingTagType = (typeof HeadingTag)[keyof typeof HeadingTag];\n\nexport const TitleVariant = {\n TITLE100: \"title-100\",\n TITLE200: \"title-200\",\n TITLE300: \"title-300\",\n TITLE400: \"title-400\",\n TITLE500: \"title-500\",\n TITLE600: \"title-600\",\n TITLE700: \"title-700\",\n SUBSECTION100: \"subsection-100\",\n} as const;\n\nexport type TitleVariantType = (typeof TitleVariant)[keyof typeof TitleVariant];\n\nexport const DisplayVariant = {\n DISPLAY5: \"display-5\",\n DISPLAY10: \"display-10\",\n DISPLAY15: \"display-15\",\n DISPLAY20: \"display-20\",\n DISPLAY25: \"display-25\",\n DISPLAY50: \"display-50\",\n DISPLAY100: \"display-100\",\n DISPLAY200: \"display-200\",\n} as const;\n\nexport type DisplayVariantType = (typeof DisplayVariant)[keyof typeof DisplayVariant];\n\nexport type HeadingVariant = TitleVariantType | DisplayVariantType;\n\nexport type HeadingProps<T extends HeadingTagType> = Omit<BaseProps<T>, \"children\"> & {\n children: ReactNode;\n enableHyphenation?: boolean;\n negative?: boolean;\n tag: HeadingTagType;\n variant?: HeadingVariant;\n};\n\nconst rootClassName = \"purpur-heading\";\n\nexport const Heading = <T extends HeadingTagType>({\n children,\n className = \"\",\n enableHyphenation = false,\n negative = false,\n tag,\n variant = TitleVariant.TITLE100,\n ...props\n}: HeadingProps<T>) => {\n const Tag = tag;\n const classes = c([\n className,\n styles[rootClassName],\n styles[`${rootClassName}--${variant}`],\n {\n [styles[`${rootClassName}--hyphens`]]: enableHyphenation,\n [styles[`${rootClassName}--negative`]]: negative,\n },\n ]);\n\n return (\n <Tag className={classes} {...props}>\n {children}\n </Tag>\n );\n};\n\nHeading.displayName = \"Heading\";\n"],"names":["HeadingTag","TitleVariant","DisplayVariant","rootClassName","Heading","children","className","enableHyphenation","negative","tag","variant","props","Tag","classes","c","styles"],"mappings":";;;;;;;;;;;;;;;;;;;;;;GAMaA,IAAa;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAIaC,IAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AACjB,GAIaC,IAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AACd,GAcMC,IAAgB,kBAETC,IAAU,CAA2B;AAAA,EAChD,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,mBAAAC,IAAoB;AAAA,EACpB,UAAAC,IAAW;AAAA,EACX,KAAAC;AAAA,EACA,SAAAC,IAAUT,EAAa;AAAA,EACvB,GAAGU;AACL,MAAuB;AACrB,QAAMC,IAAMH,GACNI,IAAUC,EAAE;AAAA,IAChBR;AAAA,IACAS,EAAOZ,CAAa;AAAA,IACpBY,EAAO,GAAGZ,CAAa,KAAKO,CAAO,EAAE;AAAA,IACrC;AAAA,MACE,CAACK,EAAO,GAAGZ,CAAa,WAAW,CAAC,GAAGI;AAAA,MACvC,CAACQ,EAAO,GAAGZ,CAAa,YAAY,CAAC,GAAGK;AAAA,IAAA;AAAA,EAC1C,CACD;AAED,2BACGI,GAAA,EAAI,WAAWC,GAAU,GAAGF,GAC1B,UAAAN,GACH;AAEJ;AAEAD,EAAQ,cAAc;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hero-banner-BXRArPWP.mjs","sources":["../../../components/hero-banner/src/hero-banner-actions.tsx","../../../components/icon/dist/assets/play-filled.es.js","../../../components/icon/dist/assets/tv-pause.es.js","../../../components/hero-banner/src/hero-banner-media.tsx","../../../components/hero-banner/src/hero-banner-types.ts","../../../components/hero-banner/src/hero-banner.tsx"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./hero-banner.module.scss\";\n\ntype HeroBannerActionProps = Omit<BaseProps, \"children\"> & {\n /** One or several CTA links or buttons */\n children: ReactNode;\n};\n\nconst rootClassName = \"purpur-hero-banner\";\n\nconst cx = c.bind(styles);\n\nexport const HeroBannerActions = ({ children, className, ...props }: HeroBannerActionProps) => {\n return (\n <div {...props} className={cx(`${rootClassName}__actions`, className)}>\n {children}\n </div>\n );\n};\n","const l = {\n name: \"play-filled\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 12 5.5 19.794V4.206L19 12Z\"/><path fill-rule=\"evenodd\" d=\"M19.875 12a.875.875 0 0 1-.438.758l-13.5 7.794a.875.875 0 0 1-1.312-.758V4.206a.875.875 0 0 1 1.313-.758l13.5 7.794c.27.156.437.445.437.758Zm-13.5-6.279V18.28L17.25 12 6.375 5.721Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"play-filled\"],\n category: \"action\"\n};\nexport {\n l as playFilled\n};\n//# sourceMappingURL=play-filled.es.js.map\n","const a = {\n name: \"tv-pause\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 20h-3V4h3v16ZM8 20H5V4h3v16Z\"/><path fill-rule=\"evenodd\" d=\"M4.1 4a.9.9 0 0 1 .9-.9h3a.9.9 0 0 1 .9.9v16a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V4Zm1.8.9v14.2h1.2V4.9H5.9Zm9.2-.9a.9.9 0 0 1 .9-.9h3a.9.9 0 0 1 .9.9v16a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4Zm1.8.9v14.2h1.2V4.9h-1.2Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"tv-pause\"],\n category: \"action\"\n};\nexport {\n a as tvPause\n};\n//# sourceMappingURL=tv-pause.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Icon } from \"@purpur/icon\";\nimport { playFilled } from \"@purpur/icon/assets/play-filled\";\nimport { tvPause } from \"@purpur/icon/assets/tv-pause\";\n\nimport styles from \"./hero-banner.module.scss\";\n\nconst rootClassName = \"purpur-hero-banner\";\n\ntype WithVideo = {\n /** Video pause/play button callback (your implementation should handle the state) */\n togglePausePlay: () => void;\n /** Video pause/play button status (your implementation should handle the state) */\n isPlaying?: boolean;\n /** Aria label for the pause/play button, when the video is playing */\n videoPauseAriaLabel: string;\n /** Aria label for the pause/play button, when the video is not playing */\n videoPlayAriaLabel: string;\n};\n\ntype WithoutVideo = {\n togglePausePlay?: never;\n isPlaying?: never;\n videoPauseAriaLabel?: never;\n videoPlayAriaLabel?: never;\n};\n\nexport type HeroBannerMediaProps = BaseProps & (WithVideo | WithoutVideo);\n\nexport const HeroBannerMedia = ({\n children,\n isPlaying,\n togglePausePlay,\n videoPauseAriaLabel,\n videoPlayAriaLabel,\n className,\n ...props\n}: HeroBannerMediaProps) =>\n children && (\n <div className={className} {...props}>\n {children}\n {!!togglePausePlay && (\n <Button\n variant=\"primary\"\n negative\n iconOnly\n onClick={() => {\n togglePausePlay();\n }}\n className={styles[`${rootClassName}__video-button`]}\n aria-label={isPlaying ? videoPauseAriaLabel : videoPlayAriaLabel}\n >\n <Icon size=\"xs\" svg={isPlaying ? tvPause : playFilled} />\n </Button>\n )}\n </div>\n );\n","import type { ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport type { ColorScheme } from \"@purpur/theme\";\n\nexport const TitleHyphenVariant = {\n default: \"default\",\n enabled: \"enabled\",\n disabled: \"disabled\",\n} as const;\n\nexport type TitleHyphens = (typeof TitleHyphenVariant)[keyof typeof TitleHyphenVariant];\n\nexport type HeroBannerProps = BaseProps & {\n /**\n * Custom content slot\n * Add your CTAs here with <HeroBanner.CTAs> component\n */\n children?: ReactNode;\n /**\n * Breadcrumbs: <br/>\n * - Slot for your Breadcrumbs component\n */\n breadcrumbs?: ReactNode;\n forceColorScheme?: ColorScheme;\n /**\n * Content to display before the main heading\n */\n beforeTitle?: ReactNode;\n /**\n * Main heading of the component\n */\n title: string;\n /**\n * Main heading tag\n */\n titleTag?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n titleHyphens?: TitleHyphens;\n /**\n * Preamble text\n */\n preamble?: string;\n /**\n * Additional text under the CTAs, recommended to limit element to simple text with text decorations\n */\n additionalText?: ReactNode;\n /**\n * <HeroBanner.Media /> component (images and videos)\n */\n media?: ReactNode;\n};\n","import React from \"react\";\nimport { Grid } from \"@purpur/grid\";\nimport { Heading } from \"@purpur/heading\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { useTheme } from \"@purpur/theme\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./hero-banner.module.scss\";\nimport { HeroBannerActions } from \"./hero-banner-actions\";\nimport { HeroBannerMedia } from \"./hero-banner-media\";\nimport type { HeroBannerProps } from \"./hero-banner-types\";\n\nexport type { HeroBannerMediaProps } from \"./hero-banner-media\";\nexport type { HeroBannerProps, TitleHyphens } from \"./hero-banner-types\";\nexport { TitleHyphenVariant } from \"./hero-banner-types\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-hero-banner\";\n\nexport const HeroBanner = ({\n children,\n className,\n breadcrumbs,\n forceColorScheme,\n beforeTitle,\n title,\n titleTag = \"h1\",\n titleHyphens = \"default\",\n preamble,\n additionalText,\n media,\n ...props\n}: HeroBannerProps) => {\n const { options } = useTheme();\n const classes = cx([rootClassName, className]);\n\n const hasMedia = Boolean(media);\n const hasBreadcrumbs = Boolean(breadcrumbs);\n const hasAdditionalText = Boolean(additionalText);\n\n const resolvedColorScheme = forceColorScheme ?? options?.heroBannerColorScheme;\n\n return (\n <section data-color-scheme={resolvedColorScheme} className={classes} {...props}>\n <Grid\n noGap\n className={cx([\n `${rootClassName}__container`,\n {\n [`${rootClassName}__container--with-media`]: hasMedia,\n [`${rootClassName}__container--no-media`]: !hasMedia,\n },\n ])}\n containerClassName={cx(`${rootClassName}__grid-container`)}\n >\n {breadcrumbs && <div className={cx(`${rootClassName}__breadcrumbs`)}>{breadcrumbs}</div>}\n\n <div className={cx([`${rootClassName}__media`, `${rootClassName}__media--sm`])}>\n {media}\n </div>\n\n <div\n className={cx([\n `${rootClassName}__content`,\n {\n [`${rootClassName}__content--no-media`]: !hasMedia,\n [`${rootClassName}__content--no-breadcrumbs`]: !hasBreadcrumbs,\n [`${rootClassName}__content--no-additional-text`]: !hasAdditionalText,\n },\n ])}\n >\n <div\n className={cx([\n `${rootClassName}__main-content`,\n {\n [`${rootClassName}__main-content--no-media`]: !hasMedia,\n },\n ])}\n >\n {beforeTitle}\n {title && (\n <Heading\n negative\n tag={titleTag}\n variant=\"display-50\"\n className={cx([\n `${rootClassName}__title`,\n `${rootClassName}__title--hyphens-${titleHyphens}`,\n ])}\n >\n {title}\n </Heading>\n )}\n {preamble && (\n <Paragraph\n negative\n variant=\"preamble-100\"\n className={cx(`${rootClassName}__preamble`)}\n >\n {preamble}\n </Paragraph>\n )}\n {children && <div className={cx(`${rootClassName}__custom-content`)}>{children}</div>}\n </div>\n\n {additionalText && (\n <Paragraph\n negative\n variant=\"additional-100\"\n className={styles[`${rootClassName}__additional-text`]}\n >\n {additionalText}\n </Paragraph>\n )}\n </div>\n\n <div className={cx([`${rootClassName}__media`, `${rootClassName}__media--lg`])}>\n {media}\n </div>\n </Grid>\n </section>\n );\n};\n\nHeroBanner.displayName = \"HeroBanner\";\n\nHeroBanner.Media = HeroBannerMedia;\nHeroBanner.Actions = HeroBannerActions;\n"],"names":["rootClassName","cx","c","styles","HeroBannerActions","children","className","props","jsx","l","a","HeroBannerMedia","isPlaying","togglePausePlay","videoPauseAriaLabel","videoPlayAriaLabel","jsxs","Button","Icon","tvPause","playFilled","TitleHyphenVariant","HeroBanner","breadcrumbs","forceColorScheme","beforeTitle","title","titleTag","titleHyphens","preamble","additionalText","media","options","useTheme","classes","hasMedia","hasBreadcrumbs","hasAdditionalText","resolvedColorScheme","Grid","Heading","Paragraph"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hero-banner-CW7DIEZe.js","sources":["../../../components/hero-banner/src/hero-banner-actions.tsx","../../../components/icon/dist/assets/play-filled.es.js","../../../components/icon/dist/assets/tv-pause.es.js","../../../components/hero-banner/src/hero-banner-media.tsx","../../../components/hero-banner/src/hero-banner-types.ts","../../../components/hero-banner/src/hero-banner.tsx"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./hero-banner.module.scss\";\n\ntype HeroBannerActionProps = Omit<BaseProps, \"children\"> & {\n /** One or several CTA links or buttons */\n children: ReactNode;\n};\n\nconst rootClassName = \"purpur-hero-banner\";\n\nconst cx = c.bind(styles);\n\nexport const HeroBannerActions = ({ children, className, ...props }: HeroBannerActionProps) => {\n return (\n <div {...props} className={cx(`${rootClassName}__actions`, className)}>\n {children}\n </div>\n );\n};\n","const l = {\n name: \"play-filled\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 12 5.5 19.794V4.206L19 12Z\"/><path fill-rule=\"evenodd\" d=\"M19.875 12a.875.875 0 0 1-.438.758l-13.5 7.794a.875.875 0 0 1-1.312-.758V4.206a.875.875 0 0 1 1.313-.758l13.5 7.794c.27.156.437.445.437.758Zm-13.5-6.279V18.28L17.25 12 6.375 5.721Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"play-filled\"],\n category: \"action\"\n};\nexport {\n l as playFilled\n};\n//# sourceMappingURL=play-filled.es.js.map\n","const a = {\n name: \"tv-pause\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 20h-3V4h3v16ZM8 20H5V4h3v16Z\"/><path fill-rule=\"evenodd\" d=\"M4.1 4a.9.9 0 0 1 .9-.9h3a.9.9 0 0 1 .9.9v16a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V4Zm1.8.9v14.2h1.2V4.9H5.9Zm9.2-.9a.9.9 0 0 1 .9-.9h3a.9.9 0 0 1 .9.9v16a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4Zm1.8.9v14.2h1.2V4.9h-1.2Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"tv-pause\"],\n category: \"action\"\n};\nexport {\n a as tvPause\n};\n//# sourceMappingURL=tv-pause.es.js.map\n","import React from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Icon } from \"@purpur/icon\";\nimport { playFilled } from \"@purpur/icon/assets/play-filled\";\nimport { tvPause } from \"@purpur/icon/assets/tv-pause\";\n\nimport styles from \"./hero-banner.module.scss\";\n\nconst rootClassName = \"purpur-hero-banner\";\n\ntype WithVideo = {\n /** Video pause/play button callback (your implementation should handle the state) */\n togglePausePlay: () => void;\n /** Video pause/play button status (your implementation should handle the state) */\n isPlaying?: boolean;\n /** Aria label for the pause/play button, when the video is playing */\n videoPauseAriaLabel: string;\n /** Aria label for the pause/play button, when the video is not playing */\n videoPlayAriaLabel: string;\n};\n\ntype WithoutVideo = {\n togglePausePlay?: never;\n isPlaying?: never;\n videoPauseAriaLabel?: never;\n videoPlayAriaLabel?: never;\n};\n\nexport type HeroBannerMediaProps = BaseProps & (WithVideo | WithoutVideo);\n\nexport const HeroBannerMedia = ({\n children,\n isPlaying,\n togglePausePlay,\n videoPauseAriaLabel,\n videoPlayAriaLabel,\n className,\n ...props\n}: HeroBannerMediaProps) =>\n children && (\n <div className={className} {...props}>\n {children}\n {!!togglePausePlay && (\n <Button\n variant=\"primary\"\n negative\n iconOnly\n onClick={() => {\n togglePausePlay();\n }}\n className={styles[`${rootClassName}__video-button`]}\n aria-label={isPlaying ? videoPauseAriaLabel : videoPlayAriaLabel}\n >\n <Icon size=\"xs\" svg={isPlaying ? tvPause : playFilled} />\n </Button>\n )}\n </div>\n );\n","import type { ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport type { ColorScheme } from \"@purpur/theme\";\n\nexport const TitleHyphenVariant = {\n default: \"default\",\n enabled: \"enabled\",\n disabled: \"disabled\",\n} as const;\n\nexport type TitleHyphens = (typeof TitleHyphenVariant)[keyof typeof TitleHyphenVariant];\n\nexport type HeroBannerProps = BaseProps & {\n /**\n * Custom content slot\n * Add your CTAs here with <HeroBanner.CTAs> component\n */\n children?: ReactNode;\n /**\n * Breadcrumbs: <br/>\n * - Slot for your Breadcrumbs component\n */\n breadcrumbs?: ReactNode;\n forceColorScheme?: ColorScheme;\n /**\n * Content to display before the main heading\n */\n beforeTitle?: ReactNode;\n /**\n * Main heading of the component\n */\n title: string;\n /**\n * Main heading tag\n */\n titleTag?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n titleHyphens?: TitleHyphens;\n /**\n * Preamble text\n */\n preamble?: string;\n /**\n * Additional text under the CTAs, recommended to limit element to simple text with text decorations\n */\n additionalText?: ReactNode;\n /**\n * <HeroBanner.Media /> component (images and videos)\n */\n media?: ReactNode;\n};\n","import React from \"react\";\nimport { Grid } from \"@purpur/grid\";\nimport { Heading } from \"@purpur/heading\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { useTheme } from \"@purpur/theme\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./hero-banner.module.scss\";\nimport { HeroBannerActions } from \"./hero-banner-actions\";\nimport { HeroBannerMedia } from \"./hero-banner-media\";\nimport type { HeroBannerProps } from \"./hero-banner-types\";\n\nexport type { HeroBannerMediaProps } from \"./hero-banner-media\";\nexport type { HeroBannerProps, TitleHyphens } from \"./hero-banner-types\";\nexport { TitleHyphenVariant } from \"./hero-banner-types\";\n\nconst cx = c.bind(styles);\n\nconst rootClassName = \"purpur-hero-banner\";\n\nexport const HeroBanner = ({\n children,\n className,\n breadcrumbs,\n forceColorScheme,\n beforeTitle,\n title,\n titleTag = \"h1\",\n titleHyphens = \"default\",\n preamble,\n additionalText,\n media,\n ...props\n}: HeroBannerProps) => {\n const { options } = useTheme();\n const classes = cx([rootClassName, className]);\n\n const hasMedia = Boolean(media);\n const hasBreadcrumbs = Boolean(breadcrumbs);\n const hasAdditionalText = Boolean(additionalText);\n\n const resolvedColorScheme = forceColorScheme ?? options?.heroBannerColorScheme;\n\n return (\n <section data-color-scheme={resolvedColorScheme} className={classes} {...props}>\n <Grid\n noGap\n className={cx([\n `${rootClassName}__container`,\n {\n [`${rootClassName}__container--with-media`]: hasMedia,\n [`${rootClassName}__container--no-media`]: !hasMedia,\n },\n ])}\n containerClassName={cx(`${rootClassName}__grid-container`)}\n >\n {breadcrumbs && <div className={cx(`${rootClassName}__breadcrumbs`)}>{breadcrumbs}</div>}\n\n <div className={cx([`${rootClassName}__media`, `${rootClassName}__media--sm`])}>\n {media}\n </div>\n\n <div\n className={cx([\n `${rootClassName}__content`,\n {\n [`${rootClassName}__content--no-media`]: !hasMedia,\n [`${rootClassName}__content--no-breadcrumbs`]: !hasBreadcrumbs,\n [`${rootClassName}__content--no-additional-text`]: !hasAdditionalText,\n },\n ])}\n >\n <div\n className={cx([\n `${rootClassName}__main-content`,\n {\n [`${rootClassName}__main-content--no-media`]: !hasMedia,\n },\n ])}\n >\n {beforeTitle}\n {title && (\n <Heading\n negative\n tag={titleTag}\n variant=\"display-50\"\n className={cx([\n `${rootClassName}__title`,\n `${rootClassName}__title--hyphens-${titleHyphens}`,\n ])}\n >\n {title}\n </Heading>\n )}\n {preamble && (\n <Paragraph\n negative\n variant=\"preamble-100\"\n className={cx(`${rootClassName}__preamble`)}\n >\n {preamble}\n </Paragraph>\n )}\n {children && <div className={cx(`${rootClassName}__custom-content`)}>{children}</div>}\n </div>\n\n {additionalText && (\n <Paragraph\n negative\n variant=\"additional-100\"\n className={styles[`${rootClassName}__additional-text`]}\n >\n {additionalText}\n </Paragraph>\n )}\n </div>\n\n <div className={cx([`${rootClassName}__media`, `${rootClassName}__media--lg`])}>\n {media}\n </div>\n </Grid>\n </section>\n );\n};\n\nHeroBanner.displayName = \"HeroBanner\";\n\nHeroBanner.Media = HeroBannerMedia;\nHeroBanner.Actions = HeroBannerActions;\n"],"names":["rootClassName","cx","c","styles","HeroBannerActions","children","className","props","jsx","l","a","HeroBannerMedia","isPlaying","togglePausePlay","videoPauseAriaLabel","videoPlayAriaLabel","jsxs","Button","Icon","tvPause","playFilled","TitleHyphenVariant","HeroBanner","breadcrumbs","forceColorScheme","beforeTitle","title","titleTag","titleHyphens","preamble","additionalText","media","options","useTheme","classes","hasMedia","hasBreadcrumbs","hasAdditionalText","resolvedColorScheme","Grid","Heading","Paragraph"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/autocomplete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modal-BuUQrUYJ.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 { useThemePortalContainer } from \"@purpur/theme\";\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 * Optional DOM element to portal the modal content into. When omitted,\n * the modal renders inside the nearest `ThemeProvider` so it inherits\n * the active color scheme. Pass `document.body` (or any other element) to\n * override. Pass `null` to fall back to Radix' default (`document.body`).\n * */\n container?: HTMLElement | null;\n /**\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 container,\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 const themePortalContainer = useThemePortalContainer();\n const portalContainer =\n container === undefined ? themePortalContainer : container ?? undefined;\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 container={portalContainer}>\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","container","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","themePortalContainer","useThemePortalContainer","portalContainer","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","jsxs","RadixPortal","jsx","RadixOverlay","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-CnC4Zyjk.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 { useThemePortalContainer } from \"@purpur/theme\";\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 * Optional DOM element to portal the modal content into. When omitted,\n * the modal renders inside the nearest `ThemeProvider` so it inherits\n * the active color scheme. Pass `document.body` (or any other element) to\n * override. Pass `null` to fall back to Radix' default (`document.body`).\n * */\n container?: HTMLElement | null;\n /**\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 container,\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 const themePortalContainer = useThemePortalContainer();\n const portalContainer =\n container === undefined ? themePortalContainer : container ?? undefined;\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 container={portalContainer}>\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","container","onCloseAutoFocus","ref","closeButtonAriaLabel","showCloseButton","rest","contentOverflow","setContentOverflow","useState","scrollbarWidth","setScrollbarWidth","wrapperRef","useRef","wrapperInnerRef","themePortalContainer","useThemePortalContainer","portalContainer","classes","getTestId","id","handlePointerDownOutside","event","handleContentOverflow","useCallback","computedStyle","wrapperHeight","innerHeight","handleInitialFocus","frame","heading","handleEscapeKeyDown","useEffect","jsxs","RadixPortal","jsx","RadixOverlay","RadixContent","CloseButton","RadixTitle","Heading","VisuallyHidden","RadixDescription","Paragraph","ModalActions","ariaLabel","hasImage","RadixClose","Button","IconClose","notificationRef","ModalTrigger","RadixTrigger","Modal","open","onOpenChange","RadixRoot"],"mappings":"ogEAgGMA,EACJC,GAC+BA,EAA2B,kBAAoB,GAE1EC,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EAClBC,EAAgB,uBAETC,GAAeC,EAAAA,WAC1B,CACE,CACE,CAAC,eAAgBC,EACjB,QAAAC,EACA,SAAAC,EACA,UAAAC,EACA,YAAAC,EACA,2BAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,cAAAC,EAAgB,GAChB,MAAAC,EACA,aAAAC,EAAe,OACf,OAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,GAAGpB,CAAA,EAELqB,IACG,CACH,KAAM,CAAE,qBAAAC,EAAsB,gBAAAC,EAAiB,GAAGC,GAASxB,EACrD,CAACyB,EAAiBC,CAAkB,EAAIC,EAAAA,SAAS,EAAK,EACtD,CAACC,EAAgBC,CAAiB,EAAIF,EAAAA,SAAS,CAAC,EAChDG,EAAaC,EAAAA,OAAuB,IAAI,EACxCC,EAAkBD,EAAAA,OAAuB,IAAI,EAC7CE,EAAuBC,EAAAA,wBAAA,EACvBC,EACJhB,IAAc,OAAYc,EAAuBd,GAAa,OAE1DiB,EAAUnC,EACdG,EACA,CAAE,CAAC,GAAGA,CAAa,cAAc,EAAG,CAAC,CAACU,CAAA,EACtC,CAAE,CAAC,GAAGV,CAAa,YAAY,EAAGqB,CAAA,EAClC,CAAE,CAAC,GAAGrB,CAAa,iBAAiB,EAAGW,CAAA,EACvCL,CAAA,EAGI2B,EAAaC,GAAgB/B,EAAa,GAAGA,CAAU,IAAI+B,CAAE,GAAK,OAElEC,EAA4BC,GAAwD,CACpF5B,GACF4B,EAAM,eAAA,CAEV,EAEMC,EAAwBC,EAAAA,YAAY,IAAM,CAC9C,GAAI,CAACZ,EAAW,SAAW,CAACE,EAAgB,QAC1C,OAGF,MAAMW,EAAgB,OAAO,iBAAiBb,EAAW,QAAS,IAAI,EAChEc,EAAgB,WAAWD,EAAc,iBAAiB,QAAQ,CAAC,EACnEE,EAAcb,EAAgB,QAAQ,aAE5CN,EAAmBkB,EAAgBC,CAAW,EAE9ChB,GACGC,EAAW,QAAQ,aAAe,IAAMA,EAAW,QAAQ,aAAe,EAAA,CAE/E,EAAG,CAAA,CAAE,EAECgB,EAAqB,IAAM,CAC/B,MAAMC,EAAQf,EAAgB,QAC9B,GAAIe,EAAO,CACT,MAAMC,EAAUD,EAAM,cAAc,IAAI,EAExCC,GACE,WAAW,IAAM,CACfA,EAAQ,MAAA,CACV,CAAC,CACL,CACF,EAEMC,EAAuBT,GAAyB,CAChD5B,GAA8B,CAACW,GACjCiB,EAAM,eAAA,CAEV,EAEAU,OAAAA,EAAAA,UAAU,KACR,OAAO,iBAAiB,SAAUT,CAAqB,EAEhD,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAqB,CAC5D,GACC,CAACA,CAAqB,CAAC,EAE1BS,EAAAA,UAAU,IAAM,CACdT,EAAA,CACF,EAAG,CAACxB,EAAcR,EAAUgC,CAAqB,CAAC,EAGhDU,EAAAA,KAACC,EAAAA,OAAA,CAAY,UAAWjB,EACtB,SAAA,CAAAkB,EAAAA,IAACC,EAAAA,QAAA,CAAa,UAAWrD,EAAG,GAAGG,CAAa,WAAW,EAAG,MAAO,CAAE,OAAAc,CAAA,CAAO,CAAG,EAC7EiC,EAAAA,KAACI,EAAAA,QAAA,CACE,GAAG/B,EACJ,UAAWY,EACX,cAAa7B,EACb,IAAAc,EACC,GAAI,CAACV,GAAe,CAAG,mBAAqB,MAAA,EAC7C,qBAAsB4B,EACtB,gBAAiB,IAAM,CACrBE,EAAA,EACAK,EAAA,CACF,EACA,gBAAiBG,EACjB,iBAAA7B,EACA,MAAO,CAAE,OAAQ,QAAQF,CAAM,OAAA,EAE/B,SAAA,CAAAiC,EAAAA,KAAC,MAAA,CAAI,IAAKrB,EAAY,UAAW7B,EAAG,GAAGG,CAAa,WAAW,EAC5D,SAAA,CAAAL,EAAoBC,CAAK,GAAKsB,GAAwBR,GACrDuC,EAAAA,IAACG,EAAA,CACC,aAAYlC,EACZ,SAAQ,GACR,eAAAM,EACA,cAAaS,EAAU,cAAc,CAAA,CAAA,EAGzCc,EAAAA,KAAC,OAAI,IAAKnB,EAAiB,UAAW/B,EAAG,GAAGG,CAAa,iBAAiB,EACxE,SAAA,CAAA+C,OAAC,OAAI,UAAWlD,EAAG,GAAGG,CAAa,UAAU,EAC1C,SAAA,CAAAL,EAAoBC,CAAK,GAAKsB,GAAwB,CAACR,GACtDuC,EAAAA,IAACG,EAAA,CACC,aAAYlC,EACZ,cAAae,EAAU,cAAc,CAAA,CAAA,EAGzCgB,EAAAA,IAACI,EAAAA,MAAA,CACC,QAAO,GACP,UAAWxD,EAAG,GAAGG,CAAa,SAAS,EACvC,cAAaiC,EAAU,OAAO,EAE9B,SAAAgB,EAAAA,IAACK,EAAAA,QAAA,CACC,IAAI,KACJ,QAAQ,aACR,SAAU,GACV,UAAWzD,EAAG,GAAGG,CAAa,WAAW,EAExC,SAAAY,CAAA,CAAA,CACH,CAAA,CACF,EACF,EACCF,GACCuC,EAAAA,IAAC,MAAA,CACC,UAAWpD,EAAG,GAAGG,CAAa,iBAAiB,EAC/C,cAAaiC,EAAU,OAAO,EAE7B,SAAAvB,CAAA,CAAA,EAGLuC,MAAC,MAAA,CAAI,UAAWpD,EAAG,GAAGG,CAAa,QAAQ,EACzC,SAAA+C,EAAAA,KAAC,OAAI,UAAWlD,EAAG,GAAGG,CAAa,cAAc,EAC9C,SAAA,CAAAO,GAAeE,GACdwC,MAACM,EAAAA,eAAA,CAAe,QAAO,GACrB,SAAAN,EAAAA,IAACO,EAAAA,YAAA,CAAiB,cAAavB,EAAU,aAAa,EACnD,SAAA1B,CAAA,CACH,EACF,EAEDA,GAAe,CAACE,GACfwC,EAAAA,IAACO,EAAAA,YAAA,CACC,QAAO,GACP,UAAW3D,EAAG,GAAGG,CAAa,eAAe,EAC7C,cAAaiC,EAAU,aAAa,EAEpC,SAAAgB,EAAAA,IAACQ,YAAA,CAAU,QAAQ,gBAAiB,SAAAlD,CAAA,CAAY,CAAA,CAAA,EAGpD0C,MAAC,OAAK,SAAA5C,EAAS,EACd,CAACM,GAAiBsC,EAAAA,IAACS,EAAA,CAAa,QAAAtD,EAAkB,aAAAS,CAAA,CAA4B,CAAA,CAAA,CACjF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,EAECF,GAAiBsC,EAAAA,IAACS,EAAA,CAAa,QAAAtD,EAAkB,aAAAS,CAAA,CAA4B,CAAA,CAAA,CAAA,CAChF,EACF,CAEJ,CACF,EAEMuC,EAAc,CAAC,CACnB,CAAC,cAAeO,EAChB,SAAAC,EACA,eAAApC,EACA,CAAC,eAAgBrB,CACnB,IAME8C,EAAAA,IAACY,EAAAA,MAAA,CAAW,QAAO,GACjB,SAAAZ,EAAAA,IAACa,EAAAA,OAAA,CACC,QAASF,EAAW,UAAY,kBAChC,SAAUA,EACV,KAAK,KACL,SAAQ,GACR,aAAYD,EACZ,UAAW9D,EAAG,GAAGG,CAAa,gBAAgB,EAC9C,MAAO,CAAE,MAAO,oCAAoCwB,GAAkB,CAAC,KAAA,EACvE,cAAarB,EAEb,eAAC4D,EAAAA,EAAA,CAAA,CAAU,CAAA,CACb,EACF,EAKWL,EAAe,CAAC,CAC3B,QAAAtD,EACA,aAAAS,CACF,IAA2D,CACzD,MAAMmD,EAAkBrC,EAAAA,OAAuB,IAAI,EAEnDmB,OAAAA,EAAAA,UAAU,IAAM,CACVjC,GACFmD,GAAiB,SAAS,iBAAiB,EAAK,CAEpD,EAAG,CAACnD,CAAY,CAAC,EAEVT,SACJ,MAAA,CAAI,UAAWP,EAAG,GAAGG,CAAa,WAAW,EAC5C,SAAA,CAAAiD,EAAAA,IAAC,MAAA,CAAI,UAAWpD,EAAG,GAAGG,CAAa,mBAAmB,EAAG,cAAY,gBAClE,SAAAI,CAAA,CACH,EACCS,GACCoC,EAAAA,IAAC,MAAA,CAAI,UAAWpD,EAAG,GAAGG,CAAa,gBAAgB,EAAG,IAAKgE,EACxD,SAAAnD,CAAA,CACH,QAED,OAAA,CAAK,UAAWhB,EAAG,GAAGG,CAAa,qBAAqB,CAAA,CAAG,CAAA,CAAA,CAC9D,EACE,IACN,EC3UaiE,GAAe/D,EAAAA,WAC1B,CAAC,CAAE,SAAAG,EAAU,GAAGT,CAAA,EAASqB,UAEpBiD,EAAAA,QAAA,CAAa,QAAO,GAAC,IAAAjD,EAAW,GAAGrB,EACjC,SAAAS,EACH,CAGN,ECGa8D,EAAQ,CAAC,CACpB,CAAC,eAAgBhE,EACjB,SAAAE,EACA,KAAA+D,EACA,aAAAC,CACF,UACGC,EAAAA,KAAA,CAAU,KAAAF,EAAY,aAAAC,EAA4B,cAAalE,EAC7D,SAAAE,CAAA,CACH,EAGF8D,EAAM,QAAUF,GAChBE,EAAM,QAAUlE,GAEhBkE,EAAM,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-banner-BvAy8dlg.mjs","sources":["../../../components/notification-banner/src/notification-banner.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Grid } from \"@purpur/grid\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { IconInfo } from \"@purpur/icon/info\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./notification-banner.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type DefaultProps = BaseProps & {\n closeButtonAriaLabel?: string;\n description?: string;\n hideIcon?: boolean;\n icon?: ReactNode;\n link?: ReactNode;\n titleTag?: HeadingTagType;\n title?: string;\n};\n\ntype CloseButtonProps = {\n onClose: () => void;\n closeButtonAriaLabel: string;\n};\n\ntype NoCloseButtonProps = {\n onClose?: never;\n closeButtonAriaLabel?: never;\n};\n\nexport type NotificationBannerProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst rootClassName = \"purpur-notification-banner\";\n\nexport const NotificationBanner = forwardRef<HTMLDivElement, NotificationBannerProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n children,\n className,\n closeButtonAriaLabel,\n description,\n hideIcon,\n icon,\n link,\n onClose,\n titleTag = \"h4\",\n title,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n\n return (\n <div {...props} className={classes} role=\"alert\" ref={ref} data-testid={dataTestId}>\n <Grid>\n <div className={cx(`${rootClassName}__container`)}>\n {!hideIcon ? (\n icon ? (\n <span className={cx(`${rootClassName}__icon`)}>{icon}</span>\n ) : (\n <IconInfo className={cx(`${rootClassName}__icon`)} size=\"sm\" />\n )\n ) : null}\n <div className={cx(`${rootClassName}__content`)}>\n <Heading\n tag={titleTag}\n variant=\"subsection-100\"\n className={cx([\n `${rootClassName}__heading`,\n { [`${rootClassName}__heading--no-overlap`]: onClose },\n ])}\n >\n {title}\n </Heading>\n <div>\n {description} {link}\n </div>\n {children}\n </div>\n {onClose && (\n <Button\n data-testid={dataTestId ? `${dataTestId}-close-button` : undefined}\n variant=\"tertiary-purple\"\n size=\"sm\"\n iconOnly\n aria-label={closeButtonAriaLabel}\n onClick={onClose}\n className={cx(`${rootClassName}__close-button`)}\n >\n <IconClose size=\"sm\" />\n </Button>\n )}\n </div>\n </Grid>\n </div>\n );\n }\n);\n\nNotificationBanner.displayName = \"NotificationBanner\";\n"],"names":["cx","c","styles","rootClassName","NotificationBanner","forwardRef","dataTestId","children","className","closeButtonAriaLabel","description","hideIcon","icon","link","onClose","titleTag","title","props","ref","classes","jsx","Grid","IconInfo","Heading","Button","IconClose"],"mappings":";;;;;;;;;;;;;;;;GAWMA,IAAKC,EAAE,KAAKC,CAAM,GAwBlBC,IAAgB,8BAETC,IAAqBC;AAAA,EAChC,CACE;AAAA,IACE,CAAC,gBAAgBC;AAAA,IACjB,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAUnB,EAAGQ,GAAWL,CAAa;AAE3C,WACE,gBAAAiB,EAAC,SAAK,GAAGH,GAAO,WAAWE,GAAS,MAAK,SAAQ,KAAAD,GAAU,eAAaZ,GACtE,UAAA,gBAAAc,EAACC,GAAA,EACC,4BAAC,OAAA,EAAI,WAAWrB,EAAG,GAAGG,CAAa,aAAa,GAC7C,UAAA;AAAA,MAACQ,IAME,OALFC,IACE,gBAAAQ,EAAC,QAAA,EAAK,WAAWpB,EAAG,GAAGG,CAAa,QAAQ,GAAI,UAAAS,GAAK,IAErD,gBAAAQ,EAACE,GAAA,EAAS,WAAWtB,EAAG,GAAGG,CAAa,QAAQ,GAAG,MAAK,KAAA,CAAK;AAAA,wBAGhE,OAAA,EAAI,WAAWH,EAAG,GAAGG,CAAa,WAAW,GAC5C,UAAA;AAAA,QAAA,gBAAAiB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAKR;AAAA,YACL,SAAQ;AAAA,YACR,WAAWf,EAAG;AAAA,cACZ,GAAGG,CAAa;AAAA,cAChB,EAAE,CAAC,GAAGA,CAAa,uBAAuB,GAAGW,EAAA;AAAA,YAAQ,CACtD;AAAA,YAEA,UAAAE;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEF,OAAA,EACE,UAAA;AAAA,UAAAN;AAAA,UAAY;AAAA,UAAEG;AAAA,QAAA,GACjB;AAAA,QACCN;AAAA,MAAA,GACH;AAAA,MACCO,KACC,gBAAAM;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,eAAalB,IAAa,GAAGA,CAAU,kBAAkB;AAAA,UACzD,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,UAAQ;AAAA,UACR,cAAYG;AAAA,UACZ,SAASK;AAAA,UACT,WAAWd,EAAG,GAAGG,CAAa,gBAAgB;AAAA,UAE9C,UAAA,gBAAAiB,EAACK,GAAA,EAAU,MAAK,KAAA,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACvB,EAAA,CAEJ,GACF,GACF;AAAA,EAEJ;AACF;AAEArB,EAAmB,cAAc;"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const n=require("react/jsx-runtime"),m=require("react"),x=require("./button-DZgtrGqN.js"),N=require("./grid-uGMD2euo.js"),j=require("./heading-drD5ugCC.js"),v=require("./close.es-VL3lKi1O.js"),q=require("./info.es-Br84jly5.js"),$=require("./bind-DeUYJ6m9.js"),y={"purpur-notification-banner":"_purpur-notification-banner_nh2gd_1","purpur-notification-banner__container":"_purpur-notification-banner__container_nh2gd_6","purpur-notification-banner__content":"_purpur-notification-banner__content_nh2gd_11","purpur-notification-banner__icon":"_purpur-notification-banner__icon_nh2gd_16","purpur-notification-banner__heading":"_purpur-notification-banner__heading_nh2gd_20","purpur-notification-banner__heading--no-overlap":"_purpur-notification-banner__heading--no-overlap_nh2gd_23","purpur-notification-banner__close-button":"_purpur-notification-banner__close-button_nh2gd_26"},r=$.c.bind(y),i="purpur-notification-banner",o=m.forwardRef(({["data-testid"]:e,children:c,className:s,closeButtonAriaLabel:_,description:u,hideIcon:p,icon:a,link:d,onClose:t,titleTag:l="h4",title:b,...h},f)=>{const g=r(s,i);return n.jsx("div",{...h,className:g,role:"alert",ref:f,"data-testid":e,children:n.jsx(N.Grid,{children:n.jsxs("div",{className:r(`${i}__container`),children:[p?null:a?n.jsx("span",{className:r(`${i}__icon`),children:a}):n.jsx(q.r,{className:r(`${i}__icon`),size:"sm"}),n.jsxs("div",{className:r(`${i}__content`),children:[n.jsx(j.Heading,{tag:l,variant:"subsection-100",className:r([`${i}__heading`,{[`${i}__heading--no-overlap`]:t}]),children:b}),n.jsxs("div",{children:[u," ",d]}),c]}),t&&n.jsx(x.Button,{"data-testid":e?`${e}-close-button`:void 0,variant:"tertiary-purple",size:"sm",iconOnly:!0,"aria-label":_,onClick:t,className:r(`${i}__close-button`),children:n.jsx(v.r,{size:"sm"})})]})})})});o.displayName="NotificationBanner";exports.NotificationBanner=o;
|
|
2
|
-
//# sourceMappingURL=notification-banner-DUe4fT1r.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-banner-DUe4fT1r.js","sources":["../../../components/notification-banner/src/notification-banner.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Grid } from \"@purpur/grid\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { IconInfo } from \"@purpur/icon/info\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./notification-banner.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type DefaultProps = BaseProps & {\n closeButtonAriaLabel?: string;\n description?: string;\n hideIcon?: boolean;\n icon?: ReactNode;\n link?: ReactNode;\n titleTag?: HeadingTagType;\n title?: string;\n};\n\ntype CloseButtonProps = {\n onClose: () => void;\n closeButtonAriaLabel: string;\n};\n\ntype NoCloseButtonProps = {\n onClose?: never;\n closeButtonAriaLabel?: never;\n};\n\nexport type NotificationBannerProps = DefaultProps & (CloseButtonProps | NoCloseButtonProps);\n\nconst rootClassName = \"purpur-notification-banner\";\n\nexport const NotificationBanner = forwardRef<HTMLDivElement, NotificationBannerProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n children,\n className,\n closeButtonAriaLabel,\n description,\n hideIcon,\n icon,\n link,\n onClose,\n titleTag = \"h4\",\n title,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n\n return (\n <div {...props} className={classes} role=\"alert\" ref={ref} data-testid={dataTestId}>\n <Grid>\n <div className={cx(`${rootClassName}__container`)}>\n {!hideIcon ? (\n icon ? (\n <span className={cx(`${rootClassName}__icon`)}>{icon}</span>\n ) : (\n <IconInfo className={cx(`${rootClassName}__icon`)} size=\"sm\" />\n )\n ) : null}\n <div className={cx(`${rootClassName}__content`)}>\n <Heading\n tag={titleTag}\n variant=\"subsection-100\"\n className={cx([\n `${rootClassName}__heading`,\n { [`${rootClassName}__heading--no-overlap`]: onClose },\n ])}\n >\n {title}\n </Heading>\n <div>\n {description} {link}\n </div>\n {children}\n </div>\n {onClose && (\n <Button\n data-testid={dataTestId ? `${dataTestId}-close-button` : undefined}\n variant=\"tertiary-purple\"\n size=\"sm\"\n iconOnly\n aria-label={closeButtonAriaLabel}\n onClick={onClose}\n className={cx(`${rootClassName}__close-button`)}\n >\n <IconClose size=\"sm\" />\n </Button>\n )}\n </div>\n </Grid>\n </div>\n );\n }\n);\n\nNotificationBanner.displayName = \"NotificationBanner\";\n"],"names":["cx","c","styles","rootClassName","NotificationBanner","forwardRef","dataTestId","children","className","closeButtonAriaLabel","description","hideIcon","icon","link","onClose","titleTag","title","props","ref","classes","jsx","Grid","IconInfo","Heading","Button","IconClose"],"mappings":"23BAWMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAwBlBC,EAAgB,6BAETC,EAAqBC,EAAAA,WAChC,CACE,CACE,CAAC,eAAgBC,EACjB,SAAAC,EACA,UAAAC,EACA,qBAAAC,EACA,YAAAC,EACA,SAAAC,EACA,KAAAC,EACA,KAAAC,EACA,QAAAC,EACA,SAAAC,EAAW,KACX,MAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAUnB,EAAGQ,EAAWL,CAAa,EAE3C,OACEiB,MAAC,OAAK,GAAGH,EAAO,UAAWE,EAAS,KAAK,QAAQ,IAAAD,EAAU,cAAaZ,EACtE,SAAAc,MAACC,EAAAA,KAAA,CACC,gBAAC,MAAA,CAAI,UAAWrB,EAAG,GAAGG,CAAa,aAAa,EAC7C,SAAA,CAACQ,EAME,KALFC,EACEQ,EAAAA,IAAC,OAAA,CAAK,UAAWpB,EAAG,GAAGG,CAAa,QAAQ,EAAI,SAAAS,EAAK,EAErDQ,EAAAA,IAACE,EAAAA,EAAA,CAAS,UAAWtB,EAAG,GAAGG,CAAa,QAAQ,EAAG,KAAK,IAAA,CAAK,SAGhE,MAAA,CAAI,UAAWH,EAAG,GAAGG,CAAa,WAAW,EAC5C,SAAA,CAAAiB,EAAAA,IAACG,EAAAA,QAAA,CACC,IAAKR,EACL,QAAQ,iBACR,UAAWf,EAAG,CACZ,GAAGG,CAAa,YAChB,CAAE,CAAC,GAAGA,CAAa,uBAAuB,EAAGW,CAAA,CAAQ,CACtD,EAEA,SAAAE,CAAA,CAAA,SAEF,MAAA,CACE,SAAA,CAAAN,EAAY,IAAEG,CAAA,EACjB,EACCN,CAAA,EACH,EACCO,GACCM,EAAAA,IAACI,EAAAA,OAAA,CACC,cAAalB,EAAa,GAAGA,CAAU,gBAAkB,OACzD,QAAQ,kBACR,KAAK,KACL,SAAQ,GACR,aAAYG,EACZ,QAASK,EACT,UAAWd,EAAG,GAAGG,CAAa,gBAAgB,EAE9C,SAAAiB,EAAAA,IAACK,EAAAA,EAAA,CAAU,KAAK,IAAA,CAAK,CAAA,CAAA,CACvB,CAAA,CAEJ,EACF,EACF,CAEJ,CACF,EAEArB,EAAmB,YAAc"}
|
package/dist/popover-4phnhJLj.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const a=require("react/jsx-runtime"),oe=require("./button-DZgtrGqN.js"),p=require("react"),dt=require("./variables-Buqm4JZc.js"),O=require("./index-DlMXYAr3.js"),re=require("./index-_XxjJPRD.js"),K=require("./index-kcwFA4Dv.js"),q=require("./index-DA01QPpC.js"),ft=require("./index-BtWPC8xc.js"),k=require("./floating-ui.react-dom-Cc_YSprQ.js"),ht=require("./index-DOFLOnao.js"),Oe=require("./index-CleLBinl.js"),gt=require("./close.es-VL3lKi1O.js"),Ae=require("./paragraph-B8HFdNne.js");require("./ThemeProvider-BJGm3zai.js");const vt=require("./useThemePortalContainer-CUcqV327.js"),Y=require("./bind-DeUYJ6m9.js"),_t=require("./heading-drD5ugCC.js");function mt(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const r=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,r.get?r:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const g=mt(p),de=p.createContext(null),fe=()=>{const e=p.useContext(de);if(!e)throw new Error("usePopoverFlow must be used within a PopoverFlow provider");return e},X=()=>p.useContext(de),wt=({children:e,initialStep:t=1,onComplete:o,onDismiss:r,separatorText:n,stepText:s,backLabel:i,nextLabel:l,finishLabel:u,openDelay:d=0})=>{const[v,f]=p.useState(t),[h,P]=p.useState(new Set),m=p.useCallback(w=>{P(j=>{const R=new Set(j);return R.add(w),R})},[]),S=p.useCallback(w=>{P(j=>{const R=new Set(j);return R.delete(w),R})},[]),_=p.useCallback(()=>{f(w=>{const j=w+1;return j>h.size?(o?.(),w):j})},[h.size,o]),y=p.useCallback(()=>{f(w=>Math.max(1,w-1))},[]),E=p.useCallback(()=>{f(0),r?.()},[r]),A=p.useMemo(()=>({currentStep:v,totalSteps:h.size,next:_,back:y,dismiss:E,registerStep:m,unregisterStep:S,separatorText:n,stepText:s,backLabel:i,nextLabel:l,finishLabel:u,openDelay:d}),[v,h.size,_,y,E,m,S,n,s,i,l,u,d]);return a.jsx(de.Provider,{value:A,children:e})},he=p.createContext(null),ne=()=>p.useContext(he),Re=p.createContext({negative:!1}),ge=()=>p.useContext(Re),xt=150,ye={MAX_MD:`(max-width: ${dt.purpurBreakpointMd})`},ve=()=>{const e=window.matchMedia(ye.MAX_MD);function t(){r(e.matches)}const[o,r]=p.useState(()=>typeof window>"u"?!1:window.matchMedia(ye.MAX_MD).matches),n=p.useCallback(()=>{let s;return()=>{clearTimeout(s),s=setTimeout(()=>t(),xt)}},[t]);return p.useEffect(()=>{if(!(typeof window>"u"))return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[n]),{isMdOrSmaller:o}},_e=({children:e,onClick:t})=>{const{back:o}=fe(),{negative:r}=ge(),{isMdOrSmaller:n}=ve(),s=!r,i=()=>{t?.(),o()};return a.jsx(oe.Button,{size:"sm",variant:"secondary",onClick:i,negative:s,fullWidth:n,children:e})};_e.displayName="PopoverBack";var Pt="Arrow",Ee=g.forwardRef((e,t)=>{const{children:o,width:r=10,height:n=5,...s}=e;return a.jsx(O.Primitive.svg,{...s,ref:t,width:r,height:n,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?o:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});Ee.displayName=Pt;var Ct=Ee,me="Popper",[Ne,Fe]=K.createContextScope(me),[St,ke]=Ne(me),Te=e=>{const{__scopePopper:t,children:o}=e,[r,n]=g.useState(null);return a.jsx(St,{scope:t,anchor:r,onAnchorChange:n,children:o})};Te.displayName=me;var Me="PopperAnchor",De=g.forwardRef((e,t)=>{const{__scopePopper:o,virtualRef:r,...n}=e,s=ke(Me,o),i=g.useRef(null),l=re.useComposedRefs(t,i),u=g.useRef(null);return g.useEffect(()=>{const d=u.current;u.current=r?.current||i.current,d!==u.current&&s.onAnchorChange(u.current)}),r?null:a.jsx(O.Primitive.div,{...n,ref:l})});De.displayName=Me;var we="PopperContent",[bt,yt]=Ne(we),Ie=g.forwardRef((e,t)=>{const{__scopePopper:o,side:r="bottom",sideOffset:n=0,align:s="center",alignOffset:i=0,arrowPadding:l=0,avoidCollisions:u=!0,collisionBoundary:d=[],collisionPadding:v=0,sticky:f="partial",hideWhenDetached:h=!1,updatePositionStrategy:P="optimized",onPlaced:m,...S}=e,_=ke(we,o),[y,E]=g.useState(null),A=re.useComposedRefs(t,W=>E(W)),[w,j]=g.useState(null),R=ht.useSize(w),ie=R?.width??0,V=R?.height??0,Z=r+(s!=="center"?"-"+s:""),Q=typeof v=="number"?v:{top:0,right:0,bottom:0,left:0,...v},L=Array.isArray(d)?d:[d],ae=L.length>0,$={padding:Q,boundary:L.filter(Ot),altBoundary:ae},{refs:ce,floatingStyles:J,placement:le,isPositioned:H,middlewareData:c}=k.useFloating({strategy:"fixed",placement:Z,whileElementsMounted:(...W)=>k.autoUpdate(...W,{animationFrame:P==="always"}),elements:{reference:_.anchor},middleware:[k.offset({mainAxis:n+V,alignmentAxis:i}),u&&k.shift({mainAxis:!0,crossAxis:!1,limiter:f==="partial"?k.limitShift():void 0,...$}),u&&k.flip({...$}),k.size({...$,apply:({elements:W,rects:be,availableWidth:ct,availableHeight:lt})=>{const{width:pt,height:ut}=be.reference,te=W.floating.style;te.setProperty("--radix-popper-available-width",`${ct}px`),te.setProperty("--radix-popper-available-height",`${lt}px`),te.setProperty("--radix-popper-anchor-width",`${pt}px`),te.setProperty("--radix-popper-anchor-height",`${ut}px`)}}),w&&k.arrow({element:w,padding:l}),At({arrowWidth:ie,arrowHeight:V}),h&&k.hide({strategy:"referenceHidden",...$})]}),[x,C]=Be(le),N=K.useCallbackRef(m);K.useLayoutEffect2(()=>{H&&N?.()},[H,N]);const D=c.arrow?.x,b=c.arrow?.y,F=c.arrow?.centerOffset!==0,[I,ee]=g.useState();return K.useLayoutEffect2(()=>{y&&ee(window.getComputedStyle(y).zIndex)},[y]),a.jsx("div",{ref:ce.setFloating,"data-radix-popper-content-wrapper":"",style:{...J,transform:H?J.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:I,"--radix-popper-transform-origin":[c.transformOrigin?.x,c.transformOrigin?.y].join(" "),...c.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:a.jsx(bt,{scope:o,placedSide:x,onArrowChange:j,arrowX:D,arrowY:b,shouldHideArrow:F,children:a.jsx(O.Primitive.div,{"data-side":x,"data-align":C,...S,ref:A,style:{...S.style,animation:H?void 0:"none"}})})})});Ie.displayName=we;var $e="PopperArrow",jt={top:"bottom",right:"left",bottom:"top",left:"right"},He=g.forwardRef(function(t,o){const{__scopePopper:r,...n}=t,s=yt($e,r),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(Ct,{...n,ref:o,style:{...n.style,display:"block"}})})});He.displayName=$e;function Ot(e){return e!==null}var At=e=>({name:"transformOrigin",options:e,fn(t){const{placement:o,rects:r,middlewareData:n}=t,i=n.arrow?.centerOffset!==0,l=i?0:e.arrowWidth,u=i?0:e.arrowHeight,[d,v]=Be(o),f={start:"0%",center:"50%",end:"100%"}[v],h=(n.arrow?.x??0)+l/2,P=(n.arrow?.y??0)+u/2;let m="",S="";return d==="bottom"?(m=i?f:`${h}px`,S=`${-u}px`):d==="top"?(m=i?f:`${h}px`,S=`${r.floating.height+u}px`):d==="right"?(m=`${-u}px`,S=i?f:`${P}px`):d==="left"&&(m=`${r.floating.width+u}px`,S=i?f:`${P}px`),{data:{x:m,y:S}}}});function Be(e){const[t,o="center"]=e.split("-");return[t,o]}var Rt=Te,qe=De,Et=Ie,Nt=He,se="Popover",[ze]=K.createContextScope(se,[Fe]),U=Fe(),[Ft,M]=ze(se),Le=e=>{const{__scopePopover:t,children:o,open:r,defaultOpen:n,onOpenChange:s,modal:i=!1}=e,l=U(t),u=g.useRef(null),[d,v]=g.useState(!1),[f,h]=O.useControllableState({prop:r,defaultProp:n??!1,onChange:s,caller:se});return a.jsx(Rt,{...l,children:a.jsx(Ft,{scope:t,contentId:ft.useId(),triggerRef:u,open:f,onOpenChange:h,onOpenToggle:g.useCallback(()=>h(P=>!P),[h]),hasCustomAnchor:d,onCustomAnchorAdd:g.useCallback(()=>v(!0),[]),onCustomAnchorRemove:g.useCallback(()=>v(!1),[]),modal:i,children:o})})};Le.displayName=se;var We="PopoverAnchor",kt=g.forwardRef((e,t)=>{const{__scopePopover:o,...r}=e,n=M(We,o),s=U(o),{onCustomAnchorAdd:i,onCustomAnchorRemove:l}=n;return g.useEffect(()=>(i(),()=>l()),[i,l]),a.jsx(qe,{...s,...r,ref:t})});kt.displayName=We;var Ke="PopoverTrigger",Ye=g.forwardRef((e,t)=>{const{__scopePopover:o,...r}=e,n=M(Ke,o),s=U(o),i=re.useComposedRefs(t,n.triggerRef),l=a.jsx(O.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":Je(n.open),...r,ref:i,onClick:O.composeEventHandlers(e.onClick,n.onOpenToggle)});return n.hasCustomAnchor?l:a.jsx(qe,{asChild:!0,...s,children:l})});Ye.displayName=Ke;var xe="PopoverPortal",[Tt,Mt]=ze(xe,{forceMount:void 0}),Xe=e=>{const{__scopePopover:t,forceMount:o,children:r,container:n}=e,s=M(xe,t);return a.jsx(Tt,{scope:t,forceMount:o,children:a.jsx(Oe.Presence,{present:o||s.open,children:a.jsx(q.Portal,{asChild:!0,container:n,children:r})})})};Xe.displayName=xe;var z="PopoverContent",Ue=g.forwardRef((e,t)=>{const o=Mt(z,e.__scopePopover),{forceMount:r=o.forceMount,...n}=e,s=M(z,e.__scopePopover);return a.jsx(Oe.Presence,{present:r||s.open,children:s.modal?a.jsx(It,{...n,ref:t}):a.jsx($t,{...n,ref:t})})});Ue.displayName=z;var Dt=O.createSlot("PopoverContent.RemoveScroll"),It=g.forwardRef((e,t)=>{const o=M(z,e.__scopePopover),r=g.useRef(null),n=re.useComposedRefs(t,r),s=g.useRef(!1);return g.useEffect(()=>{const i=r.current;if(i)return q.hideOthers(i)},[]),a.jsx(q.ReactRemoveScroll,{as:Dt,allowPinchZoom:!0,children:a.jsx(Ge,{...e,ref:n,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:O.composeEventHandlers(e.onCloseAutoFocus,i=>{i.preventDefault(),s.current||o.triggerRef.current?.focus()}),onPointerDownOutside:O.composeEventHandlers(e.onPointerDownOutside,i=>{const l=i.detail.originalEvent,u=l.button===0&&l.ctrlKey===!0,d=l.button===2||u;s.current=d},{checkForDefaultPrevented:!1}),onFocusOutside:O.composeEventHandlers(e.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1})})})}),$t=g.forwardRef((e,t)=>{const o=M(z,e.__scopePopover),r=g.useRef(!1),n=g.useRef(!1);return a.jsx(Ge,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{e.onCloseAutoFocus?.(s),s.defaultPrevented||(r.current||o.triggerRef.current?.focus(),s.preventDefault()),r.current=!1,n.current=!1},onInteractOutside:s=>{e.onInteractOutside?.(s),s.defaultPrevented||(r.current=!0,s.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const i=s.target;o.triggerRef.current?.contains(i)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&n.current&&s.preventDefault()}})}),Ge=g.forwardRef((e,t)=>{const{__scopePopover:o,trapFocus:r,onOpenAutoFocus:n,onCloseAutoFocus:s,disableOutsidePointerEvents:i,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:v,...f}=e,h=M(z,o),P=U(o);return q.useFocusGuards(),a.jsx(q.FocusScope,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:n,onUnmountAutoFocus:s,children:a.jsx(q.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:i,onInteractOutside:v,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onDismiss:()=>h.onOpenChange(!1),children:a.jsx(Et,{"data-state":Je(h.open),role:"dialog",id:h.contentId,...P,...f,ref:t,style:{...f.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)"}})})})}),Ve="PopoverClose",Ze=g.forwardRef((e,t)=>{const{__scopePopover:o,...r}=e,n=M(Ve,o);return a.jsx(O.Primitive.button,{type:"button",...r,ref:t,onClick:O.composeEventHandlers(e.onClick,()=>n.onOpenChange(!1))})});Ze.displayName=Ve;var Ht="PopoverArrow",Qe=g.forwardRef((e,t)=>{const{__scopePopover:o,...r}=e,n=U(o);return a.jsx(Nt,{...n,...r,ref:t})});Qe.displayName=Ht;function Je(e){return e?"open":"closed"}var et=Le,Bt=Ye,qt=Xe,zt=Ue,tt=Ze,Lt=Qe;const Pe=({children:e,asChild:t,onClick:o,variant:r="primary",dismiss:n=!0,fullWidth:s})=>{const i=X(),{isMdOrSmaller:l}=ve(),{negative:u}=ge(),d=!u,v=()=>{o?.(),n&&i?.dismiss()},f=s??l,h=t?e:a.jsx(oe.Button,{variant:r,size:"sm",fullWidth:f,negative:d,onClick:v,children:e});return n?a.jsx(tt,{asChild:!0,children:h}):h};Pe.displayName="PopoverButton";const Wt="_highlightState1_1w9je_1",Kt="_fadeIn_1w9je_1",Yt="_slideFromTop_1w9je_1",Xt="_slideFromBottom_1w9je_1",Ut="_slideFromLeft_1w9je_1",Gt="_slideFromRight_1w9je_1",Vt="_fadeOut_1w9je_1",Zt="_slideToTop_1w9je_1",Qt="_slideToBottom_1w9je_1",Jt="_slideToLeft_1w9je_1",eo="_slideToRight_1w9je_1",G={"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:Kt,slideFromTop:Yt,slideFromBottom:Xt,slideFromLeft:Ut,slideFromRight:Gt,fadeOut:Vt,slideToTop:Zt,slideToBottom:Qt,slideToLeft:Jt,slideToRight:eo,"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"},to=Y.c.bind(G),ot=()=>{const e=fe(),o=ne()?.walkthroughStep||e.currentStep,{totalSteps:r,separatorText:n,stepText:s}=e;return a.jsx(a.Fragment,{children:a.jsxs(Ae.Paragraph,{className:to("purpur-popover__steps"),role:"status","aria-live":"polite","aria-atomic":"true",children:[s," ",o," ",n," ",r]})})};ot.displayName="PopoverSteps";const je=Y.c.bind(G),Ce=({children:e,className:t})=>{const o=X(),r=ne(),n=o&&r&&r.walkthroughStep>0;return a.jsxs("div",{className:je("purpur-popover__footer",t),children:[n&&a.jsx(ot,{}),a.jsx("div",{className:je("purpur-popover__footer-button-group"),children:e})]})};Ce.displayName="PopoverFooter";const pe=Y.c.bind(G),rt=p.forwardRef(({title:e,icon:t},o)=>a.jsxs("div",{ref:o,className:pe("purpur-popover__header-content"),children:[t&&a.jsx("span",{className:pe("purpur-popover__icon"),children:t}),a.jsx(_t.Heading,{tag:"h2",variant:"title-100",className:pe("purpur-popover__title"),id:"popover-heading",children:e})]}));rt.displayName="PopoverHeader";const Se=({children:e,onClick:t})=>{const{next:o}=fe(),{negative:r}=ge(),{isMdOrSmaller:n}=ve(),s=!r,i=()=>{t?.(),o()};return a.jsx(oe.Button,{size:"sm",variant:"primary",onClick:i,negative:s,fullWidth:n,children:e})};Se.displayName="PopoverNext";const B=Y.c.bind(G),nt=p.forwardRef(({children:e,className:t,beakPosition:o="down",align:r="center",alignOffset:n=0,sideOffset:s=5,negative:i=!1,closeIconAriaLabel:l,title:u,icon:d,body:v,onAction:f,zIndex:h=210,container:P,...m},S)=>{const _=X(),y=ne(),E=p.useRef(null),A=p.useRef(!1),w=vt.useThemePortalContainer(),j=P===void 0?w:P??void 0,ie={up:"bottom",right:"left",down:"top",left:"right",none:"bottom"}[o],V=o!=="none",Z=c=>Array.from(c.querySelectorAll("button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])")).filter(C=>!C.hasAttribute("aria-hidden")),Q=(c,x,C)=>{const N=Z(document.body),D=N.indexOf(x);if(D===-1)return;const b=C==="next"?1:-1;for(let F=D+b;F>=0&&F<N.length;F+=b){const I=N[F];if(!c.contains(I)){I.focus();return}}};let L=e;if(_&&!e){const c=y?.walkthroughStep||_.currentStep,x=c===1,C=c===_.totalSteps;L=a.jsxs(Ce,{children:[!x&&a.jsx(_e,{onClick:()=>f?.({type:"back",step:c}),children:_.backLabel}),C?a.jsx(Pe,{onClick:()=>f?.({type:"finish",step:c}),dismiss:!0,children:_.finishLabel}):a.jsx(Se,{onClick:()=>f?.({type:"next",step:c}),children:_.nextLabel})]})}const ae=c=>{c.preventDefault();const x=c.currentTarget,C=E.current?.querySelector("#popover-heading");setTimeout(()=>{if(_&&C){C.setAttribute("tabindex","-1"),C.focus();return}x.setAttribute("tabindex","-1"),x.focus()},0),m.onOpenAutoFocus?.(c)},$=c=>{if(c.key!=="Tab"){m.onKeyDown?.(c);return}const x=c.currentTarget,C=Z(x);if(C.length===0){m.onKeyDown?.(c);return}const N=C[0],D=C[C.length-1],b=document.activeElement,F=b===N,I=b===D,ee=b!==null&&x.contains(b)&&b.tabIndex===-1;if(!_){b!==null&&(c.shiftKey&&F?(c.preventDefault(),Q(x,b,"previous")):!c.shiftKey&&I&&(c.preventDefault(),Q(x,b,"next"))),m.onKeyDown?.(c);return}c.shiftKey&&(F||ee)?(c.preventDefault(),D.focus()):!c.shiftKey&&(I||ee)&&(c.preventDefault(),N.focus()),m.onKeyDown?.(c)},ce=c=>{_&&!A.current&&c.preventDefault(),A.current&&(A.current=!1),m.onCloseAutoFocus?.(c)},J=c=>{_&&(A.current=!0,c.preventDefault()),f?.({type:"dismiss",step:_?.currentStep}),_?.dismiss()},le=c=>{_&&(A.current=!0,c.preventDefault()),f?.({type:"dismiss",step:_?.currentStep}),_?.dismiss()},H=c=>{if(y?.disableClickOutside){c.preventDefault();return}if(_){const x=c.target;x.closest("[role='dialog']")||x.closest(".purpur-popover__trigger")||x.closest("button[aria-haspopup='dialog']")||(f?.({type:"dismiss",step:_.currentStep}),setTimeout(()=>{_.dismiss()},0))}};return a.jsx(qt,{container:j,children:a.jsxs(zt,{"data-testid":"popover-content",role:"dialog","aria-modal":"true","aria-labelledby":m["aria-label"]?void 0:"popover-heading",ref:S,side:ie,sideOffset:s,align:r,alignOffset:n,style:{"--popover-z-index":h},className:B("purpur-popover__content",{"purpur-popover__content--negative":i},t),onOpenAutoFocus:ae,onCloseAutoFocus:ce,onKeyDown:$,onEscapeKeyDown:le,onInteractOutside:H,...m,children:[a.jsxs(Re.Provider,{value:{negative:i},children:[a.jsxs("div",{className:B("purpur-popover__inner"),children:[a.jsx(rt,{ref:E,title:u,icon:d}),a.jsx(Ae.Paragraph,{className:B("purpur-popover__body"),children:v})]}),L,a.jsx(tt,{asChild:!0,onClick:J,children:a.jsx(oe.Button,{variant:i?"text":"tertiary-purple",size:"sm","aria-label":l,className:B("purpur-popover__close"),negative:!i,iconOnly:!0,children:a.jsx(gt.r,{size:"xs",className:B("purpur-popover__icon")})})})]}),V&&a.jsx(Lt,{className:B("purpur-popover__arrow"),"aria-hidden":"true",tabIndex:-1})]})})});nt.displayName="PopoverContent";const st=({children:e,open:t,defaultOpen:o=!1,onOpenChange:r,disableClickOutside:n,...s})=>{const[i,l]=p.useState(o),u=t!==void 0,d=u?t:i,v=f=>{u||l(f),r?.(f)};return a.jsx(et,{open:d,onOpenChange:v,...s,children:a.jsx(he.Provider,{value:{isOpen:d,walkthroughStep:0,disableClickOutside:n},children:e})})};st.displayName="PopoverStandalone";const oo=e=>{const t=p.useRef(null),o=p.useCallback(()=>{t.current&&(cancelAnimationFrame(t.current),t.current=null)},[]);return{scrollToElement:p.useCallback((n,s=600)=>{const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,l=n.getBoundingClientRect(),u=l.top+window.pageYOffset,d=l.height,v=window.innerHeight;let f=u-v/2+d/2;const h=document.documentElement.scrollHeight,P=Math.max(0,h-v);if(f=Math.max(0,Math.min(f,P)),i){window.scrollTo(0,f),e?.();return}const m=window.pageYOffset,S=f-m,_=performance.now(),y=E=>{const A=E-_,w=Math.min(A/s,1),j=w<.5?2*w*w:1-Math.pow(-2*w+2,2)/2,R=m+S*j;window.scrollTo(0,R),w<1?t.current=requestAnimationFrame(y):(t.current=null,e?.())};o(),t.current=requestAnimationFrame(y)},[e,o]),cancelScroll:o}};function ro(e){const t=p.useRef(null),o=ne(),r=X(),n=p.useRef(!1),{scrollToElement:s,cancelScroll:i}=oo(o?.onScrollComplete);return p.useEffect(()=>{typeof e=="function"?e(t.current):e&&(e.current=t.current)},[e]),p.useEffect(()=>{if(r&&o?.walkthroughStep!==void 0&&r.currentStep===o.walkthroughStep&&t.current&&!n.current){const u=t.current,d=u.getBoundingClientRect(),v=100;d.top>=-v&&d.bottom<=window.innerHeight+v&&d.left>=-v&&d.right<=window.innerWidth+v?o?.onScrollComplete?.():(o?.onScrollStart?.(),s(u)),n.current=!0}else r?.currentStep!==o?.walkthroughStep&&(n.current=!1,i())},[r?.currentStep,o?.walkthroughStep,r,s,i,o]),p.useEffect(()=>{t.current&&t.current.removeAttribute("aria-expanded")},[o?.isOpen]),p.useEffect(()=>i,[i]),{triggerRef:t,context:o}}const ue=Y.c.bind(G),it=p.forwardRef(({children:e,className:t,highlight:o=!0,negative:r=!1,...n},s)=>{const{triggerRef:i,context:l}=ro(s);return a.jsxs("div",{className:ue("purpur-popover__trigger",{"purpur-popover__trigger--highlight":l?.isOpen&&o},t),children:[l?.isOpen&&o&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:ue("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state1",{"purpur-popover__trigger-highlight--negative":r}),"aria-hidden":"true"}),a.jsx("div",{className:ue("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state2",{"purpur-popover__trigger-highlight--negative":r}),"aria-hidden":"true"})]}),a.jsx(Bt,{ref:i,asChild:!0,"aria-haspopup":"dialog",...n,children:e})]})});it.displayName="PopoverTrigger";function no(e){const t=X(),[o,r]=p.useState(!1),[n,s]=p.useState(!1),i=p.useRef(null),l=p.useRef(0);p.useEffect(()=>t?(t.registerStep(e),()=>t.unregisterStep(e)):()=>{},[t,e]);const u=t?.currentStep===e,d=p.useCallback(()=>{s(!0)},[]),v=p.useCallback(()=>{if(s(!1),u){const h=t.openDelay;i.current=window.setTimeout(()=>{r(!0),l.current=Date.now()},h)}},[u,t]);p.useEffect(()=>{if(i.current&&(clearTimeout(i.current),i.current=null),u){if(!n){const h=t.openDelay;i.current=window.setTimeout(()=>{r(!0),l.current=Date.now()},h)}}else r(!1),s(!1),l.current=0;return()=>{i.current&&(clearTimeout(i.current),i.current=null)}},[u,n,t]);const f=p.useCallback((h,P)=>{if(P?.(h),!h&&o&&t&&t.currentStep===e){if(Date.now()-l.current<10||i.current!==null)return;t.dismiss()}},[o,t,e]);return{actuallyOpen:o,onScrollStart:d,onScrollComplete:v,handleOpenChange:f}}const at=({children:e,step:t,onOpenChange:o,disableClickOutside:r=!0,...n})=>{const{actuallyOpen:s,onScrollStart:i,onScrollComplete:l,handleOpenChange:u}=no(t);return a.jsx(et,{modal:!0,open:s,onOpenChange:d=>u(d,o),...n,children:a.jsx(he.Provider,{value:{isOpen:s,walkthroughStep:t,onScrollStart:i,onScrollComplete:l,disableClickOutside:r},children:e})})};at.displayName="PopoverWalkthrough";const T=e=>{const{multistep:t=!1,disableClickOutside:o,...r}=e;return t?a.jsx(at,{...r,disableClickOutside:o??!0}):a.jsx(st,{...r,disableClickOutside:o})};T.Back=_e;T.Button=Pe;T.Content=nt;T.Flow=wt;T.Footer=Ce;T.Next=Se;T.Trigger=it;T.displayName="Popover";exports.Popover=T;
|
|
2
|
-
//# sourceMappingURL=popover-4phnhJLj.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popover-4phnhJLj.js","sources":["../../../components/popover/src/popover-flow.tsx","../../../components/popover/src/popover-internal-context.tsx","../../../components/popover/src/use-screen-size.hook.ts","../../../components/popover/src/popover-back.tsx","../../../common/temp/node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_e05f2c19a58a99fddf374207b5e3778c/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_13e0521d8aea7ebfbfb8bee1fb615c05/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_8b5332f8e883134e9d9ab2856fc4395d/node_modules/@radix-ui/react-popover/dist/index.mjs","../../../components/popover/src/popover-button.tsx","../../../components/popover/src/popover-steps.tsx","../../../components/popover/src/popover-footer.tsx","../../../components/popover/src/popover-header.tsx","../../../components/popover/src/popover-next.tsx","../../../components/popover/src/popover-content.tsx","../../../components/popover/src/popover-standalone.tsx","../../../components/popover/src/use-smooth-scroll.ts","../../../components/popover/src/usePopoverTrigger.ts","../../../components/popover/src/popover-trigger.tsx","../../../components/popover/src/usePopoverWalkthrough.ts","../../../components/popover/src/popover-walkthrough.tsx","../../../components/popover/src/popover.tsx"],"sourcesContent":["import React, {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\n\ntype PopoverFlowContextType = {\n currentStep: number;\n totalSteps: number;\n next: () => void;\n back: () => void;\n dismiss: () => void;\n registerStep: (step: number) => void;\n unregisterStep: (step: number) => void;\n separatorText: string;\n stepText: string;\n backLabel: string;\n nextLabel: string;\n finishLabel: string;\n openDelay: number;\n};\n\nconst PopoverFlowContext = createContext<PopoverFlowContextType | null>(null);\n\nexport const usePopoverFlow = () => {\n const context = useContext(PopoverFlowContext);\n if (!context) {\n throw new Error(\"usePopoverFlow must be used within a PopoverFlow provider\");\n }\n return context;\n};\n\nexport const useOptionalPopoverFlow = (): PopoverFlowContextType | null => {\n return useContext(PopoverFlowContext);\n};\n\nexport type PopoverFlowProps = {\n /**\n * Child components, typically multiple Popover components with step numbers.\n */\n children: ReactNode;\n /**\n * The step number to show when the flow starts.\n * @default 1\n */\n initialStep?: number;\n /**\n * Callback fired when the user completes the last step of the flow.\n */\n onComplete?: () => void;\n /**\n * Callback fired when the user dismisses the flow before completing it.\n */\n onDismiss?: () => void;\n /**\n * Text used as separator in the step indicator (e.g., \"of\" in \"1 of 3\").\n */\n separatorText: string;\n /**\n * Text label for \"Step\" in the step indicator.\n */\n stepText: string;\n /**\n * Label for the back navigation button.\n */\n backLabel: string;\n /**\n * Label for the next navigation button.\n */\n nextLabel: string;\n /**\n * Label for the finish button on the last step.\n */\n finishLabel: string;\n /**\n * Delay in milliseconds before opening the next popover in the flow.\n * @default 0\n */\n openDelay?: number;\n};\n\nexport const PopoverFlow = ({\n children,\n initialStep = 1,\n onComplete,\n onDismiss,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay = 0,\n}: PopoverFlowProps) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [registeredSteps, setRegisteredSteps] = useState<Set<number>>(new Set());\n\n const registerStep = useCallback((step: number) => {\n setRegisteredSteps((prev) => {\n const next = new Set(prev);\n next.add(step);\n return next;\n });\n }, []);\n\n const unregisterStep = useCallback((step: number) => {\n setRegisteredSteps((prev) => {\n const next = new Set(prev);\n next.delete(step);\n return next;\n });\n }, []);\n\n const next = useCallback(() => {\n setCurrentStep((prev) => {\n const nextStep = prev + 1;\n if (nextStep > registeredSteps.size) {\n onComplete?.();\n return prev;\n }\n return nextStep;\n });\n }, [registeredSteps.size, onComplete]);\n\n const back = useCallback(() => {\n setCurrentStep((prev) => Math.max(1, prev - 1));\n }, []);\n\n const dismiss = useCallback(() => {\n setCurrentStep(0);\n onDismiss?.();\n }, [onDismiss]);\n\n const value = useMemo(\n () => ({\n currentStep,\n totalSteps: registeredSteps.size,\n next,\n back,\n dismiss,\n registerStep,\n unregisterStep,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay,\n }),\n [\n currentStep,\n registeredSteps.size,\n next,\n back,\n dismiss,\n registerStep,\n unregisterStep,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay,\n ]\n );\n\n return <PopoverFlowContext.Provider value={value}>{children}</PopoverFlowContext.Provider>;\n};\n","import { createContext, useContext } from \"react\";\n\nexport type PopoverInternalContextValue = {\n isOpen: boolean;\n walkthroughStep: number;\n onScrollComplete?: () => void;\n onScrollStart?: () => void;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverInternalContext = createContext<PopoverInternalContextValue | null>(null);\n\nexport const usePopoverInternal = () => {\n const context = useContext(PopoverInternalContext);\n return context;\n};\n\n// Separate context for UI-specific props that are set at the Content level\nexport type PopoverNegativeContextValue = {\n negative: boolean;\n};\n\nexport const PopoverNegativeContext = createContext<PopoverNegativeContextValue>({ negative: false });\n\nexport const usePopoverNegative = () => {\n const context = useContext(PopoverNegativeContext);\n return context;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { purpurBreakpointMd } from \"@purpur/tokens\";\n\nconst DEBOUNCE_DELAY = 150;\n\nexport const SCREEN_MEDIA_QUERY = {\n MAX_MD: `(max-width: ${purpurBreakpointMd})`,\n} as const;\n\nexport const useScreenSize = () => {\n const maxMediumScreen = window.matchMedia(SCREEN_MEDIA_QUERY.MAX_MD);\n function updateSize() {\n setIsMdOrSmaller(maxMediumScreen.matches);\n }\n\n const [isMdOrSmaller, setIsMdOrSmaller] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(SCREEN_MEDIA_QUERY.MAX_MD).matches;\n });\n\n const handleResize = useCallback(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => updateSize(), DEBOUNCE_DELAY);\n };\n }, [updateSize]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [handleResize]);\n\n return { isMdOrSmaller };\n};\n","import React, { type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\n\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport const PopoverBack = ({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) => {\n const { back } = usePopoverFlow();\n const { negative: isNegative } = usePopoverNegative();\n const { isMdOrSmaller } = useScreenSize();\n\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n back();\n };\n\n return (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={handleClick}\n negative={negative}\n fullWidth={isMdOrSmaller}\n >\n {children}\n </Button>\n );\n};\n\nPopoverBack.displayName = \"PopoverBack\";\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: POPOVER_NAME\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { type ReactNode } from \"react\";\nimport { Button, type ButtonProps } from \"@purpur/button\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport type PopoverButtonProps = RadixPopover.PopoverCloseProps & {\n /**\n * Button label or content.\n */\n children: ReactNode;\n /**\n * Whether to use the child element as the button instead of wrapping in a Button component.\n * @default false\n */\n asChild?: boolean;\n /**\n * Click handler called when the button is clicked.\n */\n onClick?: () => void;\n /**\n * Visual variant of the button.\n * @default \"primary\"\n */\n variant?: ButtonProps[\"variant\"];\n /**\n * Whether clicking the button should dismiss/close the popover.\n * @default true\n */\n dismiss?: boolean;\n /**\n * Whether the button should take full width. If not specified, defaults to true on mobile (md or smaller).\n */\n fullWidth?: boolean;\n};\n\nexport const PopoverButton = ({\n children,\n asChild,\n onClick,\n variant = \"primary\",\n dismiss = true,\n fullWidth,\n}: PopoverButtonProps) => {\n const flow = useOptionalPopoverFlow();\n const { isMdOrSmaller } = useScreenSize();\n const { negative: isNegative } = usePopoverNegative();\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n if (dismiss) {\n flow?.dismiss();\n }\n };\n\n const isFullWidth = fullWidth ?? isMdOrSmaller;\n\n const content = asChild ? (\n children\n ) : (\n <Button\n variant={variant}\n size=\"sm\"\n fullWidth={isFullWidth}\n negative={negative}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n\n // Always wrap with RadixPopover.Close for proper dismiss behavior\n if (dismiss) {\n return <RadixPopover.Close asChild>{content}</RadixPopover.Close>;\n }\n\n return content;\n};\n\nPopoverButton.displayName = \"PopoverButton\";\n","import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\n\nconst cx = c.bind(styles);\n\nexport const PopoverSteps = () => {\n const flow = usePopoverFlow();\n const context = usePopoverInternal();\n\n // Use walkthroughStep from context (each popover knows its own step number)\n const currentStep = context?.walkthroughStep || flow.currentStep;\n const { totalSteps, separatorText, stepText } = flow;\n return (\n <>\n <Paragraph\n className={cx(\"purpur-popover__steps\")}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {stepText} {currentStep} {separatorText} {totalSteps}\n </Paragraph>\n </>\n );\n};\n\nPopoverSteps.displayName = \"PopoverSteps\";\n","import React, { type ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\nimport { PopoverSteps } from \"./popover-steps\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverFooterProps = {\n /**\n * Footer content, typically navigation buttons like PopoverButton, PopoverNext, or PopoverBack.\n */\n children: ReactNode;\n /**\n * Optional CSS class name for custom styling.\n */\n className?: string;\n};\n\nexport const PopoverFooter = ({ children, className }: PopoverFooterProps) => {\n const flow = useOptionalPopoverFlow();\n const internal = usePopoverInternal();\n\n // Only show steps if we have a flow context AND this popover is part of the flow (walkthroughStep > 0)\n const showSteps = flow && internal && internal.walkthroughStep > 0;\n\n return (\n <div className={cx(\"purpur-popover__footer\", className)}>\n {showSteps && <PopoverSteps />}\n <div className={cx(\"purpur-popover__footer-button-group\")}>{children}</div>\n </div>\n );\n};\n\nPopoverFooter.displayName = \"PopoverFooter\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverHeaderProps = {\n title: string;\n icon?: ReactNode;\n};\n\nexport const PopoverHeader = forwardRef<HTMLDivElement, PopoverHeaderProps>(\n ({ title, icon }, ref) => {\n return (\n <div ref={ref} className={cx(\"purpur-popover__header-content\")}>\n {icon && <span className={cx(\"purpur-popover__icon\")}>{icon}</span>}\n <Heading\n tag=\"h2\"\n variant=\"title-100\"\n className={cx(\"purpur-popover__title\")}\n id=\"popover-heading\"\n >\n {title}\n </Heading>\n </div>\n );\n }\n);\n\nPopoverHeader.displayName = \"PopoverHeader\";\n","import React, { type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\n\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport const PopoverNext = ({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) => {\n const { next } = usePopoverFlow();\n const { negative: isNegative } = usePopoverNegative();\n const { isMdOrSmaller } = useScreenSize();\n\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n next();\n };\n\n return (\n <Button\n size=\"sm\"\n variant=\"primary\"\n onClick={handleClick}\n negative={negative}\n fullWidth={isMdOrSmaller}\n >\n {children}\n </Button>\n );\n};\n\nPopoverNext.displayName = \"PopoverNext\";\n","import React, { forwardRef, type ReactNode, useRef } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { useThemePortalContainer } from \"@purpur/theme\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { PopoverBack } from \"./popover-back\";\nimport { PopoverButton } from \"./popover-button\";\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { PopoverFooter } from \"./popover-footer\";\nimport { PopoverHeader } from \"./popover-header\";\nimport { PopoverNegativeContext, usePopoverInternal } from \"./popover-internal-context\";\nimport { PopoverNext } from \"./popover-next\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverAction = {\n type: \"next\" | \"back\" | \"finish\" | \"dismiss\";\n step?: number;\n};\n\nexport type PopoverContentProps = RadixPopover.PopoverContentProps & {\n /**\n * Position of the arrow/beak pointing to the trigger element.\n * Set to \"none\" to hide the arrow.\n * @default \"down\"\n */\n beakPosition?: \"up\" | \"right\" | \"down\" | \"left\" | \"none\";\n /**\n * Whether to use negative (light) styling for the popover content.\n * @default false\n */\n negative?: boolean;\n /**\n * Accessible label for the close button icon.\n */\n closeIconAriaLabel: string;\n /**\n * Main title text displayed in the popover header.\n */\n title: string;\n /**\n * Optional icon displayed in the popover header next to the title.\n */\n icon?: ReactNode;\n /**\n * Main body text content of the popover.\n */\n body: string;\n /**\n * Custom footer content. If not provided and used within PopoverFlow,\n * default navigation buttons will be rendered.\n */\n children?: ReactNode;\n /**\n * Callback fired when user interacts with navigation buttons (next, back, finish, dismiss).\n */\n onAction?: (action: PopoverAction) => void;\n /**\n * CSS z-index value for the popover content.\n * @default 210\n */\n zIndex?: number;\n /**\n * Optional DOM element to portal the popover content into. When omitted,\n * the popover renders inside the nearest `ThemeProvider` so it inherits\n * the active color scheme. Pass `document.body` (or any other element) to\n * override. Pass `null` to fall back to Radix' default (`document.body`).\n */\n container?: HTMLElement | null;\n};\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n children,\n className,\n beakPosition = \"down\",\n align = \"center\",\n alignOffset = 0,\n sideOffset = 5, // How close or far the popover is from the trigger\n negative = false,\n closeIconAriaLabel,\n title,\n icon,\n body,\n onAction,\n zIndex = 210,\n container,\n ...props\n },\n ref\n ) => {\n const flow = useOptionalPopoverFlow();\n const context = usePopoverInternal();\n const headerRef = useRef<HTMLDivElement>(null);\n const isFlowDismissRef = useRef(false);\n const themePortalContainer = useThemePortalContainer();\n const portalContainer = container === undefined ? themePortalContainer : container ?? undefined;\n\n // Map beakPosition to Radix side values\n const beakPositionMap: Record<\n \"up\" | \"right\" | \"down\" | \"left\" | \"none\",\n \"bottom\" | \"left\" | \"top\" | \"right\"\n > = {\n up: \"bottom\",\n right: \"left\",\n down: \"top\",\n left: \"right\",\n none: \"bottom\", // Default position when no arrow\n };\n\n const radixSide = beakPositionMap[beakPosition];\n const shouldShowArrow = beakPosition !== \"none\";\n\n const getFocusableElements = (container: HTMLElement): HTMLElement[] => {\n const focusableSelector =\n \"button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])\";\n\n return Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).filter(\n (element) => !element.hasAttribute(\"aria-hidden\")\n );\n };\n\n const focusOutsidePopover = (\n contentElement: HTMLElement,\n activeElement: HTMLElement,\n direction: \"next\" | \"previous\"\n ) => {\n const allFocusableElements = getFocusableElements(document.body);\n const activeIndex = allFocusableElements.indexOf(activeElement);\n\n if (activeIndex === -1) {\n return;\n }\n\n const step = direction === \"next\" ? 1 : -1;\n\n for (\n let currentIndex = activeIndex + step;\n currentIndex >= 0 && currentIndex < allFocusableElements.length;\n currentIndex += step\n ) {\n const candidate = allFocusableElements[currentIndex];\n\n if (!contentElement.contains(candidate)) {\n candidate.focus();\n return;\n }\n }\n };\n\n let footerContent = children;\n\n if (flow && !children) {\n // Use walkthroughStep from context (0 for standalone, actual step for walkthrough)\n const currentStep = context?.walkthroughStep || flow.currentStep;\n const isFirstStep = currentStep === 1;\n const isLastStep = currentStep === flow.totalSteps;\n\n footerContent = (\n <PopoverFooter>\n {!isFirstStep && (\n <PopoverBack onClick={() => onAction?.({ type: \"back\", step: currentStep })}>\n {flow.backLabel}\n </PopoverBack>\n )}\n {isLastStep ? (\n <PopoverButton\n onClick={() => onAction?.({ type: \"finish\", step: currentStep })}\n dismiss\n >\n {flow.finishLabel}\n </PopoverButton>\n ) : (\n <PopoverNext onClick={() => onAction?.({ type: \"next\", step: currentStep })}>\n {flow.nextLabel}\n </PopoverNext>\n )}\n </PopoverFooter>\n );\n }\n\n const handleOpenAutoFocus = (event: Event) => {\n event.preventDefault();\n\n const contentElement = event.currentTarget as HTMLElement;\n const headingElement = headerRef.current?.querySelector(\n \"#popover-heading\"\n ) as HTMLElement | null;\n\n // In walkthrough mode, focus contextual content first so AT users hear title/body before actions.\n setTimeout(() => {\n if (flow && headingElement) {\n headingElement.setAttribute(\"tabindex\", \"-1\");\n headingElement.focus();\n return;\n }\n\n // Fallback for standalone and missing heading.\n contentElement.setAttribute(\"tabindex\", \"-1\");\n contentElement.focus();\n }, 0);\n\n props.onOpenAutoFocus?.(event);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== \"Tab\") {\n props.onKeyDown?.(event);\n return;\n }\n\n const contentElement = event.currentTarget;\n const focusableElements = getFocusableElements(contentElement);\n\n if (focusableElements.length === 0) {\n props.onKeyDown?.(event);\n return;\n }\n\n const firstFocusable = focusableElements[0];\n const lastFocusable = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement as HTMLElement | null;\n\n const isOnFirstFocusable = activeElement === firstFocusable;\n const isOnLastFocusable = activeElement === lastFocusable;\n const isOnNonTabbableContext =\n activeElement !== null &&\n contentElement.contains(activeElement) &&\n activeElement.tabIndex === -1;\n\n if (!flow) {\n if (activeElement !== null) {\n if (event.shiftKey && isOnFirstFocusable) {\n event.preventDefault();\n focusOutsidePopover(contentElement, activeElement, \"previous\");\n } else if (!event.shiftKey && isOnLastFocusable) {\n event.preventDefault();\n focusOutsidePopover(contentElement, activeElement, \"next\");\n }\n }\n\n props.onKeyDown?.(event);\n return;\n }\n\n if (event.shiftKey && (isOnFirstFocusable || isOnNonTabbableContext)) {\n event.preventDefault();\n lastFocusable.focus();\n } else if (!event.shiftKey && (isOnLastFocusable || isOnNonTabbableContext)) {\n event.preventDefault();\n firstFocusable.focus();\n }\n\n props.onKeyDown?.(event);\n };\n\n const handleCloseAutoFocus = (event: Event) => {\n // Prevent focus from returning to trigger in walkthrough flow\n // This allows the next popover to manage focus properly\n if (flow && !isFlowDismissRef.current) {\n event.preventDefault();\n }\n\n if (isFlowDismissRef.current) {\n isFlowDismissRef.current = false;\n }\n\n props.onCloseAutoFocus?.(event);\n };\n\n const handleClose = (event: React.MouseEvent) => {\n if (flow) {\n isFlowDismissRef.current = true;\n event.preventDefault();\n }\n\n onAction?.({ type: \"dismiss\", step: flow?.currentStep });\n flow?.dismiss();\n };\n\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (flow) {\n isFlowDismissRef.current = true;\n event.preventDefault();\n }\n\n onAction?.({ type: \"dismiss\", step: flow?.currentStep });\n flow?.dismiss();\n };\n\n const handleInteractOutside = (event: Event) => {\n if (context?.disableClickOutside) {\n event.preventDefault();\n return;\n }\n\n if (flow) {\n const target = event.target as HTMLElement;\n const isPopoverInteraction =\n target.closest(\"[role='dialog']\") ||\n target.closest(\".purpur-popover__trigger\") ||\n target.closest(\"button[aria-haspopup='dialog']\");\n\n if (!isPopoverInteraction) {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n setTimeout(() => {\n flow.dismiss();\n }, 0);\n }\n }\n };\n\n return (\n <RadixPopover.Portal container={portalContainer}>\n <RadixPopover.Content\n data-testid=\"popover-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={props[\"aria-label\"] ? undefined : \"popover-heading\"}\n ref={ref}\n side={radixSide}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={\n {\n \"--popover-z-index\": zIndex,\n } as React.CSSProperties\n }\n className={cx(\n \"purpur-popover__content\",\n { \"purpur-popover__content--negative\": negative },\n className\n )}\n onOpenAutoFocus={handleOpenAutoFocus}\n onCloseAutoFocus={handleCloseAutoFocus}\n onKeyDown={handleKeyDown}\n onEscapeKeyDown={handleEscapeKey}\n onInteractOutside={handleInteractOutside}\n {...props}\n >\n <PopoverNegativeContext.Provider value={{ negative }}>\n <div className={cx(\"purpur-popover__inner\")}>\n <PopoverHeader ref={headerRef} title={title} icon={icon} />\n <Paragraph className={cx(\"purpur-popover__body\")}>{body}</Paragraph>\n </div>\n {footerContent}\n\n <RadixPopover.Close asChild onClick={handleClose}>\n <Button\n variant={negative ? \"text\" : \"tertiary-purple\"}\n size=\"sm\"\n aria-label={closeIconAriaLabel}\n className={cx(\"purpur-popover__close\")}\n negative={!negative}\n iconOnly\n >\n <IconClose size=\"xs\" className={cx(\"purpur-popover__icon\")} />\n </Button>\n </RadixPopover.Close>\n </PopoverNegativeContext.Provider>\n {shouldShowArrow && (\n <RadixPopover.Arrow\n className={cx(\"purpur-popover__arrow\")}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n )}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n );\n }\n);\n\nPopoverContent.displayName = \"PopoverContent\";\n","import React, { type ReactNode, useState } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverInternalContext } from \"./popover-internal-context\";\n\nexport type PopoverStandaloneProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n className?: string;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverStandalone = ({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disableClickOutside,\n ...props\n}: PopoverStandaloneProps) => {\n // Internal state for uncontrolled mode\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n return (\n <RadixPopover.Root open={isOpen} onOpenChange={handleOpenChange} {...props}>\n <PopoverInternalContext.Provider\n value={{\n isOpen,\n walkthroughStep: 0,\n disableClickOutside,\n }}\n >\n {children}\n </PopoverInternalContext.Provider>\n </RadixPopover.Root>\n );\n};\n\nPopoverStandalone.displayName = \"PopoverStandalone\";\n","import { useCallback, useRef } from \"react\";\n\nexport const useSmoothScroll = (onComplete?: () => void) => {\n const scrollAnimationId = useRef<number | null>(null);\n\n const cancelScroll = useCallback(() => {\n if (scrollAnimationId.current) {\n cancelAnimationFrame(scrollAnimationId.current);\n scrollAnimationId.current = null;\n }\n }, []);\n\n const scrollToElement = useCallback(\n (element: HTMLElement, duration: number = 600) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n const rect = element.getBoundingClientRect();\n const absoluteTop = rect.top + window.pageYOffset;\n const elementHeight = rect.height;\n const viewportHeight = window.innerHeight;\n\n let targetY = absoluteTop - viewportHeight / 2 + elementHeight / 2;\n const documentHeight = document.documentElement.scrollHeight;\n const maxScroll = Math.max(0, documentHeight - viewportHeight);\n targetY = Math.max(0, Math.min(targetY, maxScroll));\n\n if (prefersReducedMotion) {\n window.scrollTo(0, targetY);\n onComplete?.();\n return;\n }\n\n const startY = window.pageYOffset;\n const distance = targetY - startY;\n const startTime = performance.now();\n\n const animateScroll = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n const easeInOut =\n progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;\n\n const currentY = startY + distance * easeInOut;\n window.scrollTo(0, currentY);\n\n if (progress < 1) {\n scrollAnimationId.current = requestAnimationFrame(animateScroll);\n } else {\n scrollAnimationId.current = null;\n onComplete?.();\n }\n };\n\n cancelScroll();\n\n scrollAnimationId.current = requestAnimationFrame(animateScroll);\n },\n [onComplete, cancelScroll]\n );\n\n return { scrollToElement, cancelScroll };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\nimport { useSmoothScroll } from \"./use-smooth-scroll\";\n\nexport function usePopoverTrigger(ref: React.Ref<HTMLButtonElement>) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const context = usePopoverInternal();\n const flow = useOptionalPopoverFlow();\n const hasScrolled = useRef(false);\n const { scrollToElement, cancelScroll } = useSmoothScroll(context?.onScrollComplete);\n\n // Forward ref\n useEffect(() => {\n if (typeof ref === \"function\") {\n ref(triggerRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current = triggerRef.current;\n }\n }, [ref]);\n\n // Walkthrough scroll logic\n useEffect(() => {\n const isActiveStep =\n flow &&\n context?.walkthroughStep !== undefined &&\n flow.currentStep === context.walkthroughStep &&\n triggerRef.current &&\n !hasScrolled.current;\n\n if (isActiveStep) {\n const element = triggerRef.current!;\n const rect = element.getBoundingClientRect();\n const buffer = 100;\n const isVisible =\n rect.top >= -buffer &&\n rect.bottom <= window.innerHeight + buffer &&\n rect.left >= -buffer &&\n rect.right <= window.innerWidth + buffer;\n\n if (isVisible) {\n context?.onScrollComplete?.();\n } else {\n context?.onScrollStart?.();\n scrollToElement(element);\n }\n hasScrolled.current = true;\n } else if (flow?.currentStep !== context?.walkthroughStep) {\n hasScrolled.current = false;\n cancelScroll();\n }\n }, [flow?.currentStep, context?.walkthroughStep, flow, scrollToElement, cancelScroll, context]);\n\n // Radix Popover trigger applies aria-expanded by default; remove it to keep dialog trigger semantics.\n // Fixes expanded state in item \"The popover trigger button has an incorrect accessible name and communicates an inappropriate expanding state.\"\n useEffect(() => {\n if (triggerRef.current) {\n triggerRef.current.removeAttribute(\"aria-expanded\");\n }\n }, [context?.isOpen]);\n\n // Cancel scroll on unmount\n useEffect(() => cancelScroll, [cancelScroll]);\n\n return { triggerRef, context };\n}\n","import React, { forwardRef } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { usePopoverTrigger } from \"./usePopoverTrigger\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverTriggerProps = RadixPopover.PopoverTriggerProps & {\n /**\n * Whether to show visual highlight effect around the trigger when popover is open.\n * @default true\n */\n highlight?: boolean;\n /**\n * Whether to use negative (light) styling for the highlight effect.\n * @default false\n */\n negative?: boolean;\n};\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ children, className, highlight = true, negative = false, ...props }, ref) => {\n const { triggerRef, context } = usePopoverTrigger(ref);\n\n return (\n <div\n className={cx(\n \"purpur-popover__trigger\",\n { \"purpur-popover__trigger--highlight\": context?.isOpen && highlight },\n className\n )}\n >\n {context?.isOpen && highlight && (\n <>\n {/* State 1: Outer glow effect */}\n <div\n className={cx(\n \"purpur-popover__trigger-highlight\",\n \"purpur-popover__trigger-highlight--state1\",\n { \"purpur-popover__trigger-highlight--negative\": negative }\n )}\n aria-hidden=\"true\"\n />\n {/* State 2: Inner border only */}\n <div\n className={cx(\n \"purpur-popover__trigger-highlight\",\n \"purpur-popover__trigger-highlight--state2\",\n { \"purpur-popover__trigger-highlight--negative\": negative }\n )}\n aria-hidden=\"true\"\n />\n </>\n )}\n <RadixPopover.Trigger\n ref={triggerRef}\n asChild\n aria-haspopup=\"dialog\"\n {...props}\n >\n {children}\n </RadixPopover.Trigger>\n </div>\n );\n }\n);\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\n\nexport function usePopoverWalkthrough(step: number) {\n const flow = useOptionalPopoverFlow();\n const [actuallyOpen, setActuallyOpen] = useState(false);\n const [waitingForScroll, setWaitingForScroll] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n const openedAtRef = useRef<number>(0);\n\n useEffect(() => {\n if (flow) {\n flow.registerStep(step);\n return () => flow.unregisterStep(step);\n }\n return () => {};\n }, [flow, step]);\n\n const shouldBeOpen = flow?.currentStep === step;\n\n const onScrollStart = useCallback(() => {\n setWaitingForScroll(true);\n }, []);\n\n const onScrollComplete = useCallback(() => {\n setWaitingForScroll(false);\n if (shouldBeOpen) {\n const delay = flow.openDelay;\n timeoutRef.current = window.setTimeout(() => {\n setActuallyOpen(true);\n openedAtRef.current = Date.now();\n }, delay);\n }\n }, [shouldBeOpen, flow]);\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n if (shouldBeOpen) {\n if (!waitingForScroll) {\n const delay = flow.openDelay;\n timeoutRef.current = window.setTimeout(() => {\n setActuallyOpen(true);\n openedAtRef.current = Date.now();\n }, delay);\n }\n } else {\n setActuallyOpen(false);\n setWaitingForScroll(false);\n openedAtRef.current = 0;\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, [shouldBeOpen, waitingForScroll, flow]);\n\n const handleOpenChange = useCallback(\n (open: boolean, consumerOnOpenChange?: (open: boolean) => void) => {\n consumerOnOpenChange?.(open);\n if (!open && actuallyOpen && flow && flow.currentStep === step) {\n const timeSinceOpen = Date.now() - openedAtRef.current;\n if (timeSinceOpen < 10 || timeoutRef.current !== null) {\n return;\n }\n flow.dismiss();\n }\n },\n [actuallyOpen, flow, step]\n );\n\n return {\n actuallyOpen,\n onScrollStart,\n onScrollComplete,\n handleOpenChange,\n };\n}\n","import React, { type ReactNode } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverInternalContext } from \"./popover-internal-context\";\nimport { usePopoverWalkthrough } from \"./usePopoverWalkthrough\";\n\nexport type PopoverWalkthroughProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n step: number;\n className?: string;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverWalkthrough = ({\n children,\n step,\n onOpenChange: consumerOnOpenChange,\n disableClickOutside = true,\n ...props\n}: PopoverWalkthroughProps) => {\n const { actuallyOpen, onScrollStart, onScrollComplete, handleOpenChange } =\n usePopoverWalkthrough(step);\n\n return (\n <RadixPopover.Root\n modal={true}\n open={actuallyOpen}\n onOpenChange={(open) => handleOpenChange(open, consumerOnOpenChange)}\n {...props}\n >\n <PopoverInternalContext.Provider\n value={{\n isOpen: actuallyOpen,\n walkthroughStep: step,\n onScrollStart,\n onScrollComplete,\n disableClickOutside,\n }}\n >\n {children}\n </PopoverInternalContext.Provider>\n </RadixPopover.Root>\n );\n};\n\nPopoverWalkthrough.displayName = \"PopoverWalkthrough\";\n","import React, { type ReactNode } from \"react\";\nimport type * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverBack } from \"./popover-back\";\nimport { PopoverButton } from \"./popover-button\";\nimport { type PopoverAction,PopoverContent } from \"./popover-content\";\nimport { PopoverFlow } from \"./popover-flow\";\nimport { PopoverFooter } from \"./popover-footer\";\nimport { PopoverNext } from \"./popover-next\";\nimport { PopoverStandalone } from \"./popover-standalone\";\nimport { PopoverTrigger } from \"./popover-trigger\";\nimport { PopoverWalkthrough } from \"./popover-walkthrough\";\n\nexport type { PopoverAction };\n\n// Base props shared by both variants\ntype BasePopoverProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n className?: string;\n};\n\n// Standalone variant props\ntype StandalonePopoverProps = BasePopoverProps & {\n multistep?: false;\n step?: never;\n disableClickOutside?: boolean;\n};\n\n// Walkthrough variant props\ntype WalkthroughPopoverProps = BasePopoverProps & {\n multistep: true;\n step: number;\n disableClickOutside?: boolean;\n};\n\nexport type PopoverProps = StandalonePopoverProps | WalkthroughPopoverProps;\n\ntype PopoverCmp<P> = React.FunctionComponent<P> & {\n Back: typeof PopoverBack;\n Button: typeof PopoverButton;\n Content: typeof PopoverContent;\n Flow: typeof PopoverFlow;\n Footer: typeof PopoverFooter;\n Next: typeof PopoverNext;\n Trigger: typeof PopoverTrigger;\n};\n\nexport const Popover: PopoverCmp<PopoverProps> = (props) => {\n const { multistep = false, disableClickOutside, ...restProps } = props;\n\n if (multistep) {\n return (\n <PopoverWalkthrough\n {...(restProps as WalkthroughPopoverProps)}\n disableClickOutside={disableClickOutside ?? true}\n />\n );\n }\n\n return (\n <PopoverStandalone\n {...(restProps as StandalonePopoverProps)}\n disableClickOutside={disableClickOutside}\n />\n );\n};\n\nPopover.Back = PopoverBack;\nPopover.Button = PopoverButton;\nPopover.Content = PopoverContent;\nPopover.Flow = PopoverFlow;\nPopover.Footer = PopoverFooter;\nPopover.Next = PopoverNext;\nPopover.Trigger = PopoverTrigger;\n\nPopover.displayName = \"Popover\";\n"],"names":["PopoverFlowContext","createContext","usePopoverFlow","context","useContext","useOptionalPopoverFlow","PopoverFlow","children","initialStep","onComplete","onDismiss","separatorText","stepText","backLabel","nextLabel","finishLabel","openDelay","currentStep","setCurrentStep","useState","registeredSteps","setRegisteredSteps","registerStep","useCallback","step","prev","next","unregisterStep","nextStep","back","dismiss","value","useMemo","jsx","PopoverInternalContext","usePopoverInternal","PopoverNegativeContext","usePopoverNegative","DEBOUNCE_DELAY","SCREEN_MEDIA_QUERY","purpurBreakpointMd","useScreenSize","maxMediumScreen","updateSize","setIsMdOrSmaller","isMdOrSmaller","handleResize","timeoutId","useEffect","PopoverBack","onClick","isNegative","negative","handleClick","Button","NAME","Arrow","React","props","forwardedRef","width","height","arrowProps","Primitive","Root","POPPER_NAME","createPopperContext","createPopperScope","createContextScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","ref","composedRefs","useComposedRefs","anchorRef","previousAnchor","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","contentProps","content","setContent","node","arrow","setArrow","arrowSize","useSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","boundary","hasExplicitBoundaries","detectOverflowOptions","isNotNull","refs","floatingStyles","placement","isPositioned","middlewareData","useFloating","args","autoUpdate","offset","shift","limitShift","flip","size","elements","rects","availableWidth","availableHeight","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","hide","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","useCallbackRef","useLayoutEffect","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","options","data","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","x","y","Root2","Anchor","Content","POPOVER_NAME","createPopoverContext","usePopperScope","PopoverProvider","usePopoverContext","Popover","__scopePopover","openProp","defaultOpen","onOpenChange","modal","popperScope","triggerRef","hasCustomAnchor","setHasCustomAnchor","open","setOpen","useControllableState","PopperPrimitive.Root","useId","prevOpen","PopoverAnchor","onCustomAnchorAdd","onCustomAnchorRemove","PopperPrimitive.Anchor","TRIGGER_NAME","PopoverTrigger","triggerProps","composedTriggerRef","trigger","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","PopoverPortal","forceMount","container","Presence","PortalPrimitive","PopoverContent","portalContext","PopoverContentModal","PopoverContentNonModal","Slot","createSlot","contentRef","isRightClickOutsideRef","hideOthers","RemoveScroll","PopoverContentImpl","event","originalEvent","ctrlLeftClick","isRightClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","useFocusGuards","FocusScope","DismissableLayer","PopperPrimitive.Content","CLOSE_NAME","PopoverClose","closeProps","PopoverArrow","PopperPrimitive.Arrow","Trigger","Portal","Content2","Close","Arrow2","PopoverButton","asChild","variant","fullWidth","flow","isFullWidth","RadixPopover.Close","cx","c","styles","PopoverSteps","totalSteps","Fragment","jsxs","Paragraph","PopoverFooter","className","internal","showSteps","PopoverHeader","forwardRef","title","icon","Heading","PopoverNext","beakPosition","closeIconAriaLabel","body","onAction","zIndex","headerRef","useRef","isFlowDismissRef","themePortalContainer","useThemePortalContainer","portalContainer","radixSide","shouldShowArrow","getFocusableElements","element","focusOutsidePopover","contentElement","activeElement","direction","allFocusableElements","activeIndex","currentIndex","candidate","footerContent","isFirstStep","isLastStep","handleOpenAutoFocus","headingElement","handleKeyDown","focusableElements","firstFocusable","lastFocusable","isOnFirstFocusable","isOnLastFocusable","isOnNonTabbableContext","handleCloseAutoFocus","handleClose","handleEscapeKey","handleInteractOutside","RadixPopover.Portal","RadixPopover.Content","IconClose","RadixPopover.Arrow","PopoverStandalone","controlledOpen","disableClickOutside","internalOpen","setInternalOpen","isControlled","isOpen","handleOpenChange","newOpen","RadixPopover.Root","useSmoothScroll","scrollAnimationId","cancelScroll","duration","prefersReducedMotion","rect","absoluteTop","elementHeight","viewportHeight","targetY","documentHeight","maxScroll","startY","distance","startTime","animateScroll","currentTime","elapsed","progress","easeInOut","currentY","usePopoverTrigger","hasScrolled","scrollToElement","buffer","highlight","RadixPopover.Trigger","usePopoverWalkthrough","actuallyOpen","setActuallyOpen","waitingForScroll","setWaitingForScroll","timeoutRef","openedAtRef","shouldBeOpen","onScrollStart","onScrollComplete","delay","consumerOnOpenChange","PopoverWalkthrough","multistep","restProps"],"mappings":"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","x_google_ignoreList":[4,5,6]}
|