@purpur/library 9.10.0 → 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 +124 -0
- package/CHANGELOG.md +53 -1
- package/dist/LICENSE.txt +270 -175
- package/dist/{RichText-BAVZadzi.js → RichText-B865Qkzj.js} +2 -2
- package/dist/{RichText-BAVZadzi.js.map → RichText-B865Qkzj.js.map} +1 -1
- package/dist/{RichText-D4vznH1B.mjs → RichText-CPkBwXNI.mjs} +3 -3
- package/dist/{RichText-D4vznH1B.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-Cru-p6gC.mjs → calendar-DTL_g0ue.mjs} +4 -14
- package/dist/{calendar-Cru-p6gC.mjs.map → calendar-DTL_g0ue.mjs.map} +1 -1
- package/dist/{calendar-DDR8CQYo.js → calendar-DVOrK53J.js} +2 -2
- package/dist/{calendar-DDR8CQYo.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-BIKcwvYz.mjs → carousel-Dq9yzk_-.mjs} +2 -2
- package/dist/{carousel-BIKcwvYz.mjs.map → carousel-Dq9yzk_-.mjs.map} +1 -1
- package/dist/{carousel-DnSaLDZf.js → carousel-j-s6M1hu.js} +2 -2
- package/dist/{carousel-DnSaLDZf.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-Wjvh2J6C.js → chat-field-CLAjIHlM.js} +2 -2
- package/dist/{chat-field-Wjvh2J6C.js.map → chat-field-CLAjIHlM.js.map} +1 -1
- package/dist/{chat-field-CVF4DooY.mjs → chat-field-nxFRXoQx.mjs} +2 -2
- package/dist/{chat-field-CVF4DooY.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-Dtqxz8vL.js → comparison-table-CRWRijfG.js} +2 -2
- package/dist/{comparison-table-Dtqxz8vL.js.map → comparison-table-CRWRijfG.js.map} +1 -1
- package/dist/{comparison-table-D1evE0ri.mjs → comparison-table-DYaRaP9Z.mjs} +3 -3
- package/dist/{comparison-table-D1evE0ri.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 +3 -3
- package/dist/components/accordion/src/accordion-item.d.ts.map +1 -1
- package/dist/components/accordion/src/accordion.d.ts +3 -7
- 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/avatar/src/avatar.d.ts +1 -1
- package/dist/components/badge/src/badge.d.ts +1 -1
- package/dist/components/button/src/button.d.ts +7 -8
- 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-content-container.d.ts +1 -1
- package/dist/components/card/src/card-content.d.ts +1 -1
- package/dist/components/card/src/card-cta.d.ts +1 -1
- package/dist/components/card/src/card-heading.d.ts +4 -4
- package/dist/components/card/src/card-heading.d.ts.map +1 -1
- package/dist/components/card/src/card-media-layout.d.ts +1 -1
- package/dist/components/card/src/card-media.d.ts +1 -1
- package/dist/components/card/src/card-root.d.ts +1 -1
- package/dist/components/checkbox/src/checkbox.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/content-block/src/content-block-group.d.ts +1 -1
- package/dist/components/content-block/src/content-block.d.ts +3 -3
- package/dist/components/content-block/src/content-block.d.ts.map +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 +2 -2
- package/dist/components/cta-link/src/cta-link.d.ts +10 -10
- package/dist/components/date-picker/src/date-picker.d.ts +5 -5
- 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-item.d.ts +1 -1
- package/dist/components/dismissable-chip-group/src/dismissable-chip-group.d.ts +4 -4
- 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-content.d.ts +2 -2
- package/dist/components/drawer/src/drawer-frame.d.ts +1 -1
- 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.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-error-text/src/field-error-text.d.ts +2 -2
- 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-navigation.d.ts +1 -1
- package/dist/components/footer/src/footer.d.ts +3 -3
- package/dist/components/grid/src/grid.item.d.ts +1 -1
- package/dist/components/heading/src/heading.d.ts +20 -2
- package/dist/components/heading/src/heading.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner-actions.d.ts +1 -1
- package/dist/components/hero-banner/src/hero-banner-media.d.ts +1 -1
- package/dist/components/hero-banner/src/hero-banner-types.d.ts +2 -2
- 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/label/src/label.d.ts +1 -1
- package/dist/components/listbox/src/listbox-item.d.ts +1 -1
- package/dist/components/loading/src/loading-illustrative.d.ts +1 -1
- package/dist/components/logo/src/logo.types.d.ts +2 -2
- 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 +5 -5
- package/dist/components/notification-banner/src/notification-banner.d.ts.map +1 -1
- package/dist/components/pagination/src/pagination-page-selector.d.ts +2 -2
- package/dist/components/pagination/src/pagination-page-trigger.d.ts +1 -1
- 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/password-field/src/password-strength-indicator.d.ts +1 -1
- package/dist/components/password-field/src/password-strength.d.ts +2 -2
- package/dist/components/promotion-card/src/promotion-card.d.ts +9 -9
- 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 +2 -5
- package/dist/components/quantity-selector/src/quantity-selector.d.ts.map +1 -1
- package/dist/components/radio-card-group/src/radio-card-group.d.ts +2 -2
- 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.d.ts +6 -6
- package/dist/components/skeleton/src/skeleton.d.ts +1 -1
- package/dist/components/spinner/src/spinner.d.ts +2 -2
- package/dist/components/stepper/src/stepper-container.d.ts +1 -1
- package/dist/components/stepper/src/stepper-content.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.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 +3 -3
- package/dist/components/table/src/draggable-table.d.ts.map +1 -1
- 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 +2 -9
- 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/table/src/test-utils/table-data.d.ts +3 -3
- package/dist/components/tabs/src/tab-content.d.ts +3 -1
- package/dist/components/tabs/src/tab-content.d.ts.map +1 -1
- package/dist/components/text-area/src/text-area.d.ts +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 +2 -2
- 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-hA79n6mP.js → date-field-CtpWDaSh.js} +2 -2
- package/dist/{date-field-hA79n6mP.js.map → date-field-CtpWDaSh.js.map} +1 -1
- package/dist/{date-field-DVp_RMNm.mjs → date-field-_rCuf15v.mjs} +2 -2
- package/dist/{date-field-DVp_RMNm.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-Dzoo_hhQ.js → date-picker-BYlszX1W.js} +2 -2
- package/dist/{date-picker-Dzoo_hhQ.js.map → date-picker-BYlszX1W.js.map} +1 -1
- package/dist/{date-picker-B8ta-Q8V.mjs → date-picker-sqcNAplg.mjs} +6 -6
- package/dist/{date-picker-B8ta-Q8V.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-BZUjfftV.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-cIUx6WSZ.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-D-2b7UIB.mjs → footer-DkVmTd-f.mjs} +25 -25
- 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-n9K-Jsdz.mjs → hero-banner-ChDoFRhq.mjs} +4 -4
- package/dist/hero-banner-ChDoFRhq.mjs.map +1 -0
- package/dist/{hero-banner--v-ezYMr.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 +2 -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/library/src/password-field.d.ts +6 -2
- package/dist/libraries/library/src/password-field.d.ts.map +1 -1
- package/dist/libraries/library/src/radio-button-group.d.ts +1 -1
- package/dist/libraries/library/src/radio-card-group.d.ts +1 -1
- package/dist/libraries/library/src/spinner.d.ts +1 -1
- package/dist/libraries/library/src/stepper.d.ts +1 -1
- package/dist/libraries/library/src/tooltip.d.ts +1 -1
- package/dist/libraries/library/src/visually-hidden.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 +603 -601
- package/dist/library.es.js.map +1 -1
- package/dist/link-Dzqd0QuD.js +2 -0
- package/dist/{link-DhWVrkTz.js.map → link-Dzqd0QuD.js.map} +1 -1
- package/dist/link-ccCdDvBc.mjs +72 -0
- package/dist/{link-DY5WLpyc.mjs.map → link-ccCdDvBc.mjs.map} +1 -1
- package/dist/link.cjs.js +1 -1
- package/dist/link.es.js +1 -1
- package/dist/main-B501z9Ql.js +2 -0
- package/dist/main-B501z9Ql.js.map +1 -0
- package/dist/main-L71Sqg3s.mjs +1016 -0
- package/dist/main-L71Sqg3s.mjs.map +1 -0
- package/dist/{modal-D0Qxrvx5.js → modal-CXOYUsJm.js} +2 -2
- package/dist/modal-CXOYUsJm.js.map +1 -0
- package/dist/{modal-Bu1Zv5Ic.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-D2oClkX2.js → notification-BkM2vLzI.js} +2 -2
- package/dist/{notification-D2oClkX2.js.map → notification-BkM2vLzI.js.map} +1 -1
- package/dist/{notification-DiVdy6E_.mjs → notification-Cbn0UN1p.mjs} +3 -3
- package/dist/{notification-DiVdy6E_.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-CZTQZ5Le.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-Cy_E-D_G.mjs +200 -0
- package/dist/password-field-Cy_E-D_G.mjs.map +1 -0
- package/dist/password-field-lKyWHjQS.js +2 -0
- package/dist/password-field-lKyWHjQS.js.map +1 -0
- package/dist/password-field.cjs.js +2 -0
- package/dist/password-field.cjs.js.map +1 -0
- package/dist/password-field.es.js +6 -0
- package/dist/password-field.es.js.map +1 -0
- 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-afhtC6q5.mjs → search-field-BTJtRyw5.mjs} +3 -3
- package/dist/{search-field-afhtC6q5.mjs.map → search-field-BTJtRyw5.mjs.map} +1 -1
- package/dist/{search-field-WJBtiK0K.js → search-field-nzVXak1a.js} +2 -2
- package/dist/{search-field-WJBtiK0K.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-VW8ObP83.js → text-field-BSgqJjpv.js} +2 -2
- package/dist/text-field-BSgqJjpv.js.map +1 -0
- package/dist/{text-field-D0e-cRbG.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-B-11qk-0.js.map → tooltip-DeP1UsPW.js.map} +1 -1
- package/dist/{tooltip-DngYHn5W.mjs → tooltip-bqdd2lJL.mjs} +347 -309
- package/dist/{tooltip-DngYHn5W.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 +21 -26
- package/scripts/generate.mts +1 -4
- package/src/aliases.ts +8 -4
- package/src/entries.js +2 -1
- package/src/{autocomplete.ts → file-upload.ts} +1 -1
- package/src/library.ts +2 -2
- package/src/password-field.ts +0 -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-BX1KDZqL.js +0 -2
- package/dist/autocomplete-BX1KDZqL.js.map +0 -1
- package/dist/autocomplete-CmLzmWp4.mjs +0 -228
- package/dist/autocomplete-CmLzmWp4.mjs.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-4-yWOgtD.mjs +0 -109
- package/dist/button-4-yWOgtD.mjs.map +0 -1
- package/dist/button-DmybVApa.js +0 -2
- package/dist/button-DmybVApa.js.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-BZUjfftV.mjs.map +0 -1
- package/dist/date-range-field-Dqqgj41u.js +0 -2
- package/dist/date-range-field-Dqqgj41u.js.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-DyLQfvEh.js +0 -2
- package/dist/drawer-DyLQfvEh.js.map +0 -1
- package/dist/drawer-cIUx6WSZ.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-Cn1-zG1v.js +0 -2
- package/dist/footer-Cn1-zG1v.js.map +0 -1
- package/dist/footer-D-2b7UIB.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--v-ezYMr.js.map +0 -1
- package/dist/hero-banner-n9K-Jsdz.mjs.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/link-DY5WLpyc.mjs +0 -72
- package/dist/link-DhWVrkTz.js +0 -2
- package/dist/modal-Bu1Zv5Ic.mjs.map +0 -1
- package/dist/modal-D0Qxrvx5.js.map +0 -1
- package/dist/notification-banner-BxHwTFnH.js +0 -2
- package/dist/notification-banner-BxHwTFnH.js.map +0 -1
- package/dist/notification-banner-CZTQZ5Le.mjs.map +0 -1
- package/dist/popover-CY75TnbA.js +0 -2
- package/dist/popover-CY75TnbA.js.map +0 -1
- package/dist/popover-wiiwtqWE.mjs +0 -1043
- package/dist/popover-wiiwtqWE.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-BEYMDsBM.js +0 -2
- package/dist/quantity-selector-BEYMDsBM.js.map +0 -1
- package/dist/quantity-selector-Cp-e5xKJ.mjs +0 -172
- package/dist/quantity-selector-Cp-e5xKJ.mjs.map +0 -1
- package/dist/stepper-20s8dnPA.mjs +0 -449
- package/dist/stepper-20s8dnPA.mjs.map +0 -1
- package/dist/stepper-VDiR2I8F.js +0 -2
- package/dist/stepper-VDiR2I8F.js.map +0 -1
- package/dist/table-B5ZitZoL.js +0 -9
- package/dist/table-B5ZitZoL.js.map +0 -1
- package/dist/table-CNIL-60s.mjs +0 -7428
- package/dist/table-CNIL-60s.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-D0e-cRbG.mjs.map +0 -1
- package/dist/text-field-VW8ObP83.js.map +0 -1
- package/dist/tooltip-B-11qk-0.js +0 -2
package/dist/carousel.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./carousel-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./carousel-j-s6M1hu.js");exports.Carousel=e.Carousel;
|
|
2
2
|
//# sourceMappingURL=carousel.cjs.js.map
|
package/dist/carousel.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const l=require("react/jsx-runtime"),s=require("react"),Q=require("./button-
|
|
2
|
-
//# sourceMappingURL=chat-field-
|
|
1
|
+
"use strict";const l=require("react/jsx-runtime"),s=require("react"),Q=require("./button-C5CYysw5.js"),j=require("./icon.es-j3eRib6d.js"),W=require("./bind-DeUYJ6m9.js"),X={name:"send",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M1.54 2.149a.9.9 0 0 1 .97-.131l19.514 9.212a.9.9 0 0 1 0 1.628L2.51 22.071A.9.9 0 0 1 1.263 21l2.664-8.957-2.664-8.956a.9.9 0 0 1 .277-.94Zm3.997 10.795-1.974 6.64 14.062-6.64H5.537Zm12.088-1.8H5.537L3.563 4.505l14.062 6.64Z" clip-rule="evenodd"/></svg>',keywords:["send"],category:"action"},T={name:"tv-stop",svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M19 19H5V5h14v14Z"/><path fill-rule="evenodd" d="M19.9 19a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V5a.9.9 0 0 1 .9-.9h14a.9.9 0 0 1 .9.9v14Zm-1.8-.9V5.9H5.9v12.2h12.2Z" clip-rule="evenodd"/></svg>',keywords:["tv-stop"],category:"action"},I={"purpur-chat-field":"_purpur-chat-field_16tq2_1","purpur-chat-field--negative":"_purpur-chat-field--negative_16tq2_13","purpur-chat-field__frame":"_purpur-chat-field__frame_16tq2_16","purpur-chat-field__frame--negative":"_purpur-chat-field__frame--negative_16tq2_20","purpur-chat-field--filled":"_purpur-chat-field--filled_16tq2_34","purpur-chat-field__textarea":"_purpur-chat-field__textarea_16tq2_34","purpur-chat-field__textarea--negative":"_purpur-chat-field__textarea--negative_16tq2_37","purpur-chat-field__action":"_purpur-chat-field__action_16tq2_80"},f=W.c.bind(I),ee=(...a)=>{const i=a.filter(Boolean);return i.length<=1?i[0]||null:o=>{for(const n of i)typeof n=="function"?n(o):n&&(n.current=o)}},t="purpur-chat-field",k=s.forwardRef(({["data-testid"]:a,value:i,placeholder:o,textareaAriaLabel:n,generating:u=!1,negative:c=!1,sendAriaLabel:V,sendIcon:R,stopAriaLabel:A,rows:p=1,maxRows:x=4,onChange:B,onSend:m,onStopClick:F,actionButtonType:h="button",textareaProps:L,className:N},Z)=>{const _=s.useRef(null),{["aria-label"]:D,["aria-labelledby"]:b,defaultValue:g,...S}=L??{},[z,E]=s.useState(()=>typeof g=="string"||typeof g=="number"?String(g):""),v=i??z,d=!!v.length,K=D??(b?void 0:n??o),y=s.useCallback(()=>{const e=_.current;if(!e)return;e.style.height="auto",e.style.overflowY="hidden";const r=getComputedStyle(e),w=parseFloat(r.lineHeight)||20,C=parseFloat(r.paddingTop)||0,H=parseFloat(r.paddingBottom)||0,J=w*p+C+H,$=w*x+C+H;e.scrollHeight>$?(e.style.height=`${$}px`,e.style.overflowY="auto"):e.scrollHeight>J&&(e.style.height=`${e.scrollHeight}px`)},[p,x]);s.useEffect(()=>{y()},[v,y]);const q=s.useCallback(e=>{if(d){if(h==="submit"){const r=_.current?.form;if(e==="keyboard"&&r){r.requestSubmit();return}if(e==="button"&&r)return}m()}},[h,d,m]),M=e=>{i===void 0&&E(e.target.value),B(e)},P=e=>{e.key==="Enter"&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),q("keyboard"))},Y=()=>{if(u){F();return}q("button")},O=u||!d?"button":h,U=f([N,t,{[`${t}--filled`]:d,[`${t}--negative`]:c}]),G=u?l.jsx(j.b,{size:"xs",svg:T}):R??l.jsx(j.b,{size:"xs",svg:X});return l.jsxs("div",{className:U,"data-testid":a,children:[l.jsx("textarea",{...S,ref:ee(Z,_),className:f(`${t}__textarea`,{[`${t}__textarea--negative`]:c}),"aria-label":K,"aria-labelledby":b,"data-testid":a?`${a}-textarea`:void 0,onChange:M,onKeyDown:P,placeholder:o,rows:p,value:v}),l.jsx("div",{className:f(`${t}__action`),children:l.jsx(Q.Button,{"aria-label":u?A:V,"data-testid":a?`${a}-action`:void 0,iconOnly:!0,negative:c,size:"xs",type:O,variant:"primary",onClick:Y,children:G})}),l.jsx("span",{className:f(`${t}__frame`,{[`${t}__frame--negative`]:c}),"aria-hidden":"true"})]})});k.displayName="ChatField";exports.ChatField=k;
|
|
2
|
+
//# sourceMappingURL=chat-field-CLAjIHlM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-field-Wjvh2J6C.js","sources":["../../../components/icon/dist/assets/send.es.js","../../../components/icon/dist/assets/tv-stop.es.js","../../../components/chat-field/src/chat-field.tsx"],"sourcesContent":["const e = {\n name: \"send\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M1.54 2.149a.9.9 0 0 1 .97-.131l19.514 9.212a.9.9 0 0 1 0 1.628L2.51 22.071A.9.9 0 0 1 1.263 21l2.664-8.957-2.664-8.956a.9.9 0 0 1 .277-.94Zm3.997 10.795-1.974 6.64 14.062-6.64H5.537Zm12.088-1.8H5.537L3.563 4.505l14.062 6.64Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"send\"],\n category: \"action\"\n};\nexport {\n e as send\n};\n//# sourceMappingURL=send.es.js.map\n","const t = {\n name: \"tv-stop\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 19H5V5h14v14Z\"/><path fill-rule=\"evenodd\" d=\"M19.9 19a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V5a.9.9 0 0 1 .9-.9h14a.9.9 0 0 1 .9.9v14Zm-1.8-.9V5.9H5.9v12.2h12.2Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"tv-stop\"],\n category: \"action\"\n};\nexport {\n t as tvStop\n};\n//# sourceMappingURL=tv-stop.es.js.map\n","import React, {\n type ChangeEvent,\n forwardRef,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type TextareaHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { Icon } from \"@purpur/icon\";\nimport { send } from \"@purpur/icon/assets/send\";\nimport { tvStop } from \"@purpur/icon/assets/tv-stop\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chat-field.module.scss\";\nconst cx = c.bind(styles);\n\nconst mergeRefs = <T,>(...inputRefs: (Ref<T> | undefined)[]): Ref<T> | React.RefCallback<T> => {\n const filteredInputRefs = inputRefs.filter(Boolean);\n\n if (filteredInputRefs.length <= 1) {\n return filteredInputRefs[0] || null;\n }\n\n return (ref: T | null) => {\n for (const inputRef of filteredInputRefs) {\n if (typeof inputRef === \"function\") {\n inputRef(ref);\n } else if (inputRef) {\n (inputRef as React.RefObject<T | null>).current = ref;\n }\n }\n };\n};\n\nexport type ChatFieldProps = {\n [\"data-testid\"]?: string;\n /**\n * Current value of the textarea in controlled mode.\n * When omitted, the component handles textarea state internally.\n * */\n value?: string;\n /**\n * Placeholder text shown when the textarea is empty.\n * */\n placeholder: string;\n /**\n * Accessible label for the textarea when no aria-label/aria-labelledby\n * is provided via `textareaProps`.\n * */\n textareaAriaLabel?: string;\n /**\n * Changes the action icon from send to stop.\n * */\n generating?: boolean;\n /**\n * Renders the field with negative appearance.\n * */\n negative?: boolean;\n /**\n * Accessible label for the send action icon.\n * */\n sendAriaLabel: string;\n /**\n * Custom icon for the default action button state.\n * The custom icon should still visually communicate a send action.\n * Falls back to the standard send icon when omitted.\n * */\n sendIcon?: ReactNode;\n /**\n * Accessible label for the stop action icon.\n * */\n stopAriaLabel: string;\n /**\n * Number of visible text rows. Defaults to 1.\n * */\n rows?: number;\n /**\n * Maximum number of rows before the textarea scrolls. Defaults to 4.\n * */\n maxRows?: number;\n /**\n * Callback for textarea value changes.\n * */\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * Callback fired when the send action is triggered (Enter key or send button click).\n * */\n onSend: () => void;\n /**\n * Callback fired when the stop button is clicked during generating state.\n * */\n onStopClick: () => void;\n /**\n * HTML type attribute for the action button. Use `\"submit\"` when ChatField\n * is placed inside a `<form>`. Defaults to `\"button\"`.\n * */\n actionButtonType?: \"button\" | \"submit\";\n /**\n * Additional props forwarded to the textarea element.\n * */\n textareaProps?: Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"className\" | \"value\" | \"placeholder\" | \"disabled\" | \"onChange\" | \"rows\"\n >;\n className?: string;\n};\n\nconst rootClassName = \"purpur-chat-field\";\n\nexport const ChatField = forwardRef<HTMLTextAreaElement, ChatFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n value,\n placeholder,\n textareaAriaLabel: textareaAriaLabelProp,\n generating = false,\n negative = false,\n sendAriaLabel,\n sendIcon,\n stopAriaLabel,\n rows = 1,\n maxRows = 4,\n onChange,\n onSend,\n onStopClick,\n actionButtonType = \"button\",\n textareaProps,\n className,\n },\n ref\n ) => {\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const {\n [\"aria-label\"]: textareaPropsAriaLabel,\n [\"aria-labelledby\"]: textareaPropsAriaLabelledBy,\n defaultValue: textareaDefaultValue,\n ...textareaRestProps\n } = textareaProps ?? {};\n\n const [uncontrolledValue, setUncontrolledValue] = useState(() => {\n if (typeof textareaDefaultValue === \"string\" || typeof textareaDefaultValue === \"number\") {\n return String(textareaDefaultValue);\n }\n return \"\";\n });\n\n const textareaValue = value ?? uncontrolledValue;\n const hasValue = Boolean(textareaValue.length);\n\n const resolvedTextareaAriaLabel =\n textareaPropsAriaLabel ??\n (textareaPropsAriaLabelledBy ? undefined : textareaAriaLabelProp ?? placeholder);\n\n const adjustTextareaHeight = useCallback(() => {\n const textarea = internalRef.current;\n if (!textarea) return;\n\n textarea.style.height = \"auto\";\n textarea.style.overflowY = \"hidden\";\n\n const computed = getComputedStyle(textarea);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const paddingTop = parseFloat(computed.paddingTop) || 0;\n const paddingBottom = parseFloat(computed.paddingBottom) || 0;\n const naturalHeight = lineHeight * rows + paddingTop + paddingBottom;\n const maxHeight = lineHeight * maxRows + paddingTop + paddingBottom;\n\n if (textarea.scrollHeight > maxHeight) {\n textarea.style.height = `${maxHeight}px`;\n textarea.style.overflowY = \"auto\";\n } else if (textarea.scrollHeight > naturalHeight) {\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [rows, maxRows]);\n\n useEffect(() => {\n adjustTextareaHeight();\n }, [textareaValue, adjustTextareaHeight]);\n\n const triggerSend = useCallback(\n (source: \"button\" | \"keyboard\") => {\n if (!hasValue) return;\n\n if (actionButtonType === \"submit\") {\n const parentForm = internalRef.current?.form;\n\n if (source === \"keyboard\" && parentForm) {\n parentForm.requestSubmit();\n return;\n }\n\n if (source === \"button\" && parentForm) {\n return;\n }\n }\n\n onSend();\n },\n [actionButtonType, hasValue, onSend]\n );\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setUncontrolledValue(event.target.value);\n }\n\n onChange(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === \"Enter\" && !event.shiftKey && !event.nativeEvent.isComposing) {\n event.preventDefault();\n triggerSend(\"keyboard\");\n }\n };\n\n const handleActionClick = () => {\n if (generating) {\n onStopClick();\n return;\n }\n\n triggerSend(\"button\");\n };\n\n const resolvedActionButtonType: \"button\" | \"submit\" =\n generating || !hasValue ? \"button\" : actionButtonType;\n\n const classes = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--filled`]: hasValue,\n [`${rootClassName}--negative`]: negative,\n },\n ]);\n\n const actionIcon = generating ? (\n <Icon size=\"xs\" svg={tvStop} />\n ) : (\n sendIcon ?? <Icon size=\"xs\" svg={send} />\n );\n\n return (\n <div className={classes} data-testid={dataTestId}>\n <textarea\n {...textareaRestProps}\n ref={mergeRefs(ref, internalRef)}\n className={cx(`${rootClassName}__textarea`, {\n [`${rootClassName}__textarea--negative`]: negative,\n })}\n aria-label={resolvedTextareaAriaLabel}\n aria-labelledby={textareaPropsAriaLabelledBy}\n data-testid={dataTestId ? `${dataTestId}-textarea` : undefined}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n value={textareaValue}\n />\n <div className={cx(`${rootClassName}__action`)}>\n <Button\n aria-label={generating ? stopAriaLabel : sendAriaLabel}\n data-testid={dataTestId ? `${dataTestId}-action` : undefined}\n iconOnly\n negative={negative}\n size=\"xs\"\n type={resolvedActionButtonType}\n variant=\"primary\"\n onClick={handleActionClick}\n >\n {actionIcon}\n </Button>\n </div>\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n aria-hidden=\"true\"\n />\n </div>\n );\n }\n);\n\nChatField.displayName = \"ChatField\";\n"],"names":["e","t","cx","c","styles","mergeRefs","inputRefs","filteredInputRefs","ref","inputRef","rootClassName","ChatField","forwardRef","dataTestId","value","placeholder","textareaAriaLabelProp","generating","negative","sendAriaLabel","sendIcon","stopAriaLabel","rows","maxRows","onChange","onSend","onStopClick","actionButtonType","textareaProps","className","internalRef","useRef","textareaPropsAriaLabel","textareaPropsAriaLabelledBy","textareaDefaultValue","textareaRestProps","uncontrolledValue","setUncontrolledValue","useState","textareaValue","hasValue","resolvedTextareaAriaLabel","adjustTextareaHeight","useCallback","textarea","computed","lineHeight","paddingTop","paddingBottom","naturalHeight","maxHeight","useEffect","triggerSend","source","parentForm","handleChange","event","handleKeyDown","handleActionClick","resolvedActionButtonType","classes","actionIcon","jsx","Icon","tvStop","send","jsxs","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-field-CLAjIHlM.js","sources":["../../../components/icon/dist/assets/send.es.js","../../../components/icon/dist/assets/tv-stop.es.js","../../../components/chat-field/src/chat-field.tsx"],"sourcesContent":["const e = {\n name: \"send\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M1.54 2.149a.9.9 0 0 1 .97-.131l19.514 9.212a.9.9 0 0 1 0 1.628L2.51 22.071A.9.9 0 0 1 1.263 21l2.664-8.957-2.664-8.956a.9.9 0 0 1 .277-.94Zm3.997 10.795-1.974 6.64 14.062-6.64H5.537Zm12.088-1.8H5.537L3.563 4.505l14.062 6.64Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"send\"],\n category: \"action\"\n};\nexport {\n e as send\n};\n//# sourceMappingURL=send.es.js.map\n","const t = {\n name: \"tv-stop\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 19H5V5h14v14Z\"/><path fill-rule=\"evenodd\" d=\"M19.9 19a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V5a.9.9 0 0 1 .9-.9h14a.9.9 0 0 1 .9.9v14Zm-1.8-.9V5.9H5.9v12.2h12.2Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"tv-stop\"],\n category: \"action\"\n};\nexport {\n t as tvStop\n};\n//# sourceMappingURL=tv-stop.es.js.map\n","import React, {\n type ChangeEvent,\n forwardRef,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type TextareaHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { Icon } from \"@purpur/icon\";\nimport { send } from \"@purpur/icon/assets/send\";\nimport { tvStop } from \"@purpur/icon/assets/tv-stop\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chat-field.module.scss\";\nconst cx = c.bind(styles);\n\nconst mergeRefs = <T,>(...inputRefs: (Ref<T> | undefined)[]): Ref<T> | React.RefCallback<T> => {\n const filteredInputRefs = inputRefs.filter(Boolean);\n\n if (filteredInputRefs.length <= 1) {\n return filteredInputRefs[0] || null;\n }\n\n return (ref: T | null) => {\n for (const inputRef of filteredInputRefs) {\n if (typeof inputRef === \"function\") {\n inputRef(ref);\n } else if (inputRef) {\n (inputRef as React.RefObject<T | null>).current = ref;\n }\n }\n };\n};\n\nexport type ChatFieldProps = {\n [\"data-testid\"]?: string;\n /**\n * Current value of the textarea in controlled mode.\n * When omitted, the component handles textarea state internally.\n * */\n value?: string;\n /**\n * Placeholder text shown when the textarea is empty.\n * */\n placeholder: string;\n /**\n * Accessible label for the textarea when no aria-label/aria-labelledby\n * is provided via `textareaProps`.\n * */\n textareaAriaLabel?: string;\n /**\n * Changes the action icon from send to stop.\n * */\n generating?: boolean;\n /**\n * Renders the field with negative appearance.\n * */\n negative?: boolean;\n /**\n * Accessible label for the send action icon.\n * */\n sendAriaLabel: string;\n /**\n * Custom icon for the default action button state.\n * The custom icon should still visually communicate a send action.\n * Falls back to the standard send icon when omitted.\n * */\n sendIcon?: ReactNode;\n /**\n * Accessible label for the stop action icon.\n * */\n stopAriaLabel: string;\n /**\n * Number of visible text rows. Defaults to 1.\n * */\n rows?: number;\n /**\n * Maximum number of rows before the textarea scrolls. Defaults to 4.\n * */\n maxRows?: number;\n /**\n * Callback for textarea value changes.\n * */\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * Callback fired when the send action is triggered (Enter key or send button click).\n * */\n onSend: () => void;\n /**\n * Callback fired when the stop button is clicked during generating state.\n * */\n onStopClick: () => void;\n /**\n * HTML type attribute for the action button. Use `\"submit\"` when ChatField\n * is placed inside a `<form>`. Defaults to `\"button\"`.\n * */\n actionButtonType?: \"button\" | \"submit\";\n /**\n * Additional props forwarded to the textarea element.\n * */\n textareaProps?: Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"className\" | \"value\" | \"placeholder\" | \"disabled\" | \"onChange\" | \"rows\"\n >;\n className?: string;\n};\n\nconst rootClassName = \"purpur-chat-field\";\n\nexport const ChatField = forwardRef<HTMLTextAreaElement, ChatFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n value,\n placeholder,\n textareaAriaLabel: textareaAriaLabelProp,\n generating = false,\n negative = false,\n sendAriaLabel,\n sendIcon,\n stopAriaLabel,\n rows = 1,\n maxRows = 4,\n onChange,\n onSend,\n onStopClick,\n actionButtonType = \"button\",\n textareaProps,\n className,\n },\n ref\n ) => {\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const {\n [\"aria-label\"]: textareaPropsAriaLabel,\n [\"aria-labelledby\"]: textareaPropsAriaLabelledBy,\n defaultValue: textareaDefaultValue,\n ...textareaRestProps\n } = textareaProps ?? {};\n\n const [uncontrolledValue, setUncontrolledValue] = useState(() => {\n if (typeof textareaDefaultValue === \"string\" || typeof textareaDefaultValue === \"number\") {\n return String(textareaDefaultValue);\n }\n return \"\";\n });\n\n const textareaValue = value ?? uncontrolledValue;\n const hasValue = Boolean(textareaValue.length);\n\n const resolvedTextareaAriaLabel =\n textareaPropsAriaLabel ??\n (textareaPropsAriaLabelledBy ? undefined : textareaAriaLabelProp ?? placeholder);\n\n const adjustTextareaHeight = useCallback(() => {\n const textarea = internalRef.current;\n if (!textarea) return;\n\n textarea.style.height = \"auto\";\n textarea.style.overflowY = \"hidden\";\n\n const computed = getComputedStyle(textarea);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const paddingTop = parseFloat(computed.paddingTop) || 0;\n const paddingBottom = parseFloat(computed.paddingBottom) || 0;\n const naturalHeight = lineHeight * rows + paddingTop + paddingBottom;\n const maxHeight = lineHeight * maxRows + paddingTop + paddingBottom;\n\n if (textarea.scrollHeight > maxHeight) {\n textarea.style.height = `${maxHeight}px`;\n textarea.style.overflowY = \"auto\";\n } else if (textarea.scrollHeight > naturalHeight) {\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [rows, maxRows]);\n\n useEffect(() => {\n adjustTextareaHeight();\n }, [textareaValue, adjustTextareaHeight]);\n\n const triggerSend = useCallback(\n (source: \"button\" | \"keyboard\") => {\n if (!hasValue) return;\n\n if (actionButtonType === \"submit\") {\n const parentForm = internalRef.current?.form;\n\n if (source === \"keyboard\" && parentForm) {\n parentForm.requestSubmit();\n return;\n }\n\n if (source === \"button\" && parentForm) {\n return;\n }\n }\n\n onSend();\n },\n [actionButtonType, hasValue, onSend]\n );\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setUncontrolledValue(event.target.value);\n }\n\n onChange(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === \"Enter\" && !event.shiftKey && !event.nativeEvent.isComposing) {\n event.preventDefault();\n triggerSend(\"keyboard\");\n }\n };\n\n const handleActionClick = () => {\n if (generating) {\n onStopClick();\n return;\n }\n\n triggerSend(\"button\");\n };\n\n const resolvedActionButtonType: \"button\" | \"submit\" =\n generating || !hasValue ? \"button\" : actionButtonType;\n\n const classes = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--filled`]: hasValue,\n [`${rootClassName}--negative`]: negative,\n },\n ]);\n\n const actionIcon = generating ? (\n <Icon size=\"xs\" svg={tvStop} />\n ) : (\n sendIcon ?? <Icon size=\"xs\" svg={send} />\n );\n\n return (\n <div className={classes} data-testid={dataTestId}>\n <textarea\n {...textareaRestProps}\n ref={mergeRefs(ref, internalRef)}\n className={cx(`${rootClassName}__textarea`, {\n [`${rootClassName}__textarea--negative`]: negative,\n })}\n aria-label={resolvedTextareaAriaLabel}\n aria-labelledby={textareaPropsAriaLabelledBy}\n data-testid={dataTestId ? `${dataTestId}-textarea` : undefined}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n value={textareaValue}\n />\n <div className={cx(`${rootClassName}__action`)}>\n <Button\n aria-label={generating ? stopAriaLabel : sendAriaLabel}\n data-testid={dataTestId ? `${dataTestId}-action` : undefined}\n iconOnly\n negative={negative}\n size=\"xs\"\n type={resolvedActionButtonType}\n variant=\"primary\"\n onClick={handleActionClick}\n >\n {actionIcon}\n </Button>\n </div>\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n aria-hidden=\"true\"\n />\n </div>\n );\n }\n);\n\nChatField.displayName = \"ChatField\";\n"],"names":["e","t","cx","c","styles","mergeRefs","inputRefs","filteredInputRefs","ref","inputRef","rootClassName","ChatField","forwardRef","dataTestId","value","placeholder","textareaAriaLabelProp","generating","negative","sendAriaLabel","sendIcon","stopAriaLabel","rows","maxRows","onChange","onSend","onStopClick","actionButtonType","textareaProps","className","internalRef","useRef","textareaPropsAriaLabel","textareaPropsAriaLabelledBy","textareaDefaultValue","textareaRestProps","uncontrolledValue","setUncontrolledValue","useState","textareaValue","hasValue","resolvedTextareaAriaLabel","adjustTextareaHeight","useCallback","textarea","computed","lineHeight","paddingTop","paddingBottom","naturalHeight","maxHeight","useEffect","triggerSend","source","parentForm","handleChange","event","handleKeyDown","handleActionClick","resolvedActionButtonType","classes","actionIcon","jsx","Icon","tvStop","send","jsxs","Button"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as J, jsx as o } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as Q, useRef as W, useState as X, useCallback as q, useEffect as T } from "react";
|
|
3
|
-
import { b as I } from "./button-
|
|
3
|
+
import { b as I } from "./button-mHw_J7JU.mjs";
|
|
4
4
|
import { b as V } from "./icon.es-CZcKxTaM.mjs";
|
|
5
5
|
import { c as ee } from "./bind-CU-R61T-.mjs";
|
|
6
6
|
const te = {
|
|
@@ -146,4 +146,4 @@ ie.displayName = "ChatField";
|
|
|
146
146
|
export {
|
|
147
147
|
ie as C
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=chat-field-
|
|
149
|
+
//# sourceMappingURL=chat-field-nxFRXoQx.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-field-CVF4DooY.mjs","sources":["../../../components/icon/dist/assets/send.es.js","../../../components/icon/dist/assets/tv-stop.es.js","../../../components/chat-field/src/chat-field.tsx"],"sourcesContent":["const e = {\n name: \"send\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M1.54 2.149a.9.9 0 0 1 .97-.131l19.514 9.212a.9.9 0 0 1 0 1.628L2.51 22.071A.9.9 0 0 1 1.263 21l2.664-8.957-2.664-8.956a.9.9 0 0 1 .277-.94Zm3.997 10.795-1.974 6.64 14.062-6.64H5.537Zm12.088-1.8H5.537L3.563 4.505l14.062 6.64Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"send\"],\n category: \"action\"\n};\nexport {\n e as send\n};\n//# sourceMappingURL=send.es.js.map\n","const t = {\n name: \"tv-stop\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 19H5V5h14v14Z\"/><path fill-rule=\"evenodd\" d=\"M19.9 19a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V5a.9.9 0 0 1 .9-.9h14a.9.9 0 0 1 .9.9v14Zm-1.8-.9V5.9H5.9v12.2h12.2Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"tv-stop\"],\n category: \"action\"\n};\nexport {\n t as tvStop\n};\n//# sourceMappingURL=tv-stop.es.js.map\n","import React, {\n type ChangeEvent,\n forwardRef,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type TextareaHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { Icon } from \"@purpur/icon\";\nimport { send } from \"@purpur/icon/assets/send\";\nimport { tvStop } from \"@purpur/icon/assets/tv-stop\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chat-field.module.scss\";\nconst cx = c.bind(styles);\n\nconst mergeRefs = <T,>(...inputRefs: (Ref<T> | undefined)[]): Ref<T> | React.RefCallback<T> => {\n const filteredInputRefs = inputRefs.filter(Boolean);\n\n if (filteredInputRefs.length <= 1) {\n return filteredInputRefs[0] || null;\n }\n\n return (ref: T | null) => {\n for (const inputRef of filteredInputRefs) {\n if (typeof inputRef === \"function\") {\n inputRef(ref);\n } else if (inputRef) {\n (inputRef as React.RefObject<T | null>).current = ref;\n }\n }\n };\n};\n\nexport type ChatFieldProps = {\n [\"data-testid\"]?: string;\n /**\n * Current value of the textarea in controlled mode.\n * When omitted, the component handles textarea state internally.\n * */\n value?: string;\n /**\n * Placeholder text shown when the textarea is empty.\n * */\n placeholder: string;\n /**\n * Accessible label for the textarea when no aria-label/aria-labelledby\n * is provided via `textareaProps`.\n * */\n textareaAriaLabel?: string;\n /**\n * Changes the action icon from send to stop.\n * */\n generating?: boolean;\n /**\n * Renders the field with negative appearance.\n * */\n negative?: boolean;\n /**\n * Accessible label for the send action icon.\n * */\n sendAriaLabel: string;\n /**\n * Custom icon for the default action button state.\n * The custom icon should still visually communicate a send action.\n * Falls back to the standard send icon when omitted.\n * */\n sendIcon?: ReactNode;\n /**\n * Accessible label for the stop action icon.\n * */\n stopAriaLabel: string;\n /**\n * Number of visible text rows. Defaults to 1.\n * */\n rows?: number;\n /**\n * Maximum number of rows before the textarea scrolls. Defaults to 4.\n * */\n maxRows?: number;\n /**\n * Callback for textarea value changes.\n * */\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * Callback fired when the send action is triggered (Enter key or send button click).\n * */\n onSend: () => void;\n /**\n * Callback fired when the stop button is clicked during generating state.\n * */\n onStopClick: () => void;\n /**\n * HTML type attribute for the action button. Use `\"submit\"` when ChatField\n * is placed inside a `<form>`. Defaults to `\"button\"`.\n * */\n actionButtonType?: \"button\" | \"submit\";\n /**\n * Additional props forwarded to the textarea element.\n * */\n textareaProps?: Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"className\" | \"value\" | \"placeholder\" | \"disabled\" | \"onChange\" | \"rows\"\n >;\n className?: string;\n};\n\nconst rootClassName = \"purpur-chat-field\";\n\nexport const ChatField = forwardRef<HTMLTextAreaElement, ChatFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n value,\n placeholder,\n textareaAriaLabel: textareaAriaLabelProp,\n generating = false,\n negative = false,\n sendAriaLabel,\n sendIcon,\n stopAriaLabel,\n rows = 1,\n maxRows = 4,\n onChange,\n onSend,\n onStopClick,\n actionButtonType = \"button\",\n textareaProps,\n className,\n },\n ref\n ) => {\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const {\n [\"aria-label\"]: textareaPropsAriaLabel,\n [\"aria-labelledby\"]: textareaPropsAriaLabelledBy,\n defaultValue: textareaDefaultValue,\n ...textareaRestProps\n } = textareaProps ?? {};\n\n const [uncontrolledValue, setUncontrolledValue] = useState(() => {\n if (typeof textareaDefaultValue === \"string\" || typeof textareaDefaultValue === \"number\") {\n return String(textareaDefaultValue);\n }\n return \"\";\n });\n\n const textareaValue = value ?? uncontrolledValue;\n const hasValue = Boolean(textareaValue.length);\n\n const resolvedTextareaAriaLabel =\n textareaPropsAriaLabel ??\n (textareaPropsAriaLabelledBy ? undefined : textareaAriaLabelProp ?? placeholder);\n\n const adjustTextareaHeight = useCallback(() => {\n const textarea = internalRef.current;\n if (!textarea) return;\n\n textarea.style.height = \"auto\";\n textarea.style.overflowY = \"hidden\";\n\n const computed = getComputedStyle(textarea);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const paddingTop = parseFloat(computed.paddingTop) || 0;\n const paddingBottom = parseFloat(computed.paddingBottom) || 0;\n const naturalHeight = lineHeight * rows + paddingTop + paddingBottom;\n const maxHeight = lineHeight * maxRows + paddingTop + paddingBottom;\n\n if (textarea.scrollHeight > maxHeight) {\n textarea.style.height = `${maxHeight}px`;\n textarea.style.overflowY = \"auto\";\n } else if (textarea.scrollHeight > naturalHeight) {\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [rows, maxRows]);\n\n useEffect(() => {\n adjustTextareaHeight();\n }, [textareaValue, adjustTextareaHeight]);\n\n const triggerSend = useCallback(\n (source: \"button\" | \"keyboard\") => {\n if (!hasValue) return;\n\n if (actionButtonType === \"submit\") {\n const parentForm = internalRef.current?.form;\n\n if (source === \"keyboard\" && parentForm) {\n parentForm.requestSubmit();\n return;\n }\n\n if (source === \"button\" && parentForm) {\n return;\n }\n }\n\n onSend();\n },\n [actionButtonType, hasValue, onSend]\n );\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setUncontrolledValue(event.target.value);\n }\n\n onChange(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === \"Enter\" && !event.shiftKey && !event.nativeEvent.isComposing) {\n event.preventDefault();\n triggerSend(\"keyboard\");\n }\n };\n\n const handleActionClick = () => {\n if (generating) {\n onStopClick();\n return;\n }\n\n triggerSend(\"button\");\n };\n\n const resolvedActionButtonType: \"button\" | \"submit\" =\n generating || !hasValue ? \"button\" : actionButtonType;\n\n const classes = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--filled`]: hasValue,\n [`${rootClassName}--negative`]: negative,\n },\n ]);\n\n const actionIcon = generating ? (\n <Icon size=\"xs\" svg={tvStop} />\n ) : (\n sendIcon ?? <Icon size=\"xs\" svg={send} />\n );\n\n return (\n <div className={classes} data-testid={dataTestId}>\n <textarea\n {...textareaRestProps}\n ref={mergeRefs(ref, internalRef)}\n className={cx(`${rootClassName}__textarea`, {\n [`${rootClassName}__textarea--negative`]: negative,\n })}\n aria-label={resolvedTextareaAriaLabel}\n aria-labelledby={textareaPropsAriaLabelledBy}\n data-testid={dataTestId ? `${dataTestId}-textarea` : undefined}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n value={textareaValue}\n />\n <div className={cx(`${rootClassName}__action`)}>\n <Button\n aria-label={generating ? stopAriaLabel : sendAriaLabel}\n data-testid={dataTestId ? `${dataTestId}-action` : undefined}\n iconOnly\n negative={negative}\n size=\"xs\"\n type={resolvedActionButtonType}\n variant=\"primary\"\n onClick={handleActionClick}\n >\n {actionIcon}\n </Button>\n </div>\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n aria-hidden=\"true\"\n />\n </div>\n );\n }\n);\n\nChatField.displayName = \"ChatField\";\n"],"names":["e","t","cx","c","styles","mergeRefs","inputRefs","filteredInputRefs","ref","inputRef","rootClassName","ChatField","forwardRef","dataTestId","value","placeholder","textareaAriaLabelProp","generating","negative","sendAriaLabel","sendIcon","stopAriaLabel","rows","maxRows","onChange","onSend","onStopClick","actionButtonType","textareaProps","className","internalRef","useRef","textareaPropsAriaLabel","textareaPropsAriaLabelledBy","textareaDefaultValue","textareaRestProps","uncontrolledValue","setUncontrolledValue","useState","textareaValue","hasValue","resolvedTextareaAriaLabel","adjustTextareaHeight","useCallback","textarea","computed","lineHeight","paddingTop","paddingBottom","naturalHeight","maxHeight","useEffect","triggerSend","source","parentForm","handleChange","event","handleKeyDown","handleActionClick","resolvedActionButtonType","classes","actionIcon","jsx","Icon","tvStop","send","jsxs","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-field-nxFRXoQx.mjs","sources":["../../../components/icon/dist/assets/send.es.js","../../../components/icon/dist/assets/tv-stop.es.js","../../../components/chat-field/src/chat-field.tsx"],"sourcesContent":["const e = {\n name: \"send\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M1.54 2.149a.9.9 0 0 1 .97-.131l19.514 9.212a.9.9 0 0 1 0 1.628L2.51 22.071A.9.9 0 0 1 1.263 21l2.664-8.957-2.664-8.956a.9.9 0 0 1 .277-.94Zm3.997 10.795-1.974 6.64 14.062-6.64H5.537Zm12.088-1.8H5.537L3.563 4.505l14.062 6.64Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"send\"],\n category: \"action\"\n};\nexport {\n e as send\n};\n//# sourceMappingURL=send.es.js.map\n","const t = {\n name: \"tv-stop\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M19 19H5V5h14v14Z\"/><path fill-rule=\"evenodd\" d=\"M19.9 19a.9.9 0 0 1-.9.9H5a.9.9 0 0 1-.9-.9V5a.9.9 0 0 1 .9-.9h14a.9.9 0 0 1 .9.9v14Zm-1.8-.9V5.9H5.9v12.2h12.2Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"tv-stop\"],\n category: \"action\"\n};\nexport {\n t as tvStop\n};\n//# sourceMappingURL=tv-stop.es.js.map\n","import React, {\n type ChangeEvent,\n forwardRef,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n type TextareaHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { Icon } from \"@purpur/icon\";\nimport { send } from \"@purpur/icon/assets/send\";\nimport { tvStop } from \"@purpur/icon/assets/tv-stop\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chat-field.module.scss\";\nconst cx = c.bind(styles);\n\nconst mergeRefs = <T,>(...inputRefs: (Ref<T> | undefined)[]): Ref<T> | React.RefCallback<T> => {\n const filteredInputRefs = inputRefs.filter(Boolean);\n\n if (filteredInputRefs.length <= 1) {\n return filteredInputRefs[0] || null;\n }\n\n return (ref: T | null) => {\n for (const inputRef of filteredInputRefs) {\n if (typeof inputRef === \"function\") {\n inputRef(ref);\n } else if (inputRef) {\n (inputRef as React.RefObject<T | null>).current = ref;\n }\n }\n };\n};\n\nexport type ChatFieldProps = {\n [\"data-testid\"]?: string;\n /**\n * Current value of the textarea in controlled mode.\n * When omitted, the component handles textarea state internally.\n * */\n value?: string;\n /**\n * Placeholder text shown when the textarea is empty.\n * */\n placeholder: string;\n /**\n * Accessible label for the textarea when no aria-label/aria-labelledby\n * is provided via `textareaProps`.\n * */\n textareaAriaLabel?: string;\n /**\n * Changes the action icon from send to stop.\n * */\n generating?: boolean;\n /**\n * Renders the field with negative appearance.\n * */\n negative?: boolean;\n /**\n * Accessible label for the send action icon.\n * */\n sendAriaLabel: string;\n /**\n * Custom icon for the default action button state.\n * The custom icon should still visually communicate a send action.\n * Falls back to the standard send icon when omitted.\n * */\n sendIcon?: ReactNode;\n /**\n * Accessible label for the stop action icon.\n * */\n stopAriaLabel: string;\n /**\n * Number of visible text rows. Defaults to 1.\n * */\n rows?: number;\n /**\n * Maximum number of rows before the textarea scrolls. Defaults to 4.\n * */\n maxRows?: number;\n /**\n * Callback for textarea value changes.\n * */\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => void;\n /**\n * Callback fired when the send action is triggered (Enter key or send button click).\n * */\n onSend: () => void;\n /**\n * Callback fired when the stop button is clicked during generating state.\n * */\n onStopClick: () => void;\n /**\n * HTML type attribute for the action button. Use `\"submit\"` when ChatField\n * is placed inside a `<form>`. Defaults to `\"button\"`.\n * */\n actionButtonType?: \"button\" | \"submit\";\n /**\n * Additional props forwarded to the textarea element.\n * */\n textareaProps?: Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"className\" | \"value\" | \"placeholder\" | \"disabled\" | \"onChange\" | \"rows\"\n >;\n className?: string;\n};\n\nconst rootClassName = \"purpur-chat-field\";\n\nexport const ChatField = forwardRef<HTMLTextAreaElement, ChatFieldProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n value,\n placeholder,\n textareaAriaLabel: textareaAriaLabelProp,\n generating = false,\n negative = false,\n sendAriaLabel,\n sendIcon,\n stopAriaLabel,\n rows = 1,\n maxRows = 4,\n onChange,\n onSend,\n onStopClick,\n actionButtonType = \"button\",\n textareaProps,\n className,\n },\n ref\n ) => {\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const {\n [\"aria-label\"]: textareaPropsAriaLabel,\n [\"aria-labelledby\"]: textareaPropsAriaLabelledBy,\n defaultValue: textareaDefaultValue,\n ...textareaRestProps\n } = textareaProps ?? {};\n\n const [uncontrolledValue, setUncontrolledValue] = useState(() => {\n if (typeof textareaDefaultValue === \"string\" || typeof textareaDefaultValue === \"number\") {\n return String(textareaDefaultValue);\n }\n return \"\";\n });\n\n const textareaValue = value ?? uncontrolledValue;\n const hasValue = Boolean(textareaValue.length);\n\n const resolvedTextareaAriaLabel =\n textareaPropsAriaLabel ??\n (textareaPropsAriaLabelledBy ? undefined : textareaAriaLabelProp ?? placeholder);\n\n const adjustTextareaHeight = useCallback(() => {\n const textarea = internalRef.current;\n if (!textarea) return;\n\n textarea.style.height = \"auto\";\n textarea.style.overflowY = \"hidden\";\n\n const computed = getComputedStyle(textarea);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const paddingTop = parseFloat(computed.paddingTop) || 0;\n const paddingBottom = parseFloat(computed.paddingBottom) || 0;\n const naturalHeight = lineHeight * rows + paddingTop + paddingBottom;\n const maxHeight = lineHeight * maxRows + paddingTop + paddingBottom;\n\n if (textarea.scrollHeight > maxHeight) {\n textarea.style.height = `${maxHeight}px`;\n textarea.style.overflowY = \"auto\";\n } else if (textarea.scrollHeight > naturalHeight) {\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, [rows, maxRows]);\n\n useEffect(() => {\n adjustTextareaHeight();\n }, [textareaValue, adjustTextareaHeight]);\n\n const triggerSend = useCallback(\n (source: \"button\" | \"keyboard\") => {\n if (!hasValue) return;\n\n if (actionButtonType === \"submit\") {\n const parentForm = internalRef.current?.form;\n\n if (source === \"keyboard\" && parentForm) {\n parentForm.requestSubmit();\n return;\n }\n\n if (source === \"button\" && parentForm) {\n return;\n }\n }\n\n onSend();\n },\n [actionButtonType, hasValue, onSend]\n );\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setUncontrolledValue(event.target.value);\n }\n\n onChange(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === \"Enter\" && !event.shiftKey && !event.nativeEvent.isComposing) {\n event.preventDefault();\n triggerSend(\"keyboard\");\n }\n };\n\n const handleActionClick = () => {\n if (generating) {\n onStopClick();\n return;\n }\n\n triggerSend(\"button\");\n };\n\n const resolvedActionButtonType: \"button\" | \"submit\" =\n generating || !hasValue ? \"button\" : actionButtonType;\n\n const classes = cx([\n className,\n rootClassName,\n {\n [`${rootClassName}--filled`]: hasValue,\n [`${rootClassName}--negative`]: negative,\n },\n ]);\n\n const actionIcon = generating ? (\n <Icon size=\"xs\" svg={tvStop} />\n ) : (\n sendIcon ?? <Icon size=\"xs\" svg={send} />\n );\n\n return (\n <div className={classes} data-testid={dataTestId}>\n <textarea\n {...textareaRestProps}\n ref={mergeRefs(ref, internalRef)}\n className={cx(`${rootClassName}__textarea`, {\n [`${rootClassName}__textarea--negative`]: negative,\n })}\n aria-label={resolvedTextareaAriaLabel}\n aria-labelledby={textareaPropsAriaLabelledBy}\n data-testid={dataTestId ? `${dataTestId}-textarea` : undefined}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={rows}\n value={textareaValue}\n />\n <div className={cx(`${rootClassName}__action`)}>\n <Button\n aria-label={generating ? stopAriaLabel : sendAriaLabel}\n data-testid={dataTestId ? `${dataTestId}-action` : undefined}\n iconOnly\n negative={negative}\n size=\"xs\"\n type={resolvedActionButtonType}\n variant=\"primary\"\n onClick={handleActionClick}\n >\n {actionIcon}\n </Button>\n </div>\n <span\n className={cx(`${rootClassName}__frame`, {\n [`${rootClassName}__frame--negative`]: negative,\n })}\n aria-hidden=\"true\"\n />\n </div>\n );\n }\n);\n\nChatField.displayName = \"ChatField\";\n"],"names":["e","t","cx","c","styles","mergeRefs","inputRefs","filteredInputRefs","ref","inputRef","rootClassName","ChatField","forwardRef","dataTestId","value","placeholder","textareaAriaLabelProp","generating","negative","sendAriaLabel","sendIcon","stopAriaLabel","rows","maxRows","onChange","onSend","onStopClick","actionButtonType","textareaProps","className","internalRef","useRef","textareaPropsAriaLabel","textareaPropsAriaLabelledBy","textareaDefaultValue","textareaRestProps","uncontrolledValue","setUncontrolledValue","useState","textareaValue","hasValue","resolvedTextareaAriaLabel","adjustTextareaHeight","useCallback","textarea","computed","lineHeight","paddingTop","paddingBottom","naturalHeight","maxHeight","useEffect","triggerSend","source","parentForm","handleChange","event","handleKeyDown","handleActionClick","resolvedActionButtonType","classes","actionIcon","jsx","Icon","tvStop","send","jsxs","Button"],"mappings":"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"}
|
package/dist/chat-field.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chat-field-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chat-field-CLAjIHlM.js");exports.ChatField=e.ChatField;
|
|
2
2
|
//# sourceMappingURL=chat-field.cjs.js.map
|
package/dist/chat-field.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const l=require("react/jsx-runtime"),u=require("react"),A=require("./heading-
|
|
2
|
-
//# sourceMappingURL=chip-group-
|
|
1
|
+
"use strict";const l=require("react/jsx-runtime"),u=require("react"),A=require("./heading-BPeRwNYu.js"),D=require("./index-kcwFA4Dv.js"),m=require("./index-DlMXYAr3.js"),C=require("./index-BVmlsxuF.js"),F=require("./index-Cje7xxa1.js"),k=require("./bind-DeUYJ6m9.js"),H=require("./checkmark.es-lYntWFA3.js");function z(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(a,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return a.default=e,Object.freeze(a)}const B=z(u);var N="Toggle",$=B.forwardRef((e,a)=>{const{pressed:n,defaultPressed:o,onPressedChange:t,...i}=e,[r,s]=m.useControllableState({prop:n,onChange:t,defaultProp:o??!1,caller:N});return l.jsx(m.Primitive.button,{type:"button","aria-pressed":r,"data-state":r?"on":"off","data-disabled":e.disabled?"":void 0,...i,ref:a,onClick:m.composeEventHandlers(e.onClick,()=>{e.disabled||s(!r)})})});$.displayName=N;var g="ToggleGroup",[w]=D.createContextScope(g,[C.createRovingFocusGroupScope]),R=C.createRovingFocusGroupScope(),j=u.forwardRef((e,a)=>{const{type:n,...o}=e;if(n==="single"){const t=o;return l.jsx(L,{...t,ref:a})}if(n==="multiple"){const t=o;return l.jsx(U,{...t,ref:a})}throw new Error(`Missing prop \`type\` expected on \`${g}\``)});j.displayName=g;var[S,V]=w(g),L=u.forwardRef((e,a)=>{const{value:n,defaultValue:o,onValueChange:t=()=>{},...i}=e,[r,s]=m.useControllableState({prop:n,defaultProp:o??"",onChange:t,caller:g});return l.jsx(S,{scope:e.__scopeToggleGroup,type:"single",value:u.useMemo(()=>r?[r]:[],[r]),onItemActivate:s,onItemDeactivate:u.useCallback(()=>s(""),[s]),children:l.jsx(E,{...i,ref:a})})}),U=u.forwardRef((e,a)=>{const{value:n,defaultValue:o,onValueChange:t=()=>{},...i}=e,[r,s]=m.useControllableState({prop:n,defaultProp:o??[],onChange:t,caller:g}),c=u.useCallback(p=>s((d=[])=>[...d,p]),[s]),h=u.useCallback(p=>s((d=[])=>d.filter(b=>b!==p)),[s]);return l.jsx(S,{scope:e.__scopeToggleGroup,type:"multiple",value:r,onItemActivate:c,onItemDeactivate:h,children:l.jsx(E,{...i,ref:a})})});j.displayName=g;var[J,K]=w(g),E=u.forwardRef((e,a)=>{const{__scopeToggleGroup:n,disabled:o=!1,rovingFocus:t=!0,orientation:i,dir:r,loop:s=!0,...c}=e,h=R(n),p=F.useDirection(r),d={role:"group",dir:p,...c};return l.jsx(J,{scope:n,rovingFocus:t,disabled:o,children:t?l.jsx(C.Root,{asChild:!0,...h,orientation:i,dir:p,loop:s,children:l.jsx(m.Primitive.div,{...d,ref:a})}):l.jsx(m.Primitive.div,{...d,ref:a})})}),_="ToggleGroupItem",M=u.forwardRef((e,a)=>{const n=V(_,e.__scopeToggleGroup),o=K(_,e.__scopeToggleGroup),t=R(e.__scopeToggleGroup),i=n.value.includes(e.value),r=o.disabled||e.disabled,s={...e,pressed:i,disabled:r},c=u.useRef(null);return o.rovingFocus?l.jsx(C.Item,{asChild:!0,...t,focusable:!r,active:i,ref:c,children:l.jsx(P,{...s,ref:a})}):l.jsx(P,{...s,ref:a})});M.displayName=_;var P=u.forwardRef((e,a)=>{const{__scopeToggleGroup:n,value:o,...t}=e,i=V(_,n),r={role:"radio","aria-checked":e.pressed,"aria-pressed":void 0},s=i.type==="single"?r:void 0;return l.jsx($,{...s,...t,ref:a,onPressedChange:c=>{c?i.onItemActivate(o):i.onItemDeactivate(o)}})}),T=j,Q=M;const O={"purpur-chip-group":"_purpur-chip-group_m2vd5_1","purpur-chip-group--container":"_purpur-chip-group--container_m2vd5_6","purpur-chip-group--full-width":"_purpur-chip-group--full-width_m2vd5_12"},W={"purpur-chip-group-item":"_purpur-chip-group-item_11j23_1","purpur-chip-group-item__line-wrapper":"_purpur-chip-group-item__line-wrapper_11j23_19","purpur-chip-group-item__checkmark-icon":"_purpur-chip-group-item__checkmark-icon_11j23_36","purpur-chip-group-item--disabled":"_purpur-chip-group-item--disabled_11j23_51"},x=k.c.bind(W),f="purpur-chip-group-item",q=({["aria-label"]:e,children:a,className:n,["data-testid"]:o,disabled:t=!1,showCheckmark:i=!1,unavailable:r=!1,value:s,...c})=>{const h=x([f,{[`${f}--disabled`]:t,[`${f}--unavailable`]:r},n]),p=d=>{t&&d.preventDefault()};return l.jsxs(Q,{"aria-label":e,"data-testid":o,className:`${h} ${f}`,value:s,onClick:p,"aria-disabled":t,...c,children:[a,i&&l.jsx(H.a,{size:"sm",className:x(`${f}__checkmark-icon`),"data-testid":"checkmark icon"}),r&&l.jsx("span",{className:x(`${f}__line-wrapper`),"data-testid":"unavailable line wrapper"})]})},X=e=>u.isValidElement(e)&&e?.type===q,Y=e=>e.type==="choice",I=2,Z=k.c.bind(O),G="purpur-chip-group",y=({children:e,className:a,fullWidth:n=!1,title:o,titleProps:t,name:i,...r})=>{const s=Z([G,{[`${G}--full-width`]:n},a]),c=u.useId(),h=u.Children.toArray(e).filter(X),p=u.Children.map(h,v=>u.cloneElement(v,{showCheckmark:r.type==="filter"&&r.value.includes(v.props.value),unavailable:r.type==="choice"&&v.props.unavailable})),d=v=>{(r.type==="filter"||v!=="")&&r.onValueChange(v)};u.useEffect(()=>{r.type==="choice"&&p.length<I&&console.warn(`Minimum number of chips should be ${I} when using the "choice" type`)},[p,r.type]);const b=()=>Y(r)?l.jsx(T,{className:s,...r,"aria-labelledby":o?`${t?.id??c}-label`:void 0,onValueChange:d,type:"single",children:p}):l.jsx(T,{className:s,...r,"aria-labelledby":o?`${t?.id??c}-label`:void 0,onValueChange:d,type:"multiple",children:p});return l.jsxs("div",{className:O[`${G}--container`],children:[o&&l.jsx(A.Heading,{tag:"h2",variant:"subsection-100",...t,id:`${t?.id??c}-label`,children:o}),b(),i&&r.type==="choice"&&l.jsx("input",{type:"hidden",name:i,value:r.value})]})};y.Item=q;y.displayName="ChipGroup";exports.ChipGroup=y;
|
|
2
|
+
//# sourceMappingURL=chip-group-BLuG0MC6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chip-group-B775zvKD.js","sources":["../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_63d136f11f5f79b42c1373b9162ffc86/node_modules/@radix-ui/react-toggle/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle-group@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@type_0c124bdbaa351e80a671757a596f81ce/node_modules/@radix-ui/react-toggle-group/dist/index.mjs","../../../components/chip-group/src/chip-group-item.tsx","../../../components/chip-group/src/chip-group.tsx"],"sourcesContent":["\"use client\";\n\n// src/toggle.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Toggle\";\nvar Toggle = React.forwardRef((props, forwardedRef) => {\n const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n const [pressed, setPressed] = useControllableState({\n prop: pressedProp,\n onChange: onPressedChange,\n defaultProp: defaultPressed ?? false,\n caller: NAME\n });\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-pressed\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n \"data-disabled\": props.disabled ? \"\" : void 0,\n ...buttonProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => {\n if (!props.disabled) {\n setPressed(!pressed);\n }\n })\n }\n );\n});\nToggle.displayName = NAME;\nvar Root = Toggle;\nexport {\n Root,\n Toggle\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/toggle-group.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Toggle } from \"@radix-ui/react-toggle\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TOGGLE_GROUP_NAME = \"ToggleGroup\";\nvar [createToggleGroupContext, createToggleGroupScope] = createContextScope(TOGGLE_GROUP_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar ToggleGroup = React.forwardRef((props, forwardedRef) => {\n const { type, ...toggleGroupProps } = props;\n if (type === \"single\") {\n const singleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplSingle, { ...singleProps, ref: forwardedRef });\n }\n if (type === \"multiple\") {\n const multipleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplMultiple, { ...multipleProps, ref: forwardedRef });\n }\n throw new Error(`Missing prop \\`type\\` expected on \\`${TOGGLE_GROUP_NAME}\\``);\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupValueProvider, useToggleGroupValueContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImplSingle = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"single\",\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemActivate: setValue,\n onItemDeactivate: React.useCallback(() => setValue(\"\"), [setValue]),\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupSingleProps, ref: forwardedRef })\n }\n );\n});\nvar ToggleGroupImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n const handleButtonActivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleButtonDeactivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"multiple\",\n value,\n onItemActivate: handleButtonActivate,\n onItemDeactivate: handleButtonDeactivate,\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupMultipleProps, ref: forwardedRef })\n }\n );\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupContext, useToggleGroupContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeToggleGroup,\n disabled = false,\n rovingFocus = true,\n orientation,\n dir,\n loop = true,\n ...toggleGroupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeToggleGroup);\n const direction = useDirection(dir);\n const commonProps = { role: \"group\", dir: direction, ...toggleGroupProps };\n return /* @__PURE__ */ jsx(ToggleGroupContext, { scope: __scopeToggleGroup, rovingFocus, disabled, children: rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef }) });\n }\n);\nvar ITEM_NAME = \"ToggleGroupItem\";\nvar ToggleGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const valueContext = useToggleGroupValueContext(ITEM_NAME, props.__scopeToggleGroup);\n const context = useToggleGroupContext(ITEM_NAME, props.__scopeToggleGroup);\n const rovingFocusGroupScope = useRovingFocusGroupScope(props.__scopeToggleGroup);\n const pressed = valueContext.value.includes(props.value);\n const disabled = context.disabled || props.disabled;\n const commonProps = { ...props, pressed, disabled };\n const ref = React.useRef(null);\n return context.rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: pressed,\n ref,\n children: /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef });\n }\n);\nToggleGroupItem.displayName = ITEM_NAME;\nvar ToggleGroupItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeToggleGroup, value, ...itemProps } = props;\n const valueContext = useToggleGroupValueContext(ITEM_NAME, __scopeToggleGroup);\n const singleProps = { role: \"radio\", \"aria-checked\": props.pressed, \"aria-pressed\": void 0 };\n const typeProps = valueContext.type === \"single\" ? singleProps : void 0;\n return /* @__PURE__ */ jsx(\n Toggle,\n {\n ...typeProps,\n ...itemProps,\n ref: forwardedRef,\n onPressedChange: (pressed) => {\n if (pressed) {\n valueContext.onItemActivate(value);\n } else {\n valueContext.onItemDeactivate(value);\n }\n }\n }\n );\n }\n);\nvar Root2 = ToggleGroup;\nvar Item2 = ToggleGroupItem;\nexport {\n Item2 as Item,\n Root2 as Root,\n ToggleGroup,\n ToggleGroupItem,\n createToggleGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { isValidElement, type MouseEvent, type ReactElement, type ReactNode } from \"react\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group-item.module.scss\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupItemProps = StylingProps & {\n [\"aria-label\"]?: string;\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * When `true`, prevents the user from interacting with the item.\n * */\n disabled?: boolean;\n /**\n * This prop will be passed automatically from the parent component (ChipGroup) when `type` is `\"filter\"`.\n * */\n showCheckmark?: boolean;\n /**\n * A unique value for the item.\n * */\n value: string;\n /**\n * This prop will only be used when `type` is `\"choice\"`.\n * When `true`, we recommend using `aria-label` to announce to screen readers that the option is unavailable.\n * */\n unavailable?: boolean;\n};\n\nconst cx = c.bind(styles);\nexport const rootClassName = \"purpur-chip-group-item\";\n\nexport const ChipGroupItem = ({\n [\"aria-label\"]: allyLabel,\n children,\n className,\n [\"data-testid\"]: dataTestId,\n disabled = false,\n showCheckmark = false,\n unavailable = false,\n value,\n ...props\n}: ChipGroupItemProps) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--disabled`]: disabled,\n [`${rootClassName}--unavailable`]: unavailable,\n },\n className,\n ]);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n }\n };\n\n return (\n <RadixToggleGroup.Item\n aria-label={allyLabel}\n data-testid={dataTestId}\n className={`${classes} ${rootClassName}`}\n value={value}\n onClick={handleClick}\n aria-disabled={disabled}\n {...props}\n >\n {children}\n {showCheckmark && (\n <IconCheckmark\n size=\"sm\"\n className={cx(`${rootClassName}__checkmark-icon`)}\n data-testid=\"checkmark icon\"\n />\n )}\n {unavailable && (\n <span\n className={cx(`${rootClassName}__line-wrapper`)}\n data-testid=\"unavailable line wrapper\"\n />\n )}\n </RadixToggleGroup.Item>\n );\n};\n\nexport const isChipGroupItem = (child?: ReactNode): child is ReactElement<ChipGroupItemProps> =>\n isValidElement<ChipGroupItemProps>(child) && child?.type === ChipGroupItem;\n","import React, { Children, cloneElement, type ReactNode, useEffect, useId } from \"react\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group.module.scss\";\nimport { ChipGroupItem, isChipGroupItem } from \"./chip-group-item\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupProps = StylingProps & {\n [\"data-testid\"]?: string;\n /**\n * Will only render given ChipGroupItems.\n * */\n children: ReactNode;\n /**\n * Makes the chips span the full container width if set to `true`.\n * */\n fullWidth?: boolean;\n /**\n * Renders above the chip group as a heading.\n * */\n title?: ReactNode;\n /**\n * Allows to customise title.\n */\n titleProps?: TitlePropsType;\n /**\n * Optional name for form submission\n */\n name?: string;\n};\n\nexport type TitlePropsType = StylingProps & {\n /**\n * Use custom id for connecting title and chip group.\n */\n id?: string;\n /**\n * Changes heading level.\n * @default h2\n */\n tag?: HeadingTagType;\n};\n\nexport type ChipGroupChoiceProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"choice\";\n /**\n * The value of the pressed item(s).\n * */\n value: string;\n};\n\nexport type ChipGroupFilterProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string[]) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"filter\";\n /**\n * The value of the pressed item(s).\n * */\n value: string[];\n};\n\nconst isChoiceProps = (\n props: ChipGroupChoiceProps | ChipGroupFilterProps\n): props is ChipGroupChoiceProps => props.type === \"choice\";\n\ntype ChipGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof ChipGroupItem;\n};\n\nconst MIN_CHOICE_OPTIONS = 2;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-chip-group\";\n\nexport const ChipGroup: ChipGroupCmp<\n ChipGroupProps & (ChipGroupChoiceProps | ChipGroupFilterProps)\n> = ({ children, className, fullWidth = false, title, titleProps, name, ...props }) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n },\n className,\n ]);\n\n const id = useId();\n\n const chipGroupItemChildren = Children.toArray(children).filter(isChipGroupItem);\n\n const clonedChildren = Children.map(chipGroupItemChildren, (child) =>\n cloneElement(child, {\n showCheckmark: props.type === \"filter\" && props.value.includes(child.props.value),\n unavailable: props.type === \"choice\" && child.props.unavailable,\n })\n );\n\n const handleValueChange = (value: string & string[]) => {\n if (props.type === \"filter\" || value !== \"\") {\n props.onValueChange(value);\n }\n };\n\n useEffect(() => {\n if (props.type === \"choice\" && clonedChildren.length < MIN_CHOICE_OPTIONS) {\n console.warn(\n `Minimum number of chips should be ${MIN_CHOICE_OPTIONS} when using the \"choice\" type`\n );\n }\n }, [clonedChildren, props.type]);\n\n const chipGroupChildren = () => {\n if (isChoiceProps(props)) {\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"single\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n }\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"multiple\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n };\n\n return (\n <div className={styles[`${rootClassName}--container`]}>\n {title && (\n <Heading\n tag=\"h2\"\n variant=\"subsection-100\"\n {...titleProps}\n id={`${titleProps?.id ?? id}-label`}\n >\n {title}\n </Heading>\n )}\n {chipGroupChildren()}\n {name && props.type === \"choice\" && <input type=\"hidden\" name={name} value={props.value} />}\n </div>\n );\n};\n\nChipGroup.Item = ChipGroupItem;\n\nChipGroup.displayName = \"ChipGroup\";\n"],"names":["NAME","Toggle","React","props","forwardedRef","pressedProp","defaultPressed","onPressedChange","buttonProps","pressed","setPressed","useControllableState","jsx","Primitive","composeEventHandlers","TOGGLE_GROUP_NAME","createToggleGroupContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","ToggleGroup","type","toggleGroupProps","singleProps","ToggleGroupImplSingle","multipleProps","ToggleGroupImplMultiple","ToggleGroupValueProvider","useToggleGroupValueContext","valueProp","defaultValue","onValueChange","toggleGroupSingleProps","value","setValue","ToggleGroupImpl","toggleGroupMultipleProps","handleButtonActivate","itemValue","prevValue","handleButtonDeactivate","value2","ToggleGroupContext","useToggleGroupContext","__scopeToggleGroup","disabled","rovingFocus","orientation","dir","loop","rovingFocusGroupScope","direction","useDirection","commonProps","RovingFocusGroup.Root","ITEM_NAME","ToggleGroupItem","valueContext","context","ref","RovingFocusGroup.Item","ToggleGroupItemImpl","itemProps","typeProps","Root2","Item2","cx","c","styles","rootClassName","ChipGroupItem","allyLabel","children","className","dataTestId","showCheckmark","unavailable","classes","handleClick","e","jsxs","RadixToggleGroup.Item","IconCheckmark","isChipGroupItem","child","isValidElement","isChoiceProps","MIN_CHOICE_OPTIONS","ChipGroup","fullWidth","title","titleProps","name","id","useId","chipGroupItemChildren","Children","clonedChildren","cloneElement","handleValueChange","useEffect","chipGroupChildren","RadixToggleGroup.Root","Heading"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"chip-group-BLuG0MC6.js","sources":["../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_63d136f11f5f79b42c1373b9162ffc86/node_modules/@radix-ui/react-toggle/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle-group@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@type_0c124bdbaa351e80a671757a596f81ce/node_modules/@radix-ui/react-toggle-group/dist/index.mjs","../../../components/chip-group/src/chip-group-item.tsx","../../../components/chip-group/src/chip-group.tsx"],"sourcesContent":["\"use client\";\n\n// src/toggle.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Toggle\";\nvar Toggle = React.forwardRef((props, forwardedRef) => {\n const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n const [pressed, setPressed] = useControllableState({\n prop: pressedProp,\n onChange: onPressedChange,\n defaultProp: defaultPressed ?? false,\n caller: NAME\n });\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-pressed\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n \"data-disabled\": props.disabled ? \"\" : void 0,\n ...buttonProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => {\n if (!props.disabled) {\n setPressed(!pressed);\n }\n })\n }\n );\n});\nToggle.displayName = NAME;\nvar Root = Toggle;\nexport {\n Root,\n Toggle\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/toggle-group.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Toggle } from \"@radix-ui/react-toggle\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TOGGLE_GROUP_NAME = \"ToggleGroup\";\nvar [createToggleGroupContext, createToggleGroupScope] = createContextScope(TOGGLE_GROUP_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar ToggleGroup = React.forwardRef((props, forwardedRef) => {\n const { type, ...toggleGroupProps } = props;\n if (type === \"single\") {\n const singleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplSingle, { ...singleProps, ref: forwardedRef });\n }\n if (type === \"multiple\") {\n const multipleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplMultiple, { ...multipleProps, ref: forwardedRef });\n }\n throw new Error(`Missing prop \\`type\\` expected on \\`${TOGGLE_GROUP_NAME}\\``);\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupValueProvider, useToggleGroupValueContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImplSingle = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"single\",\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemActivate: setValue,\n onItemDeactivate: React.useCallback(() => setValue(\"\"), [setValue]),\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupSingleProps, ref: forwardedRef })\n }\n );\n});\nvar ToggleGroupImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n const handleButtonActivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleButtonDeactivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"multiple\",\n value,\n onItemActivate: handleButtonActivate,\n onItemDeactivate: handleButtonDeactivate,\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupMultipleProps, ref: forwardedRef })\n }\n );\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupContext, useToggleGroupContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeToggleGroup,\n disabled = false,\n rovingFocus = true,\n orientation,\n dir,\n loop = true,\n ...toggleGroupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeToggleGroup);\n const direction = useDirection(dir);\n const commonProps = { role: \"group\", dir: direction, ...toggleGroupProps };\n return /* @__PURE__ */ jsx(ToggleGroupContext, { scope: __scopeToggleGroup, rovingFocus, disabled, children: rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef }) });\n }\n);\nvar ITEM_NAME = \"ToggleGroupItem\";\nvar ToggleGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const valueContext = useToggleGroupValueContext(ITEM_NAME, props.__scopeToggleGroup);\n const context = useToggleGroupContext(ITEM_NAME, props.__scopeToggleGroup);\n const rovingFocusGroupScope = useRovingFocusGroupScope(props.__scopeToggleGroup);\n const pressed = valueContext.value.includes(props.value);\n const disabled = context.disabled || props.disabled;\n const commonProps = { ...props, pressed, disabled };\n const ref = React.useRef(null);\n return context.rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: pressed,\n ref,\n children: /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef });\n }\n);\nToggleGroupItem.displayName = ITEM_NAME;\nvar ToggleGroupItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeToggleGroup, value, ...itemProps } = props;\n const valueContext = useToggleGroupValueContext(ITEM_NAME, __scopeToggleGroup);\n const singleProps = { role: \"radio\", \"aria-checked\": props.pressed, \"aria-pressed\": void 0 };\n const typeProps = valueContext.type === \"single\" ? singleProps : void 0;\n return /* @__PURE__ */ jsx(\n Toggle,\n {\n ...typeProps,\n ...itemProps,\n ref: forwardedRef,\n onPressedChange: (pressed) => {\n if (pressed) {\n valueContext.onItemActivate(value);\n } else {\n valueContext.onItemDeactivate(value);\n }\n }\n }\n );\n }\n);\nvar Root2 = ToggleGroup;\nvar Item2 = ToggleGroupItem;\nexport {\n Item2 as Item,\n Root2 as Root,\n ToggleGroup,\n ToggleGroupItem,\n createToggleGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { isValidElement, type MouseEvent, type ReactElement, type ReactNode } from \"react\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group-item.module.scss\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupItemProps = StylingProps & {\n [\"aria-label\"]?: string;\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * When `true`, prevents the user from interacting with the item.\n * */\n disabled?: boolean;\n /**\n * This prop will be passed automatically from the parent component (ChipGroup) when `type` is `\"filter\"`.\n * */\n showCheckmark?: boolean;\n /**\n * A unique value for the item.\n * */\n value: string;\n /**\n * This prop will only be used when `type` is `\"choice\"`.\n * When `true`, we recommend using `aria-label` to announce to screen readers that the option is unavailable.\n * */\n unavailable?: boolean;\n};\n\nconst cx = c.bind(styles);\nexport const rootClassName = \"purpur-chip-group-item\";\n\nexport const ChipGroupItem = ({\n [\"aria-label\"]: allyLabel,\n children,\n className,\n [\"data-testid\"]: dataTestId,\n disabled = false,\n showCheckmark = false,\n unavailable = false,\n value,\n ...props\n}: ChipGroupItemProps) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--disabled`]: disabled,\n [`${rootClassName}--unavailable`]: unavailable,\n },\n className,\n ]);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n }\n };\n\n return (\n <RadixToggleGroup.Item\n aria-label={allyLabel}\n data-testid={dataTestId}\n className={`${classes} ${rootClassName}`}\n value={value}\n onClick={handleClick}\n aria-disabled={disabled}\n {...props}\n >\n {children}\n {showCheckmark && (\n <IconCheckmark\n size=\"sm\"\n className={cx(`${rootClassName}__checkmark-icon`)}\n data-testid=\"checkmark icon\"\n />\n )}\n {unavailable && (\n <span\n className={cx(`${rootClassName}__line-wrapper`)}\n data-testid=\"unavailable line wrapper\"\n />\n )}\n </RadixToggleGroup.Item>\n );\n};\n\nexport const isChipGroupItem = (child?: ReactNode): child is ReactElement<ChipGroupItemProps> =>\n isValidElement<ChipGroupItemProps>(child) && child?.type === ChipGroupItem;\n","import React, { Children, cloneElement, type ReactNode, useEffect, useId } from \"react\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group.module.scss\";\nimport { ChipGroupItem, isChipGroupItem } from \"./chip-group-item\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupProps = StylingProps & {\n [\"data-testid\"]?: string;\n /**\n * Will only render given ChipGroupItems.\n * */\n children: ReactNode;\n /**\n * Makes the chips span the full container width if set to `true`.\n * */\n fullWidth?: boolean;\n /**\n * Renders above the chip group as a heading.\n * */\n title?: ReactNode;\n /**\n * Allows to customise title.\n */\n titleProps?: TitlePropsType;\n /**\n * Optional name for form submission\n */\n name?: string;\n};\n\nexport type TitlePropsType = StylingProps & {\n /**\n * Use custom id for connecting title and chip group.\n */\n id?: string;\n /**\n * Changes heading level.\n * @default h2\n */\n tag?: HeadingTagType;\n};\n\nexport type ChipGroupChoiceProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"choice\";\n /**\n * The value of the pressed item(s).\n * */\n value: string;\n};\n\nexport type ChipGroupFilterProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string[]) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"filter\";\n /**\n * The value of the pressed item(s).\n * */\n value: string[];\n};\n\nconst isChoiceProps = (\n props: ChipGroupChoiceProps | ChipGroupFilterProps\n): props is ChipGroupChoiceProps => props.type === \"choice\";\n\ntype ChipGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof ChipGroupItem;\n};\n\nconst MIN_CHOICE_OPTIONS = 2;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-chip-group\";\n\nexport const ChipGroup: ChipGroupCmp<\n ChipGroupProps & (ChipGroupChoiceProps | ChipGroupFilterProps)\n> = ({ children, className, fullWidth = false, title, titleProps, name, ...props }) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n },\n className,\n ]);\n\n const id = useId();\n\n const chipGroupItemChildren = Children.toArray(children).filter(isChipGroupItem);\n\n const clonedChildren = Children.map(chipGroupItemChildren, (child) =>\n cloneElement(child, {\n showCheckmark: props.type === \"filter\" && props.value.includes(child.props.value),\n unavailable: props.type === \"choice\" && child.props.unavailable,\n })\n );\n\n const handleValueChange = (value: string & string[]) => {\n if (props.type === \"filter\" || value !== \"\") {\n props.onValueChange(value);\n }\n };\n\n useEffect(() => {\n if (props.type === \"choice\" && clonedChildren.length < MIN_CHOICE_OPTIONS) {\n console.warn(\n `Minimum number of chips should be ${MIN_CHOICE_OPTIONS} when using the \"choice\" type`\n );\n }\n }, [clonedChildren, props.type]);\n\n const chipGroupChildren = () => {\n if (isChoiceProps(props)) {\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"single\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n }\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"multiple\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n };\n\n return (\n <div className={styles[`${rootClassName}--container`]}>\n {title && (\n <Heading\n tag=\"h2\"\n variant=\"subsection-100\"\n {...titleProps}\n id={`${titleProps?.id ?? id}-label`}\n >\n {title}\n </Heading>\n )}\n {chipGroupChildren()}\n {name && props.type === \"choice\" && <input type=\"hidden\" name={name} value={props.value} />}\n </div>\n );\n};\n\nChipGroup.Item = ChipGroupItem;\n\nChipGroup.displayName = \"ChipGroup\";\n"],"names":["NAME","Toggle","React","props","forwardedRef","pressedProp","defaultPressed","onPressedChange","buttonProps","pressed","setPressed","useControllableState","jsx","Primitive","composeEventHandlers","TOGGLE_GROUP_NAME","createToggleGroupContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","ToggleGroup","type","toggleGroupProps","singleProps","ToggleGroupImplSingle","multipleProps","ToggleGroupImplMultiple","ToggleGroupValueProvider","useToggleGroupValueContext","valueProp","defaultValue","onValueChange","toggleGroupSingleProps","value","setValue","ToggleGroupImpl","toggleGroupMultipleProps","handleButtonActivate","itemValue","prevValue","handleButtonDeactivate","value2","ToggleGroupContext","useToggleGroupContext","__scopeToggleGroup","disabled","rovingFocus","orientation","dir","loop","rovingFocusGroupScope","direction","useDirection","commonProps","RovingFocusGroup.Root","ITEM_NAME","ToggleGroupItem","valueContext","context","ref","RovingFocusGroup.Item","ToggleGroupItemImpl","itemProps","typeProps","Root2","Item2","cx","c","styles","rootClassName","ChipGroupItem","allyLabel","children","className","dataTestId","showCheckmark","unavailable","classes","handleClick","e","jsxs","RadixToggleGroup.Item","IconCheckmark","isChipGroupItem","child","isValidElement","isChoiceProps","MIN_CHOICE_OPTIONS","ChipGroup","fullWidth","title","titleProps","name","id","useId","chipGroupItemChildren","Children","clonedChildren","cloneElement","handleValueChange","useEffect","chipGroupChildren","RadixToggleGroup.Root","Heading"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as l, jsxs as w } from "react/jsx-runtime";
|
|
2
2
|
import * as B from "react";
|
|
3
3
|
import d, { isValidElement as z, useId as L, Children as I, cloneElement as U, useEffect as q } from "react";
|
|
4
|
-
import { H as J } from "./heading-
|
|
4
|
+
import { H as J } from "./heading-BG7JTFO1.mjs";
|
|
5
5
|
import { c as K } from "./index-DOfn3ixy.mjs";
|
|
6
6
|
import { u as y, P as b, c as Q } from "./index-DCcK_d4W.mjs";
|
|
7
7
|
import { I as W, c as $, R as X } from "./index-IpWiejWQ.mjs";
|
|
@@ -276,4 +276,4 @@ H.displayName = "ChipGroup";
|
|
|
276
276
|
export {
|
|
277
277
|
H as C
|
|
278
278
|
};
|
|
279
|
-
//# sourceMappingURL=chip-group-
|
|
279
|
+
//# sourceMappingURL=chip-group-Bo4kJ8Vq.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chip-group-xuOe7nL3.mjs","sources":["../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_63d136f11f5f79b42c1373b9162ffc86/node_modules/@radix-ui/react-toggle/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle-group@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@type_0c124bdbaa351e80a671757a596f81ce/node_modules/@radix-ui/react-toggle-group/dist/index.mjs","../../../components/chip-group/src/chip-group-item.tsx","../../../components/chip-group/src/chip-group.tsx"],"sourcesContent":["\"use client\";\n\n// src/toggle.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Toggle\";\nvar Toggle = React.forwardRef((props, forwardedRef) => {\n const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n const [pressed, setPressed] = useControllableState({\n prop: pressedProp,\n onChange: onPressedChange,\n defaultProp: defaultPressed ?? false,\n caller: NAME\n });\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-pressed\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n \"data-disabled\": props.disabled ? \"\" : void 0,\n ...buttonProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => {\n if (!props.disabled) {\n setPressed(!pressed);\n }\n })\n }\n );\n});\nToggle.displayName = NAME;\nvar Root = Toggle;\nexport {\n Root,\n Toggle\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/toggle-group.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Toggle } from \"@radix-ui/react-toggle\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TOGGLE_GROUP_NAME = \"ToggleGroup\";\nvar [createToggleGroupContext, createToggleGroupScope] = createContextScope(TOGGLE_GROUP_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar ToggleGroup = React.forwardRef((props, forwardedRef) => {\n const { type, ...toggleGroupProps } = props;\n if (type === \"single\") {\n const singleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplSingle, { ...singleProps, ref: forwardedRef });\n }\n if (type === \"multiple\") {\n const multipleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplMultiple, { ...multipleProps, ref: forwardedRef });\n }\n throw new Error(`Missing prop \\`type\\` expected on \\`${TOGGLE_GROUP_NAME}\\``);\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupValueProvider, useToggleGroupValueContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImplSingle = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"single\",\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemActivate: setValue,\n onItemDeactivate: React.useCallback(() => setValue(\"\"), [setValue]),\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupSingleProps, ref: forwardedRef })\n }\n );\n});\nvar ToggleGroupImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n const handleButtonActivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleButtonDeactivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"multiple\",\n value,\n onItemActivate: handleButtonActivate,\n onItemDeactivate: handleButtonDeactivate,\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupMultipleProps, ref: forwardedRef })\n }\n );\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupContext, useToggleGroupContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeToggleGroup,\n disabled = false,\n rovingFocus = true,\n orientation,\n dir,\n loop = true,\n ...toggleGroupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeToggleGroup);\n const direction = useDirection(dir);\n const commonProps = { role: \"group\", dir: direction, ...toggleGroupProps };\n return /* @__PURE__ */ jsx(ToggleGroupContext, { scope: __scopeToggleGroup, rovingFocus, disabled, children: rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef }) });\n }\n);\nvar ITEM_NAME = \"ToggleGroupItem\";\nvar ToggleGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const valueContext = useToggleGroupValueContext(ITEM_NAME, props.__scopeToggleGroup);\n const context = useToggleGroupContext(ITEM_NAME, props.__scopeToggleGroup);\n const rovingFocusGroupScope = useRovingFocusGroupScope(props.__scopeToggleGroup);\n const pressed = valueContext.value.includes(props.value);\n const disabled = context.disabled || props.disabled;\n const commonProps = { ...props, pressed, disabled };\n const ref = React.useRef(null);\n return context.rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: pressed,\n ref,\n children: /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef });\n }\n);\nToggleGroupItem.displayName = ITEM_NAME;\nvar ToggleGroupItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeToggleGroup, value, ...itemProps } = props;\n const valueContext = useToggleGroupValueContext(ITEM_NAME, __scopeToggleGroup);\n const singleProps = { role: \"radio\", \"aria-checked\": props.pressed, \"aria-pressed\": void 0 };\n const typeProps = valueContext.type === \"single\" ? singleProps : void 0;\n return /* @__PURE__ */ jsx(\n Toggle,\n {\n ...typeProps,\n ...itemProps,\n ref: forwardedRef,\n onPressedChange: (pressed) => {\n if (pressed) {\n valueContext.onItemActivate(value);\n } else {\n valueContext.onItemDeactivate(value);\n }\n }\n }\n );\n }\n);\nvar Root2 = ToggleGroup;\nvar Item2 = ToggleGroupItem;\nexport {\n Item2 as Item,\n Root2 as Root,\n ToggleGroup,\n ToggleGroupItem,\n createToggleGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { isValidElement, type MouseEvent, type ReactElement, type ReactNode } from \"react\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group-item.module.scss\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupItemProps = StylingProps & {\n [\"aria-label\"]?: string;\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * When `true`, prevents the user from interacting with the item.\n * */\n disabled?: boolean;\n /**\n * This prop will be passed automatically from the parent component (ChipGroup) when `type` is `\"filter\"`.\n * */\n showCheckmark?: boolean;\n /**\n * A unique value for the item.\n * */\n value: string;\n /**\n * This prop will only be used when `type` is `\"choice\"`.\n * When `true`, we recommend using `aria-label` to announce to screen readers that the option is unavailable.\n * */\n unavailable?: boolean;\n};\n\nconst cx = c.bind(styles);\nexport const rootClassName = \"purpur-chip-group-item\";\n\nexport const ChipGroupItem = ({\n [\"aria-label\"]: allyLabel,\n children,\n className,\n [\"data-testid\"]: dataTestId,\n disabled = false,\n showCheckmark = false,\n unavailable = false,\n value,\n ...props\n}: ChipGroupItemProps) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--disabled`]: disabled,\n [`${rootClassName}--unavailable`]: unavailable,\n },\n className,\n ]);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n }\n };\n\n return (\n <RadixToggleGroup.Item\n aria-label={allyLabel}\n data-testid={dataTestId}\n className={`${classes} ${rootClassName}`}\n value={value}\n onClick={handleClick}\n aria-disabled={disabled}\n {...props}\n >\n {children}\n {showCheckmark && (\n <IconCheckmark\n size=\"sm\"\n className={cx(`${rootClassName}__checkmark-icon`)}\n data-testid=\"checkmark icon\"\n />\n )}\n {unavailable && (\n <span\n className={cx(`${rootClassName}__line-wrapper`)}\n data-testid=\"unavailable line wrapper\"\n />\n )}\n </RadixToggleGroup.Item>\n );\n};\n\nexport const isChipGroupItem = (child?: ReactNode): child is ReactElement<ChipGroupItemProps> =>\n isValidElement<ChipGroupItemProps>(child) && child?.type === ChipGroupItem;\n","import React, { Children, cloneElement, type ReactNode, useEffect, useId } from \"react\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group.module.scss\";\nimport { ChipGroupItem, isChipGroupItem } from \"./chip-group-item\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupProps = StylingProps & {\n [\"data-testid\"]?: string;\n /**\n * Will only render given ChipGroupItems.\n * */\n children: ReactNode;\n /**\n * Makes the chips span the full container width if set to `true`.\n * */\n fullWidth?: boolean;\n /**\n * Renders above the chip group as a heading.\n * */\n title?: ReactNode;\n /**\n * Allows to customise title.\n */\n titleProps?: TitlePropsType;\n /**\n * Optional name for form submission\n */\n name?: string;\n};\n\nexport type TitlePropsType = StylingProps & {\n /**\n * Use custom id for connecting title and chip group.\n */\n id?: string;\n /**\n * Changes heading level.\n * @default h2\n */\n tag?: HeadingTagType;\n};\n\nexport type ChipGroupChoiceProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"choice\";\n /**\n * The value of the pressed item(s).\n * */\n value: string;\n};\n\nexport type ChipGroupFilterProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string[]) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"filter\";\n /**\n * The value of the pressed item(s).\n * */\n value: string[];\n};\n\nconst isChoiceProps = (\n props: ChipGroupChoiceProps | ChipGroupFilterProps\n): props is ChipGroupChoiceProps => props.type === \"choice\";\n\ntype ChipGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof ChipGroupItem;\n};\n\nconst MIN_CHOICE_OPTIONS = 2;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-chip-group\";\n\nexport const ChipGroup: ChipGroupCmp<\n ChipGroupProps & (ChipGroupChoiceProps | ChipGroupFilterProps)\n> = ({ children, className, fullWidth = false, title, titleProps, name, ...props }) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n },\n className,\n ]);\n\n const id = useId();\n\n const chipGroupItemChildren = Children.toArray(children).filter(isChipGroupItem);\n\n const clonedChildren = Children.map(chipGroupItemChildren, (child) =>\n cloneElement(child, {\n showCheckmark: props.type === \"filter\" && props.value.includes(child.props.value),\n unavailable: props.type === \"choice\" && child.props.unavailable,\n })\n );\n\n const handleValueChange = (value: string & string[]) => {\n if (props.type === \"filter\" || value !== \"\") {\n props.onValueChange(value);\n }\n };\n\n useEffect(() => {\n if (props.type === \"choice\" && clonedChildren.length < MIN_CHOICE_OPTIONS) {\n console.warn(\n `Minimum number of chips should be ${MIN_CHOICE_OPTIONS} when using the \"choice\" type`\n );\n }\n }, [clonedChildren, props.type]);\n\n const chipGroupChildren = () => {\n if (isChoiceProps(props)) {\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"single\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n }\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"multiple\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n };\n\n return (\n <div className={styles[`${rootClassName}--container`]}>\n {title && (\n <Heading\n tag=\"h2\"\n variant=\"subsection-100\"\n {...titleProps}\n id={`${titleProps?.id ?? id}-label`}\n >\n {title}\n </Heading>\n )}\n {chipGroupChildren()}\n {name && props.type === \"choice\" && <input type=\"hidden\" name={name} value={props.value} />}\n </div>\n );\n};\n\nChipGroup.Item = ChipGroupItem;\n\nChipGroup.displayName = \"ChipGroup\";\n"],"names":["NAME","Toggle","React","props","forwardedRef","pressedProp","defaultPressed","onPressedChange","buttonProps","pressed","setPressed","useControllableState","jsx","Primitive","composeEventHandlers","TOGGLE_GROUP_NAME","createToggleGroupContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","ToggleGroup","type","toggleGroupProps","ToggleGroupImplSingle","ToggleGroupImplMultiple","ToggleGroupValueProvider","useToggleGroupValueContext","valueProp","defaultValue","onValueChange","toggleGroupSingleProps","value","setValue","ToggleGroupImpl","toggleGroupMultipleProps","handleButtonActivate","itemValue","prevValue","handleButtonDeactivate","value2","ToggleGroupContext","useToggleGroupContext","__scopeToggleGroup","disabled","rovingFocus","orientation","dir","loop","rovingFocusGroupScope","direction","useDirection","commonProps","RovingFocusGroup.Root","ITEM_NAME","ToggleGroupItem","valueContext","context","ref","RovingFocusGroup.Item","ToggleGroupItemImpl","itemProps","singleProps","typeProps","Root2","Item2","cx","c","styles","rootClassName","ChipGroupItem","allyLabel","children","className","dataTestId","showCheckmark","unavailable","classes","handleClick","e","jsxs","RadixToggleGroup.Item","IconCheckmark","isChipGroupItem","child","isValidElement","isChoiceProps","MIN_CHOICE_OPTIONS","ChipGroup","fullWidth","title","titleProps","name","id","useId","chipGroupItemChildren","Children","clonedChildren","cloneElement","handleValueChange","useEffect","chipGroupChildren","RadixToggleGroup.Root","Heading"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"chip-group-Bo4kJ8Vq.mjs","sources":["../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_63d136f11f5f79b42c1373b9162ffc86/node_modules/@radix-ui/react-toggle/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-toggle-group@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@type_0c124bdbaa351e80a671757a596f81ce/node_modules/@radix-ui/react-toggle-group/dist/index.mjs","../../../components/chip-group/src/chip-group-item.tsx","../../../components/chip-group/src/chip-group.tsx"],"sourcesContent":["\"use client\";\n\n// src/toggle.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Toggle\";\nvar Toggle = React.forwardRef((props, forwardedRef) => {\n const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n const [pressed, setPressed] = useControllableState({\n prop: pressedProp,\n onChange: onPressedChange,\n defaultProp: defaultPressed ?? false,\n caller: NAME\n });\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-pressed\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n \"data-disabled\": props.disabled ? \"\" : void 0,\n ...buttonProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => {\n if (!props.disabled) {\n setPressed(!pressed);\n }\n })\n }\n );\n});\nToggle.displayName = NAME;\nvar Root = Toggle;\nexport {\n Root,\n Toggle\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/toggle-group.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Toggle } from \"@radix-ui/react-toggle\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TOGGLE_GROUP_NAME = \"ToggleGroup\";\nvar [createToggleGroupContext, createToggleGroupScope] = createContextScope(TOGGLE_GROUP_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar ToggleGroup = React.forwardRef((props, forwardedRef) => {\n const { type, ...toggleGroupProps } = props;\n if (type === \"single\") {\n const singleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplSingle, { ...singleProps, ref: forwardedRef });\n }\n if (type === \"multiple\") {\n const multipleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplMultiple, { ...multipleProps, ref: forwardedRef });\n }\n throw new Error(`Missing prop \\`type\\` expected on \\`${TOGGLE_GROUP_NAME}\\``);\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupValueProvider, useToggleGroupValueContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImplSingle = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"single\",\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemActivate: setValue,\n onItemDeactivate: React.useCallback(() => setValue(\"\"), [setValue]),\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupSingleProps, ref: forwardedRef })\n }\n );\n});\nvar ToggleGroupImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n const handleButtonActivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleButtonDeactivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"multiple\",\n value,\n onItemActivate: handleButtonActivate,\n onItemDeactivate: handleButtonDeactivate,\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupMultipleProps, ref: forwardedRef })\n }\n );\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupContext, useToggleGroupContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeToggleGroup,\n disabled = false,\n rovingFocus = true,\n orientation,\n dir,\n loop = true,\n ...toggleGroupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeToggleGroup);\n const direction = useDirection(dir);\n const commonProps = { role: \"group\", dir: direction, ...toggleGroupProps };\n return /* @__PURE__ */ jsx(ToggleGroupContext, { scope: __scopeToggleGroup, rovingFocus, disabled, children: rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef }) });\n }\n);\nvar ITEM_NAME = \"ToggleGroupItem\";\nvar ToggleGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const valueContext = useToggleGroupValueContext(ITEM_NAME, props.__scopeToggleGroup);\n const context = useToggleGroupContext(ITEM_NAME, props.__scopeToggleGroup);\n const rovingFocusGroupScope = useRovingFocusGroupScope(props.__scopeToggleGroup);\n const pressed = valueContext.value.includes(props.value);\n const disabled = context.disabled || props.disabled;\n const commonProps = { ...props, pressed, disabled };\n const ref = React.useRef(null);\n return context.rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: pressed,\n ref,\n children: /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef });\n }\n);\nToggleGroupItem.displayName = ITEM_NAME;\nvar ToggleGroupItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeToggleGroup, value, ...itemProps } = props;\n const valueContext = useToggleGroupValueContext(ITEM_NAME, __scopeToggleGroup);\n const singleProps = { role: \"radio\", \"aria-checked\": props.pressed, \"aria-pressed\": void 0 };\n const typeProps = valueContext.type === \"single\" ? singleProps : void 0;\n return /* @__PURE__ */ jsx(\n Toggle,\n {\n ...typeProps,\n ...itemProps,\n ref: forwardedRef,\n onPressedChange: (pressed) => {\n if (pressed) {\n valueContext.onItemActivate(value);\n } else {\n valueContext.onItemDeactivate(value);\n }\n }\n }\n );\n }\n);\nvar Root2 = ToggleGroup;\nvar Item2 = ToggleGroupItem;\nexport {\n Item2 as Item,\n Root2 as Root,\n ToggleGroup,\n ToggleGroupItem,\n createToggleGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { isValidElement, type MouseEvent, type ReactElement, type ReactNode } from \"react\";\nimport { IconCheckmark } from \"@purpur/icon/checkmark\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group-item.module.scss\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupItemProps = StylingProps & {\n [\"aria-label\"]?: string;\n [\"data-testid\"]?: string;\n children: ReactNode;\n /**\n * When `true`, prevents the user from interacting with the item.\n * */\n disabled?: boolean;\n /**\n * This prop will be passed automatically from the parent component (ChipGroup) when `type` is `\"filter\"`.\n * */\n showCheckmark?: boolean;\n /**\n * A unique value for the item.\n * */\n value: string;\n /**\n * This prop will only be used when `type` is `\"choice\"`.\n * When `true`, we recommend using `aria-label` to announce to screen readers that the option is unavailable.\n * */\n unavailable?: boolean;\n};\n\nconst cx = c.bind(styles);\nexport const rootClassName = \"purpur-chip-group-item\";\n\nexport const ChipGroupItem = ({\n [\"aria-label\"]: allyLabel,\n children,\n className,\n [\"data-testid\"]: dataTestId,\n disabled = false,\n showCheckmark = false,\n unavailable = false,\n value,\n ...props\n}: ChipGroupItemProps) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--disabled`]: disabled,\n [`${rootClassName}--unavailable`]: unavailable,\n },\n className,\n ]);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n }\n };\n\n return (\n <RadixToggleGroup.Item\n aria-label={allyLabel}\n data-testid={dataTestId}\n className={`${classes} ${rootClassName}`}\n value={value}\n onClick={handleClick}\n aria-disabled={disabled}\n {...props}\n >\n {children}\n {showCheckmark && (\n <IconCheckmark\n size=\"sm\"\n className={cx(`${rootClassName}__checkmark-icon`)}\n data-testid=\"checkmark icon\"\n />\n )}\n {unavailable && (\n <span\n className={cx(`${rootClassName}__line-wrapper`)}\n data-testid=\"unavailable line wrapper\"\n />\n )}\n </RadixToggleGroup.Item>\n );\n};\n\nexport const isChipGroupItem = (child?: ReactNode): child is ReactElement<ChipGroupItemProps> =>\n isValidElement<ChipGroupItemProps>(child) && child?.type === ChipGroupItem;\n","import React, { Children, cloneElement, type ReactNode, useEffect, useId } from \"react\";\nimport { Heading, type HeadingTagType } from \"@purpur/heading\";\nimport * as RadixToggleGroup from \"@radix-ui/react-toggle-group\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./chip-group.module.scss\";\nimport { ChipGroupItem, isChipGroupItem } from \"./chip-group-item\";\n\ntype StylingProps = Pick<React.HTMLAttributes<HTMLElement>, \"style\" | \"className\">;\n\ntype ChipGroupProps = StylingProps & {\n [\"data-testid\"]?: string;\n /**\n * Will only render given ChipGroupItems.\n * */\n children: ReactNode;\n /**\n * Makes the chips span the full container width if set to `true`.\n * */\n fullWidth?: boolean;\n /**\n * Renders above the chip group as a heading.\n * */\n title?: ReactNode;\n /**\n * Allows to customise title.\n */\n titleProps?: TitlePropsType;\n /**\n * Optional name for form submission\n */\n name?: string;\n};\n\nexport type TitlePropsType = StylingProps & {\n /**\n * Use custom id for connecting title and chip group.\n */\n id?: string;\n /**\n * Changes heading level.\n * @default h2\n */\n tag?: HeadingTagType;\n};\n\nexport type ChipGroupChoiceProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"choice\";\n /**\n * The value of the pressed item(s).\n * */\n value: string;\n};\n\nexport type ChipGroupFilterProps = {\n /**\n * Event handler called when the pressed state of an item changes.\n * */\n onValueChange: (value: string[]) => void;\n /**\n * Determines whether a single (`\"choice\"`) or multiple (`\"filter\"`) items can be pressed at a time.\n * */\n type: \"filter\";\n /**\n * The value of the pressed item(s).\n * */\n value: string[];\n};\n\nconst isChoiceProps = (\n props: ChipGroupChoiceProps | ChipGroupFilterProps\n): props is ChipGroupChoiceProps => props.type === \"choice\";\n\ntype ChipGroupCmp<P> = React.FunctionComponent<P> & {\n Item: typeof ChipGroupItem;\n};\n\nconst MIN_CHOICE_OPTIONS = 2;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-chip-group\";\n\nexport const ChipGroup: ChipGroupCmp<\n ChipGroupProps & (ChipGroupChoiceProps | ChipGroupFilterProps)\n> = ({ children, className, fullWidth = false, title, titleProps, name, ...props }) => {\n const classes = cx([\n rootClassName,\n {\n [`${rootClassName}--full-width`]: fullWidth,\n },\n className,\n ]);\n\n const id = useId();\n\n const chipGroupItemChildren = Children.toArray(children).filter(isChipGroupItem);\n\n const clonedChildren = Children.map(chipGroupItemChildren, (child) =>\n cloneElement(child, {\n showCheckmark: props.type === \"filter\" && props.value.includes(child.props.value),\n unavailable: props.type === \"choice\" && child.props.unavailable,\n })\n );\n\n const handleValueChange = (value: string & string[]) => {\n if (props.type === \"filter\" || value !== \"\") {\n props.onValueChange(value);\n }\n };\n\n useEffect(() => {\n if (props.type === \"choice\" && clonedChildren.length < MIN_CHOICE_OPTIONS) {\n console.warn(\n `Minimum number of chips should be ${MIN_CHOICE_OPTIONS} when using the \"choice\" type`\n );\n }\n }, [clonedChildren, props.type]);\n\n const chipGroupChildren = () => {\n if (isChoiceProps(props)) {\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"single\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n }\n return (\n <RadixToggleGroup.Root\n className={classes}\n {...props}\n aria-labelledby={title ? `${titleProps?.id ?? id}-label` : undefined}\n onValueChange={handleValueChange}\n type=\"multiple\"\n >\n {clonedChildren}\n </RadixToggleGroup.Root>\n );\n };\n\n return (\n <div className={styles[`${rootClassName}--container`]}>\n {title && (\n <Heading\n tag=\"h2\"\n variant=\"subsection-100\"\n {...titleProps}\n id={`${titleProps?.id ?? id}-label`}\n >\n {title}\n </Heading>\n )}\n {chipGroupChildren()}\n {name && props.type === \"choice\" && <input type=\"hidden\" name={name} value={props.value} />}\n </div>\n );\n};\n\nChipGroup.Item = ChipGroupItem;\n\nChipGroup.displayName = \"ChipGroup\";\n"],"names":["NAME","Toggle","React","props","forwardedRef","pressedProp","defaultPressed","onPressedChange","buttonProps","pressed","setPressed","useControllableState","jsx","Primitive","composeEventHandlers","TOGGLE_GROUP_NAME","createToggleGroupContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","ToggleGroup","type","toggleGroupProps","ToggleGroupImplSingle","ToggleGroupImplMultiple","ToggleGroupValueProvider","useToggleGroupValueContext","valueProp","defaultValue","onValueChange","toggleGroupSingleProps","value","setValue","ToggleGroupImpl","toggleGroupMultipleProps","handleButtonActivate","itemValue","prevValue","handleButtonDeactivate","value2","ToggleGroupContext","useToggleGroupContext","__scopeToggleGroup","disabled","rovingFocus","orientation","dir","loop","rovingFocusGroupScope","direction","useDirection","commonProps","RovingFocusGroup.Root","ITEM_NAME","ToggleGroupItem","valueContext","context","ref","RovingFocusGroup.Item","ToggleGroupItemImpl","itemProps","singleProps","typeProps","Root2","Item2","cx","c","styles","rootClassName","ChipGroupItem","allyLabel","children","className","dataTestId","showCheckmark","unavailable","classes","handleClick","e","jsxs","RadixToggleGroup.Item","IconCheckmark","isChipGroupItem","child","isValidElement","isChoiceProps","MIN_CHOICE_OPTIONS","ChipGroup","fullWidth","title","titleProps","name","id","useId","chipGroupItemChildren","Children","clonedChildren","cloneElement","handleValueChange","useEffect","chipGroupChildren","RadixToggleGroup.Root","Heading"],"mappings":"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","x_google_ignoreList":[0,1]}
|
package/dist/chip-group.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chip-group-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chip-group-BLuG0MC6.js");exports.ChipGroup=e.ChipGroup;
|
|
2
2
|
//# sourceMappingURL=chip-group.cjs.js.map
|
package/dist/chip-group.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-dot-BEE5rKco.js","sources":["../../../components/color-dot/src/color-dot.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./color-dot.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-color-dot\";\n\nexport const STATIC_COLOR_DOT_SIZE = [\"xs\", \"sm\", \"md\", \"lg\"] as const;\nexport const BUTTON_COLOR_DOT_SIZE = STATIC_COLOR_DOT_SIZE.filter((size) => size !== \"xs\");\n\nexport type StaticColorDotSize = (typeof STATIC_COLOR_DOT_SIZE)[number];\nexport type ButtonColorDotSize = (typeof BUTTON_COLOR_DOT_SIZE)[number];\nexport type StaticColorDotProps = HTMLAttributes<HTMLDivElement> & {\n variant?: \"static\";\n isSelected?: never;\n size: StaticColorDotSize;\n};\n\nexport type ButtonColorDotProps = HTMLAttributes<HTMLButtonElement> & {\n variant?: \"button\";\n isSelected?: boolean;\n size: ButtonColorDotSize;\n};\n\nexport type ColorDotProps = {\n color: string;\n withBorder?: boolean;\n} & (StaticColorDotProps | ButtonColorDotProps);\n\nexport const ColorDot = ({ size, withBorder, variant = \"static\", ...props }: ColorDotProps) => {\n const className = cx(props.className, rootClassName, `${rootClassName}--${size}`, {\n [`${rootClassName}--with-border`]: withBorder,\n [`${rootClassName}--selected`]: props.isSelected,\n [`${rootClassName}--button`]: variant === \"button\",\n });\n\n props.className = className;\n props.style = {\n ...props.style,\n backgroundColor: props.color,\n };\n\n if (variant === \"button\") {\n return <button {...(props as ButtonColorDotProps)} />;\n }\n return <div {...(props as StaticColorDotProps)} />;\n};\n"],"names":["cx","c","styles","rootClassName","STATIC_COLOR_DOT_SIZE","BUTTON_COLOR_DOT_SIZE","size","ColorDot","withBorder","variant","props","className","jsx"],"mappings":"mjBAKMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,mBAETC,EAAwB,CAAC,KAAM,KAAM,KAAM,IAAI,EAC/CC,EAAwBD,EAAsB,OAAQE,GAASA,IAAS,IAAI,
|
|
1
|
+
{"version":3,"file":"color-dot-BEE5rKco.js","sources":["../../../components/color-dot/src/color-dot.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./color-dot.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-color-dot\";\n\nexport const STATIC_COLOR_DOT_SIZE = [\"xs\", \"sm\", \"md\", \"lg\"] as const;\nexport const BUTTON_COLOR_DOT_SIZE = STATIC_COLOR_DOT_SIZE.filter((size) => size !== \"xs\");\n\nexport type StaticColorDotSize = (typeof STATIC_COLOR_DOT_SIZE)[number];\nexport type ButtonColorDotSize = (typeof BUTTON_COLOR_DOT_SIZE)[number];\nexport type StaticColorDotProps = HTMLAttributes<HTMLDivElement> & {\n variant?: \"static\";\n isSelected?: never;\n size: StaticColorDotSize;\n};\n\nexport type ButtonColorDotProps = Omit<HTMLAttributes<HTMLButtonElement>, \"aria-label\"> & {\n variant?: \"button\";\n isSelected?: boolean;\n size: ButtonColorDotSize;\n // Required since the button has no visible text content\n [\"aria-label\"]: string;\n};\n\nexport type ColorDotProps = {\n color: string;\n withBorder?: boolean;\n} & (StaticColorDotProps | ButtonColorDotProps);\n\nexport const ColorDot = ({ size, withBorder, variant = \"static\", ...props }: ColorDotProps) => {\n const className = cx(props.className, rootClassName, `${rootClassName}--${size}`, {\n [`${rootClassName}--with-border`]: withBorder,\n [`${rootClassName}--selected`]: props.isSelected,\n [`${rootClassName}--button`]: variant === \"button\",\n });\n\n props.className = className;\n props.style = {\n ...props.style,\n backgroundColor: props.color,\n };\n\n if (variant === \"button\") {\n return <button {...(props as ButtonColorDotProps)} />;\n }\n return <div {...(props as StaticColorDotProps)} />;\n};\n"],"names":["cx","c","styles","rootClassName","STATIC_COLOR_DOT_SIZE","BUTTON_COLOR_DOT_SIZE","size","ColorDot","withBorder","variant","props","className","jsx"],"mappings":"mjBAKMA,EAAKC,EAAAA,EAAE,KAAKC,CAAM,EAClBC,EAAgB,mBAETC,EAAwB,CAAC,KAAM,KAAM,KAAM,IAAI,EAC/CC,EAAwBD,EAAsB,OAAQE,GAASA,IAAS,IAAI,EAuB5EC,EAAW,CAAC,CAAE,KAAAD,EAAM,WAAAE,EAAY,QAAAC,EAAU,SAAU,GAAGC,KAA2B,CAC7F,MAAMC,EAAYX,EAAGU,EAAM,UAAWP,EAAe,GAAGA,CAAa,KAAKG,CAAI,GAAI,CAChF,CAAC,GAAGH,CAAa,eAAe,EAAGK,EACnC,CAAC,GAAGL,CAAa,YAAY,EAAGO,EAAM,WACtC,CAAC,GAAGP,CAAa,UAAU,EAAGM,IAAY,QAAA,CAC3C,EAQD,OANAC,EAAM,UAAYC,EAClBD,EAAM,MAAQ,CACZ,GAAGA,EAAM,MACT,gBAAiBA,EAAM,KAAA,EAGrBD,IAAY,SACPG,MAAC,SAAA,CAAQ,GAAIF,CAAA,CAA+B,EAE9CE,MAAC,MAAA,CAAK,GAAIF,CAAA,CAA+B,CAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-dot-Dz9yzVX3.mjs","sources":["../../../components/color-dot/src/color-dot.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./color-dot.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-color-dot\";\n\nexport const STATIC_COLOR_DOT_SIZE = [\"xs\", \"sm\", \"md\", \"lg\"] as const;\nexport const BUTTON_COLOR_DOT_SIZE = STATIC_COLOR_DOT_SIZE.filter((size) => size !== \"xs\");\n\nexport type StaticColorDotSize = (typeof STATIC_COLOR_DOT_SIZE)[number];\nexport type ButtonColorDotSize = (typeof BUTTON_COLOR_DOT_SIZE)[number];\nexport type StaticColorDotProps = HTMLAttributes<HTMLDivElement> & {\n variant?: \"static\";\n isSelected?: never;\n size: StaticColorDotSize;\n};\n\nexport type ButtonColorDotProps = HTMLAttributes<HTMLButtonElement> & {\n variant?: \"button\";\n isSelected?: boolean;\n size: ButtonColorDotSize;\n};\n\nexport type ColorDotProps = {\n color: string;\n withBorder?: boolean;\n} & (StaticColorDotProps | ButtonColorDotProps);\n\nexport const ColorDot = ({ size, withBorder, variant = \"static\", ...props }: ColorDotProps) => {\n const className = cx(props.className, rootClassName, `${rootClassName}--${size}`, {\n [`${rootClassName}--with-border`]: withBorder,\n [`${rootClassName}--selected`]: props.isSelected,\n [`${rootClassName}--button`]: variant === \"button\",\n });\n\n props.className = className;\n props.style = {\n ...props.style,\n backgroundColor: props.color,\n };\n\n if (variant === \"button\") {\n return <button {...(props as ButtonColorDotProps)} />;\n }\n return <div {...(props as StaticColorDotProps)} />;\n};\n"],"names":["cx","c","styles","rootClassName","STATIC_COLOR_DOT_SIZE","BUTTON_COLOR_DOT_SIZE","size","ColorDot","withBorder","variant","props","className","jsx"],"mappings":";;;;;;;;;;;GAKMA,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,oBAETC,IAAwB,CAAC,MAAM,MAAM,MAAM,IAAI,GAC/CC,IAAwBD,EAAsB,OAAO,CAACE,MAASA,MAAS,IAAI,
|
|
1
|
+
{"version":3,"file":"color-dot-Dz9yzVX3.mjs","sources":["../../../components/color-dot/src/color-dot.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./color-dot.module.scss\";\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-color-dot\";\n\nexport const STATIC_COLOR_DOT_SIZE = [\"xs\", \"sm\", \"md\", \"lg\"] as const;\nexport const BUTTON_COLOR_DOT_SIZE = STATIC_COLOR_DOT_SIZE.filter((size) => size !== \"xs\");\n\nexport type StaticColorDotSize = (typeof STATIC_COLOR_DOT_SIZE)[number];\nexport type ButtonColorDotSize = (typeof BUTTON_COLOR_DOT_SIZE)[number];\nexport type StaticColorDotProps = HTMLAttributes<HTMLDivElement> & {\n variant?: \"static\";\n isSelected?: never;\n size: StaticColorDotSize;\n};\n\nexport type ButtonColorDotProps = Omit<HTMLAttributes<HTMLButtonElement>, \"aria-label\"> & {\n variant?: \"button\";\n isSelected?: boolean;\n size: ButtonColorDotSize;\n // Required since the button has no visible text content\n [\"aria-label\"]: string;\n};\n\nexport type ColorDotProps = {\n color: string;\n withBorder?: boolean;\n} & (StaticColorDotProps | ButtonColorDotProps);\n\nexport const ColorDot = ({ size, withBorder, variant = \"static\", ...props }: ColorDotProps) => {\n const className = cx(props.className, rootClassName, `${rootClassName}--${size}`, {\n [`${rootClassName}--with-border`]: withBorder,\n [`${rootClassName}--selected`]: props.isSelected,\n [`${rootClassName}--button`]: variant === \"button\",\n });\n\n props.className = className;\n props.style = {\n ...props.style,\n backgroundColor: props.color,\n };\n\n if (variant === \"button\") {\n return <button {...(props as ButtonColorDotProps)} />;\n }\n return <div {...(props as StaticColorDotProps)} />;\n};\n"],"names":["cx","c","styles","rootClassName","STATIC_COLOR_DOT_SIZE","BUTTON_COLOR_DOT_SIZE","size","ColorDot","withBorder","variant","props","className","jsx"],"mappings":";;;;;;;;;;;GAKMA,IAAKC,EAAE,KAAKC,CAAM,GAClBC,IAAgB,oBAETC,IAAwB,CAAC,MAAM,MAAM,MAAM,IAAI,GAC/CC,IAAwBD,EAAsB,OAAO,CAACE,MAASA,MAAS,IAAI,GAuB5EC,IAAW,CAAC,EAAE,MAAAD,GAAM,YAAAE,GAAY,SAAAC,IAAU,UAAU,GAAGC,QAA2B;AAC7F,QAAMC,IAAYX,EAAGU,EAAM,WAAWP,GAAe,GAAGA,CAAa,KAAKG,CAAI,IAAI;AAAA,IAChF,CAAC,GAAGH,CAAa,eAAe,GAAGK;AAAA,IACnC,CAAC,GAAGL,CAAa,YAAY,GAAGO,EAAM;AAAA,IACtC,CAAC,GAAGP,CAAa,UAAU,GAAGM,MAAY;AAAA,EAAA,CAC3C;AAQD,SANAC,EAAM,YAAYC,GAClBD,EAAM,QAAQ;AAAA,IACZ,GAAGA,EAAM;AAAA,IACT,iBAAiBA,EAAM;AAAA,EAAA,GAGrBD,MAAY,WACP,gBAAAG,EAAC,UAAA,EAAQ,GAAIF,EAAA,CAA+B,IAE9C,gBAAAE,EAAC,OAAA,EAAK,GAAIF,EAAA,CAA+B;AAClD;"}
|