@purpur/library 9.10.1 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +106 -0
- package/CHANGELOG.md +44 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-banner-C4NVekCZ.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 headingTag?: 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 headingTag = \"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={headingTag}\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=\"text\"\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","headingTag","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,YAAAC,IAAa;AAAA,IACb,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 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./notification-banner-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./notification-banner-B9RhXAZ8.js");exports.NotificationBanner=i.NotificationBanner;
|
|
2
2
|
//# sourceMappingURL=notification-banner.cjs.js.map
|
package/dist/notification.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./notification-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./notification-BkM2vLzI.js");exports.NOTIFICATION_ARIA_LIVE=i.NOTIFICATION_ARIA_LIVE;exports.NOTIFICATION_ROLE=i.NOTIFICATION_ROLE;exports.NOTIFICATION_STATUS=i.NOTIFICATION_STATUS;exports.Notification=i.Notification;exports.notificationAriaLiveValues=i.notificationAriaLiveValues;exports.notificationRoles=i.notificationRoles;exports.notificationStatuses=i.notificationStatuses;
|
|
2
2
|
//# sourceMappingURL=notification.cjs.js.map
|
package/dist/notification.es.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as o, jsxs as m } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as N, useState as S, useMemo as M, useEffect as W, isValidElement as z } from "react";
|
|
3
|
-
import { b as k } from "./button-
|
|
3
|
+
import { b as k } from "./button-mHw_J7JU.mjs";
|
|
4
4
|
import { b as E } from "./icon-DNHpBTHs-JfI8WyiR.mjs";
|
|
5
|
-
import { T as I } from "./text-field-
|
|
5
|
+
import { T as I } from "./text-field-MQHeITxy.mjs";
|
|
6
6
|
import { c as b } from "./bind-CU-R61T-.mjs";
|
|
7
7
|
import { P as Z } from "./paragraph-CwAdFoIm.mjs";
|
|
8
8
|
const F = {
|
|
@@ -46,37 +46,37 @@ const h = {
|
|
|
46
46
|
["data-testid"]: s = "password-strength-indicator",
|
|
47
47
|
active: e,
|
|
48
48
|
className: n,
|
|
49
|
-
passwordStrength:
|
|
49
|
+
passwordStrength: r,
|
|
50
50
|
...i
|
|
51
51
|
}, d) => {
|
|
52
52
|
const p = V(
|
|
53
53
|
n,
|
|
54
54
|
y,
|
|
55
|
-
{ [`${y}--${
|
|
55
|
+
{ [`${y}--${r}`]: r },
|
|
56
56
|
{ [`${y}--active`]: e }
|
|
57
57
|
);
|
|
58
58
|
return /* @__PURE__ */ o("div", { ...i, "data-testid": s, className: p, ref: d });
|
|
59
59
|
}
|
|
60
60
|
);
|
|
61
61
|
P.displayName = "PasswordStrengthIndicator";
|
|
62
|
-
const X = (s, e, n,
|
|
62
|
+
const X = (s, e, n, r) => {
|
|
63
63
|
const [i, d] = S(0), [p, w] = S(), [g, a] = S(void 0), c = M(
|
|
64
64
|
() => ({
|
|
65
65
|
0: [h.WEAK, e],
|
|
66
66
|
1: [h.WEAK, e],
|
|
67
67
|
2: [h.MEDIUM, n],
|
|
68
|
-
3: [h.STRONG,
|
|
69
|
-
4: [h.STRONG,
|
|
68
|
+
3: [h.STRONG, r],
|
|
69
|
+
4: [h.STRONG, r]
|
|
70
70
|
}),
|
|
71
|
-
[e, n,
|
|
71
|
+
[e, n, r]
|
|
72
72
|
);
|
|
73
73
|
return W(() => {
|
|
74
74
|
(async () => {
|
|
75
75
|
if (!s)
|
|
76
76
|
d(0), w(void 0), a(void 0);
|
|
77
77
|
else {
|
|
78
|
-
const { default:
|
|
79
|
-
d(l), w(
|
|
78
|
+
const { default: t } = await import("./main-L71Sqg3s.mjs").then((D) => D.m), { score: l } = t(s), [x, f] = c[l];
|
|
79
|
+
d(l), w(x), a(f);
|
|
80
80
|
}
|
|
81
81
|
})();
|
|
82
82
|
}, [s, c]), {
|
|
@@ -89,13 +89,13 @@ const X = (s, e, n, t) => {
|
|
|
89
89
|
["data-testid"]: s = "password-strength",
|
|
90
90
|
className: e,
|
|
91
91
|
value: n,
|
|
92
|
-
label:
|
|
92
|
+
label: r,
|
|
93
93
|
weakText: i,
|
|
94
94
|
mediumText: d,
|
|
95
95
|
strongText: p,
|
|
96
96
|
...w
|
|
97
97
|
}, g) => {
|
|
98
|
-
const a = v(e, _), { score: c, passwordStrength:
|
|
98
|
+
const a = v(e, _), { score: c, passwordStrength: t, currentPasswordStrengthText: l } = X(
|
|
99
99
|
n,
|
|
100
100
|
i,
|
|
101
101
|
d,
|
|
@@ -106,22 +106,22 @@ const X = (s, e, n, t) => {
|
|
|
106
106
|
/* @__PURE__ */ o(
|
|
107
107
|
P,
|
|
108
108
|
{
|
|
109
|
-
active: !!
|
|
110
|
-
passwordStrength:
|
|
109
|
+
active: !!t,
|
|
110
|
+
passwordStrength: t
|
|
111
111
|
}
|
|
112
112
|
),
|
|
113
113
|
/* @__PURE__ */ o(
|
|
114
114
|
P,
|
|
115
115
|
{
|
|
116
|
-
active: !!
|
|
117
|
-
passwordStrength:
|
|
116
|
+
active: !!t && c > 1,
|
|
117
|
+
passwordStrength: t
|
|
118
118
|
}
|
|
119
119
|
),
|
|
120
120
|
/* @__PURE__ */ o(
|
|
121
121
|
P,
|
|
122
122
|
{
|
|
123
|
-
active: !!
|
|
124
|
-
passwordStrength:
|
|
123
|
+
active: !!t && c > 2,
|
|
124
|
+
passwordStrength: t
|
|
125
125
|
}
|
|
126
126
|
)
|
|
127
127
|
] }),
|
|
@@ -131,11 +131,11 @@ const X = (s, e, n, t) => {
|
|
|
131
131
|
"aria-live": "polite",
|
|
132
132
|
"data-testid": `${s}-text`,
|
|
133
133
|
className: v(`${_}__password-strength-text`, {
|
|
134
|
-
[`${_}__password-strength-text--${
|
|
134
|
+
[`${_}__password-strength-text--${t}`]: t
|
|
135
135
|
}),
|
|
136
136
|
children: [
|
|
137
137
|
/* @__PURE__ */ m("span", { className: v(`${_}__password-strength-label`), children: [
|
|
138
|
-
|
|
138
|
+
r,
|
|
139
139
|
l ? ": " : ""
|
|
140
140
|
] }),
|
|
141
141
|
l
|
|
@@ -151,36 +151,36 @@ const $ = b.bind(L), C = "purpur-password-field", O = N(
|
|
|
151
151
|
["data-testid"]: s = "password-field",
|
|
152
152
|
children: e,
|
|
153
153
|
className: n,
|
|
154
|
-
hidePasswordAriaLabel:
|
|
154
|
+
hidePasswordAriaLabel: r,
|
|
155
155
|
onChange: i,
|
|
156
156
|
showPasswordAriaLabel: d,
|
|
157
157
|
...p
|
|
158
158
|
}, w) => {
|
|
159
|
-
const g = $(n, C), [a, c] = S(u.PASSWORD),
|
|
160
|
-
i?.(
|
|
159
|
+
const g = $(n, C), [a, c] = S(u.PASSWORD), t = async (f) => {
|
|
160
|
+
i?.(f);
|
|
161
161
|
}, l = () => {
|
|
162
162
|
c(a === u.PASSWORD ? u.TEXT : u.PASSWORD);
|
|
163
|
-
},
|
|
163
|
+
}, x = a === u.PASSWORD ? T : R;
|
|
164
164
|
return /* @__PURE__ */ m("div", { className: g, children: [
|
|
165
165
|
/* @__PURE__ */ o(
|
|
166
166
|
I,
|
|
167
167
|
{
|
|
168
168
|
className: $(`${C}__text-field`),
|
|
169
169
|
"data-testid": s,
|
|
170
|
-
onChange:
|
|
170
|
+
onChange: t,
|
|
171
171
|
ref: w,
|
|
172
172
|
type: a,
|
|
173
173
|
endAdornment: /* @__PURE__ */ o(
|
|
174
174
|
k,
|
|
175
175
|
{
|
|
176
|
-
"aria-label": a === u.PASSWORD ? d :
|
|
176
|
+
"aria-label": a === u.PASSWORD ? d : r,
|
|
177
177
|
"aria-pressed": a === u.TEXT,
|
|
178
178
|
"data-testid": `${s}-type-toggle-button`,
|
|
179
179
|
onClick: l,
|
|
180
180
|
size: "sm",
|
|
181
|
-
variant: "
|
|
181
|
+
variant: "text",
|
|
182
182
|
iconOnly: !0,
|
|
183
|
-
children: /* @__PURE__ */ o(
|
|
183
|
+
children: /* @__PURE__ */ o(x, { size: "sm" })
|
|
184
184
|
}
|
|
185
185
|
),
|
|
186
186
|
...p
|
|
@@ -197,4 +197,4 @@ export {
|
|
|
197
197
|
O as P,
|
|
198
198
|
ss as i
|
|
199
199
|
};
|
|
200
|
-
//# sourceMappingURL=password-field-
|
|
200
|
+
//# sourceMappingURL=password-field-Cy_E-D_G.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-field-C_E4563x.mjs","sources":["../../../components/icon/dist/components/password-invisible.es.js","../../../components/icon/dist/components/password-visible.es.js","../../../components/password-field/src/constants.ts","../../../components/password-field/src/password-strength-indicator.tsx","../../../components/password-field/src/use-password-strength.ts","../../../components/password-field/src/password-strength.tsx","../../../components/password-field/src/password-field.tsx"],"sourcesContent":["import { jsx as a } from \"react/jsx-runtime\";\nimport { I as o } from \"../icon-DNHpBTHs.mjs\";\nconst l = {\n name: \"password-invisible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M2.364 2.364a.9.9 0 0 1 1.272 0l3.809 3.808a11.61 11.61 0 0 1 2.218-.789A9.944 9.944 0 0 1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.647.969-1.81 2.33-3.349 3.547a.9.9 0 0 1-1.116-1.413A15.273 15.273 0 0 0 20.894 12a15.297 15.297 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-.655 0-1.295.083-1.914.233-.435.105-.86.242-1.274.407l.418.417a4.9 4.9 0 0 1 7.632 4.654.9.9 0 1 1-1.786-.222 3.1 3.1 0 0 0-4.538-3.123l11.098 11.098a.9.9 0 1 1-1.272 1.272l-3.809-3.808c-1.362.642-2.9 1.072-4.555 1.072-2.651 0-5-1.103-6.826-2.42-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.645-.966 1.804-2.322 3.335-3.536a.9.9 0 1 1 1.118 1.411A15.266 15.266 0 0 0 3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c1.114 0 2.185-.24 3.188-.64l-.418-.418A4.9 4.9 0 0 1 7.1 12a8.888 8.888 0 0 1-.007-.225 2.488 2.488 0 0 1 .014-.385.9.9 0 1 1 1.786.222.79.79 0 0 0-.001.11A6.245 6.245 0 0 1 8.9 12a3.1 3.1 0 0 0 4.562 2.734L8.586 9.859a.912.912 0 0 1-.102-.102l-6.12-6.12a.9.9 0 0 1 0-1.273Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-invisible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ a(o, { ...s, svg: l });\ni.displayName = \"IconPasswordInvisible\";\nexport {\n i as IconPasswordInvisible\n};\n//# sourceMappingURL=password-invisible.es.js.map\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { I as a } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"password-visible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c2.149 0 4.134-.897 5.774-2.08a15.295 15.295 0 0 0 3.12-3.02 15.3 15.3 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-2.149 0-4.134.897-5.774 2.08A15.299 15.299 0 0 0 3.106 12Zm2.067-4.48C7 6.203 9.349 5.1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.722 1.083-2.096 2.663-3.923 3.98C17 17.797 14.651 18.9 12 18.9s-5-1.103-6.826-2.42c-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.722-1.083 2.096-2.663 3.923-3.98ZM12 8.9a3.1 3.1 0 1 0 0 6.2 3.1 3.1 0 0 0 0-6.2ZM7.1 12a4.9 4.9 0 1 1 9.8 0 4.9 4.9 0 0 1-9.8 0Zm4-1.538a.9.9 0 0 1 .9-.9A2.438 2.438 0 0 1 14.438 12a.9.9 0 0 1-1.8 0 .638.638 0 0 0-.638-.638.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-visible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ o(a, { ...s, svg: e });\ni.displayName = \"IconPasswordVisible\";\nexport {\n i as IconPasswordVisible\n};\n//# sourceMappingURL=password-visible.es.js.map\n","export const PASSWORD_STRENGTH = {\n WEAK: \"weak\",\n MEDIUM: \"medium\",\n STRONG: \"strong\",\n} as const;\n\nexport const FIELD_TYPE = {\n PASSWORD: \"password\",\n TEXT: \"text\",\n} as const;\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength-indicator.module.scss\";\nimport type { PasswordStrengthValue } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthIndicatorProps = Omit<BaseProps, \"children\"> & {\n active: boolean;\n passwordStrength?: PasswordStrengthValue;\n};\n\nconst rootClassName = \"purpur-password-strength-indicator\";\n\nexport const PasswordStrengthIndicator = forwardRef<HTMLDivElement, PasswordStrengthIndicatorProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength-indicator\",\n active,\n className,\n passwordStrength,\n ...props\n },\n ref\n ) => {\n const classes = cx(\n className,\n rootClassName,\n { [`${rootClassName}--${passwordStrength}`]: passwordStrength },\n { [`${rootClassName}--active`]: active }\n );\n\n return <div {...props} data-testid={dataTestId} className={classes} ref={ref} />;\n }\n);\n\nPasswordStrengthIndicator.displayName = \"PasswordStrengthIndicator\";\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { PASSWORD_STRENGTH } from \"./constants\";\nimport {\n type PasswordScore,\n type PasswordStrengthMapValue,\n type PasswordStrengthValue,\n} from \"./types\";\n\ntype UsePasswordStrengthHook = {\n score: number;\n passwordStrength: PasswordStrengthValue | undefined;\n currentPasswordStrengthText: string | undefined;\n};\n\nexport const usePasswordStrength = (\n password: string,\n weakText: string,\n mediumText: string,\n strongText: string\n): UsePasswordStrengthHook => {\n const [score, setScore] = useState<PasswordScore>(0);\n const [passwordStrength, setPasswordStrength] = useState<PasswordStrengthValue | undefined>();\n const [currentPasswordStrengthText, setCurrentPasswordStrengthText] = useState<\n string | undefined\n >(undefined);\n\n const passwordStrengthMap: Record<PasswordScore, PasswordStrengthMapValue> = useMemo(\n () => ({\n 0: [PASSWORD_STRENGTH.WEAK, weakText],\n 1: [PASSWORD_STRENGTH.WEAK, weakText],\n 2: [PASSWORD_STRENGTH.MEDIUM, mediumText],\n 3: [PASSWORD_STRENGTH.STRONG, strongText],\n 4: [PASSWORD_STRENGTH.STRONG, strongText],\n }),\n [weakText, mediumText, strongText]\n );\n\n useEffect(() => {\n (async () => {\n if (!password) {\n setScore(0);\n setPasswordStrength(undefined);\n setCurrentPasswordStrengthText(undefined);\n } else {\n const { default: zxcvbn } = await import(\"zxcvbn\");\n const { score } = zxcvbn(password);\n const [passwordStrength, passwordStrengthText] = passwordStrengthMap[score];\n setScore(score);\n setPasswordStrength(passwordStrength);\n setCurrentPasswordStrengthText(passwordStrengthText);\n }\n })();\n }, [password, passwordStrengthMap]);\n\n return {\n score,\n passwordStrength,\n currentPasswordStrengthText,\n };\n};\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength.module.scss\";\nimport { PasswordStrengthIndicator } from \"./password-strength-indicator\";\nimport { usePasswordStrength } from \"./use-password-strength\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthProps = Omit<BaseProps, \"children\"> & {\n value: string;\n label: string;\n weakText: string;\n mediumText: string;\n strongText: string;\n};\n\nconst rootClassName = \"purpur-password-strength\";\n\nexport const PasswordStrength = forwardRef<HTMLDivElement, PasswordStrengthProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength\",\n className,\n value,\n label,\n weakText,\n mediumText,\n strongText,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const { score, passwordStrength, currentPasswordStrengthText } = usePasswordStrength(\n value,\n weakText,\n mediumText,\n strongText\n );\n\n return (\n <div data-testid={dataTestId} className={classes} ref={ref} {...props}>\n <div className={cx(`${rootClassName}__indicator-container`)}>\n <PasswordStrengthIndicator\n active={!!passwordStrength}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 1}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 2}\n passwordStrength={passwordStrength}\n />\n </div>\n <Paragraph\n aria-live=\"polite\"\n data-testid={`${dataTestId}-text`}\n className={cx(`${rootClassName}__password-strength-text`, {\n [`${rootClassName}__password-strength-text--${passwordStrength}`]: passwordStrength,\n })}\n >\n <span className={cx(`${rootClassName}__password-strength-label`)}>\n {label}\n {currentPasswordStrengthText ? \": \" : \"\"}\n </span>\n {currentPasswordStrengthText}\n </Paragraph>\n </div>\n );\n }\n);\n\nPasswordStrength.displayName = \"PasswordStrength\";\n","import React, {\n type ChangeEvent,\n forwardRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type ReactPortal,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconPasswordInvisible } from \"@purpur/icon/password-invisible\";\nimport { IconPasswordVisible } from \"@purpur/icon/password-visible\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport { FIELD_TYPE } from \"./constants\";\nimport styles from \"./password-field.module.scss\";\nimport { PasswordStrength } from \"./password-strength\";\nimport { type FieldType } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordFieldDefaultProps = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n showPasswordAriaLabel: string;\n hidePasswordAriaLabel: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype TextFieldClearProps =\n | {\n clearButtonAriaLabel: string;\n onClear: () => void;\n }\n | {\n clearButtonAriaLabel?: never;\n onClear?: never;\n };\n\nexport type PasswordFieldProps = PasswordFieldDefaultProps &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"type\" | \"onChange\"> &\n TextFieldClearProps;\n\nconst rootClassName = \"purpur-password-field\";\n\ntype PasswordFieldCmp<P> = React.ForwardRefExoticComponent<\n P & React.RefAttributes<HTMLInputElement>\n> & {\n PasswordStrength: typeof PasswordStrength;\n};\n\nexport const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-field\",\n children,\n className,\n hidePasswordAriaLabel,\n onChange,\n showPasswordAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const [type, setType] = useState<FieldType>(FIELD_TYPE.PASSWORD);\n\n const handleChange = async (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n };\n\n const handleVisibilityChange = () => {\n setType(type === FIELD_TYPE.PASSWORD ? FIELD_TYPE.TEXT : FIELD_TYPE.PASSWORD);\n };\n\n const IconComponent =\n type === FIELD_TYPE.PASSWORD ? IconPasswordVisible : IconPasswordInvisible;\n\n return (\n <div className={classes}>\n <TextField\n className={cx(`${rootClassName}__text-field`)}\n data-testid={dataTestId}\n onChange={handleChange}\n ref={ref}\n type={type}\n endAdornment={\n <Button\n aria-label={\n type === FIELD_TYPE.PASSWORD ? showPasswordAriaLabel : hidePasswordAriaLabel\n }\n aria-pressed={type === FIELD_TYPE.TEXT}\n data-testid={`${dataTestId}-type-toggle-button`}\n onClick={handleVisibilityChange}\n size=\"sm\"\n variant=\"tertiary-purple\"\n iconOnly\n >\n <IconComponent size=\"sm\" />\n </Button>\n }\n {...props}\n />\n {children}\n </div>\n );\n }\n) as PasswordFieldCmp<PasswordFieldProps>;\n\nPasswordField.PasswordStrength = PasswordStrength;\n\nPasswordField.displayName = \"PasswordField\";\n\nexport const isPasswordStrength = (\n child:\n | ReactElement\n | Iterable<ReactNode>\n | ReactPortal\n | string\n | number\n | boolean\n | null\n | undefined\n): child is ReactElement<PasswordFieldProps> =>\n isValidElement<PasswordFieldProps>(child) && child?.type === PasswordStrength;\n"],"names":["l","i","a","o","e","PASSWORD_STRENGTH","FIELD_TYPE","cx","c","styles","rootClassName","PasswordStrengthIndicator","forwardRef","dataTestId","active","className","passwordStrength","props","ref","classes","jsx","usePasswordStrength","password","weakText","mediumText","strongText","score","setScore","useState","setPasswordStrength","currentPasswordStrengthText","setCurrentPasswordStrengthText","passwordStrengthMap","useMemo","useEffect","zxcvbn","n","passwordStrengthText","PasswordStrength","value","label","jsxs","Paragraph","PasswordField","children","hidePasswordAriaLabel","onChange","showPasswordAriaLabel","type","setType","handleChange","event","handleVisibilityChange","IconComponent","IconPasswordVisible","IconPasswordInvisible","TextField","Button","isPasswordStrength","child","isValidElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"password-field-Cy_E-D_G.mjs","sources":["../../../components/icon/dist/components/password-invisible.es.js","../../../components/icon/dist/components/password-visible.es.js","../../../components/password-field/src/constants.ts","../../../components/password-field/src/password-strength-indicator.tsx","../../../components/password-field/src/use-password-strength.ts","../../../components/password-field/src/password-strength.tsx","../../../components/password-field/src/password-field.tsx"],"sourcesContent":["import { jsx as a } from \"react/jsx-runtime\";\nimport { I as o } from \"../icon-DNHpBTHs.mjs\";\nconst l = {\n name: \"password-invisible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M2.364 2.364a.9.9 0 0 1 1.272 0l3.809 3.808a11.61 11.61 0 0 1 2.218-.789A9.944 9.944 0 0 1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.647.969-1.81 2.33-3.349 3.547a.9.9 0 0 1-1.116-1.413A15.273 15.273 0 0 0 20.894 12a15.297 15.297 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-.655 0-1.295.083-1.914.233-.435.105-.86.242-1.274.407l.418.417a4.9 4.9 0 0 1 7.632 4.654.9.9 0 1 1-1.786-.222 3.1 3.1 0 0 0-4.538-3.123l11.098 11.098a.9.9 0 1 1-1.272 1.272l-3.809-3.808c-1.362.642-2.9 1.072-4.555 1.072-2.651 0-5-1.103-6.826-2.42-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.645-.966 1.804-2.322 3.335-3.536a.9.9 0 1 1 1.118 1.411A15.266 15.266 0 0 0 3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c1.114 0 2.185-.24 3.188-.64l-.418-.418A4.9 4.9 0 0 1 7.1 12a8.888 8.888 0 0 1-.007-.225 2.488 2.488 0 0 1 .014-.385.9.9 0 1 1 1.786.222.79.79 0 0 0-.001.11A6.245 6.245 0 0 1 8.9 12a3.1 3.1 0 0 0 4.562 2.734L8.586 9.859a.912.912 0 0 1-.102-.102l-6.12-6.12a.9.9 0 0 1 0-1.273Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-invisible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ a(o, { ...s, svg: l });\ni.displayName = \"IconPasswordInvisible\";\nexport {\n i as IconPasswordInvisible\n};\n//# sourceMappingURL=password-invisible.es.js.map\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { I as a } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"password-visible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c2.149 0 4.134-.897 5.774-2.08a15.295 15.295 0 0 0 3.12-3.02 15.3 15.3 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-2.149 0-4.134.897-5.774 2.08A15.299 15.299 0 0 0 3.106 12Zm2.067-4.48C7 6.203 9.349 5.1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.722 1.083-2.096 2.663-3.923 3.98C17 17.797 14.651 18.9 12 18.9s-5-1.103-6.826-2.42c-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.722-1.083 2.096-2.663 3.923-3.98ZM12 8.9a3.1 3.1 0 1 0 0 6.2 3.1 3.1 0 0 0 0-6.2ZM7.1 12a4.9 4.9 0 1 1 9.8 0 4.9 4.9 0 0 1-9.8 0Zm4-1.538a.9.9 0 0 1 .9-.9A2.438 2.438 0 0 1 14.438 12a.9.9 0 0 1-1.8 0 .638.638 0 0 0-.638-.638.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-visible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ o(a, { ...s, svg: e });\ni.displayName = \"IconPasswordVisible\";\nexport {\n i as IconPasswordVisible\n};\n//# sourceMappingURL=password-visible.es.js.map\n","export const PASSWORD_STRENGTH = {\n WEAK: \"weak\",\n MEDIUM: \"medium\",\n STRONG: \"strong\",\n} as const;\n\nexport const FIELD_TYPE = {\n PASSWORD: \"password\",\n TEXT: \"text\",\n} as const;\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength-indicator.module.scss\";\nimport type { PasswordStrengthValue } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthIndicatorProps = Omit<BaseProps, \"children\"> & {\n active: boolean;\n passwordStrength?: PasswordStrengthValue;\n};\n\nconst rootClassName = \"purpur-password-strength-indicator\";\n\nexport const PasswordStrengthIndicator = forwardRef<HTMLDivElement, PasswordStrengthIndicatorProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength-indicator\",\n active,\n className,\n passwordStrength,\n ...props\n },\n ref\n ) => {\n const classes = cx(\n className,\n rootClassName,\n { [`${rootClassName}--${passwordStrength}`]: passwordStrength },\n { [`${rootClassName}--active`]: active }\n );\n\n return <div {...props} data-testid={dataTestId} className={classes} ref={ref} />;\n }\n);\n\nPasswordStrengthIndicator.displayName = \"PasswordStrengthIndicator\";\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { PASSWORD_STRENGTH } from \"./constants\";\nimport {\n type PasswordScore,\n type PasswordStrengthMapValue,\n type PasswordStrengthValue,\n} from \"./types\";\n\ntype UsePasswordStrengthHook = {\n score: number;\n passwordStrength: PasswordStrengthValue | undefined;\n currentPasswordStrengthText: string | undefined;\n};\n\nexport const usePasswordStrength = (\n password: string,\n weakText: string,\n mediumText: string,\n strongText: string\n): UsePasswordStrengthHook => {\n const [score, setScore] = useState<PasswordScore>(0);\n const [passwordStrength, setPasswordStrength] = useState<PasswordStrengthValue | undefined>();\n const [currentPasswordStrengthText, setCurrentPasswordStrengthText] = useState<\n string | undefined\n >(undefined);\n\n const passwordStrengthMap: Record<PasswordScore, PasswordStrengthMapValue> = useMemo(\n () => ({\n 0: [PASSWORD_STRENGTH.WEAK, weakText],\n 1: [PASSWORD_STRENGTH.WEAK, weakText],\n 2: [PASSWORD_STRENGTH.MEDIUM, mediumText],\n 3: [PASSWORD_STRENGTH.STRONG, strongText],\n 4: [PASSWORD_STRENGTH.STRONG, strongText],\n }),\n [weakText, mediumText, strongText]\n );\n\n useEffect(() => {\n (async () => {\n if (!password) {\n setScore(0);\n setPasswordStrength(undefined);\n setCurrentPasswordStrengthText(undefined);\n } else {\n const { default: zxcvbn } = await import(\"zxcvbn\");\n const { score } = zxcvbn(password);\n const [passwordStrength, passwordStrengthText] = passwordStrengthMap[score];\n setScore(score);\n setPasswordStrength(passwordStrength);\n setCurrentPasswordStrengthText(passwordStrengthText);\n }\n })();\n }, [password, passwordStrengthMap]);\n\n return {\n score,\n passwordStrength,\n currentPasswordStrengthText,\n };\n};\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength.module.scss\";\nimport { PasswordStrengthIndicator } from \"./password-strength-indicator\";\nimport { usePasswordStrength } from \"./use-password-strength\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthProps = Omit<BaseProps, \"children\"> & {\n value: string;\n label: string;\n weakText: string;\n mediumText: string;\n strongText: string;\n};\n\nconst rootClassName = \"purpur-password-strength\";\n\nexport const PasswordStrength = forwardRef<HTMLDivElement, PasswordStrengthProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength\",\n className,\n value,\n label,\n weakText,\n mediumText,\n strongText,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const { score, passwordStrength, currentPasswordStrengthText } = usePasswordStrength(\n value,\n weakText,\n mediumText,\n strongText\n );\n\n return (\n <div data-testid={dataTestId} className={classes} ref={ref} {...props}>\n <div className={cx(`${rootClassName}__indicator-container`)}>\n <PasswordStrengthIndicator\n active={!!passwordStrength}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 1}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 2}\n passwordStrength={passwordStrength}\n />\n </div>\n <Paragraph\n aria-live=\"polite\"\n data-testid={`${dataTestId}-text`}\n className={cx(`${rootClassName}__password-strength-text`, {\n [`${rootClassName}__password-strength-text--${passwordStrength}`]: passwordStrength,\n })}\n >\n <span className={cx(`${rootClassName}__password-strength-label`)}>\n {label}\n {currentPasswordStrengthText ? \": \" : \"\"}\n </span>\n {currentPasswordStrengthText}\n </Paragraph>\n </div>\n );\n }\n);\n\nPasswordStrength.displayName = \"PasswordStrength\";\n","import React, {\n type ChangeEvent,\n forwardRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type ReactPortal,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconPasswordInvisible } from \"@purpur/icon/password-invisible\";\nimport { IconPasswordVisible } from \"@purpur/icon/password-visible\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport { FIELD_TYPE } from \"./constants\";\nimport styles from \"./password-field.module.scss\";\nimport { PasswordStrength } from \"./password-strength\";\nimport { type FieldType } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordFieldDefaultProps = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n showPasswordAriaLabel: string;\n hidePasswordAriaLabel: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype TextFieldClearProps =\n | {\n clearButtonAriaLabel: string;\n onClear: () => void;\n }\n | {\n clearButtonAriaLabel?: never;\n onClear?: never;\n };\n\nexport type PasswordFieldProps = PasswordFieldDefaultProps &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"type\" | \"onChange\"> &\n TextFieldClearProps;\n\nconst rootClassName = \"purpur-password-field\";\n\ntype PasswordFieldCmp<P> = React.ForwardRefExoticComponent<\n P & React.RefAttributes<HTMLInputElement>\n> & {\n PasswordStrength: typeof PasswordStrength;\n};\n\nexport const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-field\",\n children,\n className,\n hidePasswordAriaLabel,\n onChange,\n showPasswordAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const [type, setType] = useState<FieldType>(FIELD_TYPE.PASSWORD);\n\n const handleChange = async (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n };\n\n const handleVisibilityChange = () => {\n setType(type === FIELD_TYPE.PASSWORD ? FIELD_TYPE.TEXT : FIELD_TYPE.PASSWORD);\n };\n\n const IconComponent =\n type === FIELD_TYPE.PASSWORD ? IconPasswordVisible : IconPasswordInvisible;\n\n return (\n <div className={classes}>\n <TextField\n className={cx(`${rootClassName}__text-field`)}\n data-testid={dataTestId}\n onChange={handleChange}\n ref={ref}\n type={type}\n endAdornment={\n <Button\n aria-label={\n type === FIELD_TYPE.PASSWORD ? showPasswordAriaLabel : hidePasswordAriaLabel\n }\n aria-pressed={type === FIELD_TYPE.TEXT}\n data-testid={`${dataTestId}-type-toggle-button`}\n onClick={handleVisibilityChange}\n size=\"sm\"\n variant=\"text\"\n iconOnly\n >\n <IconComponent size=\"sm\" />\n </Button>\n }\n {...props}\n />\n {children}\n </div>\n );\n }\n) as PasswordFieldCmp<PasswordFieldProps>;\n\nPasswordField.PasswordStrength = PasswordStrength;\n\nPasswordField.displayName = \"PasswordField\";\n\nexport const isPasswordStrength = (\n child:\n | ReactElement\n | Iterable<ReactNode>\n | ReactPortal\n | string\n | number\n | boolean\n | null\n | undefined\n): child is ReactElement<PasswordFieldProps> =>\n isValidElement<PasswordFieldProps>(child) && child?.type === PasswordStrength;\n"],"names":["l","i","a","o","e","PASSWORD_STRENGTH","FIELD_TYPE","cx","c","styles","rootClassName","PasswordStrengthIndicator","forwardRef","dataTestId","active","className","passwordStrength","props","ref","classes","jsx","usePasswordStrength","password","weakText","mediumText","strongText","score","setScore","useState","setPasswordStrength","currentPasswordStrengthText","setCurrentPasswordStrengthText","passwordStrengthMap","useMemo","useEffect","zxcvbn","n","passwordStrengthText","PasswordStrength","value","label","jsxs","Paragraph","PasswordField","children","hidePasswordAriaLabel","onChange","showPasswordAriaLabel","type","setType","handleChange","event","handleVisibilityChange","IconComponent","IconPasswordVisible","IconPasswordInvisible","TextField","Button","isPasswordStrength","child","isValidElement"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const t=require("react/jsx-runtime"),o=require("react"),T=require("./button-
|
|
2
|
-
//# sourceMappingURL=password-field-
|
|
1
|
+
"use strict";const t=require("react/jsx-runtime"),o=require("react"),T=require("./button-C5CYysw5.js"),C=require("./icon-DNHpBTHs-faYHqTXU.js"),D=require("./text-field-BSgqJjpv.js"),y=require("./bind-DeUYJ6m9.js"),O=require("./paragraph-B8HFdNne.js"),M={name:"password-invisible",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M2.364 2.364a.9.9 0 0 1 1.272 0l3.809 3.808a11.61 11.61 0 0 1 2.218-.789A9.944 9.944 0 0 1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.647.969-1.81 2.33-3.349 3.547a.9.9 0 0 1-1.116-1.413A15.273 15.273 0 0 0 20.894 12a15.297 15.297 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-.655 0-1.295.083-1.914.233-.435.105-.86.242-1.274.407l.418.417a4.9 4.9 0 0 1 7.632 4.654.9.9 0 1 1-1.786-.222 3.1 3.1 0 0 0-4.538-3.123l11.098 11.098a.9.9 0 1 1-1.272 1.272l-3.809-3.808c-1.362.642-2.9 1.072-4.555 1.072-2.651 0-5-1.103-6.826-2.42-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.645-.966 1.804-2.322 3.335-3.536a.9.9 0 1 1 1.118 1.411A15.266 15.266 0 0 0 3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c1.114 0 2.185-.24 3.188-.64l-.418-.418A4.9 4.9 0 0 1 7.1 12a8.888 8.888 0 0 1-.007-.225 2.488 2.488 0 0 1 .014-.385.9.9 0 1 1 1.786.222.79.79 0 0 0-.001.11A6.245 6.245 0 0 1 8.9 12a3.1 3.1 0 0 0 4.562 2.734L8.586 9.859a.912.912 0 0 1-.102-.102l-6.12-6.12a.9.9 0 0 1 0-1.273Z" clip-rule="evenodd"/></svg>',keywords:["password-invisible"],category:"action"},R=s=>t.jsx(C.b,{...s,svg:M});R.displayName="IconPasswordInvisible";const W={name:"password-visible",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c2.149 0 4.134-.897 5.774-2.08a15.295 15.295 0 0 0 3.12-3.02 15.3 15.3 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-2.149 0-4.134.897-5.774 2.08A15.299 15.299 0 0 0 3.106 12Zm2.067-4.48C7 6.203 9.349 5.1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.722 1.083-2.096 2.663-3.923 3.98C17 17.797 14.651 18.9 12 18.9s-5-1.103-6.826-2.42c-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.722-1.083 2.096-2.663 3.923-3.98ZM12 8.9a3.1 3.1 0 1 0 0 6.2 3.1 3.1 0 0 0 0-6.2ZM7.1 12a4.9 4.9 0 1 1 9.8 0 4.9 4.9 0 0 1-9.8 0Zm4-1.538a.9.9 0 0 1 .9-.9A2.438 2.438 0 0 1 14.438 12a.9.9 0 0 1-1.8 0 .638.638 0 0 0-.638-.638.9.9 0 0 1-.9-.9Z" clip-rule="evenodd"/></svg>',keywords:["password-visible"],category:"action"},j=s=>t.jsx(C.b,{...s,svg:W});j.displayName="IconPasswordVisible";const _={WEAK:"weak",MEDIUM:"medium",STRONG:"strong"},w={PASSWORD:"password",TEXT:"text"},q={"purpur-password-field":"_purpur-password-field_co7kv_1"},z={"purpur-password-strength":"_purpur-password-strength_sa1ua_1","purpur-password-strength__indicator-container":"_purpur-password-strength__indicator-container_sa1ua_6","purpur-password-strength__password-strength-text--weak":"_purpur-password-strength__password-strength-text--weak_sa1ua_10","purpur-password-strength__password-strength-text--medium":"_purpur-password-strength__password-strength-text--medium_sa1ua_13","purpur-password-strength__password-strength-text--strong":"_purpur-password-strength__password-strength-text--strong_sa1ua_16","purpur-password-strength__password-strength-label":"_purpur-password-strength__password-strength-label_sa1ua_19"},k={"purpur-password-strength-indicator":"_purpur-password-strength-indicator_1o6zr_1","purpur-password-strength-indicator--active":"_purpur-password-strength-indicator--active_1o6zr_7","purpur-password-strength-indicator--weak":"_purpur-password-strength-indicator--weak_1o6zr_7","purpur-password-strength-indicator--medium":"_purpur-password-strength-indicator--medium_1o6zr_10","purpur-password-strength-indicator--strong":"_purpur-password-strength-indicator--strong_1o6zr_13"},I=y.c.bind(k),b="purpur-password-strength-indicator",m=o.forwardRef(({["data-testid"]:s="password-strength-indicator",active:n,className:d,passwordStrength:e,...c},i)=>{const p=I(d,b,{[`${b}--${e}`]:e},{[`${b}--active`]:n});return t.jsx("div",{...c,"data-testid":s,className:p,ref:i})});m.displayName="PasswordStrengthIndicator";const F=(s,n,d,e)=>{const[c,i]=o.useState(0),[p,g]=o.useState(),[h,a]=o.useState(void 0),u=o.useMemo(()=>({0:[_.WEAK,n],1:[_.WEAK,n],2:[_.MEDIUM,d],3:[_.STRONG,e],4:[_.STRONG,e]}),[n,d,e]);return o.useEffect(()=>{(async()=>{if(!s)i(0),g(void 0),a(void 0);else{const{default:r}=await Promise.resolve().then(()=>require("./main-B501z9Ql.js")).then(E=>E.main),{score:l}=r(s),[x,P]=u[l];i(l),g(x),a(P)}})()},[s,u]),{score:c,passwordStrength:p,currentPasswordStrengthText:h}},S=y.c.bind(z),v="purpur-password-strength",N=o.forwardRef(({["data-testid"]:s="password-strength",className:n,value:d,label:e,weakText:c,mediumText:i,strongText:p,...g},h)=>{const a=S(n,v),{score:u,passwordStrength:r,currentPasswordStrengthText:l}=F(d,c,i,p);return t.jsxs("div",{"data-testid":s,className:a,ref:h,...g,children:[t.jsxs("div",{className:S(`${v}__indicator-container`),children:[t.jsx(m,{active:!!r,passwordStrength:r}),t.jsx(m,{active:!!r&&u>1,passwordStrength:r}),t.jsx(m,{active:!!r&&u>2,passwordStrength:r})]}),t.jsxs(O.Paragraph,{"aria-live":"polite","data-testid":`${s}-text`,className:S(`${v}__password-strength-text`,{[`${v}__password-strength-text--${r}`]:r}),children:[t.jsxs("span",{className:S(`${v}__password-strength-label`),children:[e,l?": ":""]}),l]})]})});N.displayName="PasswordStrength";const A=y.c.bind(q),$="purpur-password-field",f=o.forwardRef(({["data-testid"]:s="password-field",children:n,className:d,hidePasswordAriaLabel:e,onChange:c,showPasswordAriaLabel:i,...p},g)=>{const h=A(d,$),[a,u]=o.useState(w.PASSWORD),r=async P=>{c?.(P)},l=()=>{u(a===w.PASSWORD?w.TEXT:w.PASSWORD)},x=a===w.PASSWORD?j:R;return t.jsxs("div",{className:h,children:[t.jsx(D.TextField,{className:A(`${$}__text-field`),"data-testid":s,onChange:r,ref:g,type:a,endAdornment:t.jsx(T.Button,{"aria-label":a===w.PASSWORD?i:e,"aria-pressed":a===w.TEXT,"data-testid":`${s}-type-toggle-button`,onClick:l,size:"sm",variant:"text",iconOnly:!0,children:t.jsx(x,{size:"sm"})}),...p}),n]})});f.PasswordStrength=N;f.displayName="PasswordField";const Z=s=>o.isValidElement(s)&&s?.type===N;exports.PasswordField=f;exports.isPasswordStrength=Z;
|
|
2
|
+
//# sourceMappingURL=password-field-lKyWHjQS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-field-BjKdBoIK.js","sources":["../../../components/icon/dist/components/password-invisible.es.js","../../../components/icon/dist/components/password-visible.es.js","../../../components/password-field/src/constants.ts","../../../components/password-field/src/password-strength-indicator.tsx","../../../components/password-field/src/use-password-strength.ts","../../../components/password-field/src/password-strength.tsx","../../../components/password-field/src/password-field.tsx"],"sourcesContent":["import { jsx as a } from \"react/jsx-runtime\";\nimport { I as o } from \"../icon-DNHpBTHs.mjs\";\nconst l = {\n name: \"password-invisible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M2.364 2.364a.9.9 0 0 1 1.272 0l3.809 3.808a11.61 11.61 0 0 1 2.218-.789A9.944 9.944 0 0 1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.647.969-1.81 2.33-3.349 3.547a.9.9 0 0 1-1.116-1.413A15.273 15.273 0 0 0 20.894 12a15.297 15.297 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-.655 0-1.295.083-1.914.233-.435.105-.86.242-1.274.407l.418.417a4.9 4.9 0 0 1 7.632 4.654.9.9 0 1 1-1.786-.222 3.1 3.1 0 0 0-4.538-3.123l11.098 11.098a.9.9 0 1 1-1.272 1.272l-3.809-3.808c-1.362.642-2.9 1.072-4.555 1.072-2.651 0-5-1.103-6.826-2.42-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.645-.966 1.804-2.322 3.335-3.536a.9.9 0 1 1 1.118 1.411A15.266 15.266 0 0 0 3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c1.114 0 2.185-.24 3.188-.64l-.418-.418A4.9 4.9 0 0 1 7.1 12a8.888 8.888 0 0 1-.007-.225 2.488 2.488 0 0 1 .014-.385.9.9 0 1 1 1.786.222.79.79 0 0 0-.001.11A6.245 6.245 0 0 1 8.9 12a3.1 3.1 0 0 0 4.562 2.734L8.586 9.859a.912.912 0 0 1-.102-.102l-6.12-6.12a.9.9 0 0 1 0-1.273Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-invisible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ a(o, { ...s, svg: l });\ni.displayName = \"IconPasswordInvisible\";\nexport {\n i as IconPasswordInvisible\n};\n//# sourceMappingURL=password-invisible.es.js.map\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { I as a } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"password-visible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c2.149 0 4.134-.897 5.774-2.08a15.295 15.295 0 0 0 3.12-3.02 15.3 15.3 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-2.149 0-4.134.897-5.774 2.08A15.299 15.299 0 0 0 3.106 12Zm2.067-4.48C7 6.203 9.349 5.1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.722 1.083-2.096 2.663-3.923 3.98C17 17.797 14.651 18.9 12 18.9s-5-1.103-6.826-2.42c-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.722-1.083 2.096-2.663 3.923-3.98ZM12 8.9a3.1 3.1 0 1 0 0 6.2 3.1 3.1 0 0 0 0-6.2ZM7.1 12a4.9 4.9 0 1 1 9.8 0 4.9 4.9 0 0 1-9.8 0Zm4-1.538a.9.9 0 0 1 .9-.9A2.438 2.438 0 0 1 14.438 12a.9.9 0 0 1-1.8 0 .638.638 0 0 0-.638-.638.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-visible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ o(a, { ...s, svg: e });\ni.displayName = \"IconPasswordVisible\";\nexport {\n i as IconPasswordVisible\n};\n//# sourceMappingURL=password-visible.es.js.map\n","export const PASSWORD_STRENGTH = {\n WEAK: \"weak\",\n MEDIUM: \"medium\",\n STRONG: \"strong\",\n} as const;\n\nexport const FIELD_TYPE = {\n PASSWORD: \"password\",\n TEXT: \"text\",\n} as const;\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength-indicator.module.scss\";\nimport type { PasswordStrengthValue } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthIndicatorProps = Omit<BaseProps, \"children\"> & {\n active: boolean;\n passwordStrength?: PasswordStrengthValue;\n};\n\nconst rootClassName = \"purpur-password-strength-indicator\";\n\nexport const PasswordStrengthIndicator = forwardRef<HTMLDivElement, PasswordStrengthIndicatorProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength-indicator\",\n active,\n className,\n passwordStrength,\n ...props\n },\n ref\n ) => {\n const classes = cx(\n className,\n rootClassName,\n { [`${rootClassName}--${passwordStrength}`]: passwordStrength },\n { [`${rootClassName}--active`]: active }\n );\n\n return <div {...props} data-testid={dataTestId} className={classes} ref={ref} />;\n }\n);\n\nPasswordStrengthIndicator.displayName = \"PasswordStrengthIndicator\";\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { PASSWORD_STRENGTH } from \"./constants\";\nimport {\n type PasswordScore,\n type PasswordStrengthMapValue,\n type PasswordStrengthValue,\n} from \"./types\";\n\ntype UsePasswordStrengthHook = {\n score: number;\n passwordStrength: PasswordStrengthValue | undefined;\n currentPasswordStrengthText: string | undefined;\n};\n\nexport const usePasswordStrength = (\n password: string,\n weakText: string,\n mediumText: string,\n strongText: string\n): UsePasswordStrengthHook => {\n const [score, setScore] = useState<PasswordScore>(0);\n const [passwordStrength, setPasswordStrength] = useState<PasswordStrengthValue | undefined>();\n const [currentPasswordStrengthText, setCurrentPasswordStrengthText] = useState<\n string | undefined\n >(undefined);\n\n const passwordStrengthMap: Record<PasswordScore, PasswordStrengthMapValue> = useMemo(\n () => ({\n 0: [PASSWORD_STRENGTH.WEAK, weakText],\n 1: [PASSWORD_STRENGTH.WEAK, weakText],\n 2: [PASSWORD_STRENGTH.MEDIUM, mediumText],\n 3: [PASSWORD_STRENGTH.STRONG, strongText],\n 4: [PASSWORD_STRENGTH.STRONG, strongText],\n }),\n [weakText, mediumText, strongText]\n );\n\n useEffect(() => {\n (async () => {\n if (!password) {\n setScore(0);\n setPasswordStrength(undefined);\n setCurrentPasswordStrengthText(undefined);\n } else {\n const { default: zxcvbn } = await import(\"zxcvbn\");\n const { score } = zxcvbn(password);\n const [passwordStrength, passwordStrengthText] = passwordStrengthMap[score];\n setScore(score);\n setPasswordStrength(passwordStrength);\n setCurrentPasswordStrengthText(passwordStrengthText);\n }\n })();\n }, [password, passwordStrengthMap]);\n\n return {\n score,\n passwordStrength,\n currentPasswordStrengthText,\n };\n};\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength.module.scss\";\nimport { PasswordStrengthIndicator } from \"./password-strength-indicator\";\nimport { usePasswordStrength } from \"./use-password-strength\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthProps = Omit<BaseProps, \"children\"> & {\n value: string;\n label: string;\n weakText: string;\n mediumText: string;\n strongText: string;\n};\n\nconst rootClassName = \"purpur-password-strength\";\n\nexport const PasswordStrength = forwardRef<HTMLDivElement, PasswordStrengthProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength\",\n className,\n value,\n label,\n weakText,\n mediumText,\n strongText,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const { score, passwordStrength, currentPasswordStrengthText } = usePasswordStrength(\n value,\n weakText,\n mediumText,\n strongText\n );\n\n return (\n <div data-testid={dataTestId} className={classes} ref={ref} {...props}>\n <div className={cx(`${rootClassName}__indicator-container`)}>\n <PasswordStrengthIndicator\n active={!!passwordStrength}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 1}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 2}\n passwordStrength={passwordStrength}\n />\n </div>\n <Paragraph\n aria-live=\"polite\"\n data-testid={`${dataTestId}-text`}\n className={cx(`${rootClassName}__password-strength-text`, {\n [`${rootClassName}__password-strength-text--${passwordStrength}`]: passwordStrength,\n })}\n >\n <span className={cx(`${rootClassName}__password-strength-label`)}>\n {label}\n {currentPasswordStrengthText ? \": \" : \"\"}\n </span>\n {currentPasswordStrengthText}\n </Paragraph>\n </div>\n );\n }\n);\n\nPasswordStrength.displayName = \"PasswordStrength\";\n","import React, {\n type ChangeEvent,\n forwardRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type ReactPortal,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconPasswordInvisible } from \"@purpur/icon/password-invisible\";\nimport { IconPasswordVisible } from \"@purpur/icon/password-visible\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport { FIELD_TYPE } from \"./constants\";\nimport styles from \"./password-field.module.scss\";\nimport { PasswordStrength } from \"./password-strength\";\nimport { type FieldType } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordFieldDefaultProps = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n showPasswordAriaLabel: string;\n hidePasswordAriaLabel: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype TextFieldClearProps =\n | {\n clearButtonAriaLabel: string;\n onClear: () => void;\n }\n | {\n clearButtonAriaLabel?: never;\n onClear?: never;\n };\n\nexport type PasswordFieldProps = PasswordFieldDefaultProps &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"type\" | \"onChange\"> &\n TextFieldClearProps;\n\nconst rootClassName = \"purpur-password-field\";\n\ntype PasswordFieldCmp<P> = React.ForwardRefExoticComponent<\n P & React.RefAttributes<HTMLInputElement>\n> & {\n PasswordStrength: typeof PasswordStrength;\n};\n\nexport const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-field\",\n children,\n className,\n hidePasswordAriaLabel,\n onChange,\n showPasswordAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const [type, setType] = useState<FieldType>(FIELD_TYPE.PASSWORD);\n\n const handleChange = async (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n };\n\n const handleVisibilityChange = () => {\n setType(type === FIELD_TYPE.PASSWORD ? FIELD_TYPE.TEXT : FIELD_TYPE.PASSWORD);\n };\n\n const IconComponent =\n type === FIELD_TYPE.PASSWORD ? IconPasswordVisible : IconPasswordInvisible;\n\n return (\n <div className={classes}>\n <TextField\n className={cx(`${rootClassName}__text-field`)}\n data-testid={dataTestId}\n onChange={handleChange}\n ref={ref}\n type={type}\n endAdornment={\n <Button\n aria-label={\n type === FIELD_TYPE.PASSWORD ? showPasswordAriaLabel : hidePasswordAriaLabel\n }\n aria-pressed={type === FIELD_TYPE.TEXT}\n data-testid={`${dataTestId}-type-toggle-button`}\n onClick={handleVisibilityChange}\n size=\"sm\"\n variant=\"tertiary-purple\"\n iconOnly\n >\n <IconComponent size=\"sm\" />\n </Button>\n }\n {...props}\n />\n {children}\n </div>\n );\n }\n) as PasswordFieldCmp<PasswordFieldProps>;\n\nPasswordField.PasswordStrength = PasswordStrength;\n\nPasswordField.displayName = \"PasswordField\";\n\nexport const isPasswordStrength = (\n child:\n | ReactElement\n | Iterable<ReactNode>\n | ReactPortal\n | string\n | number\n | boolean\n | null\n | undefined\n): child is ReactElement<PasswordFieldProps> =>\n isValidElement<PasswordFieldProps>(child) && child?.type === PasswordStrength;\n"],"names":["l","i","a","o","e","PASSWORD_STRENGTH","FIELD_TYPE","cx","c","styles","rootClassName","PasswordStrengthIndicator","forwardRef","dataTestId","active","className","passwordStrength","props","ref","classes","jsx","usePasswordStrength","password","weakText","mediumText","strongText","score","setScore","useState","setPasswordStrength","currentPasswordStrengthText","setCurrentPasswordStrengthText","passwordStrengthMap","useMemo","useEffect","zxcvbn","n","passwordStrengthText","PasswordStrength","value","label","jsxs","Paragraph","PasswordField","children","hidePasswordAriaLabel","onChange","showPasswordAriaLabel","type","setType","handleChange","event","handleVisibilityChange","IconComponent","IconPasswordVisible","IconPasswordInvisible","TextField","Button","isPasswordStrength","child","isValidElement"],"mappings":"2PAEMA,EAAI,CACR,KAAM,qBACN,IAAK,wpCACL,SAAU,CAAC,oBAAoB,EAC/B,SAAU,QACZ,EAAGC,EAAK,GAAsBC,MAAEC,EAAAA,EAAG,CAAE,GAAG,EAAG,IAAKH,EAAG,EACnDC,EAAE,YAAc,wBCNhB,MAAMG,EAAI,CACR,KAAM,mBACN,IAAK,42BACL,SAAU,CAAC,kBAAkB,EAC7B,SAAU,QACZ,EAAGH,EAAK,GAAsBE,MAAED,EAAAA,EAAG,CAAE,GAAG,EAAG,IAAKE,EAAG,EACnDH,EAAE,YAAc,sBCRT,MAAMI,EAAoB,CAC/B,KAAM,OACN,OAAQ,SACR,OAAQ,QACV,EAEaC,EAAa,CACxB,SAAU,WACV,KAAM,MACR,0rCCFMC,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAOlBC,EAAgB,qCAETC,EAA4BC,EAAAA,WACvC,CACE,CACE,CAAC,eAAgBC,EAAa,8BAC9B,OAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAUZ,EACdQ,EACAL,EACA,CAAE,CAAC,GAAGA,CAAa,KAAKM,CAAgB,EAAE,EAAGA,CAAA,EAC7C,CAAE,CAAC,GAAGN,CAAa,UAAU,EAAGI,CAAA,CAAO,EAGzC,OAAOM,EAAAA,IAAC,OAAK,GAAGH,EAAO,cAAaJ,EAAY,UAAWM,EAAS,IAAAD,EAAU,CAChF,CACF,EAEAP,EAA0B,YAAc,4BCvBjC,MAAMU,EAAsB,CACjCC,EACAC,EACAC,EACAC,IAC4B,CAC5B,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAwB,CAAC,EAC7C,CAACZ,EAAkBa,CAAmB,EAAID,WAAA,EAC1C,CAACE,EAA6BC,CAA8B,EAAIH,EAAAA,SAEpE,MAAS,EAELI,EAAuEC,EAAAA,QAC3E,KAAO,CACL,EAAG,CAAC5B,EAAkB,KAAMkB,CAAQ,EACpC,EAAG,CAAClB,EAAkB,KAAMkB,CAAQ,EACpC,EAAG,CAAClB,EAAkB,OAAQmB,CAAU,EACxC,EAAG,CAACnB,EAAkB,OAAQoB,CAAU,EACxC,EAAG,CAACpB,EAAkB,OAAQoB,CAAU,CAAA,GAE1C,CAACF,EAAUC,EAAYC,CAAU,CAAA,EAGnCS,OAAAA,EAAAA,UAAU,IAAM,EACb,SAAY,CACX,GAAI,CAACZ,EACHK,EAAS,CAAC,EACVE,EAAoB,MAAS,EAC7BE,EAA+B,MAAS,MACnC,CACL,KAAM,CAAE,QAASI,GAAW,MAAM,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,oBAAQ,CAAA,EAAA,KAAAC,GAAAA,EAAA,IAAA,EAC3C,CAAE,MAAAV,GAAUS,EAAOb,CAAQ,EAC3B,CAACN,EAAkBqB,CAAoB,EAAIL,EAAoBN,CAAK,EAC1EC,EAASD,CAAK,EACdG,EAAoBb,CAAgB,EACpCe,EAA+BM,CAAoB,CACrD,CACF,GAAA,CACF,EAAG,CAACf,EAAUU,CAAmB,CAAC,EAE3B,CACL,MAAAN,EACA,iBAAAV,EACA,4BAAAc,CAAA,CAEJ,ECnDMvB,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAUlBC,EAAgB,2BAET4B,EAAmB1B,EAAAA,WAC9B,CACE,CACE,CAAC,eAAgBC,EAAa,oBAC9B,UAAAE,EACA,MAAAwB,EACA,MAAAC,EACA,SAAAjB,EACA,WAAAC,EACA,WAAAC,EACA,GAAGR,CAAA,EAELC,IACG,CACH,MAAMC,EAAUZ,EAAGQ,EAAWL,CAAa,EACrC,CAAE,MAAAgB,EAAO,iBAAAV,EAAkB,4BAAAc,CAAA,EAAgCT,EAC/DkB,EACAhB,EACAC,EACAC,CAAA,EAGF,OACEgB,OAAC,OAAI,cAAa5B,EAAY,UAAWM,EAAS,IAAAD,EAAW,GAAGD,EAC9D,SAAA,CAAAwB,OAAC,OAAI,UAAWlC,EAAG,GAAGG,CAAa,uBAAuB,EACxD,SAAA,CAAAU,EAAAA,IAACT,EAAA,CACC,OAAQ,CAAC,CAACK,EACV,iBAAAA,CAAA,CAAA,EAEFI,EAAAA,IAACT,EAAA,CACC,OAAQ,CAAC,CAACK,GAAoBU,EAAQ,EACtC,iBAAAV,CAAA,CAAA,EAEFI,EAAAA,IAACT,EAAA,CACC,OAAQ,CAAC,CAACK,GAAoBU,EAAQ,EACtC,iBAAAV,CAAA,CAAA,CACF,EACF,EACAyB,EAAAA,KAACC,EAAAA,UAAA,CACC,YAAU,SACV,cAAa,GAAG7B,CAAU,QAC1B,UAAWN,EAAG,GAAGG,CAAa,2BAA4B,CACxD,CAAC,GAAGA,CAAa,6BAA6BM,CAAgB,EAAE,EAAGA,CAAA,CACpE,EAED,SAAA,CAAAyB,OAAC,QAAK,UAAWlC,EAAG,GAAGG,CAAa,2BAA2B,EAC5D,SAAA,CAAA8B,EACAV,EAA8B,KAAO,EAAA,EACxC,EACCA,CAAA,CAAA,CAAA,CACH,EACF,CAEJ,CACF,EAEAQ,EAAiB,YAAc,mBCzD/B,MAAM/B,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAwBlBC,EAAgB,wBAQTiC,EAAgB/B,EAAAA,WAC3B,CACE,CACE,CAAC,eAAgBC,EAAa,iBAC9B,SAAA+B,EACA,UAAA7B,EACA,sBAAA8B,EACA,SAAAC,EACA,sBAAAC,EACA,GAAG9B,CAAA,EAELC,IACG,CACH,MAAMC,EAAUZ,EAAGQ,EAAWL,CAAa,EACrC,CAACsC,EAAMC,CAAO,EAAIrB,EAAAA,SAAoBtB,EAAW,QAAQ,EAEzD4C,EAAe,MAAOC,GAAyC,CACnEL,IAAWK,CAAK,CAClB,EAEMC,EAAyB,IAAM,CACnCH,EAAQD,IAAS1C,EAAW,SAAWA,EAAW,KAAOA,EAAW,QAAQ,CAC9E,EAEM+C,EACJL,IAAS1C,EAAW,SAAWgD,EAAsBC,EAEvD,OACEd,EAAAA,KAAC,MAAA,CAAI,UAAWtB,EACd,SAAA,CAAAC,EAAAA,IAACoC,EAAAA,UAAA,CACC,UAAWjD,EAAG,GAAGG,CAAa,cAAc,EAC5C,cAAaG,EACb,SAAUqC,EACV,IAAAhC,EACA,KAAA8B,EACA,aACE5B,EAAAA,IAACqC,EAAAA,OAAA,CACC,aACET,IAAS1C,EAAW,SAAWyC,EAAwBF,EAEzD,eAAcG,IAAS1C,EAAW,KAClC,cAAa,GAAGO,CAAU,sBAC1B,QAASuC,EACT,KAAK,KACL,QAAQ,kBACR,SAAQ,GAER,SAAAhC,EAAAA,IAACiC,EAAA,CAAc,KAAK,IAAA,CAAK,CAAA,CAAA,EAG5B,GAAGpC,CAAA,CAAA,EAEL2B,CAAA,EACH,CAEJ,CACF,EAEAD,EAAc,iBAAmBL,EAEjCK,EAAc,YAAc,gBAErB,MAAMe,EACXC,GAUAC,EAAAA,eAAmCD,CAAK,GAAKA,GAAO,OAASrB"}
|
|
1
|
+
{"version":3,"file":"password-field-lKyWHjQS.js","sources":["../../../components/icon/dist/components/password-invisible.es.js","../../../components/icon/dist/components/password-visible.es.js","../../../components/password-field/src/constants.ts","../../../components/password-field/src/password-strength-indicator.tsx","../../../components/password-field/src/use-password-strength.ts","../../../components/password-field/src/password-strength.tsx","../../../components/password-field/src/password-field.tsx"],"sourcesContent":["import { jsx as a } from \"react/jsx-runtime\";\nimport { I as o } from \"../icon-DNHpBTHs.mjs\";\nconst l = {\n name: \"password-invisible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M2.364 2.364a.9.9 0 0 1 1.272 0l3.809 3.808a11.61 11.61 0 0 1 2.218-.789A9.944 9.944 0 0 1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.647.969-1.81 2.33-3.349 3.547a.9.9 0 0 1-1.116-1.413A15.273 15.273 0 0 0 20.894 12a15.297 15.297 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-.655 0-1.295.083-1.914.233-.435.105-.86.242-1.274.407l.418.417a4.9 4.9 0 0 1 7.632 4.654.9.9 0 1 1-1.786-.222 3.1 3.1 0 0 0-4.538-3.123l11.098 11.098a.9.9 0 1 1-1.272 1.272l-3.809-3.808c-1.362.642-2.9 1.072-4.555 1.072-2.651 0-5-1.103-6.826-2.42-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.645-.966 1.804-2.322 3.335-3.536a.9.9 0 1 1 1.118 1.411A15.266 15.266 0 0 0 3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c1.114 0 2.185-.24 3.188-.64l-.418-.418A4.9 4.9 0 0 1 7.1 12a8.888 8.888 0 0 1-.007-.225 2.488 2.488 0 0 1 .014-.385.9.9 0 1 1 1.786.222.79.79 0 0 0-.001.11A6.245 6.245 0 0 1 8.9 12a3.1 3.1 0 0 0 4.562 2.734L8.586 9.859a.912.912 0 0 1-.102-.102l-6.12-6.12a.9.9 0 0 1 0-1.273Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-invisible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ a(o, { ...s, svg: l });\ni.displayName = \"IconPasswordInvisible\";\nexport {\n i as IconPasswordInvisible\n};\n//# sourceMappingURL=password-invisible.es.js.map\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { I as a } from \"../icon-DNHpBTHs.mjs\";\nconst e = {\n name: \"password-visible\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M3.107 12a15.294 15.294 0 0 0 3.12 3.02C7.866 16.203 9.85 17.1 12 17.1c2.149 0 4.134-.897 5.774-2.08a15.295 15.295 0 0 0 3.12-3.02 15.3 15.3 0 0 0-3.12-3.02C16.134 7.797 14.148 6.9 12 6.9c-2.149 0-4.134.897-5.774 2.08A15.299 15.299 0 0 0 3.106 12Zm2.067-4.48C7 6.203 9.349 5.1 12 5.1c2.652 0 5 1.103 6.826 2.42 1.827 1.317 3.2 2.897 3.923 3.98l.333.5-.333.5c-.722 1.083-2.096 2.663-3.923 3.98C17 17.797 14.651 18.9 12 18.9s-5-1.103-6.826-2.42c-1.827-1.317-3.2-2.897-3.923-3.98L.918 12l.333-.5c.722-1.083 2.096-2.663 3.923-3.98ZM12 8.9a3.1 3.1 0 1 0 0 6.2 3.1 3.1 0 0 0 0-6.2ZM7.1 12a4.9 4.9 0 1 1 9.8 0 4.9 4.9 0 0 1-9.8 0Zm4-1.538a.9.9 0 0 1 .9-.9A2.438 2.438 0 0 1 14.438 12a.9.9 0 0 1-1.8 0 .638.638 0 0 0-.638-.638.9.9 0 0 1-.9-.9Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"password-visible\"],\n category: \"action\"\n}, i = (s) => /* @__PURE__ */ o(a, { ...s, svg: e });\ni.displayName = \"IconPasswordVisible\";\nexport {\n i as IconPasswordVisible\n};\n//# sourceMappingURL=password-visible.es.js.map\n","export const PASSWORD_STRENGTH = {\n WEAK: \"weak\",\n MEDIUM: \"medium\",\n STRONG: \"strong\",\n} as const;\n\nexport const FIELD_TYPE = {\n PASSWORD: \"password\",\n TEXT: \"text\",\n} as const;\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength-indicator.module.scss\";\nimport type { PasswordStrengthValue } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthIndicatorProps = Omit<BaseProps, \"children\"> & {\n active: boolean;\n passwordStrength?: PasswordStrengthValue;\n};\n\nconst rootClassName = \"purpur-password-strength-indicator\";\n\nexport const PasswordStrengthIndicator = forwardRef<HTMLDivElement, PasswordStrengthIndicatorProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength-indicator\",\n active,\n className,\n passwordStrength,\n ...props\n },\n ref\n ) => {\n const classes = cx(\n className,\n rootClassName,\n { [`${rootClassName}--${passwordStrength}`]: passwordStrength },\n { [`${rootClassName}--active`]: active }\n );\n\n return <div {...props} data-testid={dataTestId} className={classes} ref={ref} />;\n }\n);\n\nPasswordStrengthIndicator.displayName = \"PasswordStrengthIndicator\";\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { PASSWORD_STRENGTH } from \"./constants\";\nimport {\n type PasswordScore,\n type PasswordStrengthMapValue,\n type PasswordStrengthValue,\n} from \"./types\";\n\ntype UsePasswordStrengthHook = {\n score: number;\n passwordStrength: PasswordStrengthValue | undefined;\n currentPasswordStrengthText: string | undefined;\n};\n\nexport const usePasswordStrength = (\n password: string,\n weakText: string,\n mediumText: string,\n strongText: string\n): UsePasswordStrengthHook => {\n const [score, setScore] = useState<PasswordScore>(0);\n const [passwordStrength, setPasswordStrength] = useState<PasswordStrengthValue | undefined>();\n const [currentPasswordStrengthText, setCurrentPasswordStrengthText] = useState<\n string | undefined\n >(undefined);\n\n const passwordStrengthMap: Record<PasswordScore, PasswordStrengthMapValue> = useMemo(\n () => ({\n 0: [PASSWORD_STRENGTH.WEAK, weakText],\n 1: [PASSWORD_STRENGTH.WEAK, weakText],\n 2: [PASSWORD_STRENGTH.MEDIUM, mediumText],\n 3: [PASSWORD_STRENGTH.STRONG, strongText],\n 4: [PASSWORD_STRENGTH.STRONG, strongText],\n }),\n [weakText, mediumText, strongText]\n );\n\n useEffect(() => {\n (async () => {\n if (!password) {\n setScore(0);\n setPasswordStrength(undefined);\n setCurrentPasswordStrengthText(undefined);\n } else {\n const { default: zxcvbn } = await import(\"zxcvbn\");\n const { score } = zxcvbn(password);\n const [passwordStrength, passwordStrengthText] = passwordStrengthMap[score];\n setScore(score);\n setPasswordStrength(passwordStrength);\n setCurrentPasswordStrengthText(passwordStrengthText);\n }\n })();\n }, [password, passwordStrengthMap]);\n\n return {\n score,\n passwordStrength,\n currentPasswordStrengthText,\n };\n};\n","import React, { forwardRef } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./password-strength.module.scss\";\nimport { PasswordStrengthIndicator } from \"./password-strength-indicator\";\nimport { usePasswordStrength } from \"./use-password-strength\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordStrengthProps = Omit<BaseProps, \"children\"> & {\n value: string;\n label: string;\n weakText: string;\n mediumText: string;\n strongText: string;\n};\n\nconst rootClassName = \"purpur-password-strength\";\n\nexport const PasswordStrength = forwardRef<HTMLDivElement, PasswordStrengthProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-strength\",\n className,\n value,\n label,\n weakText,\n mediumText,\n strongText,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const { score, passwordStrength, currentPasswordStrengthText } = usePasswordStrength(\n value,\n weakText,\n mediumText,\n strongText\n );\n\n return (\n <div data-testid={dataTestId} className={classes} ref={ref} {...props}>\n <div className={cx(`${rootClassName}__indicator-container`)}>\n <PasswordStrengthIndicator\n active={!!passwordStrength}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 1}\n passwordStrength={passwordStrength}\n />\n <PasswordStrengthIndicator\n active={!!passwordStrength && score > 2}\n passwordStrength={passwordStrength}\n />\n </div>\n <Paragraph\n aria-live=\"polite\"\n data-testid={`${dataTestId}-text`}\n className={cx(`${rootClassName}__password-strength-text`, {\n [`${rootClassName}__password-strength-text--${passwordStrength}`]: passwordStrength,\n })}\n >\n <span className={cx(`${rootClassName}__password-strength-label`)}>\n {label}\n {currentPasswordStrengthText ? \": \" : \"\"}\n </span>\n {currentPasswordStrengthText}\n </Paragraph>\n </div>\n );\n }\n);\n\nPasswordStrength.displayName = \"PasswordStrength\";\n","import React, {\n type ChangeEvent,\n forwardRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type ReactPortal,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconPasswordInvisible } from \"@purpur/icon/password-invisible\";\nimport { IconPasswordVisible } from \"@purpur/icon/password-visible\";\nimport { TextField, type TextFieldProps } from \"@purpur/text-field\";\nimport c from \"classnames/bind\";\n\nimport { FIELD_TYPE } from \"./constants\";\nimport styles from \"./password-field.module.scss\";\nimport { PasswordStrength } from \"./password-strength\";\nimport { type FieldType } from \"./types\";\n\nconst cx = c.bind(styles);\n\nexport type PasswordFieldDefaultProps = {\n [\"data-testid\"]?: string;\n children?: ReactNode;\n showPasswordAriaLabel: string;\n hidePasswordAriaLabel: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype TextFieldClearProps =\n | {\n clearButtonAriaLabel: string;\n onClear: () => void;\n }\n | {\n clearButtonAriaLabel?: never;\n onClear?: never;\n };\n\nexport type PasswordFieldProps = PasswordFieldDefaultProps &\n Omit<TextFieldProps, \"startAdornment\" | \"endAdornment\" | \"afterField\" | \"type\" | \"onChange\"> &\n TextFieldClearProps;\n\nconst rootClassName = \"purpur-password-field\";\n\ntype PasswordFieldCmp<P> = React.ForwardRefExoticComponent<\n P & React.RefAttributes<HTMLInputElement>\n> & {\n PasswordStrength: typeof PasswordStrength;\n};\n\nexport const PasswordField = forwardRef<HTMLInputElement, PasswordFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId = \"password-field\",\n children,\n className,\n hidePasswordAriaLabel,\n onChange,\n showPasswordAriaLabel,\n ...props\n },\n ref\n ) => {\n const classes = cx(className, rootClassName);\n const [type, setType] = useState<FieldType>(FIELD_TYPE.PASSWORD);\n\n const handleChange = async (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n };\n\n const handleVisibilityChange = () => {\n setType(type === FIELD_TYPE.PASSWORD ? FIELD_TYPE.TEXT : FIELD_TYPE.PASSWORD);\n };\n\n const IconComponent =\n type === FIELD_TYPE.PASSWORD ? IconPasswordVisible : IconPasswordInvisible;\n\n return (\n <div className={classes}>\n <TextField\n className={cx(`${rootClassName}__text-field`)}\n data-testid={dataTestId}\n onChange={handleChange}\n ref={ref}\n type={type}\n endAdornment={\n <Button\n aria-label={\n type === FIELD_TYPE.PASSWORD ? showPasswordAriaLabel : hidePasswordAriaLabel\n }\n aria-pressed={type === FIELD_TYPE.TEXT}\n data-testid={`${dataTestId}-type-toggle-button`}\n onClick={handleVisibilityChange}\n size=\"sm\"\n variant=\"text\"\n iconOnly\n >\n <IconComponent size=\"sm\" />\n </Button>\n }\n {...props}\n />\n {children}\n </div>\n );\n }\n) as PasswordFieldCmp<PasswordFieldProps>;\n\nPasswordField.PasswordStrength = PasswordStrength;\n\nPasswordField.displayName = \"PasswordField\";\n\nexport const isPasswordStrength = (\n child:\n | ReactElement\n | Iterable<ReactNode>\n | ReactPortal\n | string\n | number\n | boolean\n | null\n | undefined\n): child is ReactElement<PasswordFieldProps> =>\n isValidElement<PasswordFieldProps>(child) && child?.type === PasswordStrength;\n"],"names":["l","i","a","o","e","PASSWORD_STRENGTH","FIELD_TYPE","cx","c","styles","rootClassName","PasswordStrengthIndicator","forwardRef","dataTestId","active","className","passwordStrength","props","ref","classes","jsx","usePasswordStrength","password","weakText","mediumText","strongText","score","setScore","useState","setPasswordStrength","currentPasswordStrengthText","setCurrentPasswordStrengthText","passwordStrengthMap","useMemo","useEffect","zxcvbn","n","passwordStrengthText","PasswordStrength","value","label","jsxs","Paragraph","PasswordField","children","hidePasswordAriaLabel","onChange","showPasswordAriaLabel","type","setType","handleChange","event","handleVisibilityChange","IconComponent","IconPasswordVisible","IconPasswordInvisible","TextField","Button","isPasswordStrength","child","isValidElement"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./password-field-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./password-field-lKyWHjQS.js");exports.PasswordField=s.PasswordField;exports.isPasswordStrength=s.isPasswordStrength;
|
|
2
2
|
//# sourceMappingURL=password-field.cjs.js.map
|