q2-tecton-elements 1.67.2 → 1.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle-report.json +22598 -10670
- package/dist/cjs/click-elsewhere.q2-option-list.q2-popover.entry.cjs.js.map +1 -1
- package/dist/cjs/click-elsewhere_3.cjs.entry.js +46 -32
- package/dist/cjs/click-elsewhere_3.cjs.entry.js.map +1 -1
- package/dist/cjs/{component-DRAntnCA.js → component-iASoq6gx.js} +9 -3
- package/dist/cjs/component-iASoq6gx.js.map +1 -0
- package/dist/cjs/{index-YvKoRT-t.js → index-DmGkqdX2.js} +3 -3
- package/dist/cjs/index-DmGkqdX2.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group.q2-resize-observer.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-action-group_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js +109 -4
- package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-action-sheet.entry.cjs.js.map +1 -1
- 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-badge.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-badge.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
- package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +6 -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 +2 -2
- package/dist/cjs/q2-card-image.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-card-image.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +1 -1
- package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
- 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 +162 -29
- 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 +1 -1
- package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-donut.cjs.entry.js +3 -2
- 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 +2 -2
- 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 -1
- package/dist/cjs/q2-checkbox_2.cjs.entry.js +3 -3
- package/dist/cjs/q2-checkbox_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-context.cjs.entry.js +2 -2
- package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-currency.cjs.entry.js +2 -3
- package/dist/cjs/q2-currency.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-currency.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
- 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-detail.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-detail.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown-item.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +3 -5
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
- 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 +2 -2
- package/dist/cjs/q2-form.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-form.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-formatted-text.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
- package/dist/cjs/q2-grid.cjs.entry.js +32 -8
- package/dist/cjs/q2-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-grid.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-icon.cjs.entry.js +1 -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 +8 -5
- 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 +2 -2
- 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 -3
- 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 +2 -2
- 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-meter.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-meter.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-modal.cjs.entry.js +3 -3
- 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 +1 -1
- package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
- package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-option.cjs.entry.js +3 -3
- package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-option.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-otp.cjs.entry.js +373 -0
- package/dist/cjs/q2-otp.cjs.entry.js.map +1 -0
- package/dist/cjs/q2-otp.entry.cjs.js.map +1 -0
- package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
- 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 +24 -15
- 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 +1 -1
- 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-container.cjs.entry.js +1 -1
- package/dist/cjs/q2-section.cjs.entry.js +3 -3
- package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-section.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-select.cjs.entry.js +1 -1
- 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 +3 -3
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
- 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-toast.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-toast.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +124 -5
- 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-CW6y5624.js → sanitize-html-string-D17Pr7-c.js} +21 -4
- package/dist/cjs/{sanitize-html-string-CW6y5624.js.map → sanitize-html-string-D17Pr7-c.js.map} +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/click-elsewhere/click-elsewhere.js +2 -0
- package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
- package/dist/collection/components/q2-action-group/q2-action-group.css +14 -0
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +16 -0
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +107 -2
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.css +24 -0
- package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +61 -0
- package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js.map +1 -0
- package/dist/collection/components/q2-badge/q2-badge.css +30 -0
- package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js +34 -0
- package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js.map +1 -0
- package/dist/collection/components/q2-btn/q2-btn.css +279 -0
- package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +80 -0
- package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js.map +1 -0
- package/dist/collection/components/q2-calendar/q2-calendar.css +36 -0
- package/dist/collection/components/q2-calendar/q2-calendar.js +5 -2
- package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +170 -0
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js.map +1 -0
- package/dist/collection/components/q2-card/q2-card.css +62 -0
- package/dist/collection/components/q2-card/test/q2-card-test.vr.js +72 -0
- package/dist/collection/components/q2-card/test/q2-card-test.vr.js.map +1 -0
- package/dist/collection/components/q2-card-image/q2-card-image.css +74 -13
- package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js +152 -0
- package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js.map +1 -0
- package/dist/collection/components/q2-carousel/q2-carousel.css +78 -13
- package/dist/collection/components/q2-carousel/q2-carousel.js +241 -27
- package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
- package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +104 -0
- package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js.map +1 -0
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +26 -1
- package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +126 -0
- package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js.map +1 -0
- package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +105 -0
- package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js.map +1 -0
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +29 -0
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +21 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +151 -0
- package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js.map +1 -0
- package/dist/collection/components/q2-checkbox/q2-checkbox.css +128 -0
- package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js +69 -0
- package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js.map +1 -0
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +21 -0
- package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js +61 -0
- package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js.map +1 -0
- package/dist/collection/components/q2-context/q2-context.css +16 -0
- package/dist/collection/components/q2-context/test/q2-context-test.vr.js +95 -0
- package/dist/collection/components/q2-context/test/q2-context-test.vr.js.map +1 -0
- package/dist/collection/components/q2-currency/q2-currency.css +31 -0
- package/dist/collection/components/q2-currency/q2-currency.js +3 -4
- package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
- package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js +79 -0
- package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js.map +1 -0
- package/dist/collection/components/q2-data-table/q2-data-table.css +51 -0
- package/dist/collection/components/q2-data-table/q2-data-table.js +1 -1
- package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +79 -0
- package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js.map +1 -0
- package/dist/collection/components/q2-detail/q2-detail.css +42 -0
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.css +8 -0
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +2 -4
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +11 -0
- package/dist/collection/components/q2-editable-field/q2-editable-field.css +5 -0
- package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js +89 -0
- package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js.map +1 -0
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.css +64 -0
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js +92 -0
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js.map +1 -0
- package/dist/collection/components/q2-form/q2-form.css +34 -20
- package/dist/collection/components/q2-form/q2-form.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.css +14 -0
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js +55 -0
- package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js.map +1 -0
- package/dist/collection/components/q2-grid/q2-grid.css +13 -0
- package/dist/collection/components/q2-grid/q2-grid.js +31 -7
- package/dist/collection/components/q2-grid/q2-grid.js.map +1 -1
- package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
- package/dist/collection/components/q2-icon/q2-icon.css +15 -0
- package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js +55 -0
- package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js.map +1 -0
- package/dist/collection/components/q2-input/q2-input.css +104 -0
- package/dist/collection/components/q2-input/q2-input.js +6 -3
- package/dist/collection/components/q2-input/q2-input.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.vr.js +97 -0
- package/dist/collection/components/q2-input/test/q2-input-test.vr.js.map +1 -0
- package/dist/collection/components/q2-item/q2-item.css +28 -0
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.css +16 -0
- package/dist/collection/components/q2-legend/q2-legend.js +21 -3
- package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
- package/dist/collection/components/q2-link/q2-link.css +20 -0
- package/dist/collection/components/q2-link/test/q2-link-test.vr.js +70 -0
- package/dist/collection/components/q2-link/test/q2-link-test.vr.js.map +1 -0
- package/dist/collection/components/q2-list/q2-list.css +14 -0
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-list/test/q2-list-test.vr.js +58 -0
- package/dist/collection/components/q2-list/test/q2-list-test.vr.js.map +1 -0
- package/dist/collection/components/q2-loading/q2-loading.css +9 -0
- package/dist/collection/components/q2-message/q2-message.css +29 -1
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-message/test/q2-message-test.vr.js +57 -0
- package/dist/collection/components/q2-message/test/q2-message-test.vr.js.map +1 -0
- package/dist/collection/components/q2-meter/q2-meter.css +40 -0
- package/dist/collection/components/q2-meter/q2-meter.js +1 -1
- package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js +78 -0
- package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js.map +1 -0
- package/dist/collection/components/q2-modal/q2-modal.css +21 -0
- package/dist/collection/components/q2-modal/q2-modal.js +1 -1
- package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +107 -0
- package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js.map +1 -0
- package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.css +11 -0
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-option/q2-option.css +9 -0
- package/dist/collection/components/q2-option/q2-option.js +1 -1
- package/dist/collection/components/q2-option/q2-option.js.map +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.css +3 -0
- package/dist/collection/components/q2-option-list/q2-option-list.js +37 -28
- package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
- package/dist/collection/components/q2-otp/q2-otp.css +312 -0
- package/dist/collection/components/q2-otp/q2-otp.js +873 -0
- package/dist/collection/components/q2-otp/q2-otp.js.map +1 -0
- package/dist/collection/components/q2-pagination/q2-pagination.css +22 -0
- package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js +145 -0
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js.map +1 -0
- package/dist/collection/components/q2-pill/q2-pill.css +53 -0
- package/dist/collection/components/q2-pill/q2-pill.js +23 -14
- package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +110 -0
- package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js.map +1 -0
- package/dist/collection/components/q2-popover/q2-popover.css +20 -0
- package/dist/collection/components/q2-popover/q2-popover.js +5 -2
- package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
- package/dist/collection/components/q2-radio/q2-radio.css +52 -1
- package/dist/collection/components/q2-radio/q2-radio.js +2 -2
- package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
- package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js +73 -0
- package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js.map +1 -0
- package/dist/collection/components/q2-radio-group/q2-radio-group.css +22 -0
- package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js +99 -0
- package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js.map +1 -0
- 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.css +26 -0
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-section/test/q2-section-test.vr.js +68 -0
- package/dist/collection/components/q2-section/test/q2-section-test.vr.js.map +1 -0
- package/dist/collection/components/q2-select/q2-select.css +17 -0
- package/dist/collection/components/q2-select/test/q2-select-test.vr.js +107 -0
- package/dist/collection/components/q2-select/test/q2-select-test.vr.js.map +1 -0
- package/dist/collection/components/q2-stepper/q2-stepper.css +36 -0
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js +86 -0
- package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js.map +1 -0
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +31 -0
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js +97 -0
- package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js.map +1 -0
- package/dist/collection/components/q2-tab-container/q2-tab-container.css +38 -0
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js +78 -0
- package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js.map +1 -0
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.css +30 -1
- package/dist/collection/components/q2-tag/q2-tag.js +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js +83 -0
- package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js.map +1 -0
- package/dist/collection/components/q2-textarea/q2-textarea.css +80 -0
- package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js +102 -0
- package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js.map +1 -0
- package/dist/collection/components/q2-toast/q2-toast.css +15 -0
- package/dist/collection/components/q2-tooltip/q2-tooltip.css +31 -0
- package/dist/collection/components/q2-tooltip/q2-tooltip.js +135 -4
- package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
- package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +76 -0
- package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js.map +1 -0
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/utils/component.js +7 -1
- package/dist/collection/utils/component.js.map +1 -1
- package/dist/collection/utils/index.js +1 -1
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/collection/utils/sanitize-html-string.js +19 -2
- package/dist/collection/utils/sanitize-html-string.js.map +1 -1
- package/dist/collection/utils/test/vr-helpers.js +98 -0
- package/dist/collection/utils/test/vr-helpers.js.map +1 -0
- package/dist/components/click-elsewhere2.js +2 -0
- package/dist/components/click-elsewhere2.js.map +1 -1
- package/dist/components/component.js +7 -1
- package/dist/components/component.js.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/index2.js +1 -1
- package/dist/components/index2.js.map +1 -1
- package/dist/components/q2-action-group2.js.map +1 -1
- package/dist/components/q2-action-sheet.js +107 -2
- package/dist/components/q2-action-sheet.js.map +1 -1
- package/dist/components/q2-avatar2.js.map +1 -1
- package/dist/components/q2-badge2.js.map +1 -1
- package/dist/components/q2-btn2.js.map +1 -1
- package/dist/components/q2-calendar.js +5 -2
- package/dist/components/q2-calendar.js.map +1 -1
- package/dist/components/q2-card-image.js +1 -1
- package/dist/components/q2-card-image.js.map +1 -1
- package/dist/components/q2-card.js.map +1 -1
- package/dist/components/q2-carousel-pane.js +1 -135
- package/dist/components/q2-carousel-pane.js.map +1 -1
- package/dist/components/q2-carousel-pane2.js +140 -0
- package/dist/components/q2-carousel-pane2.js.map +1 -0
- package/dist/components/q2-carousel.js +173 -29
- package/dist/components/q2-carousel.js.map +1 -1
- package/dist/components/q2-chart-donut.js +3 -1
- package/dist/components/q2-chart-donut.js.map +1 -1
- package/dist/components/q2-checkbox-group.js.map +1 -1
- package/dist/components/q2-checkbox2.js.map +1 -1
- package/dist/components/q2-context.js +1 -1
- package/dist/components/q2-context.js.map +1 -1
- package/dist/components/q2-currency.js +3 -4
- package/dist/components/q2-currency.js.map +1 -1
- package/dist/components/q2-data-table.js +1 -1
- package/dist/components/q2-data-table.js.map +1 -1
- package/dist/components/q2-detail.js +1 -1
- package/dist/components/q2-detail.js.map +1 -1
- package/dist/components/q2-dropdown-item2.js.map +1 -1
- package/dist/components/q2-dropdown.js +2 -4
- package/dist/components/q2-dropdown.js.map +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 +2 -2
- package/dist/components/q2-form.js.map +1 -1
- package/dist/components/q2-formatted-text.js +1 -1
- package/dist/components/q2-formatted-text.js.map +1 -1
- package/dist/components/q2-grid.js +32 -8
- package/dist/components/q2-grid.js.map +1 -1
- package/dist/components/q2-icon2.js.map +1 -1
- package/dist/components/q2-input2.js +7 -4
- package/dist/components/q2-input2.js.map +1 -1
- package/dist/components/q2-item2.js +1 -1
- package/dist/components/q2-item2.js.map +1 -1
- package/dist/components/q2-legend2.js +3 -3
- package/dist/components/q2-legend2.js.map +1 -1
- package/dist/components/q2-link2.js.map +1 -1
- package/dist/components/q2-list2.js +1 -1
- package/dist/components/q2-list2.js.map +1 -1
- package/dist/components/q2-loading2.js.map +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-meter.js.map +1 -1
- package/dist/components/q2-modal.js +1 -1
- package/dist/components/q2-modal.js.map +1 -1
- package/dist/components/q2-mutation-observer.js +1 -1
- package/dist/components/q2-optgroup2.js +1 -1
- package/dist/components/q2-optgroup2.js.map +1 -1
- package/dist/components/q2-option-list2.js +37 -28
- package/dist/components/q2-option-list2.js.map +1 -1
- package/dist/components/q2-option2.js +1 -1
- package/dist/components/q2-option2.js.map +1 -1
- package/dist/components/q2-otp.d.ts +11 -0
- package/dist/components/q2-otp.js +439 -0
- package/dist/components/q2-otp.js.map +1 -0
- package/dist/components/q2-pagination.js +3 -3
- package/dist/components/q2-pagination.js.map +1 -1
- package/dist/components/q2-pill.js +23 -14
- package/dist/components/q2-pill.js.map +1 -1
- package/dist/components/q2-popover2.js +5 -2
- package/dist/components/q2-popover2.js.map +1 -1
- 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-section.js.map +1 -1
- package/dist/components/q2-select2.js.map +1 -1
- package/dist/components/q2-stepper-pane.js +1 -1
- package/dist/components/q2-stepper-vertical.js +1 -1
- package/dist/components/q2-stepper-vertical.js.map +1 -1
- package/dist/components/q2-stepper.js +1 -1
- package/dist/components/q2-stepper.js.map +1 -1
- package/dist/components/q2-tab-container.js +1 -1
- package/dist/components/q2-tab-container.js.map +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tag2.js +2 -2
- package/dist/components/q2-tag2.js.map +1 -1
- package/dist/components/q2-textarea.js.map +1 -1
- package/dist/components/q2-toast.js.map +1 -1
- package/dist/components/q2-tooltip2.js +124 -5
- package/dist/components/q2-tooltip2.js.map +1 -1
- package/dist/components/sanitize-html-string.js +19 -2
- package/dist/components/sanitize-html-string.js.map +1 -1
- package/dist/components/tecton-tab-pane.js +2 -2
- package/dist/esm/click-elsewhere.q2-option-list.q2-popover.entry.js.map +1 -1
- package/dist/esm/click-elsewhere_3.entry.js +46 -32
- package/dist/esm/click-elsewhere_3.entry.js.map +1 -1
- package/dist/esm/{component-DVxzK3WH.js → component-DaQM9u3s.js} +9 -3
- package/dist/esm/component-DaQM9u3s.js.map +1 -0
- package/dist/esm/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
- package/dist/esm/index-C5gj0T_3.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group.q2-resize-observer.entry.js.map +1 -1
- package/dist/esm/q2-action-group_2.entry.js +2 -2
- package/dist/esm/q2-action-group_2.entry.js.map +1 -1
- package/dist/esm/q2-action-sheet.entry.js +109 -4
- package/dist/esm/q2-action-sheet.entry.js.map +1 -1
- package/dist/esm/q2-avatar.entry.js.map +1 -1
- package/dist/esm/q2-badge.entry.js +1 -1
- package/dist/esm/q2-badge.entry.js.map +1 -1
- package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
- package/dist/esm/q2-btn_2.entry.js +1 -1
- package/dist/esm/q2-btn_2.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +6 -3
- package/dist/esm/q2-calendar.entry.js.map +1 -1
- package/dist/esm/q2-card-image.entry.js +2 -2
- package/dist/esm/q2-card-image.entry.js.map +1 -1
- package/dist/esm/q2-card.entry.js +1 -1
- package/dist/esm/q2-card.entry.js.map +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +3 -3
- package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
- package/dist/esm/q2-carousel.entry.js +162 -29
- package/dist/esm/q2-carousel.entry.js.map +1 -1
- package/dist/esm/q2-chart-area.entry.js +1 -1
- package/dist/esm/q2-chart-bar.entry.js +1 -1
- package/dist/esm/q2-chart-donut.entry.js +3 -2
- package/dist/esm/q2-chart-donut.entry.js.map +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +2 -2
- package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
- package/dist/esm/q2-checkbox.q2-tag.entry.js.map +1 -1
- package/dist/esm/q2-checkbox_2.entry.js +3 -3
- package/dist/esm/q2-checkbox_2.entry.js.map +1 -1
- package/dist/esm/q2-context.entry.js +2 -2
- package/dist/esm/q2-context.entry.js.map +1 -1
- package/dist/esm/q2-currency.entry.js +3 -4
- package/dist/esm/q2-currency.entry.js.map +1 -1
- package/dist/esm/q2-data-table.entry.js +2 -2
- package/dist/esm/q2-data-table.entry.js.map +1 -1
- package/dist/esm/q2-detail.entry.js +2 -2
- package/dist/esm/q2-detail.entry.js.map +1 -1
- package/dist/esm/q2-dropdown-item.entry.js +2 -2
- package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
- package/dist/esm/q2-dropdown.entry.js +3 -5
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +1 -1
- 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 +2 -2
- package/dist/esm/q2-form.entry.js.map +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js.map +1 -1
- package/dist/esm/q2-grid-area.entry.js +1 -1
- package/dist/esm/q2-grid.entry.js +33 -9
- package/dist/esm/q2-grid.entry.js.map +1 -1
- package/dist/esm/q2-icon.entry.js +1 -1
- package/dist/esm/q2-icon.entry.js.map +1 -1
- package/dist/esm/q2-input.entry.js +8 -5
- package/dist/esm/q2-input.entry.js.map +1 -1
- package/dist/esm/q2-item.entry.js +2 -2
- package/dist/esm/q2-item.entry.js.map +1 -1
- package/dist/esm/q2-legend.entry.js +2 -3
- 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 +2 -2
- 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-meter.entry.js.map +1 -1
- package/dist/esm/q2-modal.entry.js +3 -3
- package/dist/esm/q2-modal.entry.js.map +1 -1
- package/dist/esm/q2-month-picker.entry.js +1 -1
- package/dist/esm/q2-mutation-observer.entry.js +1 -1
- package/dist/esm/q2-optgroup.entry.js +3 -3
- package/dist/esm/q2-optgroup.entry.js.map +1 -1
- package/dist/esm/q2-option.entry.js +3 -3
- package/dist/esm/q2-option.entry.js.map +1 -1
- package/dist/esm/q2-otp.entry.js +371 -0
- package/dist/esm/q2-otp.entry.js.map +1 -0
- package/dist/esm/q2-pagination.entry.js +4 -4
- package/dist/esm/q2-pagination.entry.js.map +1 -1
- package/dist/esm/q2-pill.entry.js +24 -15
- package/dist/esm/q2-pill.entry.js.map +1 -1
- package/dist/esm/q2-radio-group.entry.js +1 -1
- 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-container.entry.js +1 -1
- package/dist/esm/q2-section.entry.js +3 -3
- package/dist/esm/q2-section.entry.js.map +1 -1
- package/dist/esm/q2-select.entry.js +1 -1
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +3 -3
- package/dist/esm/q2-stepper-vertical.entry.js +2 -2
- package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
- package/dist/esm/q2-stepper.entry.js +2 -2
- 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 +2 -2
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +1 -1
- package/dist/esm/q2-textarea.entry.js.map +1 -1
- package/dist/esm/q2-toast.entry.js +1 -1
- package/dist/esm/q2-toast.entry.js.map +1 -1
- package/dist/esm/q2-tooltip.entry.js +124 -5
- package/dist/esm/q2-tooltip.entry.js.map +1 -1
- package/dist/esm/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +21 -4
- package/dist/{q2-tecton-elements/sanitize-html-string-B35VmRc9.js.map → esm/sanitize-html-string-DPHNpMWE.js.map} +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/playwright.config.js +12 -0
- package/dist/playwright.config.js.map +1 -0
- package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
- package/dist/q2-tecton-elements/click-elsewhere.q2-option-list.q2-popover.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +44 -35
- package/dist/q2-tecton-elements/click-elsewhere_3.entry.js.map +1 -1
- package/dist/q2-tecton-elements/component-DaQM9u3s.js +46 -0
- package/dist/q2-tecton-elements/component-DaQM9u3s.js.map +1 -0
- package/dist/q2-tecton-elements/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
- package/dist/q2-tecton-elements/index-C5gj0T_3.js.map +1 -0
- package/dist/q2-tecton-elements/q2-action-group.q2-resize-observer.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-action-group_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-action-sheet.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +166 -70
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-avatar.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-badge.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-badge.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-badge.entry.js.map +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 +1 -1
- 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.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-card-image.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-card-image.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-card.entry.js.map +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 +6 -6
- 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 +402 -271
- package/dist/q2-tecton-elements/q2-carousel.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +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 +18 -16
- 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 +2 -2
- 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 -1
- package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-checkbox_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-currency.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-currency.entry.js +34 -33
- package/dist/q2-tecton-elements/q2-currency.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-data-table.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-detail.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +18 -19
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
- 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.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-form.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-form.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-formatted-text.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-grid.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-grid.entry.js +39 -14
- package/dist/q2-tecton-elements/q2-grid.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-icon.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-icon.entry.js +52 -52
- 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 +10 -6
- 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 +14 -14
- 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 +4 -5
- 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 +7 -7
- 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 +28 -28
- package/dist/q2-tecton-elements/q2-message.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-meter.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-meter.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-modal.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-modal.entry.js +53 -53
- package/dist/q2-tecton-elements/q2-modal.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-otp.entry.esm.js.map +1 -0
- package/dist/q2-tecton-elements/q2-otp.entry.js +453 -0
- package/dist/q2-tecton-elements/q2-otp.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-pagination.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-pagination.entry.js +29 -29
- 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 +43 -28
- 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 +1 -1
- 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 +10 -10
- 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-container.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-section.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-select.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +10 -10
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +5 -5
- 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 +33 -33
- 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 +14 -14
- package/dist/q2-tecton-elements/q2-tab-container.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tab-pane.entry.js +6 -6
- 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 +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-toast.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-toast.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +136 -20
- package/dist/q2-tecton-elements/q2-tooltip.entry.js.map +1 -1
- package/dist/q2-tecton-elements/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +147 -142
- package/dist/{esm/sanitize-html-string-B35VmRc9.js.map → q2-tecton-elements/sanitize-html-string-DPHNpMWE.js.map} +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
- package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/playwright.config.d.ts +2 -0
- package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +22 -0
- package/dist/types/components/q2-avatar/test/q2-avatar-test.vr.d.ts +1 -0
- package/dist/types/components/q2-badge/test/q2-badge-test.vr.d.ts +1 -0
- package/dist/types/components/q2-btn/test/q2-btn-test.vr.d.ts +1 -0
- package/dist/types/components/q2-calendar/test/q2-calendar-test.vr.d.ts +1 -0
- package/dist/types/components/q2-card/test/q2-card-test.vr.d.ts +1 -0
- package/dist/types/components/q2-card-image/test/q2-card-image-test.vr.d.ts +1 -0
- package/dist/types/components/q2-carousel/q2-carousel.d.ts +29 -0
- package/dist/types/components/q2-carousel/test/q2-carousel-test.vr.d.ts +1 -0
- package/dist/types/components/q2-chart-area/test/q2-chart-area-test.vr.d.ts +1 -0
- package/dist/types/components/q2-chart-bar/test/q2-chart-bar-test.vr.d.ts +1 -0
- package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +2 -0
- package/dist/types/components/q2-chart-donut/test/q2-chart-donut-test.vr.d.ts +1 -0
- package/dist/types/components/q2-checkbox/test/q2-checkbox-test.vr.d.ts +1 -0
- package/dist/types/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.d.ts +1 -0
- package/dist/types/components/q2-context/test/q2-context-test.vr.d.ts +1 -0
- package/dist/types/components/q2-currency/test/q2-currency-test.vr.d.ts +1 -0
- package/dist/types/components/q2-data-table/test/q2-data-table-test.vr.d.ts +1 -0
- package/dist/types/components/q2-editable-field/test/q2-editable-field-test.vr.d.ts +1 -0
- package/dist/types/components/q2-file-picker/test/q2-file-picker-test.vr.d.ts +1 -0
- package/dist/types/components/q2-formatted-text/test/q2-formatted-text-test.vr.d.ts +1 -0
- package/dist/types/components/q2-grid/q2-grid.d.ts +10 -0
- package/dist/types/components/q2-icon/test/q2-icon-test.vr.d.ts +1 -0
- package/dist/types/components/q2-input/test/q2-input-test.vr.d.ts +1 -0
- package/dist/types/components/q2-legend/q2-legend.d.ts +2 -0
- package/dist/types/components/q2-link/test/q2-link-test.vr.d.ts +1 -0
- package/dist/types/components/q2-list/test/q2-list-test.vr.d.ts +1 -0
- package/dist/types/components/q2-message/test/q2-message-test.vr.d.ts +1 -0
- package/dist/types/components/q2-meter/test/q2-meter-test.vr.d.ts +1 -0
- package/dist/types/components/q2-modal/test/q2-modal-test.vr.d.ts +1 -0
- package/dist/types/components/q2-otp/q2-otp.d.ts +159 -0
- package/dist/types/components/q2-pagination/test/q2-pagination-test.vr.d.ts +1 -0
- package/dist/types/components/q2-pill/q2-pill.d.ts +5 -2
- package/dist/types/components/q2-pill/test/q2-pill-test.vr.d.ts +1 -0
- package/dist/types/components/q2-radio/q2-radio.d.ts +1 -1
- package/dist/types/components/q2-radio/test/q2-radio-test.vr.d.ts +1 -0
- package/dist/types/components/q2-radio-group/test/q2-radio-group-test.vr.d.ts +1 -0
- package/dist/types/components/q2-section/test/q2-section-test.vr.d.ts +1 -0
- package/dist/types/components/q2-select/test/q2-select-test.vr.d.ts +1 -0
- package/dist/types/components/q2-stepper/test/q2-stepper-test.vr.d.ts +1 -0
- package/dist/types/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.d.ts +1 -0
- package/dist/types/components/q2-tab-container/test/q2-tab-container-test.vr.d.ts +1 -0
- package/dist/types/components/q2-tag/test/q2-tag-test.vr.d.ts +1 -0
- package/dist/types/components/q2-textarea/test/q2-textarea-test.vr.d.ts +1 -0
- package/dist/types/components/q2-tooltip/q2-tooltip.d.ts +4 -0
- package/dist/types/components/q2-tooltip/test/q2-tooltip-test.vr.d.ts +1 -0
- package/dist/types/components.d.ts +306 -2
- package/dist/types/utils/component.d.ts +1 -1
- package/dist/types/utils/test/vr-helpers.d.ts +14 -0
- package/package.json +12 -3
- package/dist/cjs/component-DRAntnCA.js.map +0 -1
- package/dist/cjs/index-YvKoRT-t.js.map +0 -1
- package/dist/esm/component-DVxzK3WH.js.map +0 -1
- package/dist/esm/index-C4PILj1_.js.map +0 -1
- package/dist/q2-tecton-elements/component-DVxzK3WH.js +0 -40
- package/dist/q2-tecton-elements/component-DVxzK3WH.js.map +0 -1
- package/dist/q2-tecton-elements/index-C4PILj1_.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { r as t, c as
|
|
1
|
+
import { r as t, c as i, h as o, F as e, g as a } from "./index-CGkHOjh1.js";
|
|
2
2
|
|
|
3
|
-
import { l as
|
|
3
|
+
import { l as s, w as r } from "./index-C5gj0T_3.js";
|
|
4
4
|
|
|
5
|
-
import { s as n, a as c } from "./sanitize-html-string-
|
|
5
|
+
import { s as n, a as c } from "./sanitize-html-string-DPHNpMWE.js";
|
|
6
6
|
|
|
7
7
|
import { m as d } from "./mirror-emit-DUjY_ucm.js";
|
|
8
8
|
|
|
@@ -11,9 +11,9 @@ const l = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline
|
|
|
11
11
|
const h = class {
|
|
12
12
|
constructor(a) {
|
|
13
13
|
t(this, a);
|
|
14
|
-
this.close =
|
|
15
|
-
this.ready =
|
|
16
|
-
this.tctClose =
|
|
14
|
+
this.close = i(this, "close", 7);
|
|
15
|
+
this.ready = i(this, "ready", 3);
|
|
16
|
+
this.tctClose = i(this, "tctClose", 7);
|
|
17
17
|
this.initialSelectedOptions = [];
|
|
18
18
|
this.maxHeight = .75;
|
|
19
19
|
this.minHeight = .2;
|
|
@@ -25,42 +25,133 @@ const h = class {
|
|
|
25
25
|
// #region State Properties
|
|
26
26
|
this.isScrollable = false;
|
|
27
27
|
this.renderStatus = "is-closing";
|
|
28
|
+
/**
|
|
29
|
+
* Focuses the last visible (non-hidden, non-disabled) option in the option list.
|
|
30
|
+
* Uses the async getOptions() method, but is invoked after preventDefault() has
|
|
31
|
+
* already been called synchronously by the caller.
|
|
32
|
+
*/ this.focusLastVisibleOption = async () => {
|
|
33
|
+
if (!this.optionListElement) return;
|
|
34
|
+
const t = await this.optionListElement.getOptions();
|
|
35
|
+
const i = t.slice().reverse().find((t => !t.hidden && !t.disabled));
|
|
36
|
+
if (i) {
|
|
37
|
+
i.focus();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
28
40
|
this.generateOptgroup = t => {
|
|
29
|
-
const
|
|
30
|
-
if (t.label)
|
|
31
|
-
if (t.disabled)
|
|
32
|
-
if (!!t.options.length) t.options.forEach((t =>
|
|
33
|
-
return
|
|
41
|
+
const i = document.createElement("q2-optgroup");
|
|
42
|
+
if (t.label) i.setAttribute("label", t.label);
|
|
43
|
+
if (t.disabled) i.setAttribute("disabled", "");
|
|
44
|
+
if (!!t.options.length) t.options.forEach((t => i.appendChild(this.generateOption(t))));
|
|
45
|
+
return i;
|
|
34
46
|
};
|
|
35
47
|
this.generateOption = t => {
|
|
36
|
-
const
|
|
37
|
-
const {innerHTML:
|
|
38
|
-
if (
|
|
39
|
-
Object.entries(
|
|
40
|
-
if (
|
|
41
|
-
if (typeof
|
|
42
|
-
if (
|
|
48
|
+
const i = document.createElement("q2-option");
|
|
49
|
+
const {innerHTML: o, ...e} = t;
|
|
50
|
+
if (o) i.innerHTML = n(o);
|
|
51
|
+
Object.entries(e).forEach((([t, o]) => {
|
|
52
|
+
if (o === undefined) return;
|
|
53
|
+
if (typeof o === "boolean") {
|
|
54
|
+
if (o) i.setAttribute(t, "");
|
|
43
55
|
} else {
|
|
44
|
-
|
|
56
|
+
i.setAttribute(t, o);
|
|
45
57
|
}
|
|
46
58
|
}));
|
|
47
|
-
return
|
|
59
|
+
return i;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Handles keyboard navigation within the action sheet dialog.
|
|
63
|
+
* Manages Tab navigation between options and action buttons (close/done).
|
|
64
|
+
* Allows Tab to exit to browser chrome when reaching boundaries.
|
|
65
|
+
*
|
|
66
|
+
* NOTE: This handler is intentionally synchronous. `event.preventDefault()`
|
|
67
|
+
* must be called before the browser processes the Tab key (i.e., during the
|
|
68
|
+
* synchronous portion of the keydown event). Introducing an `await` here
|
|
69
|
+
* allows the browser to shift focus before preventDefault runs, which causes
|
|
70
|
+
* Tab from the close button to escape the dialog instead of cycling back to
|
|
71
|
+
* the options.
|
|
72
|
+
* @param event - The keyboard event.
|
|
73
|
+
*/ this.handleDialogKeydown = t => {
|
|
74
|
+
const {data: i} = this;
|
|
75
|
+
// Only activate for list appearance with an option list
|
|
76
|
+
if (!i || i.appearance !== "list" || !this.optionListElement) return;
|
|
77
|
+
const {key: o, shiftKey: e} = t;
|
|
78
|
+
if (o !== "Tab") return;
|
|
79
|
+
const a = this.hostElement.shadowRoot.activeElement;
|
|
80
|
+
const s = this.closeButtonElement;
|
|
81
|
+
const r = this.doneButtonElement;
|
|
82
|
+
const n = a === s;
|
|
83
|
+
const c = a === r;
|
|
84
|
+
// q2-option lives in light DOM, so document.activeElement is the option element itself when focused.
|
|
85
|
+
// Avoid `await optionListElement.getOptions()` here — that defers the handler past
|
|
86
|
+
// the browser's default Tab handling, making preventDefault() ineffective.
|
|
87
|
+
const d = document.activeElement;
|
|
88
|
+
const l = !!d && (d.tagName === "Q2-OPTION" || d.tagName === "Q2-DROPDOWN-ITEM") && this.hostElement.contains(d);
|
|
89
|
+
if (e) {
|
|
90
|
+
// Shift+Tab: if on close button
|
|
91
|
+
if (n) {
|
|
92
|
+
// With a done button (multi-select): allow default to exit to browser.
|
|
93
|
+
// Browser Shift+Tab from the URL bar lands on the done button (last
|
|
94
|
+
// tabbable in DOM order), which redirects to the last option via
|
|
95
|
+
// focusLastVisibleOption — so choices remain reachable.
|
|
96
|
+
if (r) {
|
|
97
|
+
// Let it bubble - exits to browser chrome
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Without a done button (single-select): redirect to the last visible
|
|
101
|
+
// option. Otherwise focus would exit to the URL bar and the next
|
|
102
|
+
// Shift+Tab back into the page would land on the close button (the
|
|
103
|
+
// only tabbable in the modal), trapping the user in URL ↔ close
|
|
104
|
+
// with no path back to choices.
|
|
105
|
+
t.preventDefault();
|
|
106
|
+
this.focusLastVisibleOption();
|
|
107
|
+
}
|
|
108
|
+
// Shift+Tab: if on done button, focus last option
|
|
109
|
+
else if (c) {
|
|
110
|
+
t.preventDefault();
|
|
111
|
+
this.focusLastVisibleOption();
|
|
112
|
+
}
|
|
113
|
+
// Shift+Tab: if on any option, go to close button
|
|
114
|
+
else if (l && s) {
|
|
115
|
+
t.preventDefault();
|
|
116
|
+
s.focus();
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
// Forward Tab: if on close button, skip to first/selected option
|
|
120
|
+
if (n) {
|
|
121
|
+
t.preventDefault();
|
|
122
|
+
this.optionListElement.focus();
|
|
123
|
+
}
|
|
124
|
+
// Forward Tab: if on done button, allow default to exit to browser
|
|
125
|
+
else if (c) {
|
|
126
|
+
// Let it bubble - exits to browser chrome
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Forward Tab: if on any option
|
|
130
|
+
else if (l) {
|
|
131
|
+
if (r) {
|
|
132
|
+
// With done button: go to done button
|
|
133
|
+
t.preventDefault();
|
|
134
|
+
r.focus();
|
|
135
|
+
}
|
|
136
|
+
// else: No done button - allow default Tab behavior to exit to browser
|
|
137
|
+
}
|
|
138
|
+
}
|
|
48
139
|
};
|
|
49
140
|
this.onCancel = t => {
|
|
50
|
-
var
|
|
141
|
+
var i, o;
|
|
51
142
|
t.preventDefault();
|
|
52
|
-
const {initialSelectedOptions:
|
|
143
|
+
const {initialSelectedOptions: e} = this;
|
|
53
144
|
this.hide({
|
|
54
|
-
value: (
|
|
55
|
-
values:
|
|
145
|
+
value: (o = (i = e === null || e === void 0 ? void 0 : e[0]) === null || i === void 0 ? void 0 : i.value) !== null && o !== void 0 ? o : "",
|
|
146
|
+
values: e,
|
|
56
147
|
type: "cancel"
|
|
57
148
|
});
|
|
58
149
|
};
|
|
59
150
|
this.onClick = t => {
|
|
60
|
-
const
|
|
61
|
-
if (!(
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
151
|
+
const i = t.target;
|
|
152
|
+
if (!(i instanceof HTMLElement)) return;
|
|
153
|
+
const o = !!i.closest(".interior, q2-action-sheet");
|
|
154
|
+
if (o) return;
|
|
64
155
|
this.onCancel(t);
|
|
65
156
|
};
|
|
66
157
|
this.onListChange = t => {
|
|
@@ -83,42 +174,46 @@ const h = class {
|
|
|
83
174
|
// #endregion
|
|
84
175
|
// #region Render Methods
|
|
85
176
|
this.renderList = ({data: t}) => {
|
|
86
|
-
const {listProps:
|
|
87
|
-
return e
|
|
177
|
+
const {listProps: i, slotsHtml: a = []} = t;
|
|
178
|
+
return o(e, null, a.filter((t => t.slot === "top")).map((t => o("div", {
|
|
88
179
|
innerHTML: c(t.html)
|
|
89
|
-
}))),
|
|
180
|
+
}))), o("div", {
|
|
90
181
|
class: "content",
|
|
91
182
|
ref: t => this.contentElement = t
|
|
92
|
-
},
|
|
183
|
+
}, o("q2-option-list", {
|
|
93
184
|
ref: t => this.optionListElement = t,
|
|
94
|
-
multiple:
|
|
95
|
-
noSelect:
|
|
185
|
+
multiple: i.multiple,
|
|
186
|
+
noSelect: i.noSelect,
|
|
96
187
|
onChange: this.onListChange,
|
|
97
188
|
onPopoverState: this.onListPopoverStateChange,
|
|
98
|
-
selectedOptions:
|
|
99
|
-
},
|
|
189
|
+
selectedOptions: i.selectedOptions
|
|
190
|
+
}, o("slot", null))), o("footer", null, i.multiple && o("q2-btn", {
|
|
191
|
+
ref: t => this.doneButtonElement = t,
|
|
100
192
|
"test-id": "btnDone",
|
|
101
193
|
intent: "workflow-primary",
|
|
102
194
|
onClick: this.onListDone
|
|
103
|
-
},
|
|
195
|
+
}, s("tecton.element.actionSheet.done"))), a.filter((t => t.slot === "bottom")).map((t => o("div", {
|
|
104
196
|
innerHTML: c(t.html)
|
|
105
197
|
}))));
|
|
106
198
|
};
|
|
107
|
-
this.renderMessage = ({data: t}) =>
|
|
199
|
+
this.renderMessage = ({data: t}) => o("q2-message", {
|
|
108
200
|
type: t.type
|
|
109
|
-
}, t.title &&
|
|
110
|
-
this.renderSlot = () =>
|
|
201
|
+
}, t.title && o("h2", null, t.title), t.description && o("p", null, t.description));
|
|
202
|
+
this.renderSlot = () => o("div", {
|
|
111
203
|
class: "content",
|
|
112
204
|
ref: t => this.contentElement = t
|
|
113
|
-
},
|
|
205
|
+
}, o("slot", null));
|
|
114
206
|
}
|
|
115
207
|
// #endregion
|
|
116
208
|
// #region Component Lifecycle Events
|
|
117
209
|
disconnectedCallback() {
|
|
118
210
|
this.dialogElement.removeEventListener("cancel", this.onCancel);
|
|
211
|
+
this.dialogElement.removeEventListener("keydown", this.handleDialogKeydown, true);
|
|
119
212
|
}
|
|
120
213
|
componentDidLoad() {
|
|
121
214
|
this.dialogElement.addEventListener("cancel", this.onCancel);
|
|
215
|
+
// Use capture phase to intercept Tab before option-list handles it
|
|
216
|
+
this.dialogElement.addEventListener("keydown", this.handleDialogKeydown, true);
|
|
122
217
|
this.ready.emit();
|
|
123
218
|
}
|
|
124
219
|
// #endregion
|
|
@@ -147,7 +242,7 @@ const h = class {
|
|
|
147
242
|
}
|
|
148
243
|
async show() {
|
|
149
244
|
this.showPreHook();
|
|
150
|
-
await
|
|
245
|
+
await r();
|
|
151
246
|
this.updateDialogMinMaxHeight();
|
|
152
247
|
this.storeInitialValues();
|
|
153
248
|
if (this.dialogElement.open) return;
|
|
@@ -167,9 +262,9 @@ const h = class {
|
|
|
167
262
|
const {data: t} = this;
|
|
168
263
|
if (!t) return;
|
|
169
264
|
if (t.appearance === "list") {
|
|
170
|
-
const {event:
|
|
171
|
-
if (
|
|
172
|
-
this.optionListElement.handleExternalKeydown(
|
|
265
|
+
const {event: i} = t;
|
|
266
|
+
if (i instanceof KeyboardEvent) {
|
|
267
|
+
this.optionListElement.handleExternalKeydown(i);
|
|
173
268
|
} else {
|
|
174
269
|
this.optionListElement.focus();
|
|
175
270
|
}
|
|
@@ -206,52 +301,53 @@ const h = class {
|
|
|
206
301
|
}
|
|
207
302
|
render() {
|
|
208
303
|
var t;
|
|
209
|
-
const {data:
|
|
210
|
-
const
|
|
304
|
+
const {data: i} = this;
|
|
305
|
+
const e = (i === null || i === void 0 ? void 0 : i.title) || this.title || !this.hideClose;
|
|
211
306
|
const a = this.renderStatus || "";
|
|
212
|
-
let
|
|
213
|
-
switch (
|
|
307
|
+
let s = null;
|
|
308
|
+
switch (i === null || i === void 0 ? void 0 : i.appearance) {
|
|
214
309
|
case "message":
|
|
215
|
-
|
|
310
|
+
s = this.renderMessage;
|
|
216
311
|
break;
|
|
217
312
|
|
|
218
313
|
case "list":
|
|
219
|
-
|
|
314
|
+
s = this.renderList;
|
|
220
315
|
break;
|
|
221
316
|
|
|
222
317
|
default:
|
|
223
|
-
|
|
318
|
+
s = this.renderSlot;
|
|
224
319
|
break;
|
|
225
320
|
}
|
|
226
|
-
const
|
|
227
|
-
const n = `interior is-${
|
|
228
|
-
return
|
|
229
|
-
key: "
|
|
321
|
+
const r = (i === null || i === void 0 ? void 0 : i.appearance) || "slot";
|
|
322
|
+
const n = `interior is-${r}`;
|
|
323
|
+
return o("dialog", {
|
|
324
|
+
key: "4a0e3a165326ab9e724600d7e030fa39095dcda0",
|
|
230
325
|
ref: t => this.dialogElement = t,
|
|
231
326
|
class: a,
|
|
232
327
|
onClick: this.onClick
|
|
233
|
-
},
|
|
234
|
-
key: "
|
|
328
|
+
}, o("div", {
|
|
329
|
+
key: "9848ffb2d692a788ad1cf1d606f3cfd8638501ae",
|
|
235
330
|
class: n
|
|
236
|
-
},
|
|
237
|
-
key: "
|
|
238
|
-
},
|
|
239
|
-
key: "
|
|
331
|
+
}, e && o("header", {
|
|
332
|
+
key: "2a573e272202699a8bf225ae74263aea107f4e5d"
|
|
333
|
+
}, o("div", {
|
|
334
|
+
key: "6ea6f8b415ecba0414d337efc1ce4cfdb0ec0cc9",
|
|
240
335
|
class: "title"
|
|
241
|
-
}, (
|
|
242
|
-
key: "
|
|
336
|
+
}, (i === null || i === void 0 ? void 0 : i.title) || this.title), !this.hideClose && o("q2-btn", {
|
|
337
|
+
key: "8f5efe5b235afadcaba63cd9ab0906c01cbb07a0",
|
|
338
|
+
ref: t => this.closeButtonElement = t,
|
|
243
339
|
class: "btn-close",
|
|
244
340
|
"test-id": "btnClose",
|
|
245
341
|
onClick: this.onCancel,
|
|
246
342
|
label: "tecton.element.actionSheet.close",
|
|
247
343
|
"hide-label": true
|
|
248
|
-
},
|
|
249
|
-
key: "
|
|
344
|
+
}, o("q2-icon", {
|
|
345
|
+
key: "af64434f4d0ec15d183a91501e48cc550fc2532e",
|
|
250
346
|
type: "close"
|
|
251
|
-
}))), ((t = this.data) === null || t === void 0 ? void 0 : t.description) &&
|
|
252
|
-
key: "
|
|
253
|
-
},
|
|
254
|
-
key: "
|
|
347
|
+
}))), ((t = this.data) === null || t === void 0 ? void 0 : t.description) && o("p", {
|
|
348
|
+
key: "a2044acff20cfc72cbde4d0899d34e51ac390984"
|
|
349
|
+
}, i.description), s && o(s, {
|
|
350
|
+
key: "558338b884c43bc014cc577581646fe830b7bc77",
|
|
255
351
|
data: this.data
|
|
256
352
|
})));
|
|
257
353
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["q2ActionSheetCss","Q2ActionSheet","constructor","hostRef","this","initialSelectedOptions","maxHeight","minHeight","selectedOptions","values","value","isScrollable","renderStatus","generateOptgroup","option","optgroupElement","document","createElement","label","setAttribute","disabled","options","length","forEach","opt","appendChild","generateOption","optionElement","innerHTML","attributes","sanitizeHTMLString","Object","entries","key","undefined","onCancel","event","preventDefault","hide","_b","_a","type","onClick","eventTarget","target","HTMLElement","isInContent","closest","onListChange","detail","onListDone","onListPopoverStateChange","open","action","renderList","data","listProps","slotsHtml","h","Fragment","filter","entry","slot","map","sanitizeActionSheetSlotHtml","html","class","ref","el","contentElement","optionListElement","multiple","noSelect","onChange","onPopoverState","intent","loc","renderMessage","title","description","renderSlot","disconnectedCallback","dialogElement","removeEventListener","componentDidLoad","addEventListener","ready","emit","mirrorEmit","close","hidePostHook","once","show","showPreHook","waitForNextPaint","updateDialogMinMaxHeight","storeInitialValues","showModal","focusContent","appearance","KeyboardEvent","handleExternalKeydown","focus","hostElement","windowHeight","window","innerHeight","style","setProperty","Math","floor","render","showHeader","hideClose","RenderContent","interiorClasses"],"sources":["src/components/q2-action-sheet/q2-action-sheet.scss?tag=q2-action-sheet&encapsulation=shadow","src/components/q2-action-sheet/q2-action-sheet.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n@keyframes showBackdrop {\n from {\n opacity: 0;\n }\n}\n\n@keyframes hideBackdrop {\n to {\n opacity: 0;\n }\n}\n\n// CSS variables don't inherit into the ::backdrop pseudo-element\n$animation-tween: #{var-list(--tct-action-sheet-tween, --app-tween-2, unquote('0.4s ease'))};\n\ndialog {\n --comp-border-radius-default: var(--app-scale-3x, 15px) var(--app-scale-3x, 15px) 0 0;\n --comp-border-radius: #{var-list(--tct-action-sheet-border-radius, --comp-border-radius-default)};\n --comp-desktop-border-radius: #{var-list(--tct-action-sheet-border-radius, --app-scale-3x, 15px)};\n --comp-close-button-size: #{var-list(--tct-action-sheet-close-button-size, --t-a11y-min-size, 44px)};\n --comp-header-height: #{var-list(--tct-action-sheet-header-height, --t-a11y-min-size, 44px)};\n --comp-dialog-background: #{var-list(--tct-action-sheet-background, --t-base, #ffffff)};\n --comp-dialog-color: #{var-list(--tct-action-sheet-color, --t-text, #4d4d4d)};\n --comp-dialog-padding: #{var-list(--tct-action-sheet-padding, --app-scale-3x, 15px)};\n --comp-content-gradient-height: #{var-list(--tct-action-sheet-content-gradient-height, --app-scale-2x, 10px)};\n --comp-dialog-gap: #{var-list(--tct-action-sheet-gap, --app-scale-2x, 10px)};\n --comp-dialog-max-width: #{var-list(--tct-action-sheet-max-width, 400px)};\n --comp-dialog-max-height: #{var-list(--tct-action-sheet-max-height, --comp-action-sheet-computed-max-height, 75vh)};\n --comp-dialog-min-height: #{var-list(--tct-action-sheet-min-height, --comp-action-sheet-computed-min-height, 20vh)};\n --comp-dialog-box-shadow: #{var-list(\n --tct-action-sheet-box-shadow,\n --app-shadow-2,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\")\n )};\n\n position: fixed;\n top: 100%;\n bottom: unset;\n color: var(--comp-dialog-color);\n background: var(--comp-dialog-background);\n transition: transform $animation-tween, opacity $animation-tween;\n width: 100%;\n max-width: var(--comp-dialog-max-width);\n border: 0;\n border-radius: var(--comp-border-radius);\n box-shadow: var(--comp-dialog-box-shadow);\n padding: 0;\n height: auto;\n overflow: hidden;\n min-height: var(--comp-dialog-min-height);\n max-height: var(--comp-dialog-max-height);\n\n &::backdrop {\n opacity: 0;\n background: var-list(--tct-action-sheet-backdrop-background, --t-top-a2, rgba(13, 13, 13, 0.6));\n }\n\n &[open] {\n &.is-opening,\n &.is-open {\n transform: translateY(-100%);\n\n @media screen and (min-width: 1200px) {\n opacity: 1;\n transform: translateY(0);\n }\n\n &::backdrop {\n opacity: 1;\n animation: showBackdrop $animation-tween;\n }\n }\n\n &.is-closing {\n transform: translateY(10%);\n\n &::backdrop {\n animation: hideBackdrop $animation-tween;\n }\n }\n }\n\n @media screen and (min-width: 1200px) {\n border-radius: var(--comp-desktop-border-radius);\n top: 0px;\n bottom: 0px;\n height: fit-content;\n transform: translateY(10%);\n opacity: 0;\n }\n}\n\n.content {\n overflow-y: auto;\n @include tiny-scrollbar();\n}\n\n.interior {\n display: grid;\n grid-template-rows: 44px 1fr auto;\n gap: var(--comp-dialog-gap);\n max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));\n padding: var(--comp-dialog-padding);\n\n // Scroll overlays\n &.is-list {\n header,\n footer {\n position: relative;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n height: var(--comp-content-gradient-height);\n width: 100%;\n z-index: 1;\n }\n }\n }\n\n [slot=\"popover-top\"] {\n padding: var-list(--tct-dropdown-popover-top-slot-padding, 0);\n border-bottom: var-list(--tct-dropdown-slot-border-top);\n }\n\n [slot=\"popover-bottom\"] {\n padding: var-list(--tct-dropdown-popover-bottom-slot-padding, 0);\n border-top: var-list(--tct-dropdown-slot-border-bottom);\n }\n}\n\nheader {\n display: grid;\n grid-template-columns: var(--comp-close-button-size) 1fr var(--comp-close-button-size);\n grid-template-areas: '. title close';\n gap: var(--comp-dialog-gap);\n\n .title {\n grid-area: title;\n text-align: center;\n line-height: var(--comp-header-height);\n }\n\n .btn-close {\n grid-area: close;\n width: var(--comp-close-button-size);\n height: var(--comp-close-button-size);\n }\n}\n\nfooter {\n display: flex;\n justify-content: end;\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Method,\n h,\n State,\n Event,\n EventEmitter,\n Element,\n Fragment,\n} from '@stencil/core';\nimport { Q2OptionListCustomEvent } from 'src/components';\nimport { loc, waitForNextPaint } from 'src/utils';\nimport sanitizeHTMLString, { sanitizeActionSheetSlotHtml } from 'src/utils/sanitize-html-string';\nimport type {\n ActionSheetListCloseData,\n ActionSheetData,\n ActionSheetListData,\n ActionSheetMessageData,\n ActionSheetSelectedOption,\n ActionSheetListOption,\n ActionSheetListOptgroup,\n} from 'q2-tecton-common/lib/types/action-sheet';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Action Sheet\n * @category Display\n * @summary Use for presenting a modal sheet.\n */\n@Component({ tag: 'q2-action-sheet', shadow: true, styleUrl: 'q2-action-sheet.scss' })\nexport class Q2ActionSheet implements ComponentInterface {\n // #region Own Properties\n\n contentElement: HTMLDivElement;\n dialogElement: HTMLDialogElement;\n initialSelectedOptions: ActionSheetSelectedOption[] = [];\n maxHeight: number = 0.75;\n minHeight: number = 0.2;\n optionListElement: HTMLQ2OptionListElement;\n selectedOptions: { values: ActionSheetSelectedOption[]; value: string } = { values: [], value: '' };\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 isScrollable: boolean = false;\n\n @State()\n renderStatus: 'is-open' | 'is-closing' | 'is-opening' = 'is-closing';\n\n // #endregion\n // #region Public Property API\n\n @Prop({ mutable: true })\n data: ActionSheetData;\n\n @Prop()\n hideClose: boolean;\n\n @Prop()\n title: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the action sheet is closed.\n * @deprecated Use 'tctClose' instead\n */\n @Event()\n close: EventEmitter<ActionSheetListCloseData>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter;\n\n /**\n * Emitted when the action sheet is closed.\n */\n @Event()\n tctClose: EventEmitter<ActionSheetListCloseData>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.dialogElement.removeEventListener('cancel', this.onCancel);\n }\n\n componentDidLoad() {\n this.dialogElement.addEventListener('cancel', this.onCancel);\n this.ready.emit();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async hide(data: ActionSheetListCloseData = { value: '', values: [], type: 'confirm' }) {\n mirrorEmit(this, ['close', 'tctClose'], data);\n this.renderStatus = 'is-closing';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-closing') return;\n this.dialogElement.close();\n this.renderStatus = null;\n this.data = undefined;\n this.initialSelectedOptions = [];\n this.selectedOptions = { values: [], value: '' };\n this.hidePostHook();\n },\n { once: true }\n );\n }\n\n @Method()\n async show() {\n this.showPreHook();\n await waitForNextPaint();\n this.updateDialogMinMaxHeight();\n this.storeInitialValues();\n\n if (this.dialogElement.open) return;\n\n this.dialogElement.showModal();\n this.renderStatus = 'is-opening';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-opening') return;\n this.renderStatus = 'is-open';\n this.focusContent();\n },\n { once: true }\n );\n }\n\n // #endregion\n // #region Local Methods\n\n focusContent() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n const { event } = data;\n if (event instanceof KeyboardEvent) {\n this.optionListElement.handleExternalKeydown(event);\n } else {\n this.optionListElement.focus();\n }\n }\n }\n\n generateOptgroup = (option: ActionSheetListOptgroup) => {\n const optgroupElement = document.createElement('q2-optgroup');\n if (option.label) optgroupElement.setAttribute('label', option.label);\n if (option.disabled) optgroupElement.setAttribute('disabled', '');\n if (!!option.options.length)\n option.options.forEach(opt => optgroupElement.appendChild(this.generateOption(opt)));\n return optgroupElement;\n };\n\n generateOption = (option: ActionSheetListOption) => {\n const optionElement = document.createElement('q2-option');\n const { innerHTML, ...attributes } = option;\n if (innerHTML) optionElement.innerHTML = sanitizeHTMLString(innerHTML);\n Object.entries(attributes).forEach(([key, value]) => {\n if (value === undefined) return;\n if (typeof value === 'boolean') {\n if (value) optionElement.setAttribute(key, '');\n } else {\n optionElement.setAttribute(key, value);\n }\n });\n return optionElement;\n };\n\n hidePostHook() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n this.hostElement.innerHTML = null;\n }\n }\n\n onCancel = (event: Event) => {\n event.preventDefault();\n const { initialSelectedOptions } = this;\n this.hide({\n value: initialSelectedOptions?.[0]?.value ?? '',\n values: initialSelectedOptions,\n type: 'cancel',\n });\n };\n\n onClick = (event: MouseEvent) => {\n const eventTarget = event.target as HTMLElement;\n if (!(eventTarget instanceof HTMLElement)) return;\n\n const isInContent = !!eventTarget.closest('.interior, q2-action-sheet');\n if (isInContent) return;\n this.onCancel(event);\n };\n\n onListChange = (event: Q2OptionListCustomEvent<{ value: string; values: ActionSheetSelectedOption[] }>) => {\n this.selectedOptions = event.detail;\n };\n\n onListDone = () => {\n this.hide({\n ...this.selectedOptions,\n type: 'confirm',\n });\n };\n\n onListPopoverStateChange = (\n event: Q2OptionListCustomEvent<{ open: boolean; action: 'close' | 'select' | 'open' }>\n ) => {\n if (event.detail.open) return;\n\n if (event.detail.action === 'close') {\n this.onCancel(event);\n } else {\n this.onListDone();\n }\n };\n\n showPreHook() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n this.hostElement.innerHTML = null;\n data.options.forEach(option => {\n this.hostElement.appendChild(\n 'options' in option ? this.generateOptgroup(option) : this.generateOption(option)\n );\n });\n }\n }\n\n storeInitialValues() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n this.initialSelectedOptions = data.listProps.selectedOptions;\n }\n }\n\n updateDialogMinMaxHeight() {\n const windowHeight = window.innerHeight;\n this.dialogElement.style.setProperty(\n '--comp-action-sheet-computed-min-height',\n `${Math.floor(windowHeight * this.minHeight)}px`\n );\n this.dialogElement.style.setProperty(\n '--comp-action-sheet-computed-max-height',\n `${Math.floor(windowHeight * this.maxHeight)}px`\n );\n }\n\n // #endregion\n // #region Render Methods\n\n renderList = ({ data }: { data: ActionSheetListData }) => {\n const { listProps, slotsHtml = [] } = data;\n return (\n <Fragment>\n {slotsHtml\n .filter(entry => entry.slot === 'top')\n .map(entry => (\n <div innerHTML={sanitizeActionSheetSlotHtml(entry.html)}></div>\n ))}\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n <q2-option-list\n ref={el => (this.optionListElement = el)}\n multiple={listProps.multiple}\n noSelect={listProps.noSelect}\n onChange={this.onListChange}\n onPopoverState={this.onListPopoverStateChange}\n selectedOptions={listProps.selectedOptions}\n >\n <slot />\n </q2-option-list>\n </div>\n <footer>\n {listProps.multiple && (\n <q2-btn\n test-id=\"btnDone\"\n intent=\"workflow-primary\"\n onClick={this.onListDone}\n >\n {loc('tecton.element.actionSheet.done')}\n </q2-btn>\n )}\n </footer>\n {slotsHtml\n .filter(entry => entry.slot === 'bottom')\n .map(entry => (\n <div innerHTML={sanitizeActionSheetSlotHtml(entry.html)}></div>\n ))}\n </Fragment>\n );\n };\n\n renderMessage = ({ data }: { data: ActionSheetMessageData }) => {\n return (\n <q2-message type={data.type}>\n {data.title && <h2>{data.title}</h2>}\n {data.description && <p>{data.description}</p>}\n </q2-message>\n );\n };\n\n renderSlot = () => {\n return (\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n <slot />\n </div>\n );\n };\n\n render() {\n const { data } = this;\n const showHeader = data?.title || this.title || !this.hideClose;\n const renderStatus = this.renderStatus || '';\n\n let RenderContent = null;\n switch (data?.appearance) {\n case 'message':\n RenderContent = this.renderMessage;\n break;\n\n case 'list':\n RenderContent = this.renderList;\n break;\n\n default:\n RenderContent = this.renderSlot;\n break;\n }\n const appearance = data?.appearance || 'slot';\n const interiorClasses = `interior is-${appearance}`;\n return (\n <dialog\n ref={el => (this.dialogElement = el)}\n class={renderStatus}\n onClick={this.onClick}\n >\n <div class={interiorClasses}>\n {showHeader && (\n <header>\n <div class=\"title\">{data?.title || this.title}</div>\n {!this.hideClose && (\n <q2-btn\n class=\"btn-close\"\n test-id=\"btnClose\"\n onClick={this.onCancel}\n label=\"tecton.element.actionSheet.close\"\n hide-label\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n )}\n </header>\n )}\n {this.data?.description && <p>{data.description}</p>}\n {RenderContent && <RenderContent data={this.data} />}\n </div>\n </dialog>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["q2ActionSheetCss","Q2ActionSheet","constructor","hostRef","this","initialSelectedOptions","maxHeight","minHeight","selectedOptions","values","value","isScrollable","renderStatus","focusLastVisibleOption","async","optionListElement","allOptions","getOptions","lastVisibleOption","slice","reverse","find","opt","hidden","disabled","focus","generateOptgroup","option","optgroupElement","document","createElement","label","setAttribute","options","length","forEach","appendChild","generateOption","optionElement","innerHTML","attributes","sanitizeHTMLString","Object","entries","key","undefined","handleDialogKeydown","event","data","appearance","shiftKey","shadowActiveElement","hostElement","shadowRoot","activeElement","closeButton","closeButtonElement","doneButton","doneButtonElement","isInCloseButton","isInDoneButton","isOnOption","tagName","contains","preventDefault","onCancel","hide","_b","_a","type","onClick","eventTarget","target","HTMLElement","isInContent","closest","onListChange","detail","onListDone","onListPopoverStateChange","open","action","renderList","listProps","slotsHtml","h","Fragment","filter","entry","slot","map","sanitizeActionSheetSlotHtml","html","class","ref","el","contentElement","multiple","noSelect","onChange","onPopoverState","intent","loc","renderMessage","title","description","renderSlot","disconnectedCallback","dialogElement","removeEventListener","componentDidLoad","addEventListener","ready","emit","mirrorEmit","close","hidePostHook","once","show","showPreHook","waitForNextPaint","updateDialogMinMaxHeight","storeInitialValues","showModal","focusContent","KeyboardEvent","handleExternalKeydown","windowHeight","window","innerHeight","style","setProperty","Math","floor","render","showHeader","hideClose","RenderContent","interiorClasses"],"sources":["src/components/q2-action-sheet/q2-action-sheet.scss?tag=q2-action-sheet&encapsulation=shadow","src/components/q2-action-sheet/q2-action-sheet.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n@keyframes showBackdrop {\n from {\n opacity: 0;\n }\n}\n\n@keyframes hideBackdrop {\n to {\n opacity: 0;\n }\n}\n\n// CSS variables don't inherit into the ::backdrop pseudo-element\n$animation-tween: #{var-list(--tct-action-sheet-tween, --app-tween-2, unquote('0.4s ease'))};\n\ndialog {\n --comp-border-radius-default: var(--app-scale-3x, 15px) var(--app-scale-3x, 15px) 0 0;\n --comp-border-radius: #{var-list(--tct-action-sheet-border-radius, --comp-border-radius-default)};\n --comp-desktop-border-radius: #{var-list(--tct-action-sheet-border-radius, --app-scale-3x, 15px)};\n --comp-close-button-size: #{var-list(--tct-action-sheet-close-button-size, --t-a11y-min-size, 44px)};\n --comp-header-height: #{var-list(--tct-action-sheet-header-height, --t-a11y-min-size, 44px)};\n --comp-dialog-background: #{var-list(--tct-action-sheet-background, --t-base, #ffffff)};\n --comp-dialog-color: #{var-list(--tct-action-sheet-color, --t-text, #4d4d4d)};\n --comp-dialog-padding: #{var-list(--tct-action-sheet-padding, --app-scale-3x, 15px)};\n --comp-content-gradient-height: #{var-list(--tct-action-sheet-content-gradient-height, --app-scale-2x, 10px)};\n --comp-dialog-gap: #{var-list(--tct-action-sheet-gap, --app-scale-2x, 10px)};\n --comp-dialog-max-width: #{var-list(--tct-action-sheet-max-width, 400px)};\n --comp-dialog-max-height: #{var-list(--tct-action-sheet-max-height, --comp-action-sheet-computed-max-height, 75vh)};\n --comp-dialog-min-height: #{var-list(--tct-action-sheet-min-height, --comp-action-sheet-computed-min-height, 20vh)};\n --comp-dialog-box-shadow: #{var-list(\n --tct-action-sheet-box-shadow,\n --app-shadow-2,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\")\n )};\n\n position: fixed;\n top: 100%;\n bottom: unset;\n color: var(--comp-dialog-color);\n background: var(--comp-dialog-background);\n transition: transform $animation-tween, opacity $animation-tween;\n width: 100%;\n max-width: var(--comp-dialog-max-width);\n border: 0;\n border-radius: var(--comp-border-radius);\n box-shadow: var(--comp-dialog-box-shadow);\n padding: 0;\n height: auto;\n overflow: hidden;\n min-height: var(--comp-dialog-min-height);\n max-height: var(--comp-dialog-max-height);\n\n &::backdrop {\n opacity: 0;\n background: var-list(--tct-action-sheet-backdrop-background, --t-top-a2, rgba(13, 13, 13, 0.6));\n }\n\n &[open] {\n &.is-opening,\n &.is-open {\n transform: translateY(-100%);\n\n @media screen and (min-width: 1200px) {\n opacity: 1;\n transform: translateY(0);\n }\n\n &::backdrop {\n opacity: 1;\n animation: showBackdrop $animation-tween;\n }\n }\n\n &.is-closing {\n transform: translateY(10%);\n\n &::backdrop {\n animation: hideBackdrop $animation-tween;\n }\n }\n }\n\n @media screen and (min-width: 1200px) {\n border-radius: var(--comp-desktop-border-radius);\n top: 0px;\n bottom: 0px;\n height: fit-content;\n transform: translateY(10%);\n opacity: 0;\n }\n}\n\n.content {\n overflow-y: auto;\n @include tiny-scrollbar();\n}\n\n.interior {\n display: grid;\n grid-template-rows: 44px 1fr auto;\n gap: var(--comp-dialog-gap);\n max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));\n padding: var(--comp-dialog-padding);\n\n // Scroll overlays\n &.is-list {\n header,\n footer {\n position: relative;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n height: var(--comp-content-gradient-height);\n width: 100%;\n z-index: 1;\n }\n }\n }\n\n [slot=\"popover-top\"] {\n padding: var-list(--tct-dropdown-popover-top-slot-padding, 0);\n border-bottom: var-list(--tct-dropdown-slot-border-top);\n }\n\n [slot=\"popover-bottom\"] {\n padding: var-list(--tct-dropdown-popover-bottom-slot-padding, 0);\n border-top: var-list(--tct-dropdown-slot-border-bottom);\n }\n}\n\nheader {\n display: grid;\n grid-template-columns: var(--comp-close-button-size) 1fr var(--comp-close-button-size);\n grid-template-areas: '. title close';\n gap: var(--comp-dialog-gap);\n\n .title {\n grid-area: title;\n text-align: center;\n line-height: var(--comp-header-height);\n }\n\n .btn-close {\n grid-area: close;\n width: var(--comp-close-button-size);\n height: var(--comp-close-button-size);\n }\n}\n\nfooter {\n display: flex;\n justify-content: end;\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Method,\n h,\n State,\n Event,\n EventEmitter,\n Element,\n Fragment,\n} from '@stencil/core';\nimport { Q2OptionListCustomEvent } from 'src/components';\nimport { loc, waitForNextPaint } from 'src/utils';\nimport sanitizeHTMLString, { sanitizeActionSheetSlotHtml } from 'src/utils/sanitize-html-string';\nimport type {\n ActionSheetListCloseData,\n ActionSheetData,\n ActionSheetListData,\n ActionSheetMessageData,\n ActionSheetSelectedOption,\n ActionSheetListOption,\n ActionSheetListOptgroup,\n} from 'q2-tecton-common/lib/types/action-sheet';\nimport mirrorEmit from '@/utils/mirror-emit';\n\n/**\n * @name Action Sheet\n * @category Display\n * @summary Use for presenting a modal sheet.\n */\n@Component({ tag: 'q2-action-sheet', shadow: true, styleUrl: 'q2-action-sheet.scss' })\nexport class Q2ActionSheet implements ComponentInterface {\n // #region Own Properties\n\n closeButtonElement: HTMLQ2BtnElement;\n contentElement: HTMLDivElement;\n dialogElement: HTMLDialogElement;\n doneButtonElement: HTMLQ2BtnElement;\n initialSelectedOptions: ActionSheetSelectedOption[] = [];\n maxHeight: number = 0.75;\n minHeight: number = 0.2;\n optionListElement: HTMLQ2OptionListElement;\n selectedOptions: { values: ActionSheetSelectedOption[]; value: string } = { values: [], value: '' };\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 isScrollable: boolean = false;\n\n @State()\n renderStatus: 'is-open' | 'is-closing' | 'is-opening' = 'is-closing';\n\n // #endregion\n // #region Public Property API\n\n @Prop({ mutable: true })\n data: ActionSheetData;\n\n @Prop()\n hideClose: boolean;\n\n @Prop()\n title: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the action sheet is closed.\n * @deprecated Use 'tctClose' instead\n */\n @Event()\n close: EventEmitter<ActionSheetListCloseData>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter;\n\n /**\n * Emitted when the action sheet is closed.\n */\n @Event()\n tctClose: EventEmitter<ActionSheetListCloseData>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.dialogElement.removeEventListener('cancel', this.onCancel);\n this.dialogElement.removeEventListener('keydown', this.handleDialogKeydown, true);\n }\n\n componentDidLoad() {\n this.dialogElement.addEventListener('cancel', this.onCancel);\n // Use capture phase to intercept Tab before option-list handles it\n this.dialogElement.addEventListener('keydown', this.handleDialogKeydown, true);\n this.ready.emit();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async hide(data: ActionSheetListCloseData = { value: '', values: [], type: 'confirm' }) {\n mirrorEmit(this, ['close', 'tctClose'], data);\n this.renderStatus = 'is-closing';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-closing') return;\n this.dialogElement.close();\n this.renderStatus = null;\n this.data = undefined;\n this.initialSelectedOptions = [];\n this.selectedOptions = { values: [], value: '' };\n this.hidePostHook();\n },\n { once: true }\n );\n }\n\n @Method()\n async show() {\n this.showPreHook();\n await waitForNextPaint();\n this.updateDialogMinMaxHeight();\n this.storeInitialValues();\n\n if (this.dialogElement.open) return;\n\n this.dialogElement.showModal();\n this.renderStatus = 'is-opening';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-opening') return;\n this.renderStatus = 'is-open';\n this.focusContent();\n },\n { once: true }\n );\n }\n\n // #endregion\n // #region Local Methods\n\n focusContent() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n const { event } = data;\n if (event instanceof KeyboardEvent) {\n this.optionListElement.handleExternalKeydown(event);\n } else {\n this.optionListElement.focus();\n }\n }\n }\n\n /**\n * Focuses the last visible (non-hidden, non-disabled) option in the option list.\n * Uses the async getOptions() method, but is invoked after preventDefault() has\n * already been called synchronously by the caller.\n */\n focusLastVisibleOption = async () => {\n if (!this.optionListElement) return;\n const allOptions = await this.optionListElement.getOptions();\n const lastVisibleOption = allOptions\n .slice()\n .reverse()\n .find(opt => !opt.hidden && !opt.disabled);\n if (lastVisibleOption) {\n lastVisibleOption.focus();\n }\n };\n\n generateOptgroup = (option: ActionSheetListOptgroup) => {\n const optgroupElement = document.createElement('q2-optgroup');\n if (option.label) optgroupElement.setAttribute('label', option.label);\n if (option.disabled) optgroupElement.setAttribute('disabled', '');\n if (!!option.options.length)\n option.options.forEach(opt => optgroupElement.appendChild(this.generateOption(opt)));\n return optgroupElement;\n };\n\n generateOption = (option: ActionSheetListOption) => {\n const optionElement = document.createElement('q2-option');\n const { innerHTML, ...attributes } = option;\n if (innerHTML) optionElement.innerHTML = sanitizeHTMLString(innerHTML);\n Object.entries(attributes).forEach(([key, value]) => {\n if (value === undefined) return;\n if (typeof value === 'boolean') {\n if (value) optionElement.setAttribute(key, '');\n } else {\n optionElement.setAttribute(key, value);\n }\n });\n return optionElement;\n };\n\n /**\n * Handles keyboard navigation within the action sheet dialog.\n * Manages Tab navigation between options and action buttons (close/done).\n * Allows Tab to exit to browser chrome when reaching boundaries.\n *\n * NOTE: This handler is intentionally synchronous. `event.preventDefault()`\n * must be called before the browser processes the Tab key (i.e., during the\n * synchronous portion of the keydown event). Introducing an `await` here\n * allows the browser to shift focus before preventDefault runs, which causes\n * Tab from the close button to escape the dialog instead of cycling back to\n * the options.\n * @param event - The keyboard event.\n */\n handleDialogKeydown = (event: KeyboardEvent) => {\n const { data } = this;\n // Only activate for list appearance with an option list\n if (!data || data.appearance !== 'list' || !this.optionListElement) return;\n\n const { key, shiftKey } = event;\n if (key !== 'Tab') return;\n\n const shadowActiveElement = this.hostElement.shadowRoot.activeElement;\n const closeButton = this.closeButtonElement;\n const doneButton = this.doneButtonElement;\n\n const isInCloseButton = shadowActiveElement === closeButton;\n const isInDoneButton = shadowActiveElement === doneButton;\n\n // q2-option lives in light DOM, so document.activeElement is the option element itself when focused.\n // Avoid `await optionListElement.getOptions()` here — that defers the handler past\n // the browser's default Tab handling, making preventDefault() ineffective.\n const activeElement = document.activeElement;\n const isOnOption =\n !!activeElement &&\n (activeElement.tagName === 'Q2-OPTION' || activeElement.tagName === 'Q2-DROPDOWN-ITEM') &&\n this.hostElement.contains(activeElement);\n\n if (shiftKey) {\n // Shift+Tab: if on close button\n if (isInCloseButton) {\n // With a done button (multi-select): allow default to exit to browser.\n // Browser Shift+Tab from the URL bar lands on the done button (last\n // tabbable in DOM order), which redirects to the last option via\n // focusLastVisibleOption — so choices remain reachable.\n if (doneButton) {\n // Let it bubble - exits to browser chrome\n return;\n }\n // Without a done button (single-select): redirect to the last visible\n // option. Otherwise focus would exit to the URL bar and the next\n // Shift+Tab back into the page would land on the close button (the\n // only tabbable in the modal), trapping the user in URL ↔ close\n // with no path back to choices.\n event.preventDefault();\n this.focusLastVisibleOption();\n }\n // Shift+Tab: if on done button, focus last option\n else if (isInDoneButton) {\n event.preventDefault();\n this.focusLastVisibleOption();\n }\n // Shift+Tab: if on any option, go to close button\n else if (isOnOption && closeButton) {\n event.preventDefault();\n closeButton.focus();\n }\n } else {\n // Forward Tab: if on close button, skip to first/selected option\n if (isInCloseButton) {\n event.preventDefault();\n this.optionListElement.focus();\n }\n // Forward Tab: if on done button, allow default to exit to browser\n else if (isInDoneButton) {\n // Let it bubble - exits to browser chrome\n return;\n }\n // Forward Tab: if on any option\n else if (isOnOption) {\n if (doneButton) {\n // With done button: go to done button\n event.preventDefault();\n doneButton.focus();\n }\n // else: No done button - allow default Tab behavior to exit to browser\n }\n }\n };\n\n hidePostHook() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n this.hostElement.innerHTML = null;\n }\n }\n\n onCancel = (event: Event) => {\n event.preventDefault();\n const { initialSelectedOptions } = this;\n this.hide({\n value: initialSelectedOptions?.[0]?.value ?? '',\n values: initialSelectedOptions,\n type: 'cancel',\n });\n };\n\n onClick = (event: MouseEvent) => {\n const eventTarget = event.target as HTMLElement;\n if (!(eventTarget instanceof HTMLElement)) return;\n\n const isInContent = !!eventTarget.closest('.interior, q2-action-sheet');\n if (isInContent) return;\n this.onCancel(event);\n };\n\n onListChange = (event: Q2OptionListCustomEvent<{ value: string; values: ActionSheetSelectedOption[] }>) => {\n this.selectedOptions = event.detail;\n };\n\n onListDone = () => {\n this.hide({\n ...this.selectedOptions,\n type: 'confirm',\n });\n };\n\n onListPopoverStateChange = (\n event: Q2OptionListCustomEvent<{ open: boolean; action: 'close' | 'select' | 'open' }>\n ) => {\n if (event.detail.open) return;\n\n if (event.detail.action === 'close') {\n this.onCancel(event);\n } else {\n this.onListDone();\n }\n };\n\n showPreHook() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n this.hostElement.innerHTML = null;\n data.options.forEach(option => {\n this.hostElement.appendChild(\n 'options' in option ? this.generateOptgroup(option) : this.generateOption(option)\n );\n });\n }\n }\n\n storeInitialValues() {\n const { data } = this;\n if (!data) return;\n if (data.appearance === 'list') {\n this.initialSelectedOptions = data.listProps.selectedOptions;\n }\n }\n\n updateDialogMinMaxHeight() {\n const windowHeight = window.innerHeight;\n this.dialogElement.style.setProperty(\n '--comp-action-sheet-computed-min-height',\n `${Math.floor(windowHeight * this.minHeight)}px`\n );\n this.dialogElement.style.setProperty(\n '--comp-action-sheet-computed-max-height',\n `${Math.floor(windowHeight * this.maxHeight)}px`\n );\n }\n\n // #endregion\n // #region Render Methods\n\n renderList = ({ data }: { data: ActionSheetListData }) => {\n const { listProps, slotsHtml = [] } = data;\n return (\n <Fragment>\n {slotsHtml\n .filter(entry => entry.slot === 'top')\n .map(entry => (\n <div innerHTML={sanitizeActionSheetSlotHtml(entry.html)}></div>\n ))}\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n <q2-option-list\n ref={el => (this.optionListElement = el)}\n multiple={listProps.multiple}\n noSelect={listProps.noSelect}\n onChange={this.onListChange}\n onPopoverState={this.onListPopoverStateChange}\n selectedOptions={listProps.selectedOptions}\n >\n <slot />\n </q2-option-list>\n </div>\n <footer>\n {listProps.multiple && (\n <q2-btn\n ref={el => (this.doneButtonElement = el)}\n test-id=\"btnDone\"\n intent=\"workflow-primary\"\n onClick={this.onListDone}\n >\n {loc('tecton.element.actionSheet.done')}\n </q2-btn>\n )}\n </footer>\n {slotsHtml\n .filter(entry => entry.slot === 'bottom')\n .map(entry => (\n <div innerHTML={sanitizeActionSheetSlotHtml(entry.html)}></div>\n ))}\n </Fragment>\n );\n };\n\n renderMessage = ({ data }: { data: ActionSheetMessageData }) => {\n return (\n <q2-message type={data.type}>\n {data.title && <h2>{data.title}</h2>}\n {data.description && <p>{data.description}</p>}\n </q2-message>\n );\n };\n\n renderSlot = () => {\n return (\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n <slot />\n </div>\n );\n };\n\n render() {\n const { data } = this;\n const showHeader = data?.title || this.title || !this.hideClose;\n const renderStatus = this.renderStatus || '';\n\n let RenderContent = null;\n switch (data?.appearance) {\n case 'message':\n RenderContent = this.renderMessage;\n break;\n\n case 'list':\n RenderContent = this.renderList;\n break;\n\n default:\n RenderContent = this.renderSlot;\n break;\n }\n const appearance = data?.appearance || 'slot';\n const interiorClasses = `interior is-${appearance}`;\n return (\n <dialog\n ref={el => (this.dialogElement = el)}\n class={renderStatus}\n onClick={this.onClick}\n >\n <div class={interiorClasses}>\n {showHeader && (\n <header>\n <div class=\"title\">{data?.title || this.title}</div>\n {!this.hideClose && (\n <q2-btn\n ref={el => (this.closeButtonElement = el)}\n class=\"btn-close\"\n test-id=\"btnClose\"\n onClick={this.onCancel}\n label=\"tecton.element.actionSheet.close\"\n hide-label\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n )}\n </header>\n )}\n {this.data?.description && <p>{data.description}</p>}\n {RenderContent && <RenderContent data={this.data} />}\n </div>\n </dialog>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-avatar.entry.esm.js","sources":["src/components/q2-avatar/q2-avatar.scss?tag=q2-avatar&encapsulation=shadow","src/components/q2-avatar/q2-avatar.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.avatar-wrapper {\n position: relative;\n border: 1px solid transparent;\n padding: 1px;\n border-radius: 100%;\n\n .hover-ring {\n display: flex;\n }\n &:hover {\n border-color: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n }\n\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n background-color: var-list(--tct-avatar-decorator-background-color, --t-base, #ffffff);\n border-radius: 100%;\n box-shadow: var-list(\n --app-shadow-1,\n #{unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')}\n );\n position: absolute;\n bottom: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n\n ::slotted(q2-icon) {\n color: var-list(--tct-avatar-decorator-color, #000000);\n }\n }\n\n &.size-small {\n height: var(--tct-avatar-small-size, 24px);\n width: var(--tct-avatar-small-size, 24px);\n .decorator {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--tct-avatar-decorator-small-icon-size, 8px);\n width: var(--tct-avatar-decorator-small-icon-size, 8px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-medium {\n height: var-list(--tct-avatar-size, --tct-avatar-height, 44px);\n width: var-list(--tct-avatar-size, --tct-avatar-width, 44px);\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-large {\n height: var(--tct-avatar-large-size, 64px);\n width: var(--tct-avatar-large-size, 64px);\n .decorator {\n height: var(--app-scale-4x, 20px);\n width: var(--app-scale-4x, 20px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: 14px;\n width: 14px;\n aspect-ratio: 1/1;\n }\n }\n }\n}\n\n.avatar-img,\n.avatar-img-default {\n display: var(--tct-avatar-display, block);\n object-fit: cover;\n border-radius: var-list(--tct-avatar-img-border-radius, --tct-avatar-img-br, --tct-avatar-border-radius, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\n.avatar-img-default {\n background: var-list(--tct-avatar-background, --tct-avatar-bg, #9e9e9e);\n}\n\n.avatar-initials {\n display: var(--tct-avatar-display, block);\n backdrop-filter: var(--tct-avatar-backdrop-filter);\n background: var-list(--tct-avatar-background, --tct-avatar-bg, --t-gray-8, #9e9e9e);\n border-radius: var(--tct-avatar-br, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\ntext {\n fill: var-list(--tct-avatar-text-color, --tct-avatar-color, #ffffff);\n font-weight: var(--tct-avatar-font-weight, 200);\n font-size: var(--tct-avatar-font-size, 40px);\n}\n\n.fallback {\n height: 100%;\n width: 100%;\n border-radius: var-list(\n --tct-avatar-img-border-radius,\n --tct-avatar-img-br,\n 50%\n );\n border: var(--tct-avatar-border, none);\n background: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n display: flex;\n align-items: center;\n justify-content: center;\n\n q2-icon {\n --tct-icon-size: #{var-list(--tct-avatar-icon-size, 65%)};\n --tct-icon-stroke-primary: #{var-list(\n --tct-avatar-icon-stroke-primary,\n currentcolor\n )};\n --tct-icon-stroke-secondary: #{var-list(\n --tct-avatar-icon-stroke-secondary,\n currentcolor\n )};\n --tct-icon-fill: #{var-list(--tct-avatar-icon-fill)};\n color: var-list(--tct-avatar-icon-color, --tct-avatar-color, --t-base, #ffffff);\n width: var-list(--tct-avatar-icon-size, --tct-icon-size);\n height: var-list(--tct-avatar-icon-size, --tct-icon-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Element, h, State, Watch } from '@stencil/core';\n\n/**\n * @name Avatar\n * @category Display\n * @summary Use for displaying photos, initials, or icons for people, businesses, or accounts.\n *\n * @slot decorator - An optional affordance indicator to display in the top-right corner\n */\n@Component({ tag: 'q2-avatar', shadow: true, styleUrl: 'q2-avatar.scss' })\nexport class Q2Avatar implements ComponentInterface {\n // #region Own Properties\n\n private decoratorObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n el: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n badSrc: boolean = false;\n\n @State()\n hasDecorator: boolean = false;\n\n @State()\n isLoaded: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** A [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) to display as the fallback. */\n @Prop()\n icon: string = 'person';\n\n /** A set of up to four initials to display as capitalized text. Takes priority over `name`. */\n @Prop({ reflect: true })\n initials: string;\n\n /**\n * The name associated with the avatar.\n * The initials of the first and last words provided will display as capital letters.\n *\n * @info\n * We recommend always providing a name when you want the avatar to be presented to screen readers.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Determines how large to make the avatar */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /** Displays the image provided by the user. */\n @Prop({ reflect: true })\n src: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.decoratorObserver) {\n this.decoratorObserver.disconnect();\n }\n }\n\n componentWillLoad() {\n this.checkDecorator();\n }\n\n componentDidLoad() {\n this.setupDecoratorObserver();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('src')\n srcDidUpdate() {\n this.badSrc = false;\n }\n\n // #endregion\n // #region Local Methods\n\n get computedInitials() {\n const { initials, name } = this;\n if (!initials && !name) return;\n\n let result = '';\n if (initials) {\n result = initials.substr(0, 4);\n } else if (name) {\n const parts = name.split(' ');\n const firstCharacter = parts[0][0];\n const lastCharacter = parts.length > 1 ? parts[parts.length - 1][0] : undefined;\n result += firstCharacter;\n if (lastCharacter) result += lastCharacter;\n }\n\n result = result?.toUpperCase();\n\n return result;\n }\n\n checkDecorator() {\n const decoratorElements = Array.from(this.el.children).filter(\n child => child.getAttribute('slot') === 'decorator'\n );\n this.hasDecorator = decoratorElements.length > 0;\n }\n\n onError = () => {\n this.badSrc = true;\n };\n\n onLoad = () => {\n this.isLoaded = true;\n };\n\n private setupDecoratorObserver() {\n // Set up MutationObserver to watch for changes to the host element's children\n this.decoratorObserver = new MutationObserver(() => {\n this.checkDecorator();\n });\n\n // Observe changes to the host element's children (light DOM)\n this.decoratorObserver.observe(this.el, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { computedInitials } = this;\n const showImg = this.src && !this.badSrc;\n const isLoaded = this.isLoaded;\n const showInitials = (this.name || this.initials) && (!this.src || this.badSrc);\n const showFallback = !this.name && !this.initials && (!this.src || this.badSrc);\n\n return (\n <div class={`avatar-wrapper size-${this.size}`}>\n {this.hasDecorator && (\n <div class=\"decorator\">\n <slot name=\"decorator\" />\n </div>\n )}\n\n {showImg && (\n <img\n class={`${isLoaded ? 'avatar-img' : 'avatar-img-default'}`}\n test-id=\"userImage\"\n src={this.src}\n onError={this.onError}\n onLoad={this.onLoad}\n alt={this.name || ''}\n />\n )}\n {showInitials && (\n <svg\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n test-id=\"userInitials\"\n class={`avatar-initials initials-size-${computedInitials.length}`}\n aria-label={this.name}\n aria-hidden={!this.name && 'true'}\n >\n <text\n x=\"50\"\n y=\"50\"\n dominant-baseline=\"central\"\n text-anchor=\"middle\"\n aria-hidden=\"true\"\n >\n {computedInitials}\n </text>\n </svg>\n )}\n {showFallback && (\n <div\n test-id=\"fallbackIcon\"\n class=\"fallback\"\n >\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":";;AAAA,MAAM,WAAW,GAAG,oiIAAoiI;;MCU3iI,QAAQ,GAAA,MAAA;AADrB,IAAA,WAAA,CAAA,OAAA,EAAA;;;;AAgBI,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK;AAGvB,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK;AAG7B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;;;;AAOzB,QAAA,IAAI,CAAA,IAAA,GAAW,QAAQ;;AAkBvB,QAAA,IAAI,CAAA,IAAA,GAAiC,QAAQ;AA6D7C,QAAA,IAAO,CAAA,OAAA,GAAG,MAAK;AACX,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACtB,SAAC;AAED,QAAA,IAAM,CAAA,MAAA,GAAG,MAAK;AACV,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACxB,SAAC;AA8EJ;;;IAxIG,oBAAoB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE;;;IAI3C,iBAAiB,GAAA;QACb,IAAI,CAAC,cAAc,EAAE;;IAGzB,gBAAgB,GAAA;QACZ,IAAI,CAAC,sBAAsB,EAAE;;;;IAOjC,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;;;AAMvB,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI;YAAE;QAExB,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,QAAQ,EAAE;YACV,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;aAC3B,IAAI,IAAI,EAAE;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;YAC/E,MAAM,IAAI,cAAc;AACxB,YAAA,IAAI,aAAa;gBAAE,MAAM,IAAI,aAAa;;QAG9C,MAAM,GAAG,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE;AAE9B,QAAA,OAAO,MAAM;;IAGjB,cAAc,GAAA;AACV,QAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CACzD,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,WAAW,CACtD;QACD,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;;IAW5C,sBAAsB,GAAA;;AAE1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,MAAK;YAC/C,IAAI,CAAC,cAAc,EAAE;AACzB,SAAC,CAAC;;QAGF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;AACpC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,MAAM,CAAC;AAC5B,SAAA,CAAC;;;;IAMN,MAAM,GAAA;AACF,QAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC9B,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;QAC/E,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;QAE/E,QACI,4DAAK,KAAK,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAC,IAAI,CAAE,CAAA,EAAA,EACzC,IAAI,CAAC,YAAY,KACd,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,WAAW,EAAA,EAClB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,WAAW,EAAA,CAAG,CACvB,CACT,EAEA,OAAO,KACJ,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAG,EAAA,QAAQ,GAAG,YAAY,GAAG,oBAAoB,CAAA,CAAE,aAClD,WAAW,EACnB,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAA,CACtB,CACL,EACA,YAAY,KACT,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,OAAO,EAAC,aAAa,EACrB,mBAAmB,EAAC,eAAe,EAC3B,SAAA,EAAA,cAAc,EACtB,KAAK,EAAE,CAAA,8BAAA,EAAiC,gBAAgB,CAAC,MAAM,CAAA,CAAE,EAAA,YAAA,EACrD,IAAI,CAAC,IAAI,EAAA,aAAA,EACR,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAA,EAEjC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACI,CAAC,EAAC,IAAI,EACN,CAAC,EAAC,IAAI,EAAA,mBAAA,EACY,SAAS,EAAA,aAAA,EACf,QAAQ,EACR,aAAA,EAAA,MAAM,IAEjB,gBAAgB,CACd,CACL,CACT,EACA,YAAY,KACT,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,SAAA,EACY,cAAc,EACtB,KAAK,EAAC,UAAU,EAAA,EAEhB,CAAS,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAY,CAClC,CACT,CACC;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"q2-avatar.entry.esm.js","sources":["src/components/q2-avatar/q2-avatar.scss?tag=q2-avatar&encapsulation=shadow","src/components/q2-avatar/q2-avatar.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n.avatar-wrapper {\n position: relative;\n border: 1px solid transparent;\n padding: 1px;\n border-radius: 100%;\n\n .hover-ring {\n display: flex;\n }\n &:hover {\n border-color: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n }\n\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n background-color: var-list(--tct-avatar-decorator-background-color, --t-base, #ffffff);\n border-radius: 100%;\n box-shadow: var-list(\n --app-shadow-1,\n #{unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')}\n );\n position: absolute;\n bottom: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n\n ::slotted(q2-icon) {\n color: var-list(--tct-avatar-decorator-color, #000000);\n }\n }\n\n &.size-small {\n height: var(--tct-avatar-small-size, 24px);\n width: var(--tct-avatar-small-size, 24px);\n .decorator {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--tct-avatar-decorator-small-icon-size, 8px);\n width: var(--tct-avatar-decorator-small-icon-size, 8px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-medium {\n height: var-list(--tct-avatar-size, --tct-avatar-height, 44px);\n width: var-list(--tct-avatar-size, --tct-avatar-width, 44px);\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-large {\n height: var(--tct-avatar-large-size, 64px);\n width: var(--tct-avatar-large-size, 64px);\n .decorator {\n height: var(--app-scale-4x, 20px);\n width: var(--app-scale-4x, 20px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: 14px;\n width: 14px;\n aspect-ratio: 1/1;\n }\n }\n }\n}\n\n.avatar-img,\n.avatar-img-default {\n display: var(--tct-avatar-display, block);\n object-fit: cover;\n border-radius: var-list(--tct-avatar-img-border-radius, --tct-avatar-img-br, --tct-avatar-border-radius, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\n.avatar-img-default {\n background: var-list(--tct-avatar-background, --tct-avatar-bg, #9e9e9e);\n}\n\n.avatar-initials {\n display: var(--tct-avatar-display, block);\n backdrop-filter: var(--tct-avatar-backdrop-filter);\n background: var-list(--tct-avatar-background, --tct-avatar-bg, --t-gray-8, #9e9e9e);\n border-radius: var(--tct-avatar-br, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\ntext {\n fill: var-list(--tct-avatar-text-color, --tct-avatar-color, #ffffff);\n font-weight: var(--tct-avatar-font-weight, 200);\n font-size: var(--tct-avatar-font-size, 40px);\n}\n\n.fallback {\n height: 100%;\n width: 100%;\n border-radius: var-list(\n --tct-avatar-img-border-radius,\n --tct-avatar-img-br,\n 50%\n );\n border: var(--tct-avatar-border, none);\n background: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n display: flex;\n align-items: center;\n justify-content: center;\n\n q2-icon {\n --tct-icon-size: #{var-list(--tct-avatar-icon-size, 65%)};\n --tct-icon-stroke-primary: #{var-list(\n --tct-avatar-icon-stroke-primary,\n currentcolor\n )};\n --tct-icon-stroke-secondary: #{var-list(\n --tct-avatar-icon-stroke-secondary,\n currentcolor\n )};\n --tct-icon-fill: #{var-list(--tct-avatar-icon-fill)};\n color: var-list(--tct-avatar-icon-color, --tct-avatar-color, --t-base, #ffffff);\n width: var-list(--tct-avatar-icon-size, --tct-icon-size);\n height: var-list(--tct-avatar-icon-size, --tct-icon-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Element, h, State, Watch } from '@stencil/core';\n\n/**\n * @name Avatar\n * @category Display\n * @summary Use for displaying photos, initials, or icons for people, businesses, or accounts.\n *\n * @slot decorator - An optional affordance indicator to display in the top-right corner\n */\n@Component({ tag: 'q2-avatar', shadow: true, styleUrl: 'q2-avatar.scss' })\nexport class Q2Avatar implements ComponentInterface {\n // #region Own Properties\n\n private decoratorObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n el: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n badSrc: boolean = false;\n\n @State()\n hasDecorator: boolean = false;\n\n @State()\n isLoaded: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** A [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) to display as the fallback. */\n @Prop()\n icon: string = 'person';\n\n /** A set of up to four initials to display as capitalized text. Takes priority over `name`. */\n @Prop({ reflect: true })\n initials: string;\n\n /**\n * The name associated with the avatar.\n * The initials of the first and last words provided will display as capital letters.\n *\n * @info\n * We recommend always providing a name when you want the avatar to be presented to screen readers.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Determines how large to make the avatar */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /** Displays the image provided by the user. */\n @Prop({ reflect: true })\n src: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.decoratorObserver) {\n this.decoratorObserver.disconnect();\n }\n }\n\n componentWillLoad() {\n this.checkDecorator();\n }\n\n componentDidLoad() {\n this.setupDecoratorObserver();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('src')\n srcDidUpdate() {\n this.badSrc = false;\n }\n\n // #endregion\n // #region Local Methods\n\n get computedInitials() {\n const { initials, name } = this;\n if (!initials && !name) return;\n\n let result = '';\n if (initials) {\n result = initials.substr(0, 4);\n } else if (name) {\n const parts = name.split(' ');\n const firstCharacter = parts[0][0];\n const lastCharacter = parts.length > 1 ? parts[parts.length - 1][0] : undefined;\n result += firstCharacter;\n if (lastCharacter) result += lastCharacter;\n }\n\n result = result?.toUpperCase();\n\n return result;\n }\n\n checkDecorator() {\n const decoratorElements = Array.from(this.el.children).filter(\n child => child.getAttribute('slot') === 'decorator'\n );\n this.hasDecorator = decoratorElements.length > 0;\n }\n\n onError = () => {\n this.badSrc = true;\n };\n\n onLoad = () => {\n this.isLoaded = true;\n };\n\n private setupDecoratorObserver() {\n // Set up MutationObserver to watch for changes to the host element's children\n this.decoratorObserver = new MutationObserver(() => {\n this.checkDecorator();\n });\n\n // Observe changes to the host element's children (light DOM)\n this.decoratorObserver.observe(this.el, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { computedInitials } = this;\n const showImg = this.src && !this.badSrc;\n const isLoaded = this.isLoaded;\n const showInitials = (this.name || this.initials) && (!this.src || this.badSrc);\n const showFallback = !this.name && !this.initials && (!this.src || this.badSrc);\n\n return (\n <div class={`avatar-wrapper size-${this.size}`}>\n {this.hasDecorator && (\n <div class=\"decorator\">\n <slot name=\"decorator\" />\n </div>\n )}\n\n {showImg && (\n <img\n class={`${isLoaded ? 'avatar-img' : 'avatar-img-default'}`}\n test-id=\"userImage\"\n src={this.src}\n onError={this.onError}\n onLoad={this.onLoad}\n alt={this.name || ''}\n />\n )}\n {showInitials && (\n <svg\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n test-id=\"userInitials\"\n class={`avatar-initials initials-size-${computedInitials.length}`}\n aria-label={this.name}\n aria-hidden={!this.name && 'true'}\n >\n <text\n x=\"50\"\n y=\"50\"\n dominant-baseline=\"central\"\n text-anchor=\"middle\"\n aria-hidden=\"true\"\n >\n {computedInitials}\n </text>\n </svg>\n )}\n {showFallback && (\n <div\n test-id=\"fallbackIcon\"\n class=\"fallback\"\n >\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["q2AvatarCss","Q2Avatar","constructor","hostRef","this","badSrc","hasDecorator","isLoaded","icon","size","onError","onLoad","disconnectedCallback","decoratorObserver","disconnect","componentWillLoad","checkDecorator","componentDidLoad","setupDecoratorObserver","srcDidUpdate","computedInitials","initials","name","result","substr","parts","split","firstCharacter","lastCharacter","length","undefined","toUpperCase","decoratorElements","Array","from","el","children","filter","child","getAttribute","MutationObserver","observe","childList","subtree","attributes","attributeFilter","render","showImg","src","showInitials","showFallback","h","key","class","alt","viewBox","preserveAspectRatio","x","y","type"],"sources":["src/components/q2-avatar/q2-avatar.scss?tag=q2-avatar&encapsulation=shadow","src/components/q2-avatar/q2-avatar.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.avatar-wrapper {\n position: relative;\n border: 1px solid transparent;\n padding: 1px;\n border-radius: 100%;\n\n .hover-ring {\n display: flex;\n }\n &:hover {\n border-color: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n }\n\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n background-color: var-list(--tct-avatar-decorator-background-color, --t-base, #ffffff);\n border-radius: 100%;\n box-shadow: var-list(\n --app-shadow-1,\n #{unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')}\n );\n position: absolute;\n bottom: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n\n ::slotted(q2-icon) {\n color: var-list(--tct-avatar-decorator-color, #000000);\n }\n }\n\n &.size-small {\n height: var(--tct-avatar-small-size, 24px);\n width: var(--tct-avatar-small-size, 24px);\n .decorator {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--tct-avatar-decorator-small-icon-size, 8px);\n width: var(--tct-avatar-decorator-small-icon-size, 8px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-medium {\n height: var-list(--tct-avatar-size, --tct-avatar-height, 44px);\n width: var-list(--tct-avatar-size, --tct-avatar-width, 44px);\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-large {\n height: var(--tct-avatar-large-size, 64px);\n width: var(--tct-avatar-large-size, 64px);\n .decorator {\n height: var(--app-scale-4x, 20px);\n width: var(--app-scale-4x, 20px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: 14px;\n width: 14px;\n aspect-ratio: 1/1;\n }\n }\n }\n}\n\n.avatar-img,\n.avatar-img-default {\n display: var(--tct-avatar-display, block);\n object-fit: cover;\n border-radius: var-list(--tct-avatar-img-border-radius, --tct-avatar-img-br, --tct-avatar-border-radius, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\n.avatar-img-default {\n background: var-list(--tct-avatar-background, --tct-avatar-bg, #9e9e9e);\n}\n\n.avatar-initials {\n display: var(--tct-avatar-display, block);\n backdrop-filter: var(--tct-avatar-backdrop-filter);\n background: var-list(--tct-avatar-background, --tct-avatar-bg, --t-gray-8, #9e9e9e);\n border-radius: var(--tct-avatar-br, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\ntext {\n fill: var-list(--tct-avatar-text-color, --tct-avatar-color, #ffffff);\n font-weight: var(--tct-avatar-font-weight, 200);\n font-size: var(--tct-avatar-font-size, 40px);\n}\n\n.fallback {\n height: 100%;\n width: 100%;\n border-radius: var-list(\n --tct-avatar-img-border-radius,\n --tct-avatar-img-br,\n 50%\n );\n border: var(--tct-avatar-border, none);\n background: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n display: flex;\n align-items: center;\n justify-content: center;\n\n q2-icon {\n --tct-icon-size: #{var-list(--tct-avatar-icon-size, 65%)};\n --tct-icon-stroke-primary: #{var-list(\n --tct-avatar-icon-stroke-primary,\n currentcolor\n )};\n --tct-icon-stroke-secondary: #{var-list(\n --tct-avatar-icon-stroke-secondary,\n currentcolor\n )};\n --tct-icon-fill: #{var-list(--tct-avatar-icon-fill)};\n color: var-list(--tct-avatar-icon-color, --tct-avatar-color, --t-base, #ffffff);\n width: var-list(--tct-avatar-icon-size, --tct-icon-size);\n height: var-list(--tct-avatar-icon-size, --tct-icon-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Element, h, State, Watch } from '@stencil/core';\n\n/**\n * @name Avatar\n * @category Display\n * @summary Use for displaying photos, initials, or icons for people, businesses, or accounts.\n *\n * @slot decorator - An optional affordance indicator to display in the top-right corner\n */\n@Component({ tag: 'q2-avatar', shadow: true, styleUrl: 'q2-avatar.scss' })\nexport class Q2Avatar implements ComponentInterface {\n // #region Own Properties\n\n private decoratorObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n el: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n badSrc: boolean = false;\n\n @State()\n hasDecorator: boolean = false;\n\n @State()\n isLoaded: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** A [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) to display as the fallback. */\n @Prop()\n icon: string = 'person';\n\n /** A set of up to four initials to display as capitalized text. Takes priority over `name`. */\n @Prop({ reflect: true })\n initials: string;\n\n /**\n * The name associated with the avatar.\n * The initials of the first and last words provided will display as capital letters.\n *\n * @info\n * We recommend always providing a name when you want the avatar to be presented to screen readers.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Determines how large to make the avatar */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /** Displays the image provided by the user. */\n @Prop({ reflect: true })\n src: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.decoratorObserver) {\n this.decoratorObserver.disconnect();\n }\n }\n\n componentWillLoad() {\n this.checkDecorator();\n }\n\n componentDidLoad() {\n this.setupDecoratorObserver();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('src')\n srcDidUpdate() {\n this.badSrc = false;\n }\n\n // #endregion\n // #region Local Methods\n\n get computedInitials() {\n const { initials, name } = this;\n if (!initials && !name) return;\n\n let result = '';\n if (initials) {\n result = initials.substr(0, 4);\n } else if (name) {\n const parts = name.split(' ');\n const firstCharacter = parts[0][0];\n const lastCharacter = parts.length > 1 ? parts[parts.length - 1][0] : undefined;\n result += firstCharacter;\n if (lastCharacter) result += lastCharacter;\n }\n\n result = result?.toUpperCase();\n\n return result;\n }\n\n checkDecorator() {\n const decoratorElements = Array.from(this.el.children).filter(\n child => child.getAttribute('slot') === 'decorator'\n );\n this.hasDecorator = decoratorElements.length > 0;\n }\n\n onError = () => {\n this.badSrc = true;\n };\n\n onLoad = () => {\n this.isLoaded = true;\n };\n\n private setupDecoratorObserver() {\n // Set up MutationObserver to watch for changes to the host element's children\n this.decoratorObserver = new MutationObserver(() => {\n this.checkDecorator();\n });\n\n // Observe changes to the host element's children (light DOM)\n this.decoratorObserver.observe(this.el, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { computedInitials } = this;\n const showImg = this.src && !this.badSrc;\n const isLoaded = this.isLoaded;\n const showInitials = (this.name || this.initials) && (!this.src || this.badSrc);\n const showFallback = !this.name && !this.initials && (!this.src || this.badSrc);\n\n return (\n <div class={`avatar-wrapper size-${this.size}`}>\n {this.hasDecorator && (\n <div class=\"decorator\">\n <slot name=\"decorator\" />\n </div>\n )}\n\n {showImg && (\n <img\n class={`${isLoaded ? 'avatar-img' : 'avatar-img-default'}`}\n test-id=\"userImage\"\n src={this.src}\n onError={this.onError}\n onLoad={this.onLoad}\n alt={this.name || ''}\n />\n )}\n {showInitials && (\n <svg\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n test-id=\"userInitials\"\n class={`avatar-initials initials-size-${computedInitials.length}`}\n aria-label={this.name}\n aria-hidden={!this.name && 'true'}\n >\n <text\n x=\"50\"\n y=\"50\"\n dominant-baseline=\"central\"\n text-anchor=\"middle\"\n aria-hidden=\"true\"\n >\n {computedInitials}\n </text>\n </svg>\n )}\n {showFallback && (\n <div\n test-id=\"fallbackIcon\"\n class=\"fallback\"\n >\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;AAAA,MAAMA,IAAc;;MCUPC,IAAQ;EADrB,WAAAC,CAAAC;;;;QAgBIC,KAAMC,SAAY;IAGlBD,KAAYE,eAAY;IAGxBF,KAAQG,WAAY;;;6GAOpBH,KAAII,OAAW;uDAkBfJ,KAAIK,OAAiC;IA6DrCL,KAAOM,UAAG;MACNN,KAAKC,SAAS;AAAI;IAGtBD,KAAMO,SAAG;MACLP,KAAKG,WAAW;AAAI;AA+E3B;;;EAxIG,oBAAAK;IACI,IAAIR,KAAKS,mBAAmB;MACxBT,KAAKS,kBAAkBC;;;EAI/B,iBAAAC;IACIX,KAAKY;;EAGT,gBAAAC;IACIb,KAAKc;;;;EAOT,YAAAC;IACIf,KAAKC,SAAS;;;;EAMlB,oBAAIe;IACA,OAAMC,UAAEA,GAAQC,MAAEA,KAASlB;IAC3B,KAAKiB,MAAaC,GAAM;IAExB,IAAIC,IAAS;IACb,IAAIF,GAAU;MACVE,IAASF,EAASG,OAAO,GAAG;WACzB,IAAIF,GAAM;MACb,MAAMG,IAAQH,EAAKI,MAAM;MACzB,MAAMC,IAAiBF,EAAM,GAAG;MAChC,MAAMG,IAAgBH,EAAMI,SAAS,IAAIJ,EAAMA,EAAMI,SAAS,GAAG,KAAKC;MACtEP,KAAUI;MACV,IAAIC,GAAeL,KAAUK;;IAGjCL,IAASA,MAAA,QAAAA,WAAM,aAANA,EAAQQ;IAEjB,OAAOR;;EAGX,cAAAP;IACI,MAAMgB,IAAoBC,MAAMC,KAAK9B,KAAK+B,GAAGC,UAAUC,QACnDC,KAASA,EAAMC,aAAa,YAAY;IAE5CnC,KAAKE,eAAe0B,EAAkBH,SAAS;;EAW3C,sBAAAX;;IAEJd,KAAKS,oBAAoB,IAAI2B,kBAAiB;MAC1CpC,KAAKY;AAAgB;;QAIzBZ,KAAKS,kBAAkB4B,QAAQrC,KAAK+B,IAAI;MACpCO,WAAW;MACXC,SAAS;MACTC,YAAY;MACZC,iBAAiB,EAAC;;;;;EAO1B,MAAAC;IACI,OAAM1B,kBAAEA,KAAqBhB;IAC7B,MAAM2C,IAAU3C,KAAK4C,QAAQ5C,KAAKC;IAClC,MAAME,IAAWH,KAAKG;IACtB,MAAM0C,KAAgB7C,KAAKkB,QAAQlB,KAAKiB,eAAejB,KAAK4C,OAAO5C,KAAKC;IACxE,MAAM6C,KAAgB9C,KAAKkB,SAASlB,KAAKiB,cAAcjB,KAAK4C,OAAO5C,KAAKC;IAExE,OACI8C,EAAA;MAAAC,KAAA;MAAKC,OAAO,uBAAuBjD,KAAKK;OACnCL,KAAKE,gBACF6C,EAAK;MAAAC,KAAA;MAAAC,OAAM;OACPF,EAAA;MAAAC,KAAA;MAAM9B,MAAK;SAIlByB,KACGI,EACI;MAAAC,KAAA;MAAAC,OAAO,GAAG9C,IAAW,eAAe;MAAsB,WAClD;MACRyC,KAAK5C,KAAK4C;MACVtC,SAASN,KAAKM;MACdC,QAAQP,KAAKO;MACb2C,KAAKlD,KAAKkB,QAAQ;QAGzB2B,KACGE,EACI;MAAAC,KAAA;MAAAG,SAAQ;MACRC,qBAAoB;MACZ;MACRH,OAAO,iCAAiCjC,EAAiBS;MAAQ,cACrDzB,KAAKkB;MAAI,gBACPlB,KAAKkB,QAAQ;OAE3B6B,EAAA;MAAAC,KAAA;MACIK,GAAE;MACFC,GAAE;MAAI,qBACY;MAAS,eACf;MACA;OAEXtC,KAIZ8B,KACGC,EAAA;MAAAC,KAAA;MAAA,WACY;MACRC,OAAM;OAENF,EAAS;MAAAC,KAAA;MAAAO,MAAMvD,KAAKI","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["q2AvatarCss","Q2Avatar","constructor","hostRef","this","badSrc","hasDecorator","isLoaded","icon","size","onError","onLoad","disconnectedCallback","decoratorObserver","disconnect","componentWillLoad","checkDecorator","componentDidLoad","setupDecoratorObserver","srcDidUpdate","computedInitials","initials","name","result","substr","parts","split","firstCharacter","lastCharacter","length","undefined","toUpperCase","decoratorElements","Array","from","el","children","filter","child","getAttribute","MutationObserver","observe","childList","subtree","attributes","attributeFilter","render","showImg","src","showInitials","showFallback","h","key","class","alt","viewBox","preserveAspectRatio","x","y","type"],"sources":["src/components/q2-avatar/q2-avatar.scss?tag=q2-avatar&encapsulation=shadow","src/components/q2-avatar/q2-avatar.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n.avatar-wrapper {\n position: relative;\n border: 1px solid transparent;\n padding: 1px;\n border-radius: 100%;\n\n .hover-ring {\n display: flex;\n }\n &:hover {\n border-color: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n }\n\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n background-color: var-list(--tct-avatar-decorator-background-color, --t-base, #ffffff);\n border-radius: 100%;\n box-shadow: var-list(\n --app-shadow-1,\n #{unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')}\n );\n position: absolute;\n bottom: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n\n ::slotted(q2-icon) {\n color: var-list(--tct-avatar-decorator-color, #000000);\n }\n }\n\n &.size-small {\n height: var(--tct-avatar-small-size, 24px);\n width: var(--tct-avatar-small-size, 24px);\n .decorator {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--tct-avatar-decorator-small-icon-size, 8px);\n width: var(--tct-avatar-decorator-small-icon-size, 8px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-medium {\n height: var-list(--tct-avatar-size, --tct-avatar-height, 44px);\n width: var-list(--tct-avatar-size, --tct-avatar-width, 44px);\n .decorator {\n height: var(--app-scale-3x, 15px);\n width: var(--app-scale-3x, 15px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: var(--app-scale-2x, 10px);\n width: var(--app-scale-2x, 10px);\n aspect-ratio: 1/1;\n }\n }\n }\n &.size-large {\n height: var(--tct-avatar-large-size, 64px);\n width: var(--tct-avatar-large-size, 64px);\n .decorator {\n height: var(--app-scale-4x, 20px);\n width: var(--app-scale-4x, 20px);\n aspect-ratio: 1/1;\n ::slotted(q2-icon) {\n height: 14px;\n width: 14px;\n aspect-ratio: 1/1;\n }\n }\n }\n}\n\n.avatar-img,\n.avatar-img-default {\n display: var(--tct-avatar-display, block);\n object-fit: cover;\n border-radius: var-list(--tct-avatar-img-border-radius, --tct-avatar-img-br, --tct-avatar-border-radius, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\n.avatar-img-default {\n background: var-list(--tct-avatar-background, --tct-avatar-bg, #9e9e9e);\n}\n\n.avatar-initials {\n display: var(--tct-avatar-display, block);\n backdrop-filter: var(--tct-avatar-backdrop-filter);\n background: var-list(--tct-avatar-background, --tct-avatar-bg, --t-gray-8, #9e9e9e);\n border-radius: var(--tct-avatar-br, 50%);\n border: var(--tct-avatar-border, none);\n height: 100%;\n width: 100%;\n}\n\ntext {\n fill: var-list(--tct-avatar-text-color, --tct-avatar-color, #ffffff);\n font-weight: var(--tct-avatar-font-weight, 200);\n font-size: var(--tct-avatar-font-size, 40px);\n}\n\n.fallback {\n height: 100%;\n width: 100%;\n border-radius: var-list(\n --tct-avatar-img-border-radius,\n --tct-avatar-img-br,\n 50%\n );\n border: var(--tct-avatar-border, none);\n background: var-list(\n --tct-avatar-background,\n --tct-avatar-bg,\n --t-gray-8,\n #9e9e9e\n );\n display: flex;\n align-items: center;\n justify-content: center;\n\n q2-icon {\n --tct-icon-size: #{var-list(--tct-avatar-icon-size, 65%)};\n --tct-icon-stroke-primary: #{var-list(\n --tct-avatar-icon-stroke-primary,\n currentcolor\n )};\n --tct-icon-stroke-secondary: #{var-list(\n --tct-avatar-icon-stroke-secondary,\n currentcolor\n )};\n --tct-icon-fill: #{var-list(--tct-avatar-icon-fill)};\n color: var-list(--tct-avatar-icon-color, --tct-avatar-color, --t-base, #ffffff);\n width: var-list(--tct-avatar-icon-size, --tct-icon-size);\n height: var-list(--tct-avatar-icon-size, --tct-icon-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Element, h, State, Watch } from '@stencil/core';\n\n/**\n * @name Avatar\n * @category Display\n * @summary Use for displaying photos, initials, or icons for people, businesses, or accounts.\n *\n * @slot decorator - An optional affordance indicator to display in the top-right corner\n */\n@Component({ tag: 'q2-avatar', shadow: true, styleUrl: 'q2-avatar.scss' })\nexport class Q2Avatar implements ComponentInterface {\n // #region Own Properties\n\n private decoratorObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n el: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n badSrc: boolean = false;\n\n @State()\n hasDecorator: boolean = false;\n\n @State()\n isLoaded: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** A [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) to display as the fallback. */\n @Prop()\n icon: string = 'person';\n\n /** A set of up to four initials to display as capitalized text. Takes priority over `name`. */\n @Prop({ reflect: true })\n initials: string;\n\n /**\n * The name associated with the avatar.\n * The initials of the first and last words provided will display as capital letters.\n *\n * @info\n * We recommend always providing a name when you want the avatar to be presented to screen readers.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Determines how large to make the avatar */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /** Displays the image provided by the user. */\n @Prop({ reflect: true })\n src: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.decoratorObserver) {\n this.decoratorObserver.disconnect();\n }\n }\n\n componentWillLoad() {\n this.checkDecorator();\n }\n\n componentDidLoad() {\n this.setupDecoratorObserver();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('src')\n srcDidUpdate() {\n this.badSrc = false;\n }\n\n // #endregion\n // #region Local Methods\n\n get computedInitials() {\n const { initials, name } = this;\n if (!initials && !name) return;\n\n let result = '';\n if (initials) {\n result = initials.substr(0, 4);\n } else if (name) {\n const parts = name.split(' ');\n const firstCharacter = parts[0][0];\n const lastCharacter = parts.length > 1 ? parts[parts.length - 1][0] : undefined;\n result += firstCharacter;\n if (lastCharacter) result += lastCharacter;\n }\n\n result = result?.toUpperCase();\n\n return result;\n }\n\n checkDecorator() {\n const decoratorElements = Array.from(this.el.children).filter(\n child => child.getAttribute('slot') === 'decorator'\n );\n this.hasDecorator = decoratorElements.length > 0;\n }\n\n onError = () => {\n this.badSrc = true;\n };\n\n onLoad = () => {\n this.isLoaded = true;\n };\n\n private setupDecoratorObserver() {\n // Set up MutationObserver to watch for changes to the host element's children\n this.decoratorObserver = new MutationObserver(() => {\n this.checkDecorator();\n });\n\n // Observe changes to the host element's children (light DOM)\n this.decoratorObserver.observe(this.el, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { computedInitials } = this;\n const showImg = this.src && !this.badSrc;\n const isLoaded = this.isLoaded;\n const showInitials = (this.name || this.initials) && (!this.src || this.badSrc);\n const showFallback = !this.name && !this.initials && (!this.src || this.badSrc);\n\n return (\n <div class={`avatar-wrapper size-${this.size}`}>\n {this.hasDecorator && (\n <div class=\"decorator\">\n <slot name=\"decorator\" />\n </div>\n )}\n\n {showImg && (\n <img\n class={`${isLoaded ? 'avatar-img' : 'avatar-img-default'}`}\n test-id=\"userImage\"\n src={this.src}\n onError={this.onError}\n onLoad={this.onLoad}\n alt={this.name || ''}\n />\n )}\n {showInitials && (\n <svg\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid meet\"\n test-id=\"userInitials\"\n class={`avatar-initials initials-size-${computedInitials.length}`}\n aria-label={this.name}\n aria-hidden={!this.name && 'true'}\n >\n <text\n x=\"50\"\n y=\"50\"\n dominant-baseline=\"central\"\n text-anchor=\"middle\"\n aria-hidden=\"true\"\n >\n {computedInitials}\n </text>\n </svg>\n )}\n {showFallback && (\n <div\n test-id=\"fallbackIcon\"\n class=\"fallback\"\n >\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;AAAA,MAAMA,IAAc;;MCUPC,IAAQ;EADrB,WAAAC,CAAAC;;;;QAgBIC,KAAMC,SAAY;IAGlBD,KAAYE,eAAY;IAGxBF,KAAQG,WAAY;;;6GAOpBH,KAAII,OAAW;uDAkBfJ,KAAIK,OAAiC;IA6DrCL,KAAOM,UAAG;MACNN,KAAKC,SAAS;AAAI;IAGtBD,KAAMO,SAAG;MACLP,KAAKG,WAAW;AAAI;AA+E3B;;;EAxIG,oBAAAK;IACI,IAAIR,KAAKS,mBAAmB;MACxBT,KAAKS,kBAAkBC;;;EAI/B,iBAAAC;IACIX,KAAKY;;EAGT,gBAAAC;IACIb,KAAKc;;;;EAOT,YAAAC;IACIf,KAAKC,SAAS;;;;EAMlB,oBAAIe;IACA,OAAMC,UAAEA,GAAQC,MAAEA,KAASlB;IAC3B,KAAKiB,MAAaC,GAAM;IAExB,IAAIC,IAAS;IACb,IAAIF,GAAU;MACVE,IAASF,EAASG,OAAO,GAAG;WACzB,IAAIF,GAAM;MACb,MAAMG,IAAQH,EAAKI,MAAM;MACzB,MAAMC,IAAiBF,EAAM,GAAG;MAChC,MAAMG,IAAgBH,EAAMI,SAAS,IAAIJ,EAAMA,EAAMI,SAAS,GAAG,KAAKC;MACtEP,KAAUI;MACV,IAAIC,GAAeL,KAAUK;;IAGjCL,IAASA,MAAA,QAAAA,WAAM,aAANA,EAAQQ;IAEjB,OAAOR;;EAGX,cAAAP;IACI,MAAMgB,IAAoBC,MAAMC,KAAK9B,KAAK+B,GAAGC,UAAUC,QACnDC,KAASA,EAAMC,aAAa,YAAY;IAE5CnC,KAAKE,eAAe0B,EAAkBH,SAAS;;EAW3C,sBAAAX;;IAEJd,KAAKS,oBAAoB,IAAI2B,kBAAiB;MAC1CpC,KAAKY;AAAgB;;QAIzBZ,KAAKS,kBAAkB4B,QAAQrC,KAAK+B,IAAI;MACpCO,WAAW;MACXC,SAAS;MACTC,YAAY;MACZC,iBAAiB,EAAC;;;;;EAO1B,MAAAC;IACI,OAAM1B,kBAAEA,KAAqBhB;IAC7B,MAAM2C,IAAU3C,KAAK4C,QAAQ5C,KAAKC;IAClC,MAAME,IAAWH,KAAKG;IACtB,MAAM0C,KAAgB7C,KAAKkB,QAAQlB,KAAKiB,eAAejB,KAAK4C,OAAO5C,KAAKC;IACxE,MAAM6C,KAAgB9C,KAAKkB,SAASlB,KAAKiB,cAAcjB,KAAK4C,OAAO5C,KAAKC;IAExE,OACI8C,EAAA;MAAAC,KAAA;MAAKC,OAAO,uBAAuBjD,KAAKK;OACnCL,KAAKE,gBACF6C,EAAK;MAAAC,KAAA;MAAAC,OAAM;OACPF,EAAA;MAAAC,KAAA;MAAM9B,MAAK;SAIlByB,KACGI,EACI;MAAAC,KAAA;MAAAC,OAAO,GAAG9C,IAAW,eAAe;MAAsB,WAClD;MACRyC,KAAK5C,KAAK4C;MACVtC,SAASN,KAAKM;MACdC,QAAQP,KAAKO;MACb2C,KAAKlD,KAAKkB,QAAQ;QAGzB2B,KACGE,EACI;MAAAC,KAAA;MAAAG,SAAQ;MACRC,qBAAoB;MACZ;MACRH,OAAO,iCAAiCjC,EAAiBS;MAAQ,cACrDzB,KAAKkB;MAAI,gBACPlB,KAAKkB,QAAQ;OAE3B6B,EAAA;MAAAC,KAAA;MACIK,GAAE;MACFC,GAAE;MAAI,qBACY;MAAS,eACf;MACA;OAEXtC,KAIZ8B,KACGC,EAAA;MAAAC,KAAA;MAAA,WACY;MACRC,OAAM;OAENF,EAAS;MAAAC,KAAA;MAAAO,MAAMvD,KAAKI","ignoreList":[]}
|