q2-tecton-elements 1.66.2 → 1.67.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle-report.json +3106 -2970
- package/dist/cjs/action-sheet-D71RSc-w.js.map +1 -1
- package/dist/cjs/click-elsewhere.q2-option-list.q2-popover.entry.cjs.js.map +1 -0
- package/dist/cjs/{q2-option-list_2.cjs.entry.js → click-elsewhere_3.cjs.entry.js} +168 -20
- package/dist/cjs/click-elsewhere_3.cjs.entry.js.map +1 -0
- package/dist/cjs/{index-DyAq0y0v.js → index-YvKoRT-t.js} +61 -21
- package/dist/cjs/index-YvKoRT-t.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group_2.cjs.entry.js +3 -3
- package/dist/cjs/q2-action-sheet.cjs.entry.js +3 -3
- package/dist/cjs/q2-avatar.cjs.entry.js +33 -2
- package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-avatar.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-badge.cjs.entry.js +1 -1
- package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-btn_2.cjs.entry.js +22 -8
- package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +3 -3
- package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-card-image.cjs.entry.js +3 -3
- package/dist/cjs/q2-card.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +4 -4
- package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel-pane.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-carousel.cjs.entry.js +67 -42
- package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js +4 -2
- package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-area.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-chart-bar.cjs.entry.js +4 -2
- package/dist/cjs/q2-chart-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-bar.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-chart-donut.cjs.entry.js +7 -3
- package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-donut.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +3 -3
- package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-checkbox.q2-tag.entry.cjs.js.map +1 -0
- package/dist/cjs/q2-checkbox_2.cjs.entry.js +322 -0
- package/dist/cjs/q2-checkbox_2.cjs.entry.js.map +1 -0
- package/dist/cjs/q2-context.cjs.entry.js +2 -2
- package/dist/cjs/q2-currency.cjs.entry.js +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +13 -16
- package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-detail.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +2 -2
- package/dist/cjs/q2-editable-field.cjs.entry.js +2 -2
- package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-example.cjs.entry.js +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-form.cjs.entry.js +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
- package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
- package/dist/cjs/q2-grid.cjs.entry.js +1 -1
- package/dist/cjs/q2-icon.cjs.entry.js +11 -1
- package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-icon.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-input.cjs.entry.js +2 -2
- package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-input.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-item.cjs.entry.js +3 -3
- package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-legend.cjs.entry.js +2 -2
- package/dist/cjs/q2-legend.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-legend.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-link.q2-list.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-link_2.cjs.entry.js +14 -6
- package/dist/cjs/q2-link_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-loc.cjs.entry.js +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +3 -3
- package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-message.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-meter.cjs.entry.js +2 -2
- package/dist/cjs/q2-modal.cjs.entry.js +4 -21
- package/dist/cjs/q2-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
- package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
- package/dist/cjs/q2-option.cjs.entry.js +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +12 -7
- package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pagination.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-pill.cjs.entry.js +3 -3
- package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pill.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js +3 -3
- package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio-group.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +3 -3
- package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
- package/dist/cjs/q2-section.cjs.entry.js +3 -3
- package/dist/cjs/q2-select.cjs.entry.js +22 -8
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +7 -6
- package/dist/cjs/q2-stepper-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +16 -8
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-vertical.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-stepper.cjs.entry.js +7 -4
- package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-tab-container.cjs.entry.js +3 -3
- package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tab-container.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +3 -3
- package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-toast.cjs.entry.js +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +33 -3
- package/dist/cjs/q2-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tooltip.entry.cjs.js.map +1 -1
- package/dist/cjs/{sanitize-html-string-C2iwHNz5.js → sanitize-html-string-CW6y5624.js} +27 -17
- package/dist/cjs/sanitize-html-string-CW6y5624.js.map +1 -0
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/__mocks__/echarts.js +12 -0
- package/dist/collection/__mocks__/echarts.js.map +1 -0
- package/dist/collection/collection-manifest.json +3 -3
- package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.css +84 -89
- package/dist/collection/components/q2-avatar/q2-avatar.js +35 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
- package/dist/collection/components/q2-btn/q2-btn.css +10 -3
- package/dist/collection/components/q2-btn/q2-btn.js +42 -6
- package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.css +4 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
- package/dist/collection/components/q2-card-image/q2-card-image.js +2 -2
- package/dist/collection/components/q2-carousel/q2-carousel.css +143 -13
- package/dist/collection/components/q2-carousel/q2-carousel.js +90 -42
- package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +2 -11
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +18 -16
- package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +8 -6
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +4 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +30 -26
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.css +4 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.js +38 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +1 -1
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +1 -1
- package/dist/collection/components/q2-context/q2-context.js +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js +1 -1
- package/dist/collection/components/q2-data-table/q2-data-table.css +14 -0
- package/dist/collection/components/q2-data-table/q2-data-table.js +47 -50
- package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +1 -1
- package/dist/collection/components/q2-editable-field/q2-editable-field.js +2 -2
- package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.js +9 -9
- package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
- package/dist/collection/components/q2-form/q2-form.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-grid/q2-grid.js +1 -1
- package/dist/collection/components/q2-grid-area/q2-grid-area.js +1 -1
- package/dist/collection/components/q2-icon/assets/brand.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/browsersos.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/cards.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/communication.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/currencies.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/devices.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/filetypes.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/gestures.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/icon-list.json +1 -1
- package/dist/collection/components/q2-icon/assets/icon-map.json +1 -1
- package/dist/collection/components/q2-icon/assets/legacy.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/mobile.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/assets/status.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/q2-icon.js +8 -0
- package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input.js +42 -42
- package/dist/collection/components/q2-input/q2-input.js.map +1 -1
- package/dist/collection/components/q2-item/q2-item.css +4 -0
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.css +3 -0
- package/dist/collection/components/q2-legend/q2-legend.js +36 -36
- package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
- package/dist/collection/components/q2-link/q2-link.css +5 -2
- package/dist/collection/components/q2-link/q2-link.js +33 -3
- package/dist/collection/components/q2-link/q2-link.js.map +1 -1
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-message/q2-message.css +19 -16
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-message/q2-message.js.map +1 -1
- package/dist/collection/components/q2-meter/q2-meter.js +1 -1
- package/dist/collection/components/q2-modal/q2-modal.css +3 -3
- package/dist/collection/components/q2-modal/q2-modal.js +1 -94
- package/dist/collection/components/q2-modal/q2-modal.js.map +1 -1
- package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js +13 -13
- package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
- package/dist/collection/components/q2-pagination/q2-pagination.js +15 -10
- package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
- package/dist/collection/components/q2-pill/q2-pill.css +9 -0
- package/dist/collection/components/q2-pill/q2-pill.js +13 -13
- package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
- package/dist/collection/components/q2-popover/q2-popover.css +66 -1
- package/dist/collection/components/q2-popover/q2-popover.js +94 -14
- package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
- package/dist/collection/components/q2-radio/q2-radio.css +4 -3
- package/dist/collection/components/q2-radio/q2-radio.js +1 -1
- package/dist/collection/components/q2-radio-group/q2-radio-group.css +1 -1
- package/dist/collection/components/q2-radio-group/q2-radio-group.js +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-select/q2-select.js +23 -7
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.css +9 -2
- package/dist/collection/components/q2-stepper/q2-stepper.js +5 -2
- package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +52 -30
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +11 -2
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +20 -6
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.css +7 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.css +3 -0
- package/dist/collection/components/q2-tag/q2-tag.js +1 -1
- package/dist/collection/components/q2-textarea/q2-textarea.css +1 -0
- package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
- package/dist/collection/components/q2-tooltip/q2-tooltip.css +1 -1
- package/dist/collection/components/q2-tooltip/q2-tooltip.js +34 -1
- package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/index.js +1 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/utils/action-sheet.js.map +1 -1
- package/dist/collection/utils/index.js +59 -19
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/components/action-sheet.js.map +1 -1
- package/dist/components/index2.js +59 -19
- package/dist/components/index2.js.map +1 -1
- package/dist/components/q2-action-group2.js +1 -1
- package/dist/components/q2-action-sheet.js +1 -1
- package/dist/components/q2-avatar2.js +34 -2
- package/dist/components/q2-avatar2.js.map +1 -1
- package/dist/components/q2-btn2.js +22 -7
- package/dist/components/q2-btn2.js.map +1 -1
- package/dist/components/q2-calendar.js +2 -2
- package/dist/components/q2-calendar.js.map +1 -1
- package/dist/components/q2-card-image.js +2 -2
- package/dist/components/q2-carousel-pane.js +3 -3
- package/dist/components/q2-carousel-pane.js.map +1 -1
- package/dist/components/q2-carousel.js +69 -55
- package/dist/components/q2-carousel.js.map +1 -1
- package/dist/components/q2-chart-area.js +3 -1
- package/dist/components/q2-chart-area.js.map +1 -1
- package/dist/components/q2-chart-bar.js +3 -1
- package/dist/components/q2-chart-bar.js.map +1 -1
- package/dist/components/q2-chart-donut.js +6 -2
- package/dist/components/q2-chart-donut.js.map +1 -1
- package/dist/components/q2-checkbox-group.js +2 -2
- package/dist/components/q2-checkbox-group.js.map +1 -1
- package/dist/components/q2-checkbox2.js +13 -2
- package/dist/components/q2-checkbox2.js.map +1 -1
- package/dist/components/q2-context.js +1 -1
- package/dist/components/q2-currency.js +1 -1
- package/dist/components/q2-data-table.js +46 -25
- package/dist/components/q2-data-table.js.map +1 -1
- package/dist/components/q2-detail.js +1 -1
- package/dist/components/q2-dropdown.js +1 -1
- package/dist/components/q2-editable-field.js +1 -1
- package/dist/components/q2-editable-field.js.map +1 -1
- package/dist/components/q2-example.js +1 -1
- package/dist/components/q2-file-picker.js.map +1 -1
- package/dist/components/q2-form.js +1 -1
- package/dist/components/q2-formatted-text.js +1 -1
- package/dist/components/q2-grid-area.js +1 -1
- package/dist/components/q2-grid.js +1 -1
- package/dist/components/q2-icon2.js +10 -0
- package/dist/components/q2-icon2.js.map +1 -1
- package/dist/components/q2-input2.js +1 -1
- package/dist/components/q2-input2.js.map +1 -1
- package/dist/components/q2-item2.js +2 -2
- package/dist/components/q2-item2.js.map +1 -1
- package/dist/components/q2-legend2.js +2 -2
- package/dist/components/q2-legend2.js.map +1 -1
- package/dist/components/q2-link2.js +13 -4
- package/dist/components/q2-link2.js.map +1 -1
- package/dist/components/q2-list2.js +1 -1
- package/dist/components/q2-message2.js +2 -2
- package/dist/components/q2-message2.js.map +1 -1
- package/dist/components/q2-meter.js +1 -1
- package/dist/components/q2-modal.js +2 -23
- package/dist/components/q2-modal.js.map +1 -1
- package/dist/components/q2-month-picker.js +2 -2
- package/dist/components/q2-mutation-observer.js +1 -1
- package/dist/components/q2-optgroup2.js +1 -1
- package/dist/components/q2-option-list2.js +1 -1
- package/dist/components/q2-option-list2.js.map +1 -1
- package/dist/components/q2-pagination.js +11 -6
- package/dist/components/q2-pagination.js.map +1 -1
- package/dist/components/q2-pill.js +2 -2
- package/dist/components/q2-pill.js.map +1 -1
- package/dist/components/q2-popover2.js +76 -15
- package/dist/components/q2-popover2.js.map +1 -1
- package/dist/components/q2-radio-group.js +2 -2
- package/dist/components/q2-radio-group.js.map +1 -1
- package/dist/components/q2-radio.js +2 -2
- package/dist/components/q2-radio.js.map +1 -1
- package/dist/components/q2-relative-time.js +1 -1
- package/dist/components/q2-resize-observer2.js +1 -1
- package/dist/components/q2-section.js +2 -2
- package/dist/components/q2-select2.js +23 -8
- package/dist/components/q2-select2.js.map +1 -1
- package/dist/components/q2-stepper-pane.js +9 -6
- package/dist/components/q2-stepper-pane.js.map +1 -1
- package/dist/components/q2-stepper-vertical.js +16 -8
- package/dist/components/q2-stepper-vertical.js.map +1 -1
- package/dist/components/q2-stepper.js +6 -3
- package/dist/components/q2-stepper.js.map +1 -1
- package/dist/components/q2-tab-container.js +2 -2
- package/dist/components/q2-tab-container.js.map +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tag.js +1 -257
- package/dist/components/q2-tag.js.map +1 -1
- package/dist/{esm/q2-tag.entry.js → components/q2-tag2.js} +68 -15
- package/dist/components/q2-tag2.js.map +1 -0
- package/dist/components/q2-textarea.js +2 -2
- package/dist/components/q2-textarea.js.map +1 -1
- package/dist/components/q2-tooltip2.js +35 -3
- package/dist/components/q2-tooltip2.js.map +1 -1
- package/dist/components/sanitize-html-string.js +25 -15
- package/dist/components/sanitize-html-string.js.map +1 -1
- package/dist/components/tecton-tab-pane.js +2 -2
- package/dist/esm/action-sheet-B7adb3xs.js.map +1 -1
- package/dist/esm/click-elsewhere.q2-option-list.q2-popover.entry.js.map +1 -0
- package/dist/esm/{q2-option-list_2.entry.js → click-elsewhere_3.entry.js} +169 -22
- package/dist/esm/click-elsewhere_3.entry.js.map +1 -0
- package/dist/esm/{index-B4WYBDS9.js → index-C4PILj1_.js} +61 -21
- package/dist/esm/index-C4PILj1_.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group_2.entry.js +3 -3
- package/dist/esm/q2-action-sheet.entry.js +3 -3
- package/dist/esm/q2-avatar.entry.js +33 -2
- package/dist/esm/q2-avatar.entry.js.map +1 -1
- package/dist/esm/q2-badge.entry.js +1 -1
- package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
- package/dist/esm/q2-btn_2.entry.js +22 -8
- package/dist/esm/q2-btn_2.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +3 -3
- package/dist/esm/q2-calendar.entry.js.map +1 -1
- package/dist/esm/q2-card-image.entry.js +3 -3
- package/dist/esm/q2-card.entry.js +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +4 -4
- package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
- package/dist/esm/q2-carousel.entry.js +67 -42
- package/dist/esm/q2-carousel.entry.js.map +1 -1
- package/dist/esm/q2-chart-area.entry.js +4 -2
- package/dist/esm/q2-chart-area.entry.js.map +1 -1
- package/dist/esm/q2-chart-bar.entry.js +4 -2
- package/dist/esm/q2-chart-bar.entry.js.map +1 -1
- package/dist/esm/q2-chart-donut.entry.js +7 -3
- package/dist/esm/q2-chart-donut.entry.js.map +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +3 -3
- package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
- package/dist/esm/q2-checkbox.q2-tag.entry.js.map +1 -0
- package/dist/esm/q2-checkbox_2.entry.js +319 -0
- package/dist/esm/q2-checkbox_2.entry.js.map +1 -0
- package/dist/esm/q2-context.entry.js +2 -2
- package/dist/esm/q2-currency.entry.js +1 -1
- package/dist/esm/q2-data-table.entry.js +13 -16
- package/dist/esm/q2-data-table.entry.js.map +1 -1
- package/dist/esm/q2-detail.entry.js +2 -2
- package/dist/esm/q2-dropdown-item.entry.js +1 -1
- package/dist/esm/q2-dropdown.entry.js +2 -2
- package/dist/esm/q2-editable-field.entry.js +2 -2
- package/dist/esm/q2-editable-field.entry.js.map +1 -1
- package/dist/esm/q2-example.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js.map +1 -1
- package/dist/esm/q2-form.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-grid-area.entry.js +1 -1
- package/dist/esm/q2-grid.entry.js +1 -1
- package/dist/esm/q2-icon.entry.js +11 -1
- package/dist/esm/q2-icon.entry.js.map +1 -1
- package/dist/esm/q2-input.entry.js +2 -2
- package/dist/esm/q2-input.entry.js.map +1 -1
- package/dist/esm/q2-item.entry.js +3 -3
- package/dist/esm/q2-item.entry.js.map +1 -1
- package/dist/esm/q2-legend.entry.js +2 -2
- package/dist/esm/q2-legend.entry.js.map +1 -1
- package/dist/esm/q2-link.q2-list.entry.js.map +1 -1
- package/dist/esm/q2-link_2.entry.js +14 -6
- package/dist/esm/q2-link_2.entry.js.map +1 -1
- package/dist/esm/q2-loc.entry.js +1 -1
- package/dist/esm/q2-message.entry.js +3 -3
- package/dist/esm/q2-message.entry.js.map +1 -1
- package/dist/esm/q2-meter.entry.js +2 -2
- package/dist/esm/q2-modal.entry.js +4 -21
- package/dist/esm/q2-modal.entry.js.map +1 -1
- package/dist/esm/q2-month-picker.entry.js +3 -3
- package/dist/esm/q2-mutation-observer.entry.js +1 -1
- package/dist/esm/q2-optgroup.entry.js +2 -2
- package/dist/esm/q2-option.entry.js +1 -1
- package/dist/esm/q2-pagination.entry.js +12 -7
- package/dist/esm/q2-pagination.entry.js.map +1 -1
- package/dist/esm/q2-pill.entry.js +3 -3
- package/dist/esm/q2-pill.entry.js.map +1 -1
- package/dist/esm/q2-radio-group.entry.js +3 -3
- package/dist/esm/q2-radio-group.entry.js.map +1 -1
- package/dist/esm/q2-radio.entry.js +3 -3
- package/dist/esm/q2-radio.entry.js.map +1 -1
- package/dist/esm/q2-relative-time.entry.js +2 -2
- package/dist/esm/q2-section.entry.js +3 -3
- package/dist/esm/q2-select.entry.js +22 -8
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +7 -6
- package/dist/esm/q2-stepper-pane.entry.js.map +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +16 -8
- package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
- package/dist/esm/q2-stepper.entry.js +7 -4
- package/dist/esm/q2-stepper.entry.js.map +1 -1
- package/dist/esm/q2-tab-container.entry.js +3 -3
- package/dist/esm/q2-tab-container.entry.js.map +1 -1
- package/dist/esm/q2-tab-pane.entry.js +1 -1
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +3 -3
- package/dist/esm/q2-textarea.entry.js.map +1 -1
- package/dist/esm/q2-toast.entry.js +1 -1
- package/dist/esm/q2-tooltip.entry.js +33 -3
- package/dist/esm/q2-tooltip.entry.js.map +1 -1
- package/dist/esm/{sanitize-html-string-BPwFpYg-.js → sanitize-html-string-B35VmRc9.js} +27 -17
- package/dist/esm/sanitize-html-string-B35VmRc9.js.map +1 -0
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/action-sheet-B7adb3xs.js.map +1 -1
- package/dist/q2-tecton-elements/assets/brand.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/browsersos.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/cards.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/communication.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/currencies.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/devices.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/filetypes.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/gestures.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/icon-list.json +1 -1
- package/dist/q2-tecton-elements/assets/icon-map.json +1 -1
- package/dist/q2-tecton-elements/assets/legacy.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/mobile.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
- package/dist/q2-tecton-elements/assets/status.symbol.svg +1 -1
- package/dist/q2-tecton-elements/click-elsewhere.q2-option-list.q2-popover.entry.esm.js.map +1 -0
- package/dist/q2-tecton-elements/{q2-option-list_2.entry.js → click-elsewhere_3.entry.js} +357 -224
- package/dist/q2-tecton-elements/click-elsewhere_3.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{index-B4WYBDS9.js → index-C4PILj1_.js} +53 -14
- package/dist/q2-tecton-elements/index-C4PILj1_.js.map +1 -0
- package/dist/q2-tecton-elements/q2-action-group_2.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +10 -10
- package/dist/q2-tecton-elements/q2-avatar.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-avatar.entry.js +68 -30
- package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-badge.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-btn.q2-loading.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-btn_2.entry.js +30 -21
- package/dist/q2-tecton-elements/q2-btn_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-card-image.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +17 -17
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-carousel.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-carousel.entry.js +269 -242
- package/dist/q2-tecton-elements/q2-carousel.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +6 -5
- package/dist/q2-tecton-elements/q2-chart-area.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-bar.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +4 -3
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-donut.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +13 -11
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-checkbox.q2-tag.entry.esm.js.map +1 -0
- package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +482 -0
- package/dist/q2-tecton-elements/q2-checkbox_2.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-context.entry.js +16 -16
- package/dist/q2-tecton-elements/q2-currency.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-data-table.entry.js +26 -28
- package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +79 -79
- package/dist/q2-tecton-elements/q2-editable-field.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-form.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-grid-area.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-grid.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-icon.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-icon.entry.js +122 -111
- package/dist/q2-tecton-elements/q2-icon.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-input.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-input.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-input.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-item.entry.js +40 -40
- package/dist/q2-tecton-elements/q2-item.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-legend.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-legend.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-legend.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-link.q2-list.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-link_2.entry.js +24 -18
- package/dist/q2-tecton-elements/q2-link_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-message.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-message.entry.js +29 -25
- package/dist/q2-tecton-elements/q2-message.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-meter.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-modal.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-modal.entry.js +65 -79
- package/dist/q2-tecton-elements/q2-modal.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +30 -30
- package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-pagination.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-pagination.entry.js +43 -32
- package/dist/q2-tecton-elements/q2-pagination.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-pill.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-pill.entry.js +40 -40
- package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-radio-group.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-radio.entry.js +23 -23
- package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-section.entry.js +12 -12
- package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-select.entry.js +21 -8
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +16 -15
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +73 -67
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper.entry.js +38 -36
- package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tab-container.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tab-container.entry.js +19 -19
- package/dist/q2-tecton-elements/q2-tab-container.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tab-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +41 -5
- package/dist/q2-tecton-elements/q2-tooltip.entry.js.map +1 -1
- package/dist/q2-tecton-elements/{sanitize-html-string-BPwFpYg-.js → sanitize-html-string-B35VmRc9.js} +118 -109
- package/dist/q2-tecton-elements/sanitize-html-string-B35VmRc9.js.map +1 -0
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
- package/dist/scripts/docs-generator/index.js +1 -1
- package/dist/scripts/docs-generator/index.js.map +1 -1
- package/dist/types/__mocks__/echarts.d.ts +16 -0
- package/dist/types/components/q2-avatar/q2-avatar.d.ts +9 -0
- package/dist/types/components/q2-btn/q2-btn.d.ts +6 -0
- package/dist/types/components/q2-calendar/q2-calendar-helpers.d.ts +3 -3
- package/dist/types/components/q2-calendar/q2-calendar-types.d.ts +2 -2
- package/dist/types/components/q2-calendar/q2-calendar-validation.d.ts +5 -5
- package/dist/types/components/q2-calendar/q2-calendar.d.ts +8 -8
- package/dist/types/components/q2-carousel/q2-carousel.d.ts +6 -0
- package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +4 -4
- package/dist/types/components/q2-chart-bar/q2-chart-bar.d.ts +3 -3
- package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +9 -9
- package/dist/types/components/q2-checkbox/q2-checkbox.d.ts +11 -0
- package/dist/types/components/q2-data-table/q2-data-table.d.ts +8 -41
- package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +4 -4
- package/dist/types/components/q2-file-picker/q2-file-picker.d.ts +1 -13
- package/dist/types/components/q2-input/formatting/alpha.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/alphanumeric.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/cif.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/clabe.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/credit-card.d.ts +2 -2
- package/dist/types/components/q2-input/formatting/currency.d.ts +2 -2
- package/dist/types/components/q2-input/formatting/generic.d.ts +2 -2
- package/dist/types/components/q2-input/formatting/iban.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/number.d.ts +3 -2
- package/dist/types/components/q2-input/formatting/numeric.d.ts +2 -2
- package/dist/types/components/q2-input/formatting/phone.d.ts +2 -2
- package/dist/types/components/q2-input/formatting/postal.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/routingnumber.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/ssn.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/swift.d.ts +1 -1
- package/dist/types/components/q2-input/formatting/tin.d.ts +1 -1
- package/dist/types/components/q2-input/q2-input-types.d.ts +2 -22
- package/dist/types/components/q2-input/q2-input.d.ts +16 -15
- package/dist/types/components/q2-legend/q2-legend.d.ts +11 -11
- package/dist/types/components/q2-link/q2-link.d.ts +6 -0
- package/dist/types/components/q2-modal/q2-modal.d.ts +0 -17
- package/dist/types/components/q2-option-list/q2-option-list.d.ts +4 -4
- package/dist/types/components/q2-pagination/q2-pagination.d.ts +2 -0
- package/dist/types/components/q2-pill/q2-pill.d.ts +5 -5
- package/dist/types/components/q2-popover/q2-popover.d.ts +8 -0
- package/dist/types/components/q2-select/q2-select.d.ts +9 -6
- package/dist/types/components/q2-stepper-pane/q2-stepper-pane.d.ts +8 -11
- package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +10 -7
- package/dist/types/components/q2-tooltip/q2-tooltip.d.ts +4 -0
- package/dist/types/components.d.ts +148 -118
- package/dist/types/global.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/utils/action-sheet.d.ts +5 -5
- package/dist/types/utils/index.d.ts +13 -0
- package/package.json +8 -9
- package/dist/cjs/click-elsewhere.cjs.entry.js +0 -97
- package/dist/cjs/click-elsewhere.cjs.entry.js.map +0 -1
- package/dist/cjs/click-elsewhere.entry.cjs.js.map +0 -1
- package/dist/cjs/index-DyAq0y0v.js.map +0 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +0 -110
- package/dist/cjs/q2-checkbox.cjs.entry.js.map +0 -1
- package/dist/cjs/q2-checkbox.entry.cjs.js.map +0 -1
- package/dist/cjs/q2-option-list.q2-popover.entry.cjs.js.map +0 -1
- package/dist/cjs/q2-option-list_2.cjs.entry.js.map +0 -1
- package/dist/cjs/q2-tag.cjs.entry.js +0 -211
- package/dist/cjs/q2-tag.cjs.entry.js.map +0 -1
- package/dist/cjs/q2-tag.entry.cjs.js.map +0 -1
- package/dist/cjs/sanitize-html-string-C2iwHNz5.js.map +0 -1
- package/dist/esm/click-elsewhere.entry.js +0 -95
- package/dist/esm/click-elsewhere.entry.js.map +0 -1
- package/dist/esm/index-B4WYBDS9.js.map +0 -1
- package/dist/esm/q2-checkbox.entry.js +0 -108
- package/dist/esm/q2-checkbox.entry.js.map +0 -1
- package/dist/esm/q2-option-list.q2-popover.entry.js.map +0 -1
- package/dist/esm/q2-option-list_2.entry.js.map +0 -1
- package/dist/esm/q2-tag.entry.js.map +0 -1
- package/dist/esm/sanitize-html-string-BPwFpYg-.js.map +0 -1
- package/dist/q2-tecton-elements/click-elsewhere.entry.esm.js.map +0 -1
- package/dist/q2-tecton-elements/click-elsewhere.entry.js +0 -94
- package/dist/q2-tecton-elements/click-elsewhere.entry.js.map +0 -1
- package/dist/q2-tecton-elements/index-B4WYBDS9.js.map +0 -1
- package/dist/q2-tecton-elements/q2-checkbox.entry.esm.js.map +0 -1
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +0 -228
- package/dist/q2-tecton-elements/q2-checkbox.entry.js.map +0 -1
- package/dist/q2-tecton-elements/q2-option-list.q2-popover.entry.esm.js.map +0 -1
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +0 -1
- package/dist/q2-tecton-elements/q2-tag.entry.esm.js.map +0 -1
- package/dist/q2-tecton-elements/q2-tag.entry.js +0 -256
- package/dist/q2-tecton-elements/q2-tag.entry.js.map +0 -1
- package/dist/q2-tecton-elements/sanitize-html-string-BPwFpYg-.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["q2PillCss","Q2Pill","constructor","hostRef","this","scheduledAfterRender","hasPopoverBottom","hasPopoverTop","selectedOptionElements","hoist","_a","window","Tecton","useActionSheets","popoverAlignment","popoverMinHeight","selectedOptions","clearSelectedOptions","value","active","open","primaryBtn","focus","mirrorEmit","values","push","resizeIframe","determineOptionCount","async","optionList","allOptions","getOptionListOptions","optionCount","length","numberOfOptions","hostElement","querySelectorAll","executeActionSheet","event","result","showActionSheetList","handleSelectionChanges","getOption","options","find","option","querySelector","getOptions","handleChange","stopPropagation","detail","handleClick","disabled","shouldShowActionSheet","popoverElement","toggle","label","isActive","display","handleFocusOut","relatedTarget","contains","handleKeydown","isTabMetaOrCtrl","metaKey","ctrlKey","key","preventDefault","hasSlot","handleOptionListExternalKeydown","handleExternalKeydown","changeDetails","multiple","onchange","undefined","selectedOption","handleWrapperClick","click","onClickElsewhere","target","localName","onMutationObserved","updateSlotState","updateSelectedOptionElements","onPopoverState","action","setOptionListActiveElement","index","setActiveElement","syncValueProperties","selectedOptionsChanged","valueChanged","selectedValues","map","filter","includes","popTopSlot","shadowRoot","popBottomSlot","topSlotHasNode","assignedNodes","bottomSlotHasNode","disconnectedCallback","mutationObserver","disconnect","componentWillLoad","observer","MutationObserver","observe","childList","attributes","componentDidLoad","overrideFocus","componentDidRender","forEach","fn","handleSelectedDisplay","delegateFocus","isEventFromElement","popoverStateHandler","closePopover","_togglePopover","openPopover","setValue","valueSet","Set","Array","isArray","waitForNextPaint","newValue","firstValue","_b","_oldValue","propName","valueProxy","labelProxy","buttonContent","loc","count","truncatedButtonContent","maxLength","substring","dispatchEvent","FocusEvent","renderHiddenElement","h","id","class","renderIcon","isButton","TagName","iconName","onClick","type","render","wrapperClassNames","onChange","join","ref","el","primaryBtnWrapper","tabIndex","role","onKeyDown","onFocusout","controlElement","popoverMaxHeight","minHeight","direction","popoverDirection","align","popoverTopContainer","tabindex","hidden","name","onReady","optionListLabel","popoverBottomContainer"],"sources":["src/components/q2-pill/q2-pill.scss?tag=q2-pill&encapsulation=shadow","src/components/q2-pill/q2-pill.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n position: relative;\n line-height: 0;\n}\n\n:host(:not(:last-child)) {\n margin-inline-end: var-list(var-prefixer(pill-margin), --app-scale-2x, 10px);\n}\n\nq2-popover,\n.btn-wrapper {\n --comp-pill-min-height: #{var-list(var-prefixer(pill-min-height), 44px)};\n --comp-pill-btn-height: #{var-list(var-prefixer(pill-btn-height), 30px)};\n}\n\n.popover-top-container {\n position: sticky;\n top: 0;\n z-index: 5;\n}\n\n.popover-bottom-container {\n position: sticky;\n bottom: 0;\n z-index: 5;\n}\n\n.btn-wrapper {\n --comp-pill-btn-border-width: #{var-list(var-prefixer(pill-btn-border-width), 2px)};\n --comp-close-size: 0px;\n --comp-btn-background: #{var-list(var-prefixer(pill-btn-background), --t-base, #ffffff)};\n --comp-btn-box-shadow: #{var-list(--tct-pill-btn-box-shadow, none)};\n --comp-btn-backdrop-filter: #{var-list(--tct-pill-btn-backdrop-filter, none)};\n --comp-hover-btn-background: #{var-list(var-prefixer(pill-hover-btn-background), --t-gray-13, #e6e6e6)};\n --comp-btn-padding: #{var-list(var-prefixer(pill-btn-padding-inline), --app-scale-3x, 15px)};\n --comp-btn-color: #{var-list(var-prefixer(pill-btn-color), --t-gray-3, #262626)};\n --comp-active-btn-color: #{var-list(--tct-pill-active-btn-color, --comp-btn-background)};\n --comp-active-btn-background: #{var-list(var-prefixer(pill-active-btn-background), --t-gray-7, #666666)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-active-btn-box-shadow, --tct-pill-btn-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-active-btn-backdrop-filter, none)};\n --comp-active-btn-border-color: #{var-list(var-prefixer(pill-active-btn-border-color), --t-gray-7, #666666)};\n --comp-hover-active-btn-background: #{var-list(var-prefixer(pill-active-btn-background), --t-gray-6, #4d4d4d)};\n --comp-hover-active-btn-border-color: #{var-list(var-prefixer(pill-active-btn-background), --t-gray-6, #4d4d4d)};\n\n position: relative;\n\n &.has-options,\n &.has-icon {\n --comp-close-size: var(--comp-pill-btn-height);\n }\n\n :host([active]:not([active='false'])) & {\n --comp-btn-color: #{var-list(var-prefixer(pill-active-btn-color), --t-base, #ffffff)};\n }\n\n :host([theme='primary']) & {\n --comp-active-btn-background: #{var-list(--tct-pill-primary-active-background, --t-primary, #0079c1)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-primary-active-btn-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-primary-active-backdrop-filter, none)};\n --comp-active-btn-color: #{var-list(--tct-pill-primary-active-font-color, --t-primary-text, #ffffff)};\n --comp-active-btn-border-color: #{var-list(--tct-pill-primary-active-border-color, --t-primary, #0079c1)};\n --comp-hover-active-btn-background: #{var-list(\n --tct-pill-primary-active-hover-background,\n --t-primary-l3,\n #21acff\n )};\n --comp-hover-active-btn-border-color: #{var-list(\n --tct-pill-primary-active-hover-border-color,\n --t-primary-l3,\n #21acff\n )};\n }\n\n :host([theme='secondary']) & {\n --comp-active-btn-background: #{var-list(--tct-pill-secondary-active-background, --t-secondary, #b3c2cc)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-secondary-active-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-secondary-active-backdrop-filter, none)};\n --comp-active-btn-color: #{var-list(--tct-pill-secondary-active-font-color, --t-secondary-text, #141414)};\n --comp-active-btn-border-color: #{var-list(--tct-pill-secondary-active-border-color, --t-secondary, #b3c2cc)};\n --comp-hover-active-btn-background: #{var-list(\n --tct-pill-secondary-active-hover-background,\n --t-secondary-l3,\n #c9d5db\n )};\n --comp-hover-active-btn-border-color: #{var-list(\n --tct-pill-secondary-active-hover-border-color,\n --t-secondary-l3,\n #c9d5db\n )};\n }\n\n :host([theme='tertiary']) & {\n --comp-active-btn-background: #{var-list(--tct-pill-tertiary-active-background, --t-tertiary, #e8f5fc)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-tertiary-active-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-tertiary-active-backdrop-filter, none)};\n --comp-active-btn-color: #{var-list(--tct-pill-tertiary-active-font-color, --t-tertiary-text, #141414)};\n --comp-active-btn-border-color: #{var-list(--tct-pill-tertiary-active-border-color, --t-tertiary, #e8f5fc)};\n --comp-hover-active-btn-background: #{var-list(\n --tct-pill-tertiary-active-hover-background,\n --t-tertiary-l3,\n #eff8fd\n )};\n --comp-hover-active-btn-border-color: #{var-list(\n --tct-pill-tertiary-active-hover-border-color,\n --t-tertiary-l3,\n #eff8fd\n )};\n }\n}\n\n.btn-height-wrapper {\n height: var(--comp-pill-min-height);\n display: flex;\n align-items: center;\n cursor: pointer;\n &:focus {\n box-shadow: none;\n }\n\n :host([disabled]) & {\n cursor: not-allowed;\n }\n}\n\n.btn-close,\n.btn-primary {\n cursor: pointer;\n height: var(--comp-pill-btn-height);\n border-style: solid;\n border-radius: var-list(var-prefixer(pill-btn-border-radius), 30px);\n transition-property: background, color, padding, width, opacity;\n transition: var-list(var-prefixer(pill-btn-tween), --app-tween-1, unquote('0.2s ease'));\n}\n\n.btn-close,\n.btn-primary,\nq2-icon {\n :host([disabled]) & {\n opacity: var-list(var-prefixer(pill-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n cursor: not-allowed;\n }\n}\n\n.btn-primary {\n background: var(--comp-btn-background);\n box-shadow: var(--comp-btn-box-shadow);\n backdrop-filter: var(--comp-btn-backdrop-filter);\n border-width: var-list(--comp-pill-btn-border-width);\n border-color: var-list(var-prefixer(pill-btn-border-color), --t-a11y-gray-color-AA, #949494);\n padding-inline: var(--comp-btn-padding);\n padding-right: calc(var(--comp-btn-padding) + var(--comp-close-size));\n font-size: var-list(var-prefixer(pill-btn-font-size), --app-font-size, 14px);\n font-weight: var-list(--tct-pill-btn-font-weight, 400);\n color: var(--comp-btn-color);\n display: block;\n width: 100%;\n text-align: start;\n\n &:focus {\n box-shadow: var-list(--tct-pill-btn-focus-box-shadow, --const-double-focus-ring);\n }\n\n &:hover {\n background: var(--comp-hover-btn-background);\n }\n\n .has-options &,\n .has-icon & {\n padding-right: calc(#{var-list(var-prefixer(pill-icon-gap), --app-scale-1x, 5px)} + var(--comp-close-size));\n }\n\n .has-options & {\n @include line-clamp(1);\n max-width: var-list(var-prefixer(pill-max-width), 200px);\n }\n\n :host([active]:not([active='false'])) & {\n background: var(--comp-active-btn-background);\n box-shadow: var(--comp-active-btn-box-shadow);\n backdrop-filter: var(--comp-active-btn-backdrop-filter);\n border-color: var(--comp-active-btn-border-color);\n color: var(--comp-active-btn-color);\n\n &:focus {\n box-shadow: var-list(--tct-pill-btn-focus-box-shadow, --const-double-focus-ring);\n }\n\n &:hover {\n background: var(--comp-hover-active-btn-background);\n border-color: var(--comp-hover-active-btn-border-color);\n }\n }\n}\n\n.btn-close {\n background: transparent;\n border-color: transparent;\n border-width: var(--comp-pill-btn-border-width);\n width: var(--comp-close-size);\n height: var(--comp-close-size);\n padding: 0;\n border: 0;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n opacity: 0;\n :host([active]:not([active='false'])) & {\n color: var(--comp-active-btn-color);\n }\n\n .has-options &,\n .has-icon & {\n opacity: 1;\n }\n}\n\nq2-icon {\n --tct-icon-stroke-primary: #{var-list(--tct-pill-icon-stroke, currentcolor)};\n --tct-icon-stroke-width: #{var-list(--tct-pill-icon-stroke-width, inherit)};\n width: var-list(var-prefixer(pill-icon-size), 14px);\n height: var-list(var-prefixer(pill-icon-size), 14px);\n transition-property: transform;\n transition: var-list(var-prefixer(pill-btn-tween), --app-tween-1, unquote('0.2s ease'));\n}\n\ndiv.btn-close {\n pointer-events: none;\n\n :host([open]) & q2-icon {\n transform: rotate(180deg);\n }\n}\n\nbutton.btn-close {\n :host([active]:not([active='false'])) & {\n &:focus,\n &:hover {\n background: var-list(var-prefixer(pill-hover-close-btn-background), --t-top-a1, rgba(13, 13, 13, 0.35));\n border-color: var-list(var-prefixer(pill-hover-close-btn-border-color), --t-top-a1, rgba(13, 13, 13, 0.35));\n }\n }\n}\n\nq2-popover {\n top: calc(var(--comp-pill-min-height) - calc(calc(var(--comp-pill-min-height) - var(--comp-pill-btn-height)) / 2));\n}\n\n:host([borderless]:not([borderless='false'])) {\n button {\n border-style: none;\n }\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Listen,\n Watch,\n Element,\n EventEmitter,\n Event,\n Method,\n} from '@stencil/core';\nimport { isEventFromElement, loc, overrideFocus, resizeIframe, waitForNextPaint } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\nimport { IOptionValue } from '../q2-option-list/q2-option-list';\n\n/**\n * @name Pill\n * @category Display\n * @summary Use for displaying and removing active filters in data views.\n * @slot popover-top - An optional slot to display custom content persistently at the top of the popover. This is **not** compatible with the action sheet workflow.\n * @slot popover-bottom - An optional slot to display custom content persistently at the bottom of the popover. This is **not** compatible with the action sheet workflow.\n */\n@Component({ tag: 'q2-pill', shadow: true, styleUrl: 'q2-pill.scss' })\nexport class Q2Pill implements ComponentInterface {\n // #region Own Properties\n\n mutationObserver: MutationObserver;\n optionList: HTMLQ2OptionListElement;\n popoverBottomContainer: HTMLElement;\n popoverElement: HTMLQ2PopoverElement;\n popoverTopContainer: HTMLElement;\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hasPopoverBottom = false;\n\n @State()\n hasPopoverTop = false;\n\n @State()\n optionCount: number;\n\n @State()\n selectedOptionElements: HTMLQ2OptionElement[] = [];\n\n // #endregion\n // #region Public Property API\n\n /** Determine if the elements is in the selected state, with values. */\n @Prop({ reflect: true, mutable: true })\n active: boolean;\n\n /** Indicates that the pill has no border */\n @Prop({ reflect: true })\n borderless: boolean;\n\n /** Indicates the pill cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Instructs the component to use the action sheet workflow for displaying its options.\n *\n * For more information, see [Action Sheets](https://tecton.q2developer.com/guides/action-sheets/).\n */\n @Prop()\n hoist: boolean = !!window.Tecton?.useActionSheets;\n\n /**\n * The text that populates the label.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * The maximum number of characters to display before ellipcizing.\n * @info\n * Limitless by default.\n */\n @Prop({ reflect: true })\n maxLength: number;\n\n /**\n * Enables the multi-select ability for the dropdown.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n optionListLabel: string;\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true })\n popoverAlignment: 'left' | 'right' = 'right';\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop()\n popoverDirection: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n popoverMaxHeight: number;\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number = 150;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: IOptionValue[] = [];\n\n /** The color of the element when in the active state. */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary';\n\n /** The value emitted when the component is selected. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the pill is clicked or the selected options change.\n *\n * When multi-select is enabled, `value` will be `undefined`.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string; values: IOptionValue[]; active: boolean }>;\n\n /**\n * Emitted when the pill is clicked or the selected options change.\n *\n * When multi-select is enabled, `value` will be `undefined`.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string; values: IOptionValue[]; active: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n this.syncValueProperties();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('displayChanged')\n handleSelectedDisplay() {\n if (this.multiple) return;\n this.updateSelectedOptionElements();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n @Listen('popoverStateChanged')\n async popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n if (open) return;\n this.setOptionListActiveElement(null);\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<button>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<button>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<button>` to display the popover and selecting the option(s) with the specified value(s).\n *\n * If multi-select is enabled and the `closePopover` argument is `true` (default), the popover will be closed\n * after the option(s) are selected.\n *\n * @testOnly\n */\n @Method()\n async setValue(values: string | string[], options: { closePopover?: boolean } = { closePopover: true }) {\n const valueSet = new Set(Array.isArray(values) ? values : [values]);\n const allOptions = (await this.getOptionListOptions()) as HTMLQ2OptionElement[];\n if (!this.open) {\n await this.openPopover();\n await waitForNextPaint();\n }\n\n valueSet.forEach(value => {\n allOptions.find(option => option.value === value)?.click();\n });\n\n if (options.closePopover) {\n await this.closePopover();\n await waitForNextPaint();\n }\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsChanged(newValue) {\n const { multiple } = this;\n const firstValue = newValue?.[0]?.value ?? null;\n if (multiple) {\n if (this.value) this.value = null;\n this.updateSelectedOptionElements();\n } else if (this.value === firstValue) {\n this.updateSelectedOptionElements();\n } else {\n this.value = firstValue;\n }\n }\n\n @Watch('value')\n @Watch('label')\n async valueChanged(newValue, _oldValue, propName) {\n const { label, multiple, selectedOptions, value } = this;\n const valueProxy = propName === 'value' ? newValue : value;\n const labelProxy = propName === 'label' ? newValue : label;\n if (multiple) return;\n const firstValue = selectedOptions?.[0]?.value ?? null;\n if (propName === 'value' && newValue === firstValue) this.updateSelectedOptionElements();\n else {\n const selectedOption = (await this.getOption(newValue)) as HTMLQ2OptionElement;\n const { value, display } = selectedOption || { value: valueProxy, display: labelProxy };\n this.selectedOptions = value ? [{ value, display }] : [];\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonContent() {\n const { label, selectedOptions, selectedOptionElements, optionCount } = this;\n if (!optionCount || selectedOptionElements.length === 0) return loc(label);\n else if (selectedOptionElements.length === 1) return `${loc(selectedOptionElements[0].display)}`;\n\n return loc('tecton.element.pill.activeCount', { count: selectedOptions.length });\n }\n\n get truncatedButtonContent() {\n const { maxLength, buttonContent } = this;\n if (maxLength && buttonContent.length > maxLength) return `${buttonContent.substring(0, maxLength)}…`;\n else return buttonContent;\n }\n\n _togglePopover() {\n const { primaryBtn } = this;\n primaryBtn?.click();\n primaryBtn?.focus();\n primaryBtn.dispatchEvent(new FocusEvent('focus'));\n }\n\n clearSelectedOptions = () => {\n this.selectedOptions = [];\n this.value = null;\n this.active = false;\n this.open = false;\n this.primaryBtn.focus();\n mirrorEmit(this, ['change', 'tctChange'], { value: null, values: [], active: false });\n this.scheduledAfterRender.push(resizeIframe);\n };\n\n determineOptionCount = async () => {\n if (this.optionList) {\n const allOptions = await this.getOptionListOptions();\n this.optionCount = allOptions.length;\n } else {\n const numberOfOptions = this.hostElement.querySelectorAll('q2-option').length;\n this.optionCount = numberOfOptions;\n }\n };\n\n executeActionSheet = async (event: MouseEvent | KeyboardEvent) => {\n const result = await showActionSheetList(this, event);\n this.primaryBtn.focus();\n this.handleSelectionChanges(result);\n };\n\n getOption = async (value: string) => {\n if (this.optionList) {\n const options = await this.getOptionListOptions();\n return options.find(option => option.value === value);\n } else {\n return this.hostElement.querySelector<HTMLQ2OptionElement>(`q2-option[value=\"${value}\"]`);\n }\n };\n\n // for spec testing\n getOptionListOptions = async () => {\n return await this.optionList?.getOptions();\n };\n\n handleChange = event => {\n event.stopPropagation();\n if (!this.optionCount) return;\n this.handleSelectionChanges(event.detail);\n };\n\n handleClick = async (event: MouseEvent) => {\n event.stopPropagation();\n if (this.disabled) return;\n if (this.optionCount) {\n if (shouldShowActionSheet(this)) {\n this.executeActionSheet(event);\n } else {\n await this.popoverElement.toggle();\n }\n } else {\n const { value, label } = this;\n const isActive = (this.active = !this.active);\n const values = isActive ? [{ value, display: label }] : [];\n mirrorEmit(this, ['change', 'tctChange'], {\n value,\n values,\n active: isActive,\n });\n }\n };\n\n handleFocusOut = async (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as unknown as HTMLElement;\n if (this.popoverElement?.contains(relatedTarget)) return;\n if (this.hostElement.contains(relatedTarget)) return;\n this.open = false;\n };\n\n handleKeydown = async (event: KeyboardEvent) => {\n const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';\n if (!this.optionCount || this.disabled || isTabMetaOrCtrl) return;\n event.preventDefault();\n const hasSlot = this.hasPopoverTop || this.hasPopoverBottom;\n\n // slots are incompatible with action sheet\n if (shouldShowActionSheet(this, event) && !hasSlot) {\n this.executeActionSheet(event);\n } else {\n this.handleOptionListExternalKeydown(event);\n }\n };\n\n // for spec testing\n handleOptionListExternalKeydown = async (event: KeyboardEvent) => {\n await this.optionList?.handleExternalKeydown(event);\n };\n\n handleSelectionChanges = async (changeDetails: { value?: string; values?: IOptionValue[] }) => {\n const { multiple } = this;\n const { value = '', values = [] } = changeDetails;\n const isActive = multiple ? !!values.length : !!value;\n if (!this.hostElement.onchange) {\n if (multiple) {\n this.selectedOptions = values;\n this.value = undefined;\n } else {\n const selectedOption = (await this.getOption(value)) as HTMLQ2OptionElement;\n this.selectedOptions = selectedOption\n ? [{ value: selectedOption.value, display: selectedOption.display }]\n : [];\n this.value = selectedOption?.value || undefined;\n }\n }\n\n mirrorEmit(this, ['change', 'tctChange'], {\n value: multiple ? undefined : value,\n values,\n active: isActive,\n });\n };\n\n handleWrapperClick = () => {\n this.primaryBtn.focus();\n this.primaryBtn.click();\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n onMutationObserved = () => {\n this.updateSlotState();\n this.determineOptionCount();\n this.updateSelectedOptionElements();\n };\n\n onPopoverState = (event: CustomEvent<{ open: boolean; action: 'close' | 'select' | 'open' }>) => {\n const { open, action } = event.detail;\n if (open) return;\n\n switch (action) {\n case 'select':\n case 'close':\n this.primaryBtn.focus();\n break;\n }\n };\n\n // for spec testing\n setOptionListActiveElement = async (index: number) => {\n await this.optionList?.setActiveElement(index);\n };\n\n syncValueProperties = () => {\n const { value, selectedOptions } = this;\n if (!!selectedOptions?.length) this.selectedOptionsChanged(selectedOptions);\n else if (value) this.valueChanged(value, null, 'value');\n };\n\n updateSelectedOptionElements = async () => {\n const { selectedOptions = [] } = this;\n const selectedValues = selectedOptions.map(option => option.value);\n const options = await this.getOptionListOptions();\n if (this.optionCount) this.active = !!selectedValues.length;\n this.selectedOptionElements =\n (options?.filter(option => selectedValues.includes(option.value)) as HTMLQ2OptionElement[]) || [];\n };\n\n updateSlotState = () => {\n const { hostElement, hasPopoverTop, hasPopoverBottom } = this;\n const popTopSlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"popover-top\"]');\n const popBottomSlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"popover-bottom\"]');\n const topSlotHasNode = popTopSlot?.assignedNodes().length > 0;\n const bottomSlotHasNode = popBottomSlot?.assignedNodes().length > 0;\n\n if (hasPopoverTop !== topSlotHasNode) this.hasPopoverTop = topSlotHasNode;\n if (hasPopoverBottom !== bottomSlotHasNode) this.hasPopoverBottom = bottomSlotHasNode;\n };\n\n // #endregion\n // #region Render Methods\n\n renderHiddenElement() {\n return (\n <div\n id=\"option-description\"\n class=\"sr\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.optionList.optionCount', [this.optionCount])}\n </div>\n );\n }\n\n renderIcon() {\n const { optionCount, active } = this;\n const isButton = optionCount && active;\n const TagName = isButton ? 'button' : 'div';\n const iconName = isButton || !optionCount ? 'close' : 'chevron-down';\n\n return (\n <TagName\n class=\"btn-close\"\n onClick={(isButton && this.clearSelectedOptions) || undefined}\n disabled={(isButton && this.disabled) || undefined}\n aria-label={(isButton && loc('tecton.element.pill.clearSelection')) || undefined}\n type={(isButton && 'button') || undefined}\n >\n <q2-icon type={iconName}></q2-icon>\n </TagName>\n );\n }\n\n render() {\n const { optionCount, active, open } = this;\n const wrapperClassNames = ['btn-wrapper'];\n if (optionCount || active) wrapperClassNames.push('has-icon');\n if (optionCount) wrapperClassNames.push('has-options');\n\n return (\n <click-elsewhere onChange={this.onClickElsewhere}>\n <div class={wrapperClassNames.join(' ')}>\n <div\n class=\"btn-height-wrapper\"\n ref={el => (this.primaryBtnWrapper = el)}\n onClick={this.handleWrapperClick}\n tabIndex={-1}\n >\n <button\n class=\"btn-primary\"\n test-id=\"btn-control\"\n type=\"button\"\n role={(optionCount && 'combobox') || undefined}\n ref={el => (this.primaryBtn = el)}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n onFocusout={this.handleFocusOut}\n disabled={this.disabled}\n aria-roledescription={!optionCount && 'filter'}\n aria-controls={(optionCount && 'option-list') || undefined}\n aria-expanded={(optionCount && `${!!open}`) || undefined}\n aria-label={`${this.buttonContent}${!optionCount && active ? ` ${loc('tecton.element.pill.active')}` : ''}`}\n aria-describedby={(optionCount && 'option-description') || undefined}\n >\n {this.truncatedButtonContent}\n </button>\n </div>\n {this.renderIcon()}\n {!!optionCount && this.renderHiddenElement()}\n </div>\n {this.optionCount > 0 && (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.primaryBtn}\n open={this.open}\n max-height={this.popoverMaxHeight}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n onFocusout={this.handleFocusOut}\n >\n <div class=\"popover-content\">\n <div\n ref={el => (this.popoverTopContainer = el)}\n class=\"popover-top-container\"\n tabindex=\"-1\"\n hidden={!this.hasPopoverTop}\n onKeyDown={this.handleKeydown}\n >\n <slot name=\"popover-top\"></slot>\n </div>\n <q2-option-list\n type=\"listbox\"\n ref={el => (this.optionList = el)}\n id=\"option-list\"\n onChange={this.handleChange}\n multiple={this.multiple}\n selectedOptions={this.selectedOptions}\n onReady={() => this.updateSelectedOptionElements()}\n onPopoverState={this.onPopoverState}\n label={loc('tecton.element.optionList.label', [this.optionListLabel])}\n >\n <slot />\n </q2-option-list>\n <div\n ref={el => (this.popoverBottomContainer = el)}\n class=\"popover-bottom-container\"\n tabindex=\"-1\"\n hidden={!this.hasPopoverBottom}\n onKeyDown={this.handleKeydown}\n >\n <slot name=\"popover-bottom\"></slot>\n </div>\n </div>\n </q2-popover>\n )}\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["q2PillCss","Q2Pill","constructor","hostRef","this","scheduledAfterRender","hasPopoverBottom","hasPopoverTop","selectedOptionElements","hoist","_a","window","Tecton","useActionSheets","popoverAlignment","popoverMinHeight","selectedOptions","clearSelectedOptions","value","active","open","primaryBtn","focus","mirrorEmit","values","push","resizeIframe","determineOptionCount","async","optionList","allOptions","getOptionListOptions","optionCount","length","numberOfOptions","hostElement","querySelectorAll","executeActionSheet","event","result","showActionSheetList","handleSelectionChanges","getOption","options","find","option","querySelector","getOptions","handleChange","stopPropagation","detail","handleClick","disabled","shouldShowActionSheet","popoverElement","toggle","label","isActive","display","handleFocusOut","relatedTarget","contains","handleKeydown","isTabMetaOrCtrl","metaKey","ctrlKey","key","preventDefault","hasSlot","handleOptionListExternalKeydown","handleExternalKeydown","changeDetails","multiple","onchange","undefined","selectedOption","handleWrapperClick","click","onClickElsewhere","target","localName","onMutationObserved","updateSlotState","updateSelectedOptionElements","onPopoverState","action","setOptionListActiveElement","index","setActiveElement","syncValueProperties","selectedOptionsChanged","valueChanged","selectedValues","map","filter","includes","popTopSlot","shadowRoot","popBottomSlot","topSlotHasNode","assignedNodes","bottomSlotHasNode","disconnectedCallback","mutationObserver","disconnect","componentWillLoad","observer","MutationObserver","observe","childList","attributes","componentDidLoad","overrideFocus","componentDidRender","forEach","fn","handleSelectedDisplay","delegateFocus","isEventFromElement","popoverStateHandler","closePopover","_togglePopover","openPopover","setValue","valueSet","Set","Array","isArray","waitForNextPaint","newValue","firstValue","_b","_oldValue","propName","valueProxy","labelProxy","buttonContent","loc","count","truncatedButtonContent","maxLength","substring","dispatchEvent","FocusEvent","renderHiddenElement","h","id","class","renderIcon","isButton","TagName","iconName","onClick","type","render","wrapperClassNames","onChange","join","ref","el","primaryBtnWrapper","tabIndex","role","onKeyDown","onFocusout","controlElement","popoverMaxHeight","minHeight","direction","popoverDirection","align","popoverTopContainer","tabindex","hidden","name","onReady","optionListLabel","popoverBottomContainer"],"sources":["src/components/q2-pill/q2-pill.scss?tag=q2-pill&encapsulation=shadow","src/components/q2-pill/q2-pill.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n position: relative;\n line-height: 0;\n}\n\n:host(:not(:last-child)) {\n margin-inline-end: var-list(var-prefixer(pill-margin), --app-scale-2x, 10px);\n}\n\nq2-popover,\n.btn-wrapper {\n --comp-pill-min-height: #{var-list(var-prefixer(pill-min-height), 44px)};\n --comp-pill-btn-height: #{var-list(var-prefixer(pill-btn-height), 30px)};\n}\n\n.popover-top-container {\n position: sticky;\n top: 0;\n z-index: 5;\n}\n\n.popover-bottom-container {\n position: sticky;\n bottom: 0;\n z-index: 5;\n}\n\n.btn-wrapper {\n --comp-pill-btn-border-width: #{var-list(var-prefixer(pill-btn-border-width), 2px)};\n --comp-close-size: 0px;\n --comp-btn-background: #{var-list(var-prefixer(pill-btn-background), --t-base, #ffffff)};\n --comp-btn-box-shadow: #{var-list(--tct-pill-btn-box-shadow, none)};\n --comp-btn-backdrop-filter: #{var-list(--tct-pill-btn-backdrop-filter, none)};\n --comp-hover-btn-background: #{var-list(var-prefixer(pill-hover-btn-background), --t-gray-13, #e6e6e6)};\n --comp-btn-padding: #{var-list(var-prefixer(pill-btn-padding-inline), --app-scale-3x, 15px)};\n --comp-btn-color: #{var-list(var-prefixer(pill-btn-color), --t-gray-3, #262626)};\n --comp-active-btn-color: #{var-list(--tct-pill-active-btn-color, --comp-btn-background)};\n --comp-active-btn-background: #{var-list(var-prefixer(pill-active-btn-background), --t-gray-7, #666666)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-active-btn-box-shadow, --tct-pill-btn-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-active-btn-backdrop-filter, none)};\n --comp-active-btn-border-color: #{var-list(var-prefixer(pill-active-btn-border-color), --t-gray-7, #666666)};\n --comp-hover-active-btn-background: #{var-list(var-prefixer(pill-active-btn-background), --t-gray-6, #4d4d4d)};\n --comp-hover-active-btn-border-color: #{var-list(var-prefixer(pill-active-btn-background), --t-gray-6, #4d4d4d)};\n\n position: relative;\n\n &.has-options,\n &.has-icon {\n --comp-close-size: var(--comp-pill-btn-height);\n }\n\n :host([active]:not([active='false'])) & {\n --comp-btn-color: #{var-list(var-prefixer(pill-active-btn-color), --t-base, #ffffff)};\n }\n\n :host([theme='primary']) & {\n --comp-active-btn-background: #{var-list(--tct-pill-primary-active-background, --t-primary, #0079c1)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-primary-active-btn-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-primary-active-backdrop-filter, none)};\n --comp-active-btn-color: #{var-list(--tct-pill-primary-active-font-color, --t-primary-text, #ffffff)};\n --comp-active-btn-border-color: #{var-list(--tct-pill-primary-active-border-color, --t-primary, #0079c1)};\n --comp-hover-active-btn-background: #{var-list(\n --tct-pill-primary-active-hover-background,\n --t-primary-l3,\n #21acff\n )};\n --comp-hover-active-btn-border-color: #{var-list(\n --tct-pill-primary-active-hover-border-color,\n --t-primary-l3,\n #21acff\n )};\n }\n\n :host([theme='secondary']) & {\n --comp-active-btn-background: #{var-list(--tct-pill-secondary-active-background, --t-secondary, #b3c2cc)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-secondary-active-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-secondary-active-backdrop-filter, none)};\n --comp-active-btn-color: #{var-list(--tct-pill-secondary-active-font-color, --t-secondary-text, #141414)};\n --comp-active-btn-border-color: #{var-list(--tct-pill-secondary-active-border-color, --t-secondary, #b3c2cc)};\n --comp-hover-active-btn-background: #{var-list(\n --tct-pill-secondary-active-hover-background,\n --t-secondary-l3,\n #c9d5db\n )};\n --comp-hover-active-btn-border-color: #{var-list(\n --tct-pill-secondary-active-hover-border-color,\n --t-secondary-l3,\n #c9d5db\n )};\n }\n\n :host([theme='tertiary']) & {\n --comp-active-btn-background: #{var-list(--tct-pill-tertiary-active-background, --t-tertiary, #e8f5fc)};\n --comp-active-btn-box-shadow: #{var-list(--tct-pill-tertiary-active-box-shadow, none)};\n --comp-active-btn-backdrop-filter: #{var-list(--tct-pill-tertiary-active-backdrop-filter, none)};\n --comp-active-btn-color: #{var-list(--tct-pill-tertiary-active-font-color, --t-tertiary-text, #141414)};\n --comp-active-btn-border-color: #{var-list(--tct-pill-tertiary-active-border-color, --t-tertiary, #e8f5fc)};\n --comp-hover-active-btn-background: #{var-list(\n --tct-pill-tertiary-active-hover-background,\n --t-tertiary-l3,\n #eff8fd\n )};\n --comp-hover-active-btn-border-color: #{var-list(\n --tct-pill-tertiary-active-hover-border-color,\n --t-tertiary-l3,\n #eff8fd\n )};\n }\n}\n\n.btn-height-wrapper {\n height: var(--comp-pill-min-height);\n display: flex;\n align-items: center;\n cursor: pointer;\n &:focus {\n box-shadow: none;\n }\n\n :host([disabled]) & {\n cursor: not-allowed;\n }\n}\n\n.btn-close,\n.btn-primary {\n cursor: pointer;\n height: var(--comp-pill-btn-height);\n border-style: solid;\n border-radius: var-list(var-prefixer(pill-btn-border-radius), 30px);\n transition-property: background, color, padding, width, opacity;\n transition: var-list(var-prefixer(pill-btn-tween), --app-tween-1, unquote('0.2s ease'));\n}\n\n.btn-close,\n.btn-primary,\nq2-icon {\n :host([disabled]) & {\n opacity: var-list(var-prefixer(pill-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n cursor: not-allowed;\n }\n}\n\n.btn-primary {\n background: var(--comp-btn-background);\n box-shadow: var(--comp-btn-box-shadow);\n backdrop-filter: var(--comp-btn-backdrop-filter);\n border-width: var-list(--comp-pill-btn-border-width);\n border-color: var-list(var-prefixer(pill-btn-border-color), --t-a11y-gray-color-AA, #949494);\n padding-inline: var(--comp-btn-padding);\n padding-right: calc(var(--comp-btn-padding) + var(--comp-close-size));\n font-size: var-list(var-prefixer(pill-btn-font-size), --app-font-size, 14px);\n font-weight: var-list(--tct-pill-btn-font-weight, 400);\n color: var(--comp-btn-color);\n display: block;\n width: 100%;\n text-align: start;\n\n &:focus {\n box-shadow: var-list(--tct-pill-btn-focus-box-shadow, --const-double-focus-ring);\n }\n\n &:focus-visible {\n box-shadow: var-list(--tct-pill-btn-focus-visible-box-shadow, --const-double-focus-ring);\n }\n\n &:hover {\n background: var(--comp-hover-btn-background);\n }\n\n .has-options &,\n .has-icon & {\n padding-right: calc(#{var-list(var-prefixer(pill-icon-gap), --app-scale-1x, 5px)} + var(--comp-close-size));\n }\n\n .has-options & {\n @include line-clamp(1);\n max-width: var-list(var-prefixer(pill-max-width), 200px);\n }\n\n :host([active]:not([active='false'])) & {\n background: var(--comp-active-btn-background);\n box-shadow: var(--comp-active-btn-box-shadow);\n backdrop-filter: var(--comp-active-btn-backdrop-filter);\n border-color: var(--comp-active-btn-border-color);\n color: var(--comp-active-btn-color);\n\n &:focus {\n box-shadow: var-list(--tct-pill-btn-focus-box-shadow, --const-double-focus-ring);\n }\n\n &:focus-visible {\n box-shadow: var-list(--tct-pill-btn-focus-visible-box-shadow, --const-double-focus-ring);\n }\n\n &:hover {\n background: var(--comp-hover-active-btn-background);\n border-color: var(--comp-hover-active-btn-border-color);\n }\n }\n}\n\n.btn-close {\n background: transparent;\n border-color: transparent;\n border-width: var(--comp-pill-btn-border-width);\n width: var(--comp-close-size);\n height: var(--comp-close-size);\n padding: 0;\n border: 0;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n right: 0;\n top: 50%;\n transform: translateY(-50%);\n opacity: 0;\n &:focus-visible {\n box-shadow: var-list(--tct-pill-btn-focus-visible-box-shadow, --const-double-focus-ring);\n }\n :host([active]:not([active='false'])) & {\n color: var(--comp-active-btn-color);\n }\n\n .has-options &,\n .has-icon & {\n opacity: 1;\n }\n}\n\nq2-icon {\n --tct-icon-stroke-primary: #{var-list(--tct-pill-icon-stroke, currentcolor)};\n --tct-icon-stroke-width: #{var-list(--tct-pill-icon-stroke-width, inherit)};\n width: var-list(var-prefixer(pill-icon-size), 14px);\n height: var-list(var-prefixer(pill-icon-size), 14px);\n transition-property: transform;\n transition: var-list(var-prefixer(pill-btn-tween), --app-tween-1, unquote('0.2s ease'));\n}\n\ndiv.btn-close {\n pointer-events: none;\n\n :host([open]) & q2-icon {\n transform: rotate(180deg);\n }\n}\n\nbutton.btn-close {\n :host([active]:not([active='false'])) & {\n &:focus,\n &:hover {\n background: var-list(var-prefixer(pill-hover-close-btn-background), --t-top-a1, rgba(13, 13, 13, 0.35));\n border-color: var-list(var-prefixer(pill-hover-close-btn-border-color), --t-top-a1, rgba(13, 13, 13, 0.35));\n }\n }\n}\n\nq2-popover {\n top: calc(var(--comp-pill-min-height) - calc(calc(var(--comp-pill-min-height) - var(--comp-pill-btn-height)) / 2));\n}\n\n:host([borderless]:not([borderless='false'])) {\n button {\n border-style: none;\n }\n}\n","import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Listen,\n Watch,\n Element,\n EventEmitter,\n Event,\n Method,\n} from '@stencil/core';\nimport { isEventFromElement, loc, overrideFocus, resizeIframe, waitForNextPaint } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\nimport { shouldShowActionSheet, showActionSheetList } from 'src/utils/action-sheet';\nimport { OptionValue } from '../q2-option-list/q2-option-list';\n\n/**\n * @name Pill\n * @category Display\n * @summary Use for displaying and removing active filters in data views.\n * @slot popover-top - An optional slot to display custom content persistently at the top of the popover. This is **not** compatible with the action sheet workflow.\n * @slot popover-bottom - An optional slot to display custom content persistently at the bottom of the popover. This is **not** compatible with the action sheet workflow.\n */\n@Component({ tag: 'q2-pill', shadow: true, styleUrl: 'q2-pill.scss' })\nexport class Q2Pill implements ComponentInterface {\n // #region Own Properties\n\n mutationObserver: MutationObserver;\n optionList: HTMLQ2OptionListElement;\n popoverBottomContainer: HTMLElement;\n popoverElement: HTMLQ2PopoverElement;\n popoverTopContainer: HTMLElement;\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hasPopoverBottom = false;\n\n @State()\n hasPopoverTop = false;\n\n @State()\n optionCount: number;\n\n @State()\n selectedOptionElements: HTMLQ2OptionElement[] = [];\n\n // #endregion\n // #region Public Property API\n\n /** Determine if the elements is in the selected state, with values. */\n @Prop({ reflect: true, mutable: true })\n active: boolean;\n\n /** Indicates that the pill has no border */\n @Prop({ reflect: true })\n borderless: boolean;\n\n /** Indicates the pill cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Instructs the component to use the action sheet workflow for displaying its options.\n *\n * For more information, see [Action Sheets](https://tecton.q2developer.com/guides/action-sheets/).\n */\n @Prop()\n hoist: boolean = !!window.Tecton?.useActionSheets;\n\n /**\n * The text that populates the label.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * The maximum number of characters to display before ellipcizing.\n * @info\n * Limitless by default.\n */\n @Prop({ reflect: true })\n maxLength: number;\n\n /**\n * Enables the multi-select ability for the dropdown.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n optionListLabel: string;\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true })\n popoverAlignment: 'left' | 'right' = 'right';\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop()\n popoverDirection: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n popoverMaxHeight: number;\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number = 150;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: OptionValue[] = [];\n\n /** The color of the element when in the active state. */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary';\n\n /** The value emitted when the component is selected. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the pill is clicked or the selected options change.\n *\n * When multi-select is enabled, `value` will be `undefined`.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string; values: OptionValue[]; active: boolean }>;\n\n /**\n * Emitted when the pill is clicked or the selected options change.\n *\n * When multi-select is enabled, `value` will be `undefined`.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string; values: OptionValue[]; active: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n this.syncValueProperties();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('displayChanged')\n handleSelectedDisplay() {\n if (this.multiple) return;\n this.updateSelectedOptionElements();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n @Listen('popoverStateChanged')\n async popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n if (open) return;\n this.setOptionListActiveElement(null);\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<button>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<button>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<button>` to display the popover and selecting the option(s) with the specified value(s).\n *\n * If multi-select is enabled and the `closePopover` argument is `true` (default), the popover will be closed\n * after the option(s) are selected.\n *\n * @testOnly\n */\n @Method()\n async setValue(values: string | string[], options: { closePopover?: boolean } = { closePopover: true }) {\n const valueSet = new Set(Array.isArray(values) ? values : [values]);\n const allOptions = (await this.getOptionListOptions()) as HTMLQ2OptionElement[];\n if (!this.open) {\n await this.openPopover();\n await waitForNextPaint();\n }\n\n valueSet.forEach(value => {\n allOptions.find(option => option.value === value)?.click();\n });\n\n if (options.closePopover) {\n await this.closePopover();\n await waitForNextPaint();\n }\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsChanged(newValue) {\n const { multiple } = this;\n const firstValue = newValue?.[0]?.value ?? null;\n if (multiple) {\n if (this.value) this.value = null;\n this.updateSelectedOptionElements();\n } else if (this.value === firstValue) {\n this.updateSelectedOptionElements();\n } else {\n this.value = firstValue;\n }\n }\n\n @Watch('value')\n @Watch('label')\n async valueChanged(newValue, _oldValue, propName) {\n const { label, multiple, selectedOptions, value } = this;\n const valueProxy = propName === 'value' ? newValue : value;\n const labelProxy = propName === 'label' ? newValue : label;\n if (multiple) return;\n const firstValue = selectedOptions?.[0]?.value ?? null;\n if (propName === 'value' && newValue === firstValue) this.updateSelectedOptionElements();\n else {\n const selectedOption = (await this.getOption(newValue)) as HTMLQ2OptionElement;\n const { value, display } = selectedOption || { value: valueProxy, display: labelProxy };\n this.selectedOptions = value ? [{ value, display }] : [];\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonContent() {\n const { label, selectedOptions, selectedOptionElements, optionCount } = this;\n if (!optionCount || selectedOptionElements.length === 0) return loc(label);\n else if (selectedOptionElements.length === 1) return `${loc(selectedOptionElements[0].display)}`;\n\n return loc('tecton.element.pill.activeCount', { count: selectedOptions.length });\n }\n\n get truncatedButtonContent() {\n const { maxLength, buttonContent } = this;\n if (maxLength && buttonContent.length > maxLength) return `${buttonContent.substring(0, maxLength)}…`;\n else return buttonContent;\n }\n\n _togglePopover() {\n const { primaryBtn } = this;\n primaryBtn?.click();\n primaryBtn?.focus();\n primaryBtn.dispatchEvent(new FocusEvent('focus'));\n }\n\n clearSelectedOptions = () => {\n this.selectedOptions = [];\n this.value = null;\n this.active = false;\n this.open = false;\n this.primaryBtn.focus();\n mirrorEmit(this, ['change', 'tctChange'], { value: null, values: [], active: false });\n this.scheduledAfterRender.push(resizeIframe);\n };\n\n determineOptionCount = async () => {\n if (this.optionList) {\n const allOptions = await this.getOptionListOptions();\n this.optionCount = allOptions.length;\n } else {\n const numberOfOptions = this.hostElement.querySelectorAll('q2-option').length;\n this.optionCount = numberOfOptions;\n }\n };\n\n executeActionSheet = async (event: MouseEvent | KeyboardEvent) => {\n const result = await showActionSheetList(this, event);\n this.primaryBtn.focus();\n this.handleSelectionChanges(result);\n };\n\n getOption = async (value: string) => {\n if (this.optionList) {\n const options = await this.getOptionListOptions();\n return options.find(option => option.value === value);\n } else {\n return this.hostElement.querySelector<HTMLQ2OptionElement>(`q2-option[value=\"${value}\"]`);\n }\n };\n\n // for spec testing\n getOptionListOptions = async () => {\n return await this.optionList?.getOptions();\n };\n\n handleChange = event => {\n event.stopPropagation();\n if (!this.optionCount) return;\n this.handleSelectionChanges(event.detail);\n };\n\n handleClick = async (event: MouseEvent) => {\n event.stopPropagation();\n if (this.disabled) return;\n if (this.optionCount) {\n if (shouldShowActionSheet(this)) {\n this.executeActionSheet(event);\n } else {\n await this.popoverElement.toggle();\n }\n } else {\n const { value, label } = this;\n const isActive = (this.active = !this.active);\n const values = isActive ? [{ value, display: label }] : [];\n mirrorEmit(this, ['change', 'tctChange'], {\n value,\n values,\n active: isActive,\n });\n }\n };\n\n handleFocusOut = async (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as unknown as HTMLElement;\n if (this.popoverElement?.contains(relatedTarget)) return;\n if (this.hostElement.contains(relatedTarget)) return;\n this.open = false;\n };\n\n handleKeydown = async (event: KeyboardEvent) => {\n const isTabMetaOrCtrl = event.metaKey || event.ctrlKey || event.key === 'Tab';\n if (!this.optionCount || this.disabled || isTabMetaOrCtrl) return;\n event.preventDefault();\n const hasSlot = this.hasPopoverTop || this.hasPopoverBottom;\n\n // slots are incompatible with action sheet\n if (shouldShowActionSheet(this, event) && !hasSlot) {\n this.executeActionSheet(event);\n } else {\n this.handleOptionListExternalKeydown(event);\n }\n };\n\n // for spec testing\n handleOptionListExternalKeydown = async (event: KeyboardEvent) => {\n await this.optionList?.handleExternalKeydown(event);\n };\n\n handleSelectionChanges = async (changeDetails: { value?: string; values?: OptionValue[] }) => {\n const { multiple } = this;\n const { value = '', values = [] } = changeDetails;\n const isActive = multiple ? !!values.length : !!value;\n if (!this.hostElement.onchange) {\n if (multiple) {\n this.selectedOptions = values;\n this.value = undefined;\n } else {\n const selectedOption = (await this.getOption(value)) as HTMLQ2OptionElement;\n this.selectedOptions = selectedOption\n ? [{ value: selectedOption.value, display: selectedOption.display }]\n : [];\n this.value = selectedOption?.value || undefined;\n }\n }\n\n mirrorEmit(this, ['change', 'tctChange'], {\n value: multiple ? undefined : value,\n values,\n active: isActive,\n });\n };\n\n handleWrapperClick = () => {\n this.primaryBtn.focus();\n this.primaryBtn.click();\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n onMutationObserved = () => {\n this.updateSlotState();\n this.determineOptionCount();\n this.updateSelectedOptionElements();\n };\n\n onPopoverState = (event: CustomEvent<{ open: boolean; action: 'close' | 'select' | 'open' }>) => {\n const { open, action } = event.detail;\n if (open) return;\n\n switch (action) {\n case 'select':\n case 'close':\n this.primaryBtn.focus();\n break;\n }\n };\n\n // for spec testing\n setOptionListActiveElement = async (index: number) => {\n await this.optionList?.setActiveElement(index);\n };\n\n syncValueProperties = () => {\n const { value, selectedOptions } = this;\n if (!!selectedOptions?.length) this.selectedOptionsChanged(selectedOptions);\n else if (value) this.valueChanged(value, null, 'value');\n };\n\n updateSelectedOptionElements = async () => {\n const { selectedOptions = [] } = this;\n const selectedValues = selectedOptions.map(option => option.value);\n const options = await this.getOptionListOptions();\n if (this.optionCount) this.active = !!selectedValues.length;\n this.selectedOptionElements =\n (options?.filter(option => selectedValues.includes(option.value)) as HTMLQ2OptionElement[]) || [];\n };\n\n updateSlotState = () => {\n const { hostElement, hasPopoverTop, hasPopoverBottom } = this;\n const popTopSlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"popover-top\"]');\n const popBottomSlot = hostElement.shadowRoot.querySelector<HTMLSlotElement>('slot[name=\"popover-bottom\"]');\n const topSlotHasNode = popTopSlot?.assignedNodes().length > 0;\n const bottomSlotHasNode = popBottomSlot?.assignedNodes().length > 0;\n\n if (hasPopoverTop !== topSlotHasNode) this.hasPopoverTop = topSlotHasNode;\n if (hasPopoverBottom !== bottomSlotHasNode) this.hasPopoverBottom = bottomSlotHasNode;\n };\n\n // #endregion\n // #region Render Methods\n\n renderHiddenElement() {\n return (\n <div\n id=\"option-description\"\n class=\"sr\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.optionList.optionCount', [this.optionCount])}\n </div>\n );\n }\n\n renderIcon() {\n const { optionCount, active } = this;\n const isButton = optionCount && active;\n const TagName = isButton ? 'button' : 'div';\n const iconName = isButton || !optionCount ? 'close' : 'chevron-down';\n\n return (\n <TagName\n class=\"btn-close\"\n onClick={(isButton && this.clearSelectedOptions) || undefined}\n disabled={(isButton && this.disabled) || undefined}\n aria-label={(isButton && loc('tecton.element.pill.clearSelection')) || undefined}\n type={(isButton && 'button') || undefined}\n >\n <q2-icon type={iconName}></q2-icon>\n </TagName>\n );\n }\n\n render() {\n const { optionCount, active, open } = this;\n const wrapperClassNames = ['btn-wrapper'];\n if (optionCount || active) wrapperClassNames.push('has-icon');\n if (optionCount) wrapperClassNames.push('has-options');\n\n return (\n <click-elsewhere onChange={this.onClickElsewhere}>\n <div class={wrapperClassNames.join(' ')}>\n <div\n class=\"btn-height-wrapper\"\n ref={el => (this.primaryBtnWrapper = el)}\n onClick={this.handleWrapperClick}\n tabIndex={-1}\n >\n <button\n class=\"btn-primary\"\n test-id=\"btn-control\"\n type=\"button\"\n role={(optionCount && 'combobox') || undefined}\n ref={el => (this.primaryBtn = el)}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n onFocusout={this.handleFocusOut}\n disabled={this.disabled}\n aria-roledescription={!optionCount && 'filter'}\n aria-controls={(optionCount && 'option-list') || undefined}\n aria-expanded={(optionCount && `${!!open}`) || undefined}\n aria-label={`${this.buttonContent}${!optionCount && active ? ` ${loc('tecton.element.pill.active')}` : ''}`}\n aria-describedby={(optionCount && 'option-description') || undefined}\n >\n {this.truncatedButtonContent}\n </button>\n </div>\n {this.renderIcon()}\n {!!optionCount && this.renderHiddenElement()}\n </div>\n {this.optionCount > 0 && (\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.primaryBtn}\n open={this.open}\n max-height={this.popoverMaxHeight}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n onFocusout={this.handleFocusOut}\n >\n <div class=\"popover-content\">\n <div\n ref={el => (this.popoverTopContainer = el)}\n class=\"popover-top-container\"\n tabindex=\"-1\"\n hidden={!this.hasPopoverTop}\n onKeyDown={this.handleKeydown}\n >\n <slot name=\"popover-top\"></slot>\n </div>\n <q2-option-list\n type=\"listbox\"\n ref={el => (this.optionList = el)}\n id=\"option-list\"\n onChange={this.handleChange}\n multiple={this.multiple}\n selectedOptions={this.selectedOptions}\n onReady={() => this.updateSelectedOptionElements()}\n onPopoverState={this.onPopoverState}\n label={loc('tecton.element.optionList.label', [this.optionListLabel])}\n >\n <slot />\n </q2-option-list>\n <div\n ref={el => (this.popoverBottomContainer = el)}\n class=\"popover-bottom-container\"\n tabindex=\"-1\"\n hidden={!this.hasPopoverBottom}\n onKeyDown={this.handleKeydown}\n >\n <slot name=\"popover-bottom\"></slot>\n </div>\n </div>\n </q2-popover>\n )}\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;;;;;;;AAAA,MAAMA,IAAY;;MC0BLC,IAAM;EADnB,WAAAC,CAAAC;;;;;IAWIC,KAAoBC,uBAAmB;;;QAYvCD,KAAgBE,mBAAG;IAGnBF,KAAaG,gBAAG;IAMhBH,KAAsBI,yBAA0B;;;;;eAuBhDJ,KAAKK,YAAcC,IAAAC,OAAOC,YAAM,QAAAF,WAAA,aAAAA,EAAEG;wFAuClCT,KAAgBU,mBAAqB;0BAkBrCV,KAAgBW,mBAAW;6DAI3BX,KAAeY,kBAAkB;IA2LjCZ,KAAoBa,uBAAG;MACnBb,KAAKY,kBAAkB;MACvBZ,KAAKc,QAAQ;MACbd,KAAKe,SAAS;MACdf,KAAKgB,OAAO;MACZhB,KAAKiB,WAAWC;MAChBC,EAAWnB,MAAM,EAAC,UAAU,eAAc;QAAEc,OAAO;QAAMM,QAAQ;QAAIL,QAAQ;;MAC7Ef,KAAKC,qBAAqBoB,KAAKC;AAAa;IAGhDtB,KAAoBuB,uBAAGC;MACnB,IAAIxB,KAAKyB,YAAY;QACjB,MAAMC,UAAmB1B,KAAK2B;QAC9B3B,KAAK4B,cAAcF,EAAWG;aAC3B;QACH,MAAMC,IAAkB9B,KAAK+B,YAAYC,iBAAiB,aAAaH;QACvE7B,KAAK4B,cAAcE;;;IAI3B9B,KAAAiC,qBAAqBT,MAAOU;MACxB,MAAMC,UAAeC,EAAoBpC,MAAMkC;MAC/ClC,KAAKiB,WAAWC;MAChBlB,KAAKqC,uBAAuBF;AAAO;IAGvCnC,KAAAsC,YAAYd,MAAOV;MACf,IAAId,KAAKyB,YAAY;QACjB,MAAMc,UAAgBvC,KAAK2B;QAC3B,OAAOY,EAAQC,MAAKC,KAAUA,EAAO3B,UAAUA;aAC5C;QACH,OAAOd,KAAK+B,YAAYW,cAAmC,oBAAoB5B;;;;QAKvFd,KAAoB2B,uBAAGH;;MACnB,eAAalB,IAAAN,KAAKyB,gBAAY,QAAAnB,WAAA,aAAAA,EAAAqC;AAAY;IAG9C3C,KAAY4C,eAAGV;MACXA,EAAMW;MACN,KAAK7C,KAAK4B,aAAa;MACvB5B,KAAKqC,uBAAuBH,EAAMY;AAAO;IAG7C9C,KAAA+C,cAAcvB,MAAOU;MACjBA,EAAMW;MACN,IAAI7C,KAAKgD,UAAU;MACnB,IAAIhD,KAAK4B,aAAa;QAClB,IAAIqB,EAAsBjD,OAAO;UAC7BA,KAAKiC,mBAAmBC;eACrB;gBACGlC,KAAKkD,eAAeC;;aAE3B;QACH,OAAMrC,OAAEA,GAAKsC,OAAEA,KAAUpD;QACzB,MAAMqD,IAAYrD,KAAKe,UAAUf,KAAKe;QACtC,MAAMK,IAASiC,IAAW,EAAC;UAAEvC;UAAOwC,SAASF;cAAW;QACxDjC,EAAWnB,MAAM,EAAC,UAAU,eAAc;UACtCc;UACAM;UACAL,QAAQsC;;;;IAKpBrD,KAAAuD,iBAAiB/B,MAAOU;;MACpB,MAAMsB,IAAgBtB,EAAMsB;MAC5B,KAAIlD,IAAAN,KAAKkD,oBAAc,QAAA5C,WAAA,aAAAA,EAAEmD,SAASD,IAAgB;MAClD,IAAIxD,KAAK+B,YAAY0B,SAASD,IAAgB;MAC9CxD,KAAKgB,OAAO;AAAK;IAGrBhB,KAAA0D,gBAAgBlC,MAAOU;MACnB,MAAMyB,IAAkBzB,EAAM0B,WAAW1B,EAAM2B,WAAW3B,EAAM4B,QAAQ;MACxE,KAAK9D,KAAK4B,eAAe5B,KAAKgD,YAAYW,GAAiB;MAC3DzB,EAAM6B;MACN,MAAMC,IAAUhE,KAAKG,iBAAiBH,KAAKE;;YAG3C,IAAI+C,EAAsBjD,MAAMkC,OAAW8B,GAAS;QAChDhE,KAAKiC,mBAAmBC;aACrB;QACHlC,KAAKiE,gCAAgC/B;;;;QAK7ClC,KAAAiE,kCAAkCzC,MAAOU;;cAC/B5B,IAAAN,KAAKyB,gBAAY,QAAAnB,WAAA,aAAAA,EAAA4D,sBAAsBhC;AAAM;IAGvDlC,KAAAqC,yBAAyBb,MAAO2C;MAC5B,OAAMC,UAAEA,KAAapE;MACrB,OAAMc,OAAEA,IAAQ,IAAEM,QAAEA,IAAS,MAAO+C;MACpC,MAAMd,IAAWe,MAAahD,EAAOS,WAAWf;MAChD,KAAKd,KAAK+B,YAAYsC,UAAU;QAC5B,IAAID,GAAU;UACVpE,KAAKY,kBAAkBQ;UACvBpB,KAAKc,QAAQwD;eACV;UACH,MAAMC,UAAwBvE,KAAKsC,UAAUxB;UAC7Cd,KAAKY,kBAAkB2D,IACjB,EAAC;YAAEzD,OAAOyD,EAAezD;YAAOwC,SAASiB,EAAejB;gBACxD;UACNtD,KAAKc,SAAQyD,MAAc,QAAdA,WAAc,aAAdA,EAAgBzD,UAASwD;;;MAI9CnD,EAAWnB,MAAM,EAAC,UAAU,eAAc;QACtCc,OAAOsD,IAAWE,YAAYxD;QAC9BM;QACAL,QAAQsC;;AACV;IAGNrD,KAAkBwE,qBAAG;MACjBxE,KAAKiB,WAAWC;MAChBlB,KAAKiB,WAAWwD;AAAO;IAG3BzE,KAAA0E,mBAAoBxC;MAChB,MAAMyC,IAASzC,EAAMyC;MACrB,IAAIA,EAAOC,cAAc,mBAAmB;QACxC1C,EAAMW;QACN,OAAMK,gBAAEA,KAAmBlD;QAC3B,KAAKkD,GAAgB;QACrBA,EAAelC,OAAO;;;IAI9BhB,KAAkB6E,qBAAG;MACjB7E,KAAK8E;MACL9E,KAAKuB;MACLvB,KAAK+E;AAA8B;IAGvC/E,KAAAgF,iBAAkB9C;MACd,OAAMlB,MAAEA,GAAIiE,QAAEA,KAAW/C,EAAMY;MAC/B,IAAI9B,GAAM;MAEV,QAAQiE;OACJ,KAAK;OACL,KAAK;QACDjF,KAAKiB,WAAWC;QAChB;;;;QAKZlB,KAAAkF,6BAA6B1D,MAAO2D;;cAC1B7E,IAAAN,KAAKyB,gBAAY,QAAAnB,WAAA,aAAAA,EAAA8E,iBAAiBD;AAAM;IAGlDnF,KAAmBqF,sBAAG;MAClB,OAAMvE,OAAEA,GAAKF,iBAAEA,KAAoBZ;MACnC,OAAMY,MAAe,QAAfA,WAAA,aAAAA,EAAiBiB,SAAQ7B,KAAKsF,uBAAuB1E,SACtD,IAAIE,GAAOd,KAAKuF,aAAazE,GAAO,MAAM;AAAQ;IAG3Dd,KAA4B+E,+BAAGvD;MAC3B,OAAMZ,iBAAEA,IAAkB,MAAOZ;MACjC,MAAMwF,IAAiB5E,EAAgB6E,KAAIhD,KAAUA,EAAO3B;MAC5D,MAAMyB,UAAgBvC,KAAK2B;MAC3B,IAAI3B,KAAK4B,aAAa5B,KAAKe,WAAWyE,EAAe3D;MACrD7B,KAAKI,0BACAmC,MAAO,QAAPA,WAAO,aAAPA,EAASmD,QAAOjD,KAAU+C,EAAeG,SAASlD,EAAO3B,aAAqC;AAAE;IAGzGd,KAAe8E,kBAAG;MACd,OAAM/C,aAAEA,GAAW5B,eAAEA,GAAaD,kBAAEA,KAAqBF;MACzD,MAAM4F,IAAa7D,EAAY8D,WAAWnD,cAA+B;MACzE,MAAMoD,IAAgB/D,EAAY8D,WAAWnD,cAA+B;MAC5E,MAAMqD,KAAiBH,MAAU,QAAVA,WAAU,aAAVA,EAAYI,gBAAgBnE,UAAS;MAC5D,MAAMoE,KAAoBH,MAAa,QAAbA,WAAa,aAAbA,EAAeE,gBAAgBnE,UAAS;MAElE,IAAI1B,MAAkB4F,GAAgB/F,KAAKG,gBAAgB4F;MAC3D,IAAI7F,MAAqB+F,GAAmBjG,KAAKE,mBAAmB+F;AAAiB;AA6H5F;;;EAvcG,oBAAAC;;KACI5F,IAAAN,KAAKmG,sBAAkB,QAAA7F,WAAA,aAAAA,EAAA8F;IACvBpG,KAAKmG,mBAAmB;;EAG5B,iBAAAE;IACI,MAAMC,IAAW,IAAIC,iBAAiBvG,KAAK6E;IAC3CyB,EAASE,QAAQxG,KAAK+B,aAAa;MAAE0E,WAAW;MAAMC,YAAY;;IAClE1G,KAAKmG,mBAAmBG;;EAG5B,gBAAAK;IACIC,EAAc5G,KAAK+B;IACnB/B,KAAKqF;;EAGT,kBAAAwB;IACI7G,KAAKC,qBAAqB6G,SAAQC,KAAMA;IACxC/G,KAAKC,uBAAuB;;;;EAOhC,qBAAA+G;IACI,IAAIhH,KAAKoE,UAAU;IACnBpE,KAAK+E;;EAIT,aAAAkC,CAAc/E;IACV,KAAKgF,EAAmBhF,GAAOlC,KAAK+B,cAAc;IAClD/B,KAAKiB,WAAWC;;EAIpB,yBAAMiG,EAAsBrE,SAAQ9B,MAAEA;IAClC,IAAIhB,KAAKgB,SAASA,GAAMhB,KAAKgB,OAAOA;IACpC,IAAIA,GAAM;IACVhB,KAAKkF,2BAA2B;;;;;;;;;EAYpC,kBAAMkC;IACF,KAAKpH,KAAKgB,QAAQhB,KAAKgD,UAAU;IACjChD,KAAKqH;;;;;;SAST,iBAAMC;IACF,IAAItH,KAAKgB,QAAQhB,KAAKgD,UAAU;IAChChD,KAAKqH;;;;;;;;;SAYT,cAAME,CAASnG,GAA2BmB,IAAsC;IAAE6E,cAAc;;IAC5F,MAAMI,IAAW,IAAIC,IAAIC,MAAMC,QAAQvG,KAAUA,IAAS,EAACA;IAC3D,MAAMM,UAAoB1B,KAAK2B;IAC/B,KAAK3B,KAAKgB,MAAM;YACNhB,KAAKsH;YACLM;;IAGVJ,EAASV,SAAQhG;;OACbR,IAAAoB,EAAWc,MAAKC,KAAUA,EAAO3B,UAAUA,SAAQ,QAAAR,WAAA,aAAAA,EAAAmE;AAAO;IAG9D,IAAIlC,EAAQ6E,cAAc;YAChBpH,KAAKoH;YACLQ;;;;;EAQd,sBAAAtC,CAAuBuC;;IACnB,OAAMzD,UAAEA,KAAapE;IACrB,MAAM8H,KAAaC,KAAAzH,IAAAuH,MAAQ,QAARA,WAAQ,aAARA,EAAW,QAAE,QAAAvH,WAAA,aAAAA,EAAEQ,WAAK,QAAAiH,WAAA,IAAAA,IAAI;IAC3C,IAAI3D,GAAU;MACV,IAAIpE,KAAKc,OAAOd,KAAKc,QAAQ;MAC7Bd,KAAK+E;WACF,IAAI/E,KAAKc,UAAUgH,GAAY;MAClC9H,KAAK+E;WACF;MACH/E,KAAKc,QAAQgH;;;EAMrB,kBAAMvC,CAAasC,GAAUG,GAAWC;;IACpC,OAAM7E,OAAEA,GAAKgB,UAAEA,GAAQxD,iBAAEA,GAAeE,OAAEA,KAAUd;IACpD,MAAMkI,IAAaD,MAAa,UAAUJ,IAAW/G;IACrD,MAAMqH,IAAaF,MAAa,UAAUJ,IAAWzE;IACrD,IAAIgB,GAAU;IACd,MAAM0D,KAAaC,KAAAzH,IAAAM,MAAe,QAAfA,WAAe,aAAfA,EAAkB,QAAE,QAAAN,WAAA,aAAAA,EAAEQ,WAAK,QAAAiH,WAAA,IAAAA,IAAI;IAClD,IAAIE,MAAa,WAAWJ,MAAaC,GAAY9H,KAAK+E,qCACrD;MACD,MAAMR,UAAwBvE,KAAKsC,UAAUuF;MAC7C,OAAM/G,OAAEA,GAAKwC,SAAEA,KAAYiB,KAAkB;QAAEzD,OAAOoH;QAAY5E,SAAS6E;;MAC3EnI,KAAKY,kBAAkBE,IAAQ,EAAC;QAAEA;QAAOwC;YAAa;;;;;EAO9D,iBAAI8E;IACA,OAAMhF,OAAEA,GAAKxC,iBAAEA,GAAeR,wBAAEA,GAAsBwB,aAAEA,KAAgB5B;IACxE,KAAK4B,KAAexB,EAAuByB,WAAW,GAAG,OAAOwG,EAAIjF,SAC/D,IAAIhD,EAAuByB,WAAW,GAAG,OAAO,GAAGwG,EAAIjI,EAAuB,GAAGkD;IAEtF,OAAO+E,EAAI,mCAAmC;MAAEC,OAAO1H,EAAgBiB;;;EAG3E,0BAAI0G;IACA,OAAMC,WAAEA,GAASJ,eAAEA,KAAkBpI;IACrC,IAAIwI,KAAaJ,EAAcvG,SAAS2G,GAAW,OAAO,GAAGJ,EAAcK,UAAU,GAAGD,YACnF,OAAOJ;;EAGhB,cAAAf;IACI,OAAMpG,YAAEA,KAAejB;IACvBiB,MAAU,QAAVA,WAAU,aAAVA,EAAYwD;IACZxD,MAAU,QAAVA,WAAU,aAAVA,EAAYC;IACZD,EAAWyH,cAAc,IAAIC,WAAW;;;;EA2L5C,mBAAAC;IACI,OACIC,EACI;MAAAC,IAAG;MACHC,OAAM;MAAI,eACE;OAEXV,EAAI,yCAAyC,EAACrI,KAAK4B;;EAKhE,UAAAoH;IACI,OAAMpH,aAAEA,GAAWb,QAAEA,KAAWf;IAChC,MAAMiJ,IAAWrH,KAAeb;IAChC,MAAMmI,IAAUD,IAAW,WAAW;IACtC,MAAME,IAAWF,MAAarH,IAAc,UAAU;IAEtD,OACIiH,EAACK,GAAO;MACJH,OAAM;MACNK,SAAUH,KAAYjJ,KAAKa,wBAAyByD;MACpDtB,UAAWiG,KAAYjJ,KAAKgD,YAAasB;MAAS,cACrC2E,KAAYZ,EAAI,yCAA0C/D;MACvE+E,MAAOJ,KAAY,YAAa3E;OAEhCuE,EAAA;MAASQ,MAAMF;;;EAK3B,MAAAG;IACI,OAAM1H,aAAEA,GAAWb,QAAEA,GAAMC,MAAEA,KAAShB;IACtC,MAAMuJ,IAAoB,EAAC;IAC3B,IAAI3H,KAAeb,GAAQwI,EAAkBlI,KAAK;IAClD,IAAIO,GAAa2H,EAAkBlI,KAAK;IAExC,OACIwH,EAAiB;MAAA/E,KAAA;MAAA0F,UAAUxJ,KAAK0E;OAC5BmE,EAAA;MAAA/E,KAAA;MAAKiF,OAAOQ,EAAkBE,KAAK;OAC/BZ,EACI;MAAA/E,KAAA;MAAAiF,OAAM;MACNW,KAAKC,KAAO3J,KAAK4J,oBAAoBD;MACrCP,SAASpJ,KAAKwE;MACdqF,WAAU;OAEVhB,EACI;MAAA/E,KAAA;MAAAiF,OAAM;MACE;MACRM,MAAK;MACLS,MAAOlI,KAAe,cAAe0C;MACrCoF,KAAKC,KAAO3J,KAAKiB,aAAa0I;MAC9BP,SAASpJ,KAAK+C;MACdgH,WAAW/J,KAAK0D;MAChBsG,YAAYhK,KAAKuD;MACjBP,UAAUhD,KAAKgD;MACO,yBAACpB,KAAe;MACvB,iBAACA,KAAe,iBAAkB0C;MAClC,iBAAC1C,KAAe,KAAKZ,OAAWsD;MACnC,iBAAGtE,KAAKoI,iBAAiBxG,KAAeb,IAAS,IAAIsH,EAAI,kCAAkC;MAAI,oBACxFzG,KAAe,wBAAyB0C;OAE1DtE,KAAKuI,0BAGbvI,KAAKgJ,gBACHpH,KAAe5B,KAAK4I,wBAE1B5I,KAAK4B,cAAc,KAChBiH,EAAA;MAAA/E,KAAA;MACI4F,KAAKC,KAAO3J,KAAKkD,iBAAiByG;MAClCM,gBAAgBjK,KAAKiB;MACrBD,MAAMhB,KAAKgB;MAAI,cACHhB,KAAKkK;MACjBC,WAAWnK,KAAKW;MAChByJ,WAAWpK,KAAKqK;MAChBC,OAAOtK,KAAKU;MACZsJ,YAAYhK,KAAKuD;OAEjBsF,EAAK;MAAA/E,KAAA;MAAAiF,OAAM;OACPF,EAAA;MAAA/E,KAAA;MACI4F,KAAKC,KAAO3J,KAAKuK,sBAAsBZ;MACvCZ,OAAM;MACNyB,UAAS;MACTC,SAASzK,KAAKG;MACd4J,WAAW/J,KAAK0D;OAEhBmF,EAAA;MAAA/E,KAAA;MAAM4G,MAAK;SAEf7B,EAAA;MAAA/E,KAAA;MACIuF,MAAK;MACLK,KAAKC,KAAO3J,KAAKyB,aAAakI;MAC9Bb,IAAG;MACHU,UAAUxJ,KAAK4C;MACfwB,UAAUpE,KAAKoE;MACfxD,iBAAiBZ,KAAKY;MACtB+J,SAAS,MAAM3K,KAAK+E;MACpBC,gBAAgBhF,KAAKgF;MACrB5B,OAAOiF,EAAI,mCAAmC,EAACrI,KAAK4K;OAEpD/B,EAAA;MAAA/E,KAAA;SAEJ+E,EAAA;MAAA/E,KAAA;MACI4F,KAAKC,KAAO3J,KAAK6K,yBAAyBlB;MAC1CZ,OAAM;MACNyB,UAAS;MACTC,SAASzK,KAAKE;MACd6J,WAAW/J,KAAK0D;OAEhBmF,EAAM;MAAA/E,KAAA;MAAA4G,MAAK","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-radio-group.entry.esm.js","sources":["src/components/q2-radio-group/q2-radio-group.scss?tag=q2-radio-group&encapsulation=shadow","src/components/q2-radio-group/q2-radio-group.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n --comp-default-radio-group-margin: #{var-list(var-prefixer(radio-group-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(radio-group-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-radio-group-margin, --comp-default-radio-group-margin);\n}\n\nfieldset {\n padding: var(--tct-radio-group-fieldset-padding, 0);\n margin: 0;\n border: 0;\n position: relative;\n}\n\n.label-row {\n display: grid;\n grid-template-columns: 1fr 24px;\n grid-template-areas: 'label icon';\n column-gap: var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px));\n\n color: var-list(--tct-radio-group-label-font-color, inherit);\n font-size: var-list(--tct-radio-group-label-font-size, inherit);\n font-weight: var-list(--tct-radio-group-label-font-weight, 600);\n text-transform: var-list(--tct-radio-group-label-text-transform, none);\n letter-spacing: var-list(--tct-radio-group-label-letter-spacing, inherit);\n\n q2-icon {\n grid-area: icon;\n margin-top: -2px;\n margin-bottom: -2px;\n }\n}\n\n.group-legend {\n font-weight: 600;\n}\n\nlegend.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n border: 0;\n}\n\n.optional-tag {\n margin-left: var-list(--tct-radio-group-label-optional-margin-left, --app-scale-1x, 5px);\n color: var-list(\n var-prefixer(radio-group-label-optional-color),\n var-prefixer(a11y-color),\n var-prefixer(a11y-gray-color),\n var-prefixer(gray-7),\n var-prefixer(gray-d1),\n --app-gray-d1,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(radio-group-label-optional-font-size), 12px);\n font-weight: var-list(var-prefixer(radio-group-label-optional-font-weight), 400);\n}\n\n.tile-container {\n &,\n .options-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n flex-grow: 1;\n }\n}\n\n.options-container {\n --comp-default-margin: #{var-list(--app-scale-1x, 5px)} 0;\n --comp-options-margin: #{var-list(var-prefixer(radio-group-options-margin), --comp-default-margin, unquote('5px 0'))};\n margin: var(--comp-options-margin);\n padding: var-list(var-prefixer(radio-group-options-padding), --app-scale-0x, 0px);\n border-width: 1px;\n border-color: transparent;\n border-style: solid;\n border-radius: var-list(--tct-radio-group-border-radius, --app-border-radius-1, 4px);\n\n :host([has-error]) & {\n border-color: var-list(--tct-radio-group-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n :host([has-error='false']) & {\n border-color: transparent;\n }\n}\n\n.tile-container {\n &.left {\n justify-content: start;\n }\n &.right {\n justify-content: end;\n }\n\n .options-container {\n gap: var-list(var-prefixer(radio-group-tile-gap), --app-scale-2x, 10px);\n justify-content: inherit;\n }\n}\n","import {\n Component,\n Prop,\n Element,\n h,\n Listen,\n EventEmitter,\n Event,\n ComponentInterface,\n Watch,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, isEventFromElement, overrideFocus, renderLabel } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Radio Group\n * @category Forms\n * @summary Use for selecting exactly one option from a small set of choices.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({ tag: 'q2-radio-group', shadow: true, styleUrl: 'q2-radio-group.scss' })\nexport class Q2RadioGroup implements ComponentInterface {\n // #region Own Properties\n\n _id: string = `radio-group-${createGuid()}`;\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Determines if all radios in the group are put into a `disabled` state. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Determines if the component should display in an errant state. */\n @Prop({ reflect: true })\n hasError: boolean = false;\n\n /**\n * Hide's the group's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Text for the fieldset legend describing the radio group.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /** Identifier which ties all radios together for accessibility and DOM selection. */\n @Prop({ reflect: true })\n name: string;\n\n /** Appends \"(optional)\" to the group label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /** Determines if all radios in the group can be focused, but not interacted with. */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** Provides alignment direction for tile-style radio group. */\n @Prop({ reflect: true })\n tileAlignment: 'left' | 'center' | 'right' = 'center';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n tilelayout: boolean;\n\n /** Show the radio group as a horizontal set of tiles. */\n @Prop({ reflect: true, mutable: true })\n tileLayout: boolean;\n\n /** The `value` of the currently selected `q2-radio` within the `q2-radio-group`. */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.checkedRadioExists();\n this.onMutationObserved();\n this.handleDeprecatedTilelayout(this.tilelayout);\n }\n\n componentDidLoad() {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n overrideFocus(this.hostElement);\n this.checkedRadioExists();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (event.target === this.hostElement) {\n if (!this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const radio = this.hostElement.querySelector('q2-radio[checked]') || this.hostElement.querySelector('q2-radio');\n radio?.dispatchEvent(new FocusEvent('focus'));\n }\n\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n const currentValue = (event.target as HTMLElement).getAttribute('value') || this.value;\n let index = this.radioElements.findIndex(\n el => el === event.target || (el as HTMLElement).getAttribute('value') === currentValue\n );\n let sign = 0;\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n sign = -1;\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n sign = 1;\n break;\n }\n\n if (index === -1 || sign === 0) {\n return;\n }\n index += sign;\n index = sign < 0 ? Math.max(0, index) : Math.min(this.radioElements.length - 1, index);\n event.preventDefault();\n if (!this.readonly) {\n this.value = this.radioElements[index].value;\n }\n this.radioElements[index].dispatchEvent(new FocusEvent('focus'));\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<q2-radio>` option with the provided value.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n this.radioElements.forEach(radio => {\n if (value !== radio.value) return;\n radio.click();\n });\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledUpdated() {\n this.radioElements.forEach(radio => {\n radio.groupDisabled = this.disabled;\n });\n }\n\n @Watch('name')\n nameUpdated() {\n this.radioElements.forEach(radio => {\n radio.name = this.name || this._id;\n });\n }\n\n @Watch('readonly')\n readonlyUpdated() {\n const readonly = this.readonly;\n this.radioElements.forEach(radio => (radio.groupReadonly = readonly));\n }\n\n @Watch('tilelayout')\n handleDeprecatedTilelayout(tilelayout: boolean) {\n if (typeof tilelayout !== 'boolean') return;\n this.tileLayout = tilelayout;\n this.tilelayout = undefined;\n }\n\n @Watch('tileLayout')\n tileLayoutUpdated(tileLayout: boolean) {\n this.radioElements.forEach(radio => {\n radio.groupTileLayout = tileLayout;\n });\n }\n\n @Watch('value')\n valueUpdated(newVal: string) {\n this.radioElements.forEach(radio => {\n radio.checked = newVal === radio.value;\n // Removes checked attribute from trailing radios, if multiple individual radio's are intially checked (checked={true}) at componentDidLoad\n if (!radio.checked) {\n radio.removeAttribute('checked');\n radio.tabIndex = -1;\n } else if (radio.checked) {\n radio.tabIndex = 0;\n }\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get inputId() {\n return this._id;\n }\n\n get radioElements() {\n return Array.from(this.hostElement.querySelectorAll('q2-radio')) as HTMLQ2RadioElement[];\n }\n\n checkedRadioExists = () => {\n // Returns first checked individual q2-radio or undefined if none are set to checked={true}\n const firstCheckedRadio = this.radioElements.find(radio => radio.checked === true) || undefined;\n\n // Changes radio-group[\"value\"] if inital value is not set and if a any individual q2-radio is checked\n if (!this.value && !!firstCheckedRadio) {\n this.value = firstCheckedRadio.value;\n } else if (!this.value && !firstCheckedRadio) {\n // if no radios are meant to be checked, then assign first radio tabIndex of 0\n if (this.radioElements.length) this.radioElements[0].tabIndex = 0;\n }\n };\n\n inputDom() {\n if (this.tileLayout) {\n const { tileAlignment } = this;\n const alignment = ['left', 'center', 'right'].includes(tileAlignment) ? tileAlignment : 'center';\n return (\n <div class={`tile-container ${alignment}`}>\n <div class=\"options-container\">\n <slot />\n </div>\n </div>\n );\n } else {\n return (\n <div class=\"options-container\">\n <slot />\n </div>\n );\n }\n }\n\n onInnerRadioChange = (event: CustomEvent) => {\n event.stopImmediatePropagation();\n if (this.readonly) return;\n\n mirrorEmit(this, ['change', 'tctChange'], { value: event.detail.value });\n };\n\n onMutationObserved = () => {\n this.valueUpdated(this.value);\n this.nameUpdated();\n this.disabledUpdated();\n this.readonlyUpdated();\n this.tileLayoutUpdated(this.tileLayout);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const showLabel = this.label || this.optional || this.readonly;\n const { hasError } = this;\n const showLabelRow = (showLabel && !this.hideLabel) || hasError;\n return (\n <Fragment>\n {showLabelRow && (\n <div class=\"label-row\">\n {showLabel && !this.hideLabel && <div class=\"group-legend\">{renderLabel(this)}</div>}\n {hasError && (\n <q2-icon\n type=\"error\"\n test-id=\"iconError\"\n ></q2-icon>\n )}\n </div>\n )}\n <fieldset\n onChange={this.onInnerRadioChange}\n aria-invalid={hasError ? `${hasError}` : undefined}\n >\n {showLabel && <legend class=\"sr-only\">{renderLabel(this)}</legend>}\n {this.inputDom()}\n </fieldset>\n </Fragment>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"q2-radio-group.entry.esm.js","sources":["src/components/q2-radio-group/q2-radio-group.scss?tag=q2-radio-group&encapsulation=shadow","src/components/q2-radio-group/q2-radio-group.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n --comp-default-radio-group-margin: #{var-list(var-prefixer(radio-group-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(radio-group-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-radio-group-margin, --comp-default-radio-group-margin);\n}\n\nfieldset {\n padding: var(--tct-radio-group-fieldset-padding, 0);\n margin: 0;\n border: 0;\n position: relative;\n}\n\n.label-row {\n display: grid;\n grid-template-columns: 1fr 24px;\n grid-template-areas: 'label icon';\n column-gap: var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px));\n\n color: var-list(--tct-radio-group-label-font-color, inherit);\n font-size: var-list(--tct-radio-group-label-font-size, inherit);\n font-weight: var-list(--tct-radio-group-label-font-weight, 600);\n text-transform: var-list(--tct-radio-group-label-text-transform, none);\n letter-spacing: var-list(--tct-radio-group-label-letter-spacing, inherit);\n\n q2-icon {\n grid-area: icon;\n margin-top: -2px;\n margin-bottom: -2px;\n }\n}\n\n.group-legend {\n font-weight: 600;\n}\n\nlegend.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n border: 0;\n}\n\n.optional-tag {\n margin-left: var-list(--tct-radio-group-label-optional-margin-left, --app-scale-1x, 5px);\n color: var-list(\n var-prefixer(radio-group-label-optional-color),\n var-prefixer(a11y-color),\n var-prefixer(a11y-gray-color),\n var-prefixer(gray-7),\n var-prefixer(gray-d1),\n --app-gray-d1,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(radio-group-label-optional-font-size), 12px);\n font-weight: var-list(var-prefixer(radio-group-label-optional-font-weight), 400);\n}\n\n.tile-container {\n &,\n .options-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n flex-grow: 1;\n }\n}\n\n.options-container {\n --comp-default-margin: #{var-list(--app-scale-1x, 5px)} 0;\n --comp-options-margin: #{var-list(var-prefixer(radio-group-options-margin), --comp-default-margin, unquote('5px 0'))};\n margin: var(--comp-options-margin);\n padding: var-list(var-prefixer(radio-group-options-padding), --app-scale-0x, 0px);\n border-width: var-list(--tct-radio-group-border-width, 1px);\n border-color: transparent;\n border-style: solid;\n border-radius: var-list(--tct-radio-group-border-radius, --app-border-radius-1, 4px);\n\n :host([has-error]) & {\n border-color: var-list(--tct-radio-group-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n :host([has-error='false']) & {\n border-color: transparent;\n }\n}\n\n.tile-container {\n &.left {\n justify-content: start;\n }\n &.right {\n justify-content: end;\n }\n\n .options-container {\n gap: var-list(var-prefixer(radio-group-tile-gap), --app-scale-2x, 10px);\n justify-content: inherit;\n }\n}\n","import {\n Component,\n Prop,\n Element,\n h,\n Listen,\n EventEmitter,\n Event,\n ComponentInterface,\n Watch,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, isEventFromElement, overrideFocus, renderLabel } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Radio Group\n * @category Forms\n * @summary Use for selecting exactly one option from a small set of choices.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({ tag: 'q2-radio-group', shadow: true, styleUrl: 'q2-radio-group.scss' })\nexport class Q2RadioGroup implements ComponentInterface {\n // #region Own Properties\n\n _id: string = `radio-group-${createGuid()}`;\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Determines if all radios in the group are put into a `disabled` state. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Determines if the component should display in an errant state. */\n @Prop({ reflect: true })\n hasError: boolean = false;\n\n /**\n * Hide's the group's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Text for the fieldset legend describing the radio group.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /** Identifier which ties all radios together for accessibility and DOM selection. */\n @Prop({ reflect: true })\n name: string;\n\n /** Appends \"(optional)\" to the group label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /** Determines if all radios in the group can be focused, but not interacted with. */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** Provides alignment direction for tile-style radio group. */\n @Prop({ reflect: true })\n tileAlignment: 'left' | 'center' | 'right' = 'center';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n tilelayout: boolean;\n\n /** Show the radio group as a horizontal set of tiles. */\n @Prop({ reflect: true, mutable: true })\n tileLayout: boolean;\n\n /** The `value` of the currently selected `q2-radio` within the `q2-radio-group`. */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.checkedRadioExists();\n this.onMutationObserved();\n this.handleDeprecatedTilelayout(this.tilelayout);\n }\n\n componentDidLoad() {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n overrideFocus(this.hostElement);\n this.checkedRadioExists();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (event.target === this.hostElement) {\n if (!this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const radio = this.hostElement.querySelector('q2-radio[checked]') || this.hostElement.querySelector('q2-radio');\n radio?.dispatchEvent(new FocusEvent('focus'));\n }\n\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n const currentValue = (event.target as HTMLElement).getAttribute('value') || this.value;\n let index = this.radioElements.findIndex(\n el => el === event.target || (el as HTMLElement).getAttribute('value') === currentValue\n );\n let sign = 0;\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n sign = -1;\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n sign = 1;\n break;\n }\n\n if (index === -1 || sign === 0) {\n return;\n }\n index += sign;\n index = sign < 0 ? Math.max(0, index) : Math.min(this.radioElements.length - 1, index);\n event.preventDefault();\n if (!this.readonly) {\n this.value = this.radioElements[index].value;\n }\n this.radioElements[index].dispatchEvent(new FocusEvent('focus'));\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<q2-radio>` option with the provided value.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n this.radioElements.forEach(radio => {\n if (value !== radio.value) return;\n radio.click();\n });\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledUpdated() {\n this.radioElements.forEach(radio => {\n radio.groupDisabled = this.disabled;\n });\n }\n\n @Watch('name')\n nameUpdated() {\n this.radioElements.forEach(radio => {\n radio.name = this.name || this._id;\n });\n }\n\n @Watch('readonly')\n readonlyUpdated() {\n const readonly = this.readonly;\n this.radioElements.forEach(radio => (radio.groupReadonly = readonly));\n }\n\n @Watch('tilelayout')\n handleDeprecatedTilelayout(tilelayout: boolean) {\n if (typeof tilelayout !== 'boolean') return;\n this.tileLayout = tilelayout;\n this.tilelayout = undefined;\n }\n\n @Watch('tileLayout')\n tileLayoutUpdated(tileLayout: boolean) {\n this.radioElements.forEach(radio => {\n radio.groupTileLayout = tileLayout;\n });\n }\n\n @Watch('value')\n valueUpdated(newVal: string) {\n this.radioElements.forEach(radio => {\n radio.checked = newVal === radio.value;\n // Removes checked attribute from trailing radios, if multiple individual radio's are intially checked (checked={true}) at componentDidLoad\n if (!radio.checked) {\n radio.removeAttribute('checked');\n radio.tabIndex = -1;\n } else if (radio.checked) {\n radio.tabIndex = 0;\n }\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get inputId() {\n return this._id;\n }\n\n get radioElements() {\n return Array.from(this.hostElement.querySelectorAll('q2-radio')) as HTMLQ2RadioElement[];\n }\n\n checkedRadioExists = () => {\n // Returns first checked individual q2-radio or undefined if none are set to checked={true}\n const firstCheckedRadio = this.radioElements.find(radio => radio.checked === true) || undefined;\n\n // Changes radio-group[\"value\"] if inital value is not set and if a any individual q2-radio is checked\n if (!this.value && !!firstCheckedRadio) {\n this.value = firstCheckedRadio.value;\n } else if (!this.value && !firstCheckedRadio) {\n // if no radios are meant to be checked, then assign first radio tabIndex of 0\n if (this.radioElements.length) this.radioElements[0].tabIndex = 0;\n }\n };\n\n inputDom() {\n if (this.tileLayout) {\n const { tileAlignment } = this;\n const alignment = ['left', 'center', 'right'].includes(tileAlignment) ? tileAlignment : 'center';\n return (\n <div class={`tile-container ${alignment}`}>\n <div class=\"options-container\">\n <slot />\n </div>\n </div>\n );\n } else {\n return (\n <div class=\"options-container\">\n <slot />\n </div>\n );\n }\n }\n\n onInnerRadioChange = (event: CustomEvent) => {\n event.stopImmediatePropagation();\n if (this.readonly) return;\n\n mirrorEmit(this, ['change', 'tctChange'], { value: event.detail.value });\n };\n\n onMutationObserved = () => {\n this.valueUpdated(this.value);\n this.nameUpdated();\n this.disabledUpdated();\n this.readonlyUpdated();\n this.tileLayoutUpdated(this.tileLayout);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const showLabel = this.label || this.optional || this.readonly;\n const { hasError } = this;\n const showLabelRow = (showLabel && !this.hideLabel) || hasError;\n return (\n <Fragment>\n {showLabelRow && (\n <div class=\"label-row\">\n {showLabel && !this.hideLabel && <div class=\"group-legend\">{renderLabel(this)}</div>}\n {hasError && (\n <q2-icon\n type=\"error\"\n test-id=\"iconError\"\n ></q2-icon>\n )}\n </div>\n )}\n <fieldset\n onChange={this.onInnerRadioChange}\n aria-invalid={hasError ? `${hasError}` : undefined}\n >\n {showLabel && <legend class=\"sr-only\">{renderLabel(this)}</legend>}\n {this.inputDom()}\n </fieldset>\n </Fragment>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { r as t, c as r, h as i, F as o, g as a } from "./index-CGkHOjh1.js";
|
|
2
2
|
|
|
3
|
-
import { c as e, o as n, i as s, r as d } from "./index-
|
|
3
|
+
import { c as e, o as n, i as s, r as d } from "./index-C4PILj1_.js";
|
|
4
4
|
|
|
5
5
|
import { m as l } from "./mirror-emit-DUjY_ucm.js";
|
|
6
6
|
|
|
7
|
-
const p = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{--comp-default-radio-group-margin:var(--tct-radio-group-margin-top, var(--t-radio-group-margin-top, var(--app-scale-5x, 25px))) 0 var(--tct-radio-group-margin-bottom, var(--t-radio-group-margin-bottom, var(--app-scale-5x, 25px)));display:block;margin:var(--tct-radio-group-margin, var(--comp-default-radio-group-margin))}fieldset{padding:var(--tct-radio-group-fieldset-padding, 0);margin:0;border:0;position:relative}.label-row{display:grid;grid-template-columns:1fr 24px;grid-template-areas:"label icon";column-gap:var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px));color:var(--tct-radio-group-label-font-color, inherit);font-size:var(--tct-radio-group-label-font-size, inherit);font-weight:var(--tct-radio-group-label-font-weight, 600);text-transform:var(--tct-radio-group-label-text-transform, none);letter-spacing:var(--tct-radio-group-label-letter-spacing, inherit)}.label-row q2-icon{grid-area:icon;margin-top:-2px;margin-bottom:-2px}.group-legend{font-weight:600}legend.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;border:0}.optional-tag{margin-left:var(--tct-radio-group-label-optional-margin-left, var(--app-scale-1x, 5px));color:var(--tct-radio-group-label-optional-color, var(--t-radio-group-label-optional-color, var(--tct-a11y-color, var(--t-a11y-color, var(--tct-a11y-gray-color, var(--t-a11y-gray-color, var(--tct-gray-7, var(--t-gray-7, var(--tct-gray-d1, var(--t-gray-d1, var(--app-gray-d1, rgba(77, 77, 77, 0.77))))))))))));font-size:var(--tct-radio-group-label-optional-font-size, var(--t-radio-group-label-optional-font-size, 12px));font-weight:var(--tct-radio-group-label-optional-font-weight, var(--t-radio-group-label-optional-font-weight, 400))}.tile-container,.tile-container .options-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex-grow:1}.options-container{--comp-default-margin:var(--app-scale-1x, 5px) 0;--comp-options-margin:var(--tct-radio-group-options-margin, var(--t-radio-group-options-margin, var(--comp-default-margin, 5px 0)));margin:var(--comp-options-margin);padding:var(--tct-radio-group-options-padding, var(--t-radio-group-options-padding, var(--app-scale-0x, 0px)));border-width:1px;border-color:transparent;border-style:solid;border-radius:var(--tct-radio-group-border-radius, var(--app-border-radius-1, 4px))}:host([has-error]) .options-container{border-color:var(--tct-radio-group-error-border-color, var(--const-stoplight-alert, #d20a0a))}:host([has-error=false]) .options-container{border-color:transparent}.tile-container.left{justify-content:start}.tile-container.right{justify-content:end}.tile-container .options-container{gap:var(--tct-radio-group-tile-gap, var(--t-radio-group-tile-gap, var(--app-scale-2x, 10px)));justify-content:inherit}';
|
|
7
|
+
const p = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{--comp-default-radio-group-margin:var(--tct-radio-group-margin-top, var(--t-radio-group-margin-top, var(--app-scale-5x, 25px))) 0 var(--tct-radio-group-margin-bottom, var(--t-radio-group-margin-bottom, var(--app-scale-5x, 25px)));display:block;margin:var(--tct-radio-group-margin, var(--comp-default-radio-group-margin))}fieldset{padding:var(--tct-radio-group-fieldset-padding, 0);margin:0;border:0;position:relative}.label-row{display:grid;grid-template-columns:1fr 24px;grid-template-areas:"label icon";column-gap:var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px));color:var(--tct-radio-group-label-font-color, inherit);font-size:var(--tct-radio-group-label-font-size, inherit);font-weight:var(--tct-radio-group-label-font-weight, 600);text-transform:var(--tct-radio-group-label-text-transform, none);letter-spacing:var(--tct-radio-group-label-letter-spacing, inherit)}.label-row q2-icon{grid-area:icon;margin-top:-2px;margin-bottom:-2px}.group-legend{font-weight:600}legend.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;border:0}.optional-tag{margin-left:var(--tct-radio-group-label-optional-margin-left, var(--app-scale-1x, 5px));color:var(--tct-radio-group-label-optional-color, var(--t-radio-group-label-optional-color, var(--tct-a11y-color, var(--t-a11y-color, var(--tct-a11y-gray-color, var(--t-a11y-gray-color, var(--tct-gray-7, var(--t-gray-7, var(--tct-gray-d1, var(--t-gray-d1, var(--app-gray-d1, rgba(77, 77, 77, 0.77))))))))))));font-size:var(--tct-radio-group-label-optional-font-size, var(--t-radio-group-label-optional-font-size, 12px));font-weight:var(--tct-radio-group-label-optional-font-weight, var(--t-radio-group-label-optional-font-weight, 400))}.tile-container,.tile-container .options-container{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;flex-grow:1}.options-container{--comp-default-margin:var(--app-scale-1x, 5px) 0;--comp-options-margin:var(--tct-radio-group-options-margin, var(--t-radio-group-options-margin, var(--comp-default-margin, 5px 0)));margin:var(--comp-options-margin);padding:var(--tct-radio-group-options-padding, var(--t-radio-group-options-padding, var(--app-scale-0x, 0px)));border-width:var(--tct-radio-group-border-width, 1px);border-color:transparent;border-style:solid;border-radius:var(--tct-radio-group-border-radius, var(--app-border-radius-1, 4px))}:host([has-error]) .options-container{border-color:var(--tct-radio-group-error-border-color, var(--const-stoplight-alert, #d20a0a))}:host([has-error=false]) .options-container{border-color:transparent}.tile-container.left{justify-content:start}.tile-container.right{justify-content:end}.tile-container .options-container{gap:var(--tct-radio-group-tile-gap, var(--t-radio-group-tile-gap, var(--app-scale-2x, 10px)));justify-content:inherit}';
|
|
8
8
|
|
|
9
9
|
const c = class {
|
|
10
10
|
constructor(i) {
|
|
@@ -181,23 +181,23 @@ const c = class {
|
|
|
181
181
|
const {hasError: r} = this;
|
|
182
182
|
const a = t && !this.hideLabel || r;
|
|
183
183
|
return i(o, {
|
|
184
|
-
key: "
|
|
184
|
+
key: "3fa5b7ba14cd74a3544ad38d40c74127126f0fc6"
|
|
185
185
|
}, a && i("div", {
|
|
186
|
-
key: "
|
|
186
|
+
key: "254b8a8ec9f21fccf2227966f56e366682957da8",
|
|
187
187
|
class: "label-row"
|
|
188
188
|
}, t && !this.hideLabel && i("div", {
|
|
189
|
-
key: "
|
|
189
|
+
key: "f1176458f14bfc50adaab4a0d5342a7fcf58c6a4",
|
|
190
190
|
class: "group-legend"
|
|
191
191
|
}, d(this)), r && i("q2-icon", {
|
|
192
|
-
key: "
|
|
192
|
+
key: "7b829af0555cd13090459c5dc83ba22ce4cbe92c",
|
|
193
193
|
type: "error",
|
|
194
194
|
"test-id": "iconError"
|
|
195
195
|
})), i("fieldset", {
|
|
196
|
-
key: "
|
|
196
|
+
key: "1eb9e6e18c1a5442d4582f23649b06d3864412b7",
|
|
197
197
|
onChange: this.onInnerRadioChange,
|
|
198
198
|
"aria-invalid": r ? `${r}` : undefined
|
|
199
199
|
}, t && i("legend", {
|
|
200
|
-
key: "
|
|
200
|
+
key: "2ee4c9b44c86077fbda3f9eef02da24546cb6ec6",
|
|
201
201
|
class: "sr-only"
|
|
202
202
|
}, d(this)), this.inputDom()));
|
|
203
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["q2RadioGroupCss","Q2RadioGroup","constructor","hostRef","this","_id","createGuid","disabled","hasError","tileAlignment","checkedRadioExists","firstCheckedRadio","radioElements","find","radio","checked","undefined","value","length","tabIndex","onInnerRadioChange","event","stopImmediatePropagation","readonly","mirrorEmit","detail","onMutationObserved","valueUpdated","nameUpdated","disabledUpdated","readonlyUpdated","tileLayoutUpdated","tileLayout","componentWillLoad","handleDeprecatedTilelayout","tilelayout","componentDidLoad","observer","MutationObserver","observe","hostElement","childList","mutationObserver","overrideFocus","onHostElementChange","target","onchange","delegateFocus","isEventFromElement","querySelector","dispatchEvent","FocusEvent","keydownHandler","currentValue","getAttribute","index","findIndex","el","sign","key","Math","max","min","preventDefault","setValue","forEach","click","groupDisabled","name","groupReadonly","groupTileLayout","newVal","removeAttribute","inputId","Array","from","querySelectorAll","inputDom","alignment","includes","h","class","render","showLabel","label","optional","showLabelRow","hideLabel","Fragment","renderLabel","type","onChange"],"sources":["src/components/q2-radio-group/q2-radio-group.scss?tag=q2-radio-group&encapsulation=shadow","src/components/q2-radio-group/q2-radio-group.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n --comp-default-radio-group-margin: #{var-list(var-prefixer(radio-group-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(radio-group-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-radio-group-margin, --comp-default-radio-group-margin);\n}\n\nfieldset {\n padding: var(--tct-radio-group-fieldset-padding, 0);\n margin: 0;\n border: 0;\n position: relative;\n}\n\n.label-row {\n display: grid;\n grid-template-columns: 1fr 24px;\n grid-template-areas: 'label icon';\n column-gap: var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px));\n\n color: var-list(--tct-radio-group-label-font-color, inherit);\n font-size: var-list(--tct-radio-group-label-font-size, inherit);\n font-weight: var-list(--tct-radio-group-label-font-weight, 600);\n text-transform: var-list(--tct-radio-group-label-text-transform, none);\n letter-spacing: var-list(--tct-radio-group-label-letter-spacing, inherit);\n\n q2-icon {\n grid-area: icon;\n margin-top: -2px;\n margin-bottom: -2px;\n }\n}\n\n.group-legend {\n font-weight: 600;\n}\n\nlegend.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n border: 0;\n}\n\n.optional-tag {\n margin-left: var-list(--tct-radio-group-label-optional-margin-left, --app-scale-1x, 5px);\n color: var-list(\n var-prefixer(radio-group-label-optional-color),\n var-prefixer(a11y-color),\n var-prefixer(a11y-gray-color),\n var-prefixer(gray-7),\n var-prefixer(gray-d1),\n --app-gray-d1,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(radio-group-label-optional-font-size), 12px);\n font-weight: var-list(var-prefixer(radio-group-label-optional-font-weight), 400);\n}\n\n.tile-container {\n &,\n .options-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n flex-grow: 1;\n }\n}\n\n.options-container {\n --comp-default-margin: #{var-list(--app-scale-1x, 5px)} 0;\n --comp-options-margin: #{var-list(var-prefixer(radio-group-options-margin), --comp-default-margin, unquote('5px 0'))};\n margin: var(--comp-options-margin);\n padding: var-list(var-prefixer(radio-group-options-padding), --app-scale-0x, 0px);\n border-width: 1px;\n border-color: transparent;\n border-style: solid;\n border-radius: var-list(--tct-radio-group-border-radius, --app-border-radius-1, 4px);\n\n :host([has-error]) & {\n border-color: var-list(--tct-radio-group-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n :host([has-error='false']) & {\n border-color: transparent;\n }\n}\n\n.tile-container {\n &.left {\n justify-content: start;\n }\n &.right {\n justify-content: end;\n }\n\n .options-container {\n gap: var-list(var-prefixer(radio-group-tile-gap), --app-scale-2x, 10px);\n justify-content: inherit;\n }\n}\n","import {\n Component,\n Prop,\n Element,\n h,\n Listen,\n EventEmitter,\n Event,\n ComponentInterface,\n Watch,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, isEventFromElement, overrideFocus, renderLabel } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Radio Group\n * @category Forms\n * @summary Use for selecting exactly one option from a small set of choices.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({ tag: 'q2-radio-group', shadow: true, styleUrl: 'q2-radio-group.scss' })\nexport class Q2RadioGroup implements ComponentInterface {\n // #region Own Properties\n\n _id: string = `radio-group-${createGuid()}`;\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Determines if all radios in the group are put into a `disabled` state. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Determines if the component should display in an errant state. */\n @Prop({ reflect: true })\n hasError: boolean = false;\n\n /**\n * Hide's the group's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Text for the fieldset legend describing the radio group.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /** Identifier which ties all radios together for accessibility and DOM selection. */\n @Prop({ reflect: true })\n name: string;\n\n /** Appends \"(optional)\" to the group label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /** Determines if all radios in the group can be focused, but not interacted with. */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** Provides alignment direction for tile-style radio group. */\n @Prop({ reflect: true })\n tileAlignment: 'left' | 'center' | 'right' = 'center';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n tilelayout: boolean;\n\n /** Show the radio group as a horizontal set of tiles. */\n @Prop({ reflect: true, mutable: true })\n tileLayout: boolean;\n\n /** The `value` of the currently selected `q2-radio` within the `q2-radio-group`. */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.checkedRadioExists();\n this.onMutationObserved();\n this.handleDeprecatedTilelayout(this.tilelayout);\n }\n\n componentDidLoad() {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n overrideFocus(this.hostElement);\n this.checkedRadioExists();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (event.target === this.hostElement) {\n if (!this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const radio = this.hostElement.querySelector('q2-radio[checked]') || this.hostElement.querySelector('q2-radio');\n radio?.dispatchEvent(new FocusEvent('focus'));\n }\n\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n const currentValue = (event.target as HTMLElement).getAttribute('value') || this.value;\n let index = this.radioElements.findIndex(\n el => el === event.target || (el as HTMLElement).getAttribute('value') === currentValue\n );\n let sign = 0;\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n sign = -1;\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n sign = 1;\n break;\n }\n\n if (index === -1 || sign === 0) {\n return;\n }\n index += sign;\n index = sign < 0 ? Math.max(0, index) : Math.min(this.radioElements.length - 1, index);\n event.preventDefault();\n if (!this.readonly) {\n this.value = this.radioElements[index].value;\n }\n this.radioElements[index].dispatchEvent(new FocusEvent('focus'));\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<q2-radio>` option with the provided value.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n this.radioElements.forEach(radio => {\n if (value !== radio.value) return;\n radio.click();\n });\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledUpdated() {\n this.radioElements.forEach(radio => {\n radio.groupDisabled = this.disabled;\n });\n }\n\n @Watch('name')\n nameUpdated() {\n this.radioElements.forEach(radio => {\n radio.name = this.name || this._id;\n });\n }\n\n @Watch('readonly')\n readonlyUpdated() {\n const readonly = this.readonly;\n this.radioElements.forEach(radio => (radio.groupReadonly = readonly));\n }\n\n @Watch('tilelayout')\n handleDeprecatedTilelayout(tilelayout: boolean) {\n if (typeof tilelayout !== 'boolean') return;\n this.tileLayout = tilelayout;\n this.tilelayout = undefined;\n }\n\n @Watch('tileLayout')\n tileLayoutUpdated(tileLayout: boolean) {\n this.radioElements.forEach(radio => {\n radio.groupTileLayout = tileLayout;\n });\n }\n\n @Watch('value')\n valueUpdated(newVal: string) {\n this.radioElements.forEach(radio => {\n radio.checked = newVal === radio.value;\n // Removes checked attribute from trailing radios, if multiple individual radio's are intially checked (checked={true}) at componentDidLoad\n if (!radio.checked) {\n radio.removeAttribute('checked');\n radio.tabIndex = -1;\n } else if (radio.checked) {\n radio.tabIndex = 0;\n }\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get inputId() {\n return this._id;\n }\n\n get radioElements() {\n return Array.from(this.hostElement.querySelectorAll('q2-radio')) as HTMLQ2RadioElement[];\n }\n\n checkedRadioExists = () => {\n // Returns first checked individual q2-radio or undefined if none are set to checked={true}\n const firstCheckedRadio = this.radioElements.find(radio => radio.checked === true) || undefined;\n\n // Changes radio-group[\"value\"] if inital value is not set and if a any individual q2-radio is checked\n if (!this.value && !!firstCheckedRadio) {\n this.value = firstCheckedRadio.value;\n } else if (!this.value && !firstCheckedRadio) {\n // if no radios are meant to be checked, then assign first radio tabIndex of 0\n if (this.radioElements.length) this.radioElements[0].tabIndex = 0;\n }\n };\n\n inputDom() {\n if (this.tileLayout) {\n const { tileAlignment } = this;\n const alignment = ['left', 'center', 'right'].includes(tileAlignment) ? tileAlignment : 'center';\n return (\n <div class={`tile-container ${alignment}`}>\n <div class=\"options-container\">\n <slot />\n </div>\n </div>\n );\n } else {\n return (\n <div class=\"options-container\">\n <slot />\n </div>\n );\n }\n }\n\n onInnerRadioChange = (event: CustomEvent) => {\n event.stopImmediatePropagation();\n if (this.readonly) return;\n\n mirrorEmit(this, ['change', 'tctChange'], { value: event.detail.value });\n };\n\n onMutationObserved = () => {\n this.valueUpdated(this.value);\n this.nameUpdated();\n this.disabledUpdated();\n this.readonlyUpdated();\n this.tileLayoutUpdated(this.tileLayout);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const showLabel = this.label || this.optional || this.readonly;\n const { hasError } = this;\n const showLabelRow = (showLabel && !this.hideLabel) || hasError;\n return (\n <Fragment>\n {showLabelRow && (\n <div class=\"label-row\">\n {showLabel && !this.hideLabel && <div class=\"group-legend\">{renderLabel(this)}</div>}\n {hasError && (\n <q2-icon\n type=\"error\"\n test-id=\"iconError\"\n ></q2-icon>\n )}\n </div>\n )}\n <fieldset\n onChange={this.onInnerRadioChange}\n aria-invalid={hasError ? `${hasError}` : undefined}\n >\n {showLabel && <legend class=\"sr-only\">{renderLabel(this)}</legend>}\n {this.inputDom()}\n </fieldset>\n </Fragment>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["q2RadioGroupCss","Q2RadioGroup","constructor","hostRef","this","_id","createGuid","disabled","hasError","tileAlignment","checkedRadioExists","firstCheckedRadio","radioElements","find","radio","checked","undefined","value","length","tabIndex","onInnerRadioChange","event","stopImmediatePropagation","readonly","mirrorEmit","detail","onMutationObserved","valueUpdated","nameUpdated","disabledUpdated","readonlyUpdated","tileLayoutUpdated","tileLayout","componentWillLoad","handleDeprecatedTilelayout","tilelayout","componentDidLoad","observer","MutationObserver","observe","hostElement","childList","mutationObserver","overrideFocus","onHostElementChange","target","onchange","delegateFocus","isEventFromElement","querySelector","dispatchEvent","FocusEvent","keydownHandler","currentValue","getAttribute","index","findIndex","el","sign","key","Math","max","min","preventDefault","setValue","forEach","click","groupDisabled","name","groupReadonly","groupTileLayout","newVal","removeAttribute","inputId","Array","from","querySelectorAll","inputDom","alignment","includes","h","class","render","showLabel","label","optional","showLabelRow","hideLabel","Fragment","renderLabel","type","onChange"],"sources":["src/components/q2-radio-group/q2-radio-group.scss?tag=q2-radio-group&encapsulation=shadow","src/components/q2-radio-group/q2-radio-group.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n --comp-default-radio-group-margin: #{var-list(var-prefixer(radio-group-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(radio-group-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-radio-group-margin, --comp-default-radio-group-margin);\n}\n\nfieldset {\n padding: var(--tct-radio-group-fieldset-padding, 0);\n margin: 0;\n border: 0;\n position: relative;\n}\n\n.label-row {\n display: grid;\n grid-template-columns: 1fr 24px;\n grid-template-areas: 'label icon';\n column-gap: var(--tct-radio-group-label-column-gap, var(--app-scale-2x, 10px));\n\n color: var-list(--tct-radio-group-label-font-color, inherit);\n font-size: var-list(--tct-radio-group-label-font-size, inherit);\n font-weight: var-list(--tct-radio-group-label-font-weight, 600);\n text-transform: var-list(--tct-radio-group-label-text-transform, none);\n letter-spacing: var-list(--tct-radio-group-label-letter-spacing, inherit);\n\n q2-icon {\n grid-area: icon;\n margin-top: -2px;\n margin-bottom: -2px;\n }\n}\n\n.group-legend {\n font-weight: 600;\n}\n\nlegend.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n border: 0;\n}\n\n.optional-tag {\n margin-left: var-list(--tct-radio-group-label-optional-margin-left, --app-scale-1x, 5px);\n color: var-list(\n var-prefixer(radio-group-label-optional-color),\n var-prefixer(a11y-color),\n var-prefixer(a11y-gray-color),\n var-prefixer(gray-7),\n var-prefixer(gray-d1),\n --app-gray-d1,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(radio-group-label-optional-font-size), 12px);\n font-weight: var-list(var-prefixer(radio-group-label-optional-font-weight), 400);\n}\n\n.tile-container {\n &,\n .options-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n flex-grow: 1;\n }\n}\n\n.options-container {\n --comp-default-margin: #{var-list(--app-scale-1x, 5px)} 0;\n --comp-options-margin: #{var-list(var-prefixer(radio-group-options-margin), --comp-default-margin, unquote('5px 0'))};\n margin: var(--comp-options-margin);\n padding: var-list(var-prefixer(radio-group-options-padding), --app-scale-0x, 0px);\n border-width: var-list(--tct-radio-group-border-width, 1px);\n border-color: transparent;\n border-style: solid;\n border-radius: var-list(--tct-radio-group-border-radius, --app-border-radius-1, 4px);\n\n :host([has-error]) & {\n border-color: var-list(--tct-radio-group-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n :host([has-error='false']) & {\n border-color: transparent;\n }\n}\n\n.tile-container {\n &.left {\n justify-content: start;\n }\n &.right {\n justify-content: end;\n }\n\n .options-container {\n gap: var-list(var-prefixer(radio-group-tile-gap), --app-scale-2x, 10px);\n justify-content: inherit;\n }\n}\n","import {\n Component,\n Prop,\n Element,\n h,\n Listen,\n EventEmitter,\n Event,\n ComponentInterface,\n Watch,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, isEventFromElement, overrideFocus, renderLabel } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Radio Group\n * @category Forms\n * @summary Use for selecting exactly one option from a small set of choices.\n * @slot label - An optional slot to display a custom label.\n */\n@Component({ tag: 'q2-radio-group', shadow: true, styleUrl: 'q2-radio-group.scss' })\nexport class Q2RadioGroup implements ComponentInterface {\n // #region Own Properties\n\n _id: string = `radio-group-${createGuid()}`;\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** Determines if all radios in the group are put into a `disabled` state. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Determines if the component should display in an errant state. */\n @Prop({ reflect: true })\n hasError: boolean = false;\n\n /**\n * Hide's the group's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Text for the fieldset legend describing the radio group.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /** Identifier which ties all radios together for accessibility and DOM selection. */\n @Prop({ reflect: true })\n name: string;\n\n /** Appends \"(optional)\" to the group label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /** Determines if all radios in the group can be focused, but not interacted with. */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** Provides alignment direction for tile-style radio group. */\n @Prop({ reflect: true })\n tileAlignment: 'left' | 'center' | 'right' = 'center';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n tilelayout: boolean;\n\n /** Show the radio group as a horizontal set of tiles. */\n @Prop({ reflect: true, mutable: true })\n tileLayout: boolean;\n\n /** The `value` of the currently selected `q2-radio` within the `q2-radio-group`. */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the value of the radio group changes.\n * @legacyEvent\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.checkedRadioExists();\n this.onMutationObserved();\n this.handleDeprecatedTilelayout(this.tilelayout);\n }\n\n componentDidLoad() {\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n overrideFocus(this.hostElement);\n this.checkedRadioExists();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (event.target === this.hostElement) {\n if (!this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const radio = this.hostElement.querySelector('q2-radio[checked]') || this.hostElement.querySelector('q2-radio');\n radio?.dispatchEvent(new FocusEvent('focus'));\n }\n\n @Listen('keydown')\n keydownHandler(event: KeyboardEvent) {\n const currentValue = (event.target as HTMLElement).getAttribute('value') || this.value;\n let index = this.radioElements.findIndex(\n el => el === event.target || (el as HTMLElement).getAttribute('value') === currentValue\n );\n let sign = 0;\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n sign = -1;\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n sign = 1;\n break;\n }\n\n if (index === -1 || sign === 0) {\n return;\n }\n index += sign;\n index = sign < 0 ? Math.max(0, index) : Math.min(this.radioElements.length - 1, index);\n event.preventDefault();\n if (!this.readonly) {\n this.value = this.radioElements[index].value;\n }\n this.radioElements[index].dispatchEvent(new FocusEvent('focus'));\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<q2-radio>` option with the provided value.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n this.radioElements.forEach(radio => {\n if (value !== radio.value) return;\n radio.click();\n });\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledUpdated() {\n this.radioElements.forEach(radio => {\n radio.groupDisabled = this.disabled;\n });\n }\n\n @Watch('name')\n nameUpdated() {\n this.radioElements.forEach(radio => {\n radio.name = this.name || this._id;\n });\n }\n\n @Watch('readonly')\n readonlyUpdated() {\n const readonly = this.readonly;\n this.radioElements.forEach(radio => (radio.groupReadonly = readonly));\n }\n\n @Watch('tilelayout')\n handleDeprecatedTilelayout(tilelayout: boolean) {\n if (typeof tilelayout !== 'boolean') return;\n this.tileLayout = tilelayout;\n this.tilelayout = undefined;\n }\n\n @Watch('tileLayout')\n tileLayoutUpdated(tileLayout: boolean) {\n this.radioElements.forEach(radio => {\n radio.groupTileLayout = tileLayout;\n });\n }\n\n @Watch('value')\n valueUpdated(newVal: string) {\n this.radioElements.forEach(radio => {\n radio.checked = newVal === radio.value;\n // Removes checked attribute from trailing radios, if multiple individual radio's are intially checked (checked={true}) at componentDidLoad\n if (!radio.checked) {\n radio.removeAttribute('checked');\n radio.tabIndex = -1;\n } else if (radio.checked) {\n radio.tabIndex = 0;\n }\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get inputId() {\n return this._id;\n }\n\n get radioElements() {\n return Array.from(this.hostElement.querySelectorAll('q2-radio')) as HTMLQ2RadioElement[];\n }\n\n checkedRadioExists = () => {\n // Returns first checked individual q2-radio or undefined if none are set to checked={true}\n const firstCheckedRadio = this.radioElements.find(radio => radio.checked === true) || undefined;\n\n // Changes radio-group[\"value\"] if inital value is not set and if a any individual q2-radio is checked\n if (!this.value && !!firstCheckedRadio) {\n this.value = firstCheckedRadio.value;\n } else if (!this.value && !firstCheckedRadio) {\n // if no radios are meant to be checked, then assign first radio tabIndex of 0\n if (this.radioElements.length) this.radioElements[0].tabIndex = 0;\n }\n };\n\n inputDom() {\n if (this.tileLayout) {\n const { tileAlignment } = this;\n const alignment = ['left', 'center', 'right'].includes(tileAlignment) ? tileAlignment : 'center';\n return (\n <div class={`tile-container ${alignment}`}>\n <div class=\"options-container\">\n <slot />\n </div>\n </div>\n );\n } else {\n return (\n <div class=\"options-container\">\n <slot />\n </div>\n );\n }\n }\n\n onInnerRadioChange = (event: CustomEvent) => {\n event.stopImmediatePropagation();\n if (this.readonly) return;\n\n mirrorEmit(this, ['change', 'tctChange'], { value: event.detail.value });\n };\n\n onMutationObserved = () => {\n this.valueUpdated(this.value);\n this.nameUpdated();\n this.disabledUpdated();\n this.readonlyUpdated();\n this.tileLayoutUpdated(this.tileLayout);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const showLabel = this.label || this.optional || this.readonly;\n const { hasError } = this;\n const showLabelRow = (showLabel && !this.hideLabel) || hasError;\n return (\n <Fragment>\n {showLabelRow && (\n <div class=\"label-row\">\n {showLabel && !this.hideLabel && <div class=\"group-legend\">{renderLabel(this)}</div>}\n {hasError && (\n <q2-icon\n type=\"error\"\n test-id=\"iconError\"\n ></q2-icon>\n )}\n </div>\n )}\n <fieldset\n onChange={this.onInnerRadioChange}\n aria-invalid={hasError ? `${hasError}` : undefined}\n >\n {showLabel && <legend class=\"sr-only\">{renderLabel(this)}</legend>}\n {this.inputDom()}\n </fieldset>\n </Fragment>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-radio.entry.esm.js","sources":["src/components/q2-radio/q2-radio.scss?tag=q2-radio&encapsulation=shadow","src/components/q2-radio/q2-radio.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n.radio-container {\n --comp-radio-margin: #{var-list(\n --tct-radio-margin,\n unquote(\n '#{var-list(--tct-radio-margin-vertical, --tct-scale-2, 10px)} #{var-list(--tct-radio-margin-horizontal, --tct-scale-3, 15px)}'\n )\n )};\n\n //Default State\n --comp-big-circle-fill: #{var-list(--tct-radio-background-fill, transparent)};\n --comp-big-circle-stroke: #{var-list(\n --tct-radio-background-stroke,\n --tct-radio-stroke-color,\n --t-a11y-gray-color-AA,\n #949494\n )};\n --comp-big-circle-stroke-width: #{var-list(--tct-radio-background-stroke-width, --tct-radio-stroke-width, 2)};\n --comp-big-circle-transition: #{fill\n var-list(--tct-radio-background-transition, --tct-checkbox-tween, --app-tween-2, unquote('0.4s ease'))};\n --comp-small-circle-fill: #{var-list(--tct-radio-select-fill-default, transparent)};\n --comp-label-content-color: #{var-list(\n --tct-radio-label-color,\n --tct-radio-label-font-color,\n --tct-radio-label-color,\n inherit\n )};\n --comp-label-content-font-weight: #{var-list(\n --tct-radio-label-font-weight,\n --tct-radio-font-weight,\n --tct-checkbox-font-weight,\n 400\n )};\n --comp-label-content-letter-spacing: #{var-list(--tct-radio-label-letter-spacing, 0.25)};\n --comp-label-content-margin-right: #{var-list(--tct-radio-label-margin-right, 1rem)};\n --comp-label-content-gap: #{var-list(--tct-radio-label-gap, --tct-scale-1, --app-scale-1x, 5px)};\n --comp-label-hidden-columns: #{var(--tct-radio-hidden-columns, --tct-radio-label-hidden-columns, 18px 1fr)};\n --comp-svg-transition: #{box-shadow\n var-list(--tct-radio-transition, --tct-tween-1, --app-tween-1, unquote('0.2s ease'))};\n --comp-svg-box-shadow: #{var-list(--tct-radio-box-shadow, none)};\n\n //Checked State\n --comp-big-circle-fill-checked: #{var-list(--tct-radio-checked-background-fill, --comp-big-circle-fill)};\n --comp-big-circle-stroke-checked: #{var-list(--tct-radio-checked-stroke-color, --comp-big-circle-stroke)};\n --comp-small-circle-fill-checked: #{var-list(\n --tct-radio-select-fill-checked,\n --tct-radio-checked-fill,\n --tct-checkbox-check-stroke-color,\n --t-checkbox-fill,\n #2e2e2e\n )};\n --comp-label-content-font-weight-checked: #{var-list(\n --tct-radio-label-font-weight-checked,\n --tct-radio-checked-label-font-weight,\n --tct-checkbox-selected-font-weight,\n 600\n )};\n --comp-label-content-letter-spacing-checked: #{var-list(\n --tct-radio-label-letter-spacing-checked,\n --tct-radio-checked-label-letter-spacing,\n --tct-checkbox-selected-letter-spacing,\n --comp-label-content-letter-spacing\n )};\n --comp-label-content-color-checked: #{var-list(\n --tct-radio-label-font-color-checked,\n --tct-radio-checked-label-font-color,\n --tct-radio-checked-label-color,\n inherit\n )};\n\n // Active State\n --comp-big-circle-fill-active: #{var-list(--tct-radio-background-fill-active, --comp-big-circle-fill)};\n --comp-big-circle-stroke-active: #{var-list(--tct-radio-background-stroke-active, --comp-big-circle-stroke)};\n --comp-small-circle-fill-active: #{var-list(--tct-radio-selected-fill-active, --comp-small-circle-fill-checked)};\n --comp-label-content-font-weight-active: #{var-list(\n --tct-radio-label-font-weight-active,\n --comp-label-content-font-weight\n )};\n --comp-label-content-letter-spacing-active: #{var-list(\n --tct-radio-label-letter-spacing-active,\n --comp-label-content-letter-spacing\n )};\n --comp-label-content-color-active: #{var-list(--tct-radio-label-color-active, --comp-label-content-color)};\n\n // Hover State\n --comp-big-circle-fill-hover: #{var-list(--tct-radio-hover-background-fill, --comp-big-circle-fill)};\n --comp-big-circle-stroke-hover: #{var-list(--tct-radio-hover-stroke-color, --comp-big-circle-stroke)};\n --comp-label-content-color-hover: #{var-list(--tct-radio-hover-label-color, --comp-label-content-color)};\n\n // Focus State\n --comp-big-circle-fill-focus: #{var-list(--tct-radio-focus-background-fill, --comp-big-circle-fill)};\n --comp-big-circle-stroke-focus: #{var-list(--tct-radio-focus-stroke-color, --comp-big-circle-stroke)};\n --comp-label-content-color-focus: #{var-list(--tct-radio-focus-label-color, --comp-label-content-color)};\n\n // Focus Visible\n --comp-svg-box-shadow-focus-visible: #{var(\n --tct-radio-box-shadow-focus-visible,\n --tct-radio-focus-box-shadow,\n --const-double-focus-ring\n )};\n\n margin: var(--comp-radio-margin);\n\n label[for] {\n color: var(---comp-label-content-color);\n font-weight: var(---comp-label-content-font-weight);\n font-size: var(--tct-radio-label-font-size, 14px);\n align-items: center;\n cursor: pointer;\n margin-right: var(---comp-label-content-margin-right);\n display: grid;\n grid-template-columns: 18px 1fr;\n gap: var(--comp-label-content-gap);\n letter-spacing: var(--comp-label-content-letter-spacing);\n\n &.label-hidden {\n grid-template-columns: var(--comp-label-hidden-columns);\n }\n }\n\n svg {\n border-radius: 50%;\n transition: var(--comp-svg-transition);\n outline: 0;\n width: 100%;\n box-shadow: var(--comp-svg-box-shadow);\n }\n\n .big-circle {\n fill: var(--comp-big-circle-fill);\n stroke: var(--comp-big-circle-stroke);\n stroke-width: var(--comp-big-circle-stroke-width);\n transition: var(--comp-big-circle-transition);\n }\n .small-circle {\n fill: var(--comp-small-circle-fill);\n }\n\n input {\n &:checked {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-checked);\n stroke: var(--comp-big-circle-stroke-checked);\n }\n\n .small-circle {\n fill: var(--comp-small-circle-fill-checked);\n }\n\n .label-content {\n font-weight: var(--comp-label-content-font-weight-checked);\n letter-spacing: var(--comp-label-content-letter-spacing-checked);\n color: var(--comp-label-content-color-checked);\n }\n }\n }\n\n &:hover {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-hover);\n stroke: var(--comp-big-circle-stroke-hover);\n }\n .label-content {\n color: var(--comp-label-content-color-hover);\n }\n }\n }\n\n &:active {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-active);\n stroke: var(--comp-big-circle-stroke-active);\n }\n\n .small-circle {\n fill: var(--comp-small-circle-fill-active);\n }\n\n .label-content {\n font-weight: var(--comp-label-content-font-weight-active);\n letter-spacing: var(--comp-label-content-letter-spacing-active);\n color: var(--comp-label-content-color-active);\n }\n }\n }\n\n &:focus {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-focus);\n stroke: var(--comp-big-circle-stroke-focus);\n }\n .label-content {\n color: var(--comp-label-content-color-focus);\n }\n }\n }\n }\n}\n\n.radio-tile {\n flex-basis: 100px;\n flex-grow: 0;\n flex-wrap: wrap;\n\n label[for] {\n color: var-list(--tct-radio-label-font-color, --tct-radio-label-color, inherit);\n align-items: center;\n border-radius: var-list(--tct-radio-tile-border-radius, --app-border-radius-1, 3px);\n border: 2px solid var-list(--tct-radio-stroke-color, --t-a11y-gray-color-AA, #949494);\n background: var-list(--tct-radio-background-fill, transparent);\n cursor: pointer;\n display: block;\n font-size: var-list(--tct-radio-tile-label-font-size, --tct-radio-label-font-size, 14px); \n padding: 10px;\n position: relative;\n text-align: center;\n transition: border-color var-list(--tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n white-space: nowrap;\n }\n\n input {\n &:checked + label {\n border-color: var-list(\n --tct-radio-tile-checked-stroke-color,\n --tct-radio-checked-stroke-color,\n var-prefixer(checkbox-check-stroke-color),\n --t-checkbox-fill,\n #2e2e2e\n );\n box-shadow: inset 0 0 0 2px #ffffff;\n background: var-list(--tct-radio-checked-background-fill, transparent);\n color: var-list(--tct-radio-checked-label-color, inherit);\n\n &:after {\n border-bottom-width: 3px;\n border-bottom: 5px solid\n var-list(\n --tct-radio-tile-checked-stroke-color,\n --tct-radio-checked-stroke-color,\n var-prefixer(checkbox-check-stroke-color),\n --t-checkbox-fill,\n #2e2e2e\n );\n border-left-width: 5px;\n border-left: 8px solid transparent;\n border-right-width: 5px;\n border-right: 8px solid transparent;\n bottom: 0;\n content: '';\n height: 0;\n left: 50%;\n margin-left: -5px;\n position: absolute;\n width: 0;\n }\n }\n\n &:hover + label {\n border-color: var-list(\n --tct-radio-hover-stroke-color,\n --tct-radio-stroke-color,\n --t-a11y-gray-color-AA,\n #949494\n );\n background: var-list(--tct-radio-hover-background-fill, transparent);\n color: var-list(--tct-radio-hover-label-color, --tct-radio-label-color, inherit);\n }\n\n &:focus + label,\n &:focus:checked + label {\n border-color: var-list(\n --tct-radio-focus-stroke-color,\n var-prefixer(checkbox-check-stroke-color),\n --t-checkbox-fill,\n #2e2e2e\n );\n background: var-list(--tct-radio-focus-background-fill, transparent);\n box-shadow: var(--const-double-focus-ring), var-list(--tct-global-focus, unquote('0 0 0 2px #33b4ff'));\n color: var-list(--tct-radio-focus-label-color, --tct-radio-checked-label-color, inherit);\n }\n\n &:focus:checked + label:after {\n border-bottom: 5px solid var(--tct-radio-focus-stroke-color, #2e2e2e);\n }\n }\n}\n\ninput:disabled + label[for] {\n cursor: not-allowed;\n opacity: var-list(--tct-disabled-opacity, --app-disabled-opacity, 0.4);\n}\n","import { Component, Prop, h, Element, ComponentInterface, Listen, Watch, Event, EventEmitter } from '@stencil/core';\nimport { createGuid, handleAriaLabel, loc, overrideFocus } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Radio\n * @category Forms\n * @summary Use as a single option within a Radio Group.\n */\n@Component({ tag: 'q2-radio', shadow: true, styleUrl: 'q2-radio.scss' })\nexport class Q2Radio implements ComponentInterface {\n // #region Own Properties\n\n _id: string = `radio-${createGuid()}`;\n inputField: HTMLInputElement;\n isLoaded: boolean = false;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /** The state of the radio. This modifies the visual appearance of the element. */\n @Prop({ reflect: true, mutable: true })\n checked: boolean = false;\n\n /** Disables the radio and prevents interaction. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /**\n * Used by q2-radio-group to disable all options in the group\n * @private\n */\n @Prop({ reflect: false })\n groupDisabled: boolean = false;\n\n /**\n * Used by q2-radio-group to make all options in the group readonly\n * @private\n */\n @Prop({ reflect: false })\n groupReadonly: boolean = false;\n\n /**\n * Used by q2-radio-group to make the options display as tiles\n * @private\n */\n @Prop({ reflect: false })\n groupTileLayout: boolean = false;\n\n /**\n * Hide's the field's `<label>` element from view.\n *\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * The text that describes the individual radio option.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Used by q2-radio-group to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /** The radio is non-interactive, but remains focusable. */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** @private */\n @Prop()\n tabIndex: number = 0;\n\n /** The value that is returned in the `change` event that is emitted from the `q2-radio-group`. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the radio is checked.\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the radio is checked.\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n componentDidLoad(): void {\n this.isLoaded = true;\n overrideFocus(this.hostElement);\n this.hostElement.click = () => {\n this.inputField.focus();\n this.inputField.click();\n };\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n onHostClick(event: Event) {\n if (this.disabled) {\n event.stopImmediatePropagation();\n } else if (this.groupReadonly) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.inputField.focus();\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (event.target === this.hostElement) {\n this.inputField.focus();\n }\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('checked')\n checkedObserver() {\n if (!this.isLoaded) return;\n if (!this.checked) return;\n mirrorEmit(this, ['change', 'tctChange'], { value: this.value });\n }\n\n // #endregion\n // #region Local Methods\n\n inputChange = (event: Event) => {\n event.stopPropagation();\n if (this.disabled || this.readonly || this.groupReadonly || this.groupDisabled) {\n event.preventDefault();\n return false;\n }\n\n if (event.target instanceof HTMLInputElement) {\n this.checked = event.target.checked;\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.groupTileLayout ? 'radio-tile' : 'radio-container'}>\n <input\n ref={el => (this.inputField = el)}\n class=\"sr\"\n id={this._id}\n type=\"radio\"\n name={this.name}\n value={this.value}\n disabled={this.disabled || this.groupDisabled}\n checked={this.checked}\n aria-label={this.label && this.hideLabel ? loc(this.label) : undefined}\n onChange={this.inputChange}\n test-id=\"q2RadioInnerRadioBox\"\n ></input>\n\n <label\n htmlFor={this._id}\n class={this.hideLabel ? 'label-hidden' : undefined}\n test-id=\"radioButton\"\n >\n {!this.groupTileLayout && (\n <svg viewBox=\"0 0 18 18\">\n <circle\n class=\"big-circle\"\n stroke=\"none\"\n fill=\"none\"\n cx=\"9\"\n cy=\"9\"\n r=\"8\"\n />\n <circle\n class=\"small-circle\"\n stroke=\"none\"\n fill=\"none\"\n cx=\"9\"\n cy=\"9\"\n r=\"4\"\n />\n </svg>\n )}\n {!this.hideLabel && (\n <div class=\"label-content\">\n {(this.label && loc(this.label)) || ''}\n <slot></slot>\n </div>\n )}\n </label>\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"q2-radio.entry.esm.js","sources":["src/components/q2-radio/q2-radio.scss?tag=q2-radio&encapsulation=shadow","src/components/q2-radio/q2-radio.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n.radio-container {\n --comp-radio-margin: #{var-list(\n --tct-radio-margin,\n unquote(\n '#{var-list(--tct-radio-margin-vertical, --tct-scale-2, 10px)} #{var-list(--tct-radio-margin-horizontal, --tct-scale-3, 15px)}'\n )\n )};\n\n //Default State\n --comp-big-circle-fill: #{var-list(--tct-radio-background-fill, transparent)};\n --comp-big-circle-stroke: #{var-list(\n --tct-radio-background-stroke,\n --tct-radio-stroke-color,\n --t-a11y-gray-color-AA,\n #949494\n )};\n --comp-big-circle-stroke-width: #{var-list(--tct-radio-background-stroke-width, --tct-radio-stroke-width, 2)};\n --comp-big-circle-transition: #{fill\n var-list(--tct-radio-background-transition, --tct-checkbox-tween, --app-tween-2, unquote('0.4s ease'))};\n --comp-small-circle-fill: #{var-list(--tct-radio-select-fill-default, transparent)};\n --comp-label-content-color: #{var-list(\n --tct-radio-label-color,\n --tct-radio-label-font-color,\n --tct-radio-label-color,\n inherit\n )};\n --comp-label-content-font-weight: #{var-list(\n --tct-radio-label-font-weight,\n --tct-radio-font-weight,\n --tct-checkbox-font-weight,\n 400\n )};\n --comp-label-content-letter-spacing: #{var-list(--tct-radio-label-letter-spacing, 0.25)};\n --comp-label-content-margin-right: #{var-list(--tct-radio-label-margin-right, 1rem)};\n --comp-label-content-gap: #{var-list(--tct-radio-label-gap, --tct-scale-1, --app-scale-1x, 5px)};\n --comp-label-hidden-columns: #{var(--tct-radio-hidden-columns, --tct-radio-label-hidden-columns, 18px 1fr)};\n --comp-svg-transition: #{box-shadow\n var-list(--tct-radio-transition, --tct-tween-1, --app-tween-1, unquote('0.2s ease'))};\n --comp-svg-box-shadow: #{var-list(--tct-radio-box-shadow, none)};\n\n //Checked State\n --comp-big-circle-fill-checked: #{var-list(--tct-radio-checked-background-fill, --comp-big-circle-fill)};\n --comp-big-circle-stroke-checked: #{var-list(--tct-radio-checked-stroke-color, --comp-big-circle-stroke)};\n --comp-small-circle-fill-checked: #{var-list(\n --tct-radio-select-fill-checked,\n --tct-radio-checked-fill,\n --tct-checkbox-check-stroke-color,\n --t-checkbox-fill,\n #2e2e2e\n )};\n --comp-label-content-font-weight-checked: #{var-list(\n --tct-radio-label-font-weight-checked,\n --tct-radio-checked-label-font-weight,\n --tct-checkbox-selected-font-weight,\n 600\n )};\n --comp-label-content-letter-spacing-checked: #{var-list(\n --tct-radio-label-letter-spacing-checked,\n --tct-radio-checked-label-letter-spacing,\n --tct-checkbox-selected-letter-spacing,\n --comp-label-content-letter-spacing\n )};\n --comp-label-content-color-checked: #{var-list(\n --tct-radio-label-font-color-checked,\n --tct-radio-checked-label-font-color,\n --tct-radio-checked-label-color,\n inherit\n )};\n\n // Active State\n --comp-big-circle-fill-active: #{var-list(--tct-radio-background-fill-active, --comp-big-circle-fill)};\n --comp-big-circle-stroke-active: #{var-list(--tct-radio-background-stroke-active, --comp-big-circle-stroke)};\n --comp-small-circle-fill-active: #{var-list(--tct-radio-selected-fill-active, --comp-small-circle-fill-checked)};\n --comp-label-content-font-weight-active: #{var-list(\n --tct-radio-label-font-weight-active,\n --comp-label-content-font-weight\n )};\n --comp-label-content-letter-spacing-active: #{var-list(\n --tct-radio-label-letter-spacing-active,\n --comp-label-content-letter-spacing\n )};\n --comp-label-content-color-active: #{var-list(--tct-radio-label-color-active, --comp-label-content-color)};\n\n // Hover State\n --comp-big-circle-fill-hover: #{var-list(--tct-radio-hover-background-fill, --comp-big-circle-fill)};\n --comp-big-circle-stroke-hover: #{var-list(--tct-radio-hover-stroke-color, --comp-big-circle-stroke)};\n --comp-label-content-color-hover: #{var-list(--tct-radio-hover-label-color, --comp-label-content-color)};\n\n // Focus State\n --comp-big-circle-fill-focus: #{var-list(--tct-radio-focus-background-fill, --comp-big-circle-fill)};\n --comp-big-circle-stroke-focus: #{var-list(--tct-radio-focus-stroke-color, --comp-big-circle-stroke)};\n --comp-label-content-color-focus: #{var-list(--tct-radio-focus-label-color, --comp-label-content-color)};\n\n // Focus Visible\n --comp-svg-box-shadow-focus-visible: #{var(\n --tct-radio-box-shadow-focus-visible,\n --tct-radio-focus-box-shadow,\n --const-double-focus-ring\n )};\n\n margin: var(--comp-radio-margin);\n\n label[for] {\n color: var(---comp-label-content-color);\n font-weight: var(---comp-label-content-font-weight);\n font-size: var(--tct-radio-label-font-size, 14px);\n align-items: center;\n cursor: pointer;\n margin-right: var(---comp-label-content-margin-right);\n display: grid;\n grid-template-columns: 18px 1fr;\n gap: var(--comp-label-content-gap);\n letter-spacing: var(--comp-label-content-letter-spacing);\n\n &.label-hidden {\n grid-template-columns: var(--comp-label-hidden-columns);\n }\n }\n\n svg {\n border-radius: 50%;\n transition: var(--comp-svg-transition);\n outline: 0;\n width: 100%;\n box-shadow: var(--comp-svg-box-shadow);\n }\n\n .big-circle {\n fill: var(--comp-big-circle-fill);\n stroke: var(--comp-big-circle-stroke);\n stroke-width: var(--comp-big-circle-stroke-width);\n transition: var(--comp-big-circle-transition);\n }\n .small-circle {\n fill: var(--comp-small-circle-fill);\n }\n\n input {\n &:checked {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-checked);\n stroke: var(--comp-big-circle-stroke-checked);\n }\n\n .small-circle {\n fill: var(--comp-small-circle-fill-checked);\n }\n\n .label-content {\n font-weight: var(--comp-label-content-font-weight-checked);\n letter-spacing: var(--comp-label-content-letter-spacing-checked);\n color: var(--comp-label-content-color-checked);\n }\n }\n }\n\n &:hover {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-hover);\n stroke: var(--comp-big-circle-stroke-hover);\n }\n .label-content {\n color: var(--comp-label-content-color-hover);\n }\n }\n }\n\n &:active {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-active);\n stroke: var(--comp-big-circle-stroke-active);\n }\n\n .small-circle {\n fill: var(--comp-small-circle-fill-active);\n }\n\n .label-content {\n font-weight: var(--comp-label-content-font-weight-active);\n letter-spacing: var(--comp-label-content-letter-spacing-active);\n color: var(--comp-label-content-color-active);\n }\n }\n }\n\n &:focus {\n & + label {\n .big-circle {\n fill: var(--comp-big-circle-fill-focus);\n stroke: var(--comp-big-circle-stroke-focus);\n }\n .label-content {\n color: var(--comp-label-content-color-focus);\n }\n }\n }\n }\n}\n\n.radio-tile {\n flex-basis: 100px;\n flex-grow: 0;\n flex-wrap: wrap;\n\n label[for] {\n color: var-list(--tct-radio-label-font-color, --tct-radio-label-color, inherit);\n align-items: center;\n border-radius: var-list(--tct-radio-tile-border-radius, --app-border-radius-1, 3px);\n border: 2px solid var-list(--tct-radio-stroke-color, --t-a11y-gray-color-AA, #949494);\n background: var-list(--tct-radio-background-fill, transparent);\n cursor: pointer;\n display: block;\n font-size: var-list(--tct-radio-tile-label-font-size, --tct-radio-label-font-size, 14px);\n padding: 10px;\n position: relative;\n text-align: center;\n transition: border-color var-list(--tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n white-space: nowrap;\n }\n\n input {\n &:checked + label {\n border-color: var-list(\n --tct-radio-tile-checked-stroke-color,\n --tct-radio-checked-stroke-color,\n var-prefixer(checkbox-check-stroke-color),\n --t-checkbox-fill,\n #2e2e2e\n );\n box-shadow: inset 0 0 0 2px #ffffff;\n background: var-list(--tct-radio-checked-background-fill, transparent);\n color: var-list(--tct-radio-checked-label-color, inherit);\n\n &:after {\n border-bottom-width: 3px;\n border-bottom: 5px solid\n var-list(\n --tct-radio-tile-checked-stroke-color,\n --tct-radio-checked-stroke-color,\n var-prefixer(checkbox-check-stroke-color),\n --t-checkbox-fill,\n #2e2e2e\n );\n border-left-width: 5px;\n border-left: 8px solid transparent;\n border-right-width: 5px;\n border-right: 8px solid transparent;\n bottom: 0;\n content: '';\n height: 0;\n left: 50%;\n margin-left: -5px;\n position: absolute;\n width: 0;\n }\n }\n\n &:hover + label {\n border-color: var-list(\n --tct-radio-hover-stroke-color,\n --tct-radio-stroke-color,\n --t-a11y-gray-color-AA,\n #949494\n );\n background: var-list(--tct-radio-hover-background-fill, transparent);\n color: var-list(--tct-radio-hover-label-color, --tct-radio-label-color, inherit);\n }\n\n &:focus + label,\n &:focus:checked + label {\n --comp-radio-tile-focus-box-shadow-fallback: #{var(--const-double-focus-ring), var-list(--tct-global-focus, unquote('0 0 0 2px #33b4ff'))};\n border-color: var-list(\n --tct-radio-tile-focus-stroke-color,\n --tct-radio-focus-stroke-color,\n var-prefixer(checkbox-check-stroke-color),\n --t-checkbox-fill,\n #2e2e2e\n );\n background: var-list(--tct-radio-focus-background-fill, transparent);\n box-shadow: var-list(--tct-radio-tile-focus-box-shadow, --comp-radio-tile-focus-box-shadow-fallback);\n color: var-list(--tct-radio-focus-label-color, --tct-radio-checked-label-color, inherit);\n }\n\n &:focus:checked + label:after {\n border-bottom: 5px solid var-list(\n --tct-radio-tile-focus-stroke-color,\n --tct-radio-focus-stroke-color,\n #2e2e2e\n );\n }\n }\n}\n\ninput:disabled + label[for] {\n cursor: not-allowed;\n opacity: var-list(--tct-disabled-opacity, --app-disabled-opacity, 0.4);\n}\n","import { Component, Prop, h, Element, ComponentInterface, Listen, Watch, Event, EventEmitter } from '@stencil/core';\nimport { createGuid, handleAriaLabel, loc, overrideFocus } from 'src/utils';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Radio\n * @category Forms\n * @summary Use as a single option within a Radio Group.\n */\n@Component({ tag: 'q2-radio', shadow: true, styleUrl: 'q2-radio.scss' })\nexport class Q2Radio implements ComponentInterface {\n // #region Own Properties\n\n _id: string = `radio-${createGuid()}`;\n inputField: HTMLInputElement;\n isLoaded: boolean = false;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /** The state of the radio. This modifies the visual appearance of the element. */\n @Prop({ reflect: true, mutable: true })\n checked: boolean = false;\n\n /** Disables the radio and prevents interaction. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /**\n * Used by q2-radio-group to disable all options in the group\n * @private\n */\n @Prop({ reflect: false })\n groupDisabled: boolean = false;\n\n /**\n * Used by q2-radio-group to make all options in the group readonly\n * @private\n */\n @Prop({ reflect: false })\n groupReadonly: boolean = false;\n\n /**\n * Used by q2-radio-group to make the options display as tiles\n * @private\n */\n @Prop({ reflect: false })\n groupTileLayout: boolean = false;\n\n /**\n * Hide's the field's `<label>` element from view.\n *\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * The text that describes the individual radio option.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Used by q2-radio-group to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /** The radio is non-interactive, but remains focusable. */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** @private */\n @Prop()\n tabIndex: number = 0;\n\n /** The value that is returned in the `change` event that is emitted from the `q2-radio-group`. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the radio is checked.\n * @deprecated Use 'tctChange' instead\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the radio is checked.\n */\n @Event()\n tctChange: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n componentDidLoad(): void {\n this.isLoaded = true;\n overrideFocus(this.hostElement);\n this.hostElement.click = () => {\n this.inputField.focus();\n this.inputField.click();\n };\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n onHostClick(event: Event) {\n if (this.disabled) {\n event.stopImmediatePropagation();\n } else if (this.groupReadonly) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.inputField.focus();\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (event.target === this.hostElement) {\n this.inputField.focus();\n }\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('checked')\n checkedObserver() {\n if (!this.isLoaded) return;\n if (!this.checked) return;\n mirrorEmit(this, ['change', 'tctChange'], { value: this.value });\n }\n\n // #endregion\n // #region Local Methods\n\n inputChange = (event: Event) => {\n event.stopPropagation();\n if (this.disabled || this.readonly || this.groupReadonly || this.groupDisabled) {\n event.preventDefault();\n return false;\n }\n\n if (event.target instanceof HTMLInputElement) {\n this.checked = event.target.checked;\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.groupTileLayout ? 'radio-tile' : 'radio-container'}>\n <input\n ref={el => (this.inputField = el)}\n class=\"sr\"\n id={this._id}\n type=\"radio\"\n name={this.name}\n value={this.value}\n disabled={this.disabled || this.groupDisabled}\n checked={this.checked}\n aria-label={this.label && this.hideLabel ? loc(this.label) : undefined}\n onChange={this.inputChange}\n test-id=\"q2RadioInnerRadioBox\"\n ></input>\n\n <label\n htmlFor={this._id}\n class={this.hideLabel ? 'label-hidden' : undefined}\n test-id=\"radioButton\"\n >\n {!this.groupTileLayout && (\n <svg viewBox=\"0 0 18 18\">\n <circle\n class=\"big-circle\"\n stroke=\"none\"\n fill=\"none\"\n cx=\"9\"\n cy=\"9\"\n r=\"8\"\n />\n <circle\n class=\"small-circle\"\n stroke=\"none\"\n fill=\"none\"\n cx=\"9\"\n cy=\"9\"\n r=\"4\"\n />\n </svg>\n )}\n {!this.hideLabel && (\n <div class=\"label-content\">\n {(this.label && loc(this.label)) || ''}\n <slot></slot>\n </div>\n )}\n </label>\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
|