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 +1 @@
|
|
|
1
|
-
{"file":"index2.js","mappings":"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","names":[],"sources":["src/utils/index.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { Q2Btn } from 'src/components/q2-btn/q2-btn';\nimport { Q2Calendar } from 'src/components/q2-calendar/q2-calendar';\nimport { Q2Carousel } from 'src/components/q2-carousel/q2-carousel';\nimport { Q2Checkbox } from 'src/components/q2-checkbox/q2-checkbox';\nimport { Q2CheckboxGroup } from 'src/components/q2-checkbox-group/q2-checkbox-group';\nimport { Q2RadioGroup } from 'src/components/q2-radio-group/q2-radio-group';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\nimport { Q2EditableField } from 'src/components/q2-editable-field/q2-editable-field';\nimport { Q2Input } from 'src/components/q2-input/q2-input';\nimport { Q2Loading } from 'src/components/q2-loading/q2-loading';\nimport { Q2Radio } from 'src/components/q2-radio/q2-radio';\nimport { Q2Select } from 'src/components/q2-select/q2-select';\nimport { FormFieldTypes } from 'src/util';\nimport { Q2Popover } from '@/components/q2-popover/q2-popover';\n\nexport const debounce = <F extends (...args: Parameters<F>) => ReturnType<F>>(fn: F, delay: number = 300) => {\n let timeout: ReturnType<typeof setTimeout>;\n return function (...args: Parameters<F>) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n};\n\nexport function isAndroid(): boolean {\n return /Android/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isInScrollableContainer(element) {\n let current = element;\n\n while (current && current !== document.body && current !== document.documentElement) {\n // Move to parent\n if (current.parentElement) {\n current = current.parentElement;\n } else {\n // Try to cross shadow DOM boundary\n const root = current.getRootNode();\n if (root && root.host) {\n current = root.host;\n } else {\n break;\n }\n }\n\n const style = window.getComputedStyle(current);\n const hasScrollableOverflow =\n style.overflow === 'scroll' ||\n style.overflow === 'auto' ||\n style.overflowX === 'scroll' ||\n style.overflowX === 'auto' ||\n style.overflowY === 'scroll' ||\n style.overflowY === 'auto';\n\n const hasOverflowingContent =\n current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;\n\n if (hasScrollableOverflow && hasOverflowingContent) {\n return true;\n }\n }\n\n // Check if the iframe itself is the scrolling container\n const isIframe = window !== window.top;\n if (isIframe && document.documentElement.scrollHeight > window.innerHeight) {\n return true;\n }\n\n return false;\n}\n\nexport function isHostLosingFocus(event: FocusEvent, hostElement: HTMLElement) {\n const type = event.type;\n const focusInTypes = ['focusin', 'focus'];\n const isFocusIn = focusInTypes.includes(type);\n\n // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus\n // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus\n const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;\n\n const isElementNestedInHostElement = (element: HTMLElement) => {\n if (element === hostElement) return true;\n if (element.parentElement) {\n return isElementNestedInHostElement(element.parentElement);\n }\n return false;\n };\n\n if (!(elementGainingFocus instanceof HTMLElement)) return true;\n return !isElementNestedInHostElement(elementGainingFocus);\n}\n\nexport function isRelatedTargetWithinHost(event: FocusEvent, element: HTMLElement) {\n return event.relatedTarget !== element && !element.contains(event.relatedTarget as Node);\n}\n\nexport function isEventFromElement(event: Event, element: HTMLElement): boolean {\n return event.composedPath?.()[0] === element;\n}\n\nexport function overrideFocus(hostElement: HTMLElement) {\n hostElement.focus = () => hostElement?.dispatchEvent(new FocusEvent('focus', { bubbles: false }));\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('firefox');\n}\n\nexport function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('safari') && !userAgent.includes('chrome');\n}\n\n/**\n * Returns the value of a prop if it is defined and included in the `validValues`\n * array. This is used primarily to prevent Vue wrappers from setting aria props\n * to \"Symbol()\" when the prop is not set.\n */\nexport function getAriaValueFromProp(prop: string, validValues?: string[]) {\n if (prop === undefined) return prop;\n if (!validValues) return prop !== 'Symbol()' ? prop : undefined;\n return validValues.includes(prop) || prop === '' ? prop : undefined;\n}\n\nlet guid: number = 1000;\nexport function createGuid(): number {\n return guid++;\n}\n\nexport function nextPaint(fn: (value?: unknown) => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn);\n });\n}\n\nexport function isVisible(element: HTMLElement) {\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n}\n\nexport function waitForNextPaint() {\n return new Promise(resolve => nextPaint(resolve));\n}\n\nexport function capitalize(value: string) {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nexport function pick(props: string[]): (obj: object) => object {\n return obj => {\n return props.reduce((memo, prop) => {\n return {\n ...memo,\n [prop]: obj[prop],\n };\n }, {});\n };\n}\n\nexport function loc(key: string, subs?: Record<string, any> | string[]) {\n if (!key) return '';\n if (window.Tecton?.noStrings === true) {\n return key;\n }\n return window?.TectonElements?.loc(key, subs) ?? key;\n}\n\n/**\n * Returns browser name, version, platform, and context (browser vs app WebView).\n * Desktop Chrome: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36\n * Desktop Safari: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.4 Safari/605.1.15\n * Desktop Edge: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0\n * Desktop Firefox: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0\n * Mobile app Android: Mozilla/5.0 (Linux; Android 16; sdk_gphone64_arm64 Build/BE2A.250530.026.D1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/146.0.7680.177 Mobile Safari/537.36\n * Mobile browser Android: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Mobile Safari/537.36\n * Mobile app iOS: Mozilla/5.0 (iPhone; CPU iPhone OS 18_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148\n * Mobile browser iOS: Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1 -> 18.7 is the OS version, 26.0.1 is the Safari version\n */\nexport function getBrowserInfo() {\n const userAgent = navigator.userAgent;\n let name = 'Unknown';\n let version = 'Unknown';\n\n // Detect platform\n const isMobileDevice = /Android|iPhone|iPad|iPod/i.test(userAgent) || userAgent.includes(' iOS/');\n const platform = isMobileDevice ? 'mobile' : 'desktop';\n\n // Detect context — app (WebView) vs standalone browser\n let context = 'browser';\n if (isMobileDevice) {\n const isAndroidWebView = userAgent.includes('; wv)');\n const isIOSDevice = /iPhone|iPad|iPod/.test(userAgent) || userAgent.includes(' iOS/');\n const isIOSWebView = isIOSDevice && !userAgent.includes('Safari');\n if (isAndroidWebView || isIOSWebView) {\n context = 'app';\n }\n }\n\n // Detect browser name and version — check mobile-specific patterns first\n if (userAgent.includes(' iPhone OS') && !userAgent.includes('Safari')) {\n // iOS app WebView — no \"Safari\" token in userAgent\n name = 'Safari';\n version = userAgent.split(' iPhone OS')[1].trim().split(/\\s/)[0].replaceAll('_', '.');\n } else if (userAgent.includes(' iOS/')) {\n // Alternate iOS app userAgent format (e.g. ngam-ios/26.5.0.107 arm64 iOS/26.4 CFNetwork/1.0 Darwin/25.4.0)\n name = 'Safari';\n version = userAgent.split(' iOS/')[1].split(/\\s/)[0];\n } else if (userAgent.includes('Edg')) {\n name = 'Edge';\n const match = userAgent.match(/Edg\\/(\\d+(?:\\.\\d+)+)/);\n if (match && match[1]) {\n version = match[1];\n }\n } else if (userAgent.includes('Firefox')) {\n name = 'Firefox';\n const match = userAgent.match(/Firefox\\/(\\d+\\.\\d+)/);\n if (match && match[1]) {\n version = match[1];\n }\n } else if (userAgent.includes('Chrome')) {\n name = 'Chrome';\n const match = userAgent.match(/Chrome\\/(\\d+\\.\\d+\\.\\d+\\.\\d+)/);\n if (match && match[1]) {\n version = match[1];\n }\n } else if (userAgent.includes('Safari')) {\n name = 'Safari';\n const match = userAgent.match(/Version\\/(\\d+(?:\\.\\d+)+)/);\n if (match && match[1]) {\n version = match[1];\n }\n }\n\n return { name, version, platform, context };\n}\n\nexport function renderLabel(target: FormFieldTypes | Q2RadioGroup | Q2CheckboxGroup | Q2Select | Q2Calendar) {\n const { label, hideLabel, optional, readonly } = target;\n const labelClasses: string[] = ['input-label'];\n let helpText = '';\n\n let shouldHideLabel = hideLabel;\n if (!shouldHideLabel) {\n const labelSlotElements = target.hostElement.querySelectorAll<HTMLSlotElement>('[slot=\"label\"]');\n const hasSlotContent = labelSlotElements.length > 0;\n const hasLabel = !!label;\n\n shouldHideLabel = hasLabel || hasSlotContent ? false : true;\n }\n\n if (shouldHideLabel) labelClasses.push('sr');\n if (optional) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.optional')}</span>;\n }\n if (readonly) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.readonly')}</span>;\n labelClasses.push('readonly-field');\n }\n return (\n <label\n htmlFor={target.inputId}\n class={labelClasses.join(' ')}\n >\n <slot name=\"label\">\n {label ? loc(label) : undefined}\n {helpText}\n </slot>\n </label>\n );\n}\n\nexport function hasSlotContent(target: HTMLElement, slotName: string) {\n return target.querySelector(`[slot=\"${slotName}\"]`) !== null;\n}\n\nexport function handleAriaLabel(\n target:\n | Q2Input\n | Q2Select\n | Q2Radio\n | Q2Checkbox\n | Q2EditableField\n | Q2Dropdown\n | Q2DropdownItem\n | Q2Loading\n | Q2Carousel\n | Q2Calendar\n | Q2Btn\n) {\n const { ariaLabel } = target;\n if (!ariaLabel) return;\n\n // If empty ariaLabel prop is set to primitive symbol by framework wrapper, set ariaLabel to undefined and return\n const FW_WRAPPERS_EMPTY_PROP = Symbol().toString();\n if (ariaLabel === FW_WRAPPERS_EMPTY_PROP) {\n target.ariaLabel = undefined;\n return;\n }\n\n // If ariaLabel is set, set hideLabel to true and set label to ariaLabel\n if ('hideLabel' in target) target.hideLabel = true;\n target.label = loc(ariaLabel);\n target.ariaLabel = undefined;\n}\n\n/**\n * Handles when a prop has been renamed on a component without introducing a breaking change.\n */\nexport function handleRenamedProp(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n oldProp: string,\n newProp: string,\n removeOldProp?: boolean\n) {\n if (typeof target[oldProp] === 'undefined') return;\n\n // If old prop has value, aka set in component, call handleDeprecationWarning()\n if (target[oldProp]) {\n handleDeprecationWarning(target, oldProp, 'prop');\n }\n\n target[newProp] = target[oldProp];\n\n if (removeOldProp) {\n delete target[oldProp];\n }\n}\n\nexport function handleDeprecationWarning(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n deprecatedItemName: string,\n deprecatedItemType: 'function' | 'prop' | 'method' | 'event'\n) {\n if (window.location.hostname === 'localhost' || window.location.host === 'stack.q2developer.com') {\n if (target[deprecatedItemName] === 'undefined') return;\n\n const componentName =\n target.constructor?.name?.toLowerCase()?.slice(2) || target.hostElement?.tagName?.toLowerCase().slice(3);\n switch (deprecatedItemType) {\n case 'prop':\n if (deprecatedItemName === 'size' && componentName === 'btn') {\n console.warn(\n `The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: \"small\" / \"medium\" / \"large\" `\n );\n } else {\n console.warn(\n `The property ${deprecatedItemName} in q2-${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n }\n break;\n\n case 'function':\n console.warn(\n `The function ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'method':\n console.warn(\n `The method ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'event':\n console.warn(\n `The event ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n default:\n console.error(\n `handleDeprecationWarning --> No type found for desired deprecation: ${deprecatedItemName} in q2-${componentName}: deprecatedItemType = ${deprecatedItemName}`\n );\n }\n }\n}\n\nexport function renderMessages(target: FormFieldTypes) {\n const type = target.hasError ? 'danger' : 'info';\n\n return (\n <div class=\"messages-container\">\n <q2-message\n appearance=\"minimal\"\n description\n type={type}\n test-id=\"message\"\n >\n <ul id={target.inputDescribedBy}>\n {target.messages.map(message => (\n <li test-id=\"messageListItem\">{loc(message)}</li>\n ))}\n </ul>\n </q2-message>\n </div>\n );\n}\n\nexport function setMessageHeight(target: FormFieldTypes) {\n const messageContainer = (target.hostElement.shadowRoot as ShadowRoot).querySelector<HTMLDivElement>(\n '.messages-container'\n );\n const q2Message = messageContainer.querySelector('q2-message');\n nextPaint(() => {\n const height = target.showMessages && target.hasFocus ? q2Message.getBoundingClientRect().height : 0;\n\n if (messageContainer.style.getPropertyValue('height') === `${height}px`) return;\n\n if (height === 0) {\n q2Message.classList.add('invisible');\n messageContainer.style.removeProperty('height');\n } else {\n q2Message.classList.remove('invisible');\n messageContainer.style.setProperty('height', `${height}px`);\n }\n });\n}\n\nexport const resizeIframe = () => {\n return window.TectonElements?.resizeIframe?.();\n};\n\n// Handling color attribute (deprecated)\nexport const handleColor = (target: Q2Btn) => {\n if (!target.intent && ['primary', 'secondary'].includes(target.color)) {\n target.intent = `workflow-${target.color}` as HTMLQ2BtnElement['intent'];\n target.color = undefined;\n }\n};\n\n/**\n * Gets all translated text content from an element, including shadow DOM content\n *\n * @param {Element} element - The element to extract text from\n * @param {Object} options - Configuration options\n * @param {boolean} [options.trim=true] - Whether to trim whitespace\n * @param {boolean} [options.normalizeWhitespace=false] - Whether to normalize whitespace\n * @param {boolean} [options.skipComponentReady=false] - Skip waiting for components (for test environments)\n * @return {Promise<string>} All translated text content in DOM order\n */\nexport const getAllText = async (element, options = {}) => {\n if (!element) return '';\n\n const opts = {\n trim: true,\n normalizeWhitespace: false,\n skipComponentReady: false,\n ...options,\n };\n\n const nodesToSkip = new Set(['STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE', '#comment']);\n const processedNodes = new WeakSet();\n let result = '';\n\n async function processNode(node) {\n if (processedNodes.has(node) || nodesToSkip.has(node.nodeName)) return;\n\n processedNodes.add(node);\n\n // Handle text nodes\n if (node.nodeType === Node.TEXT_NODE) {\n const text = opts.trim ? node.textContent.trim() : node.textContent;\n\n if (text) {\n // Add space between adjacent text nodes if needed\n if (result && !result.endsWith(' ') && !text.startsWith(' ')) {\n result += ' ';\n }\n\n // Translate the text\n result += opts.skipComponentReady ? window.TectonElements?.loc(text) : loc(text);\n }\n return;\n }\n\n // Handle element nodes\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Wait for Stencil component if needed\n const isStencilComponent = node.nodeName.startsWith('Q2-') && typeof node.componentOnReady === 'function';\n\n if (isStencilComponent && !opts.skipComponentReady) {\n await node.componentOnReady();\n }\n\n // Process children in light DOM\n for (const child of node.childNodes) {\n await processNode(child);\n }\n\n // Process shadow DOM if present\n if (node.shadowRoot) {\n for (const shadowChild of node.shadowRoot.childNodes) {\n await processNode(shadowChild);\n }\n }\n\n // Handle slot elements with assigned nodes\n if (node.nodeName === 'SLOT' && typeof node.assignedNodes === 'function') {\n const assignedNodes = node.assignedNodes();\n\n if (assignedNodes.length > 0) {\n for (const assigned of assignedNodes) {\n if (!processedNodes.has(assigned)) {\n await processNode(assigned);\n }\n }\n } else {\n // Process slot fallback content\n for (const fallback of node.childNodes) {\n if (!processedNodes.has(fallback)) {\n await processNode(fallback);\n }\n }\n }\n }\n }\n }\n\n await processNode(element);\n\n // Apply final formatting\n if (opts.trim) {\n result = result.trim();\n }\n\n if (opts.normalizeWhitespace) {\n result = result.replace(/\\s+/g, ' ');\n }\n\n return result;\n};\n"],"version":3}
|
|
1
|
+
{"file":"index2.js","mappings":"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","names":[],"sources":["src/utils/index.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { Q2Btn } from 'src/components/q2-btn/q2-btn';\nimport { Q2Calendar } from 'src/components/q2-calendar/q2-calendar';\nimport { Q2Carousel } from 'src/components/q2-carousel/q2-carousel';\nimport { Q2Checkbox } from 'src/components/q2-checkbox/q2-checkbox';\nimport { Q2CheckboxGroup } from 'src/components/q2-checkbox-group/q2-checkbox-group';\nimport { Q2RadioGroup } from 'src/components/q2-radio-group/q2-radio-group';\nimport { Q2Dropdown } from 'src/components/q2-dropdown/q2-dropdown';\nimport { Q2DropdownItem } from 'src/components/q2-dropdown-item/q2-dropdown-item';\nimport { Q2EditableField } from 'src/components/q2-editable-field/q2-editable-field';\nimport { Q2Input } from 'src/components/q2-input/q2-input';\nimport { Q2Loading } from 'src/components/q2-loading/q2-loading';\nimport { Q2Radio } from 'src/components/q2-radio/q2-radio';\nimport { Q2Select } from 'src/components/q2-select/q2-select';\nimport { FormFieldTypes } from 'src/util';\nimport { Q2Popover } from '@/components/q2-popover/q2-popover';\n\nexport const debounce = <F extends (...args: Parameters<F>) => ReturnType<F>>(fn: F, delay: number = 300) => {\n let timeout: ReturnType<typeof setTimeout>;\n return function (...args: Parameters<F>) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n};\n\nexport function isAndroid(): boolean {\n return /Android/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nexport function isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile|IEMobile|Windows Phone|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isInScrollableContainer(element) {\n let current = element;\n\n while (current && current !== document.body && current !== document.documentElement) {\n // Move to parent\n if (current.parentElement) {\n current = current.parentElement;\n } else {\n // Try to cross shadow DOM boundary\n const root = current.getRootNode();\n if (root && root.host) {\n current = root.host;\n } else {\n break;\n }\n }\n\n const style = window.getComputedStyle(current);\n const hasScrollableOverflow =\n style.overflow === 'scroll' ||\n style.overflow === 'auto' ||\n style.overflowX === 'scroll' ||\n style.overflowX === 'auto' ||\n style.overflowY === 'scroll' ||\n style.overflowY === 'auto';\n\n const hasOverflowingContent =\n current.scrollHeight > current.clientHeight || current.scrollWidth > current.clientWidth;\n\n if (hasScrollableOverflow && hasOverflowingContent) {\n return true;\n }\n }\n\n // Check if the iframe itself is the scrolling container\n const isIframe = window !== window.top;\n if (isIframe && document.documentElement.scrollHeight > window.innerHeight) {\n return true;\n }\n\n return false;\n}\n\nexport function isHostLosingFocus(event: FocusEvent, hostElement: HTMLElement) {\n const type = event.type;\n const focusInTypes = ['focusin', 'focus'];\n const isFocusIn = focusInTypes.includes(type);\n\n // on focusin: `target` is element losing focus, `relatedTarget` is element gaining focus\n // on focusout: `target` is element gaining focus, `relatedTarget` is element losing focus\n const elementGainingFocus = isFocusIn ? event.target : event.relatedTarget;\n\n const isElementNestedInHostElement = (element: HTMLElement) => {\n if (element === hostElement) return true;\n if (element.parentElement) {\n return isElementNestedInHostElement(element.parentElement);\n }\n return false;\n };\n\n if (!(elementGainingFocus instanceof HTMLElement)) return true;\n return !isElementNestedInHostElement(elementGainingFocus);\n}\n\nexport function isRelatedTargetWithinHost(event: FocusEvent, element: HTMLElement) {\n return event.relatedTarget !== element && !element.contains(event.relatedTarget as Node);\n}\n\nexport function isEventFromElement(event: Event, element: HTMLElement): boolean {\n return event.composedPath?.()[0] === element;\n}\n\nexport function overrideFocus(hostElement: HTMLElement) {\n hostElement.focus = () => hostElement?.dispatchEvent(new FocusEvent('focus', { bubbles: false }));\n}\n\nexport function isFirefox() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('firefox');\n}\n\nexport function isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n}\n\nexport function isSafari() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('safari') && !userAgent.includes('chrome');\n}\n\n/**\n * Returns the value of a prop if it is defined and included in the `validValues`\n * array. This is used primarily to prevent Vue wrappers from setting aria props\n * to \"Symbol()\" when the prop is not set.\n */\nexport function getAriaValueFromProp(prop: string, validValues?: string[]) {\n if (prop === undefined) return prop;\n if (!validValues) return prop !== 'Symbol()' ? prop : undefined;\n return validValues.includes(prop) || prop === '' ? prop : undefined;\n}\n\nlet guid: number = 1000;\nexport function createGuid(): number {\n return guid++;\n}\n\nexport function nextPaint(fn: (value?: unknown) => void) {\n requestAnimationFrame(() => {\n requestAnimationFrame(fn);\n });\n}\n\nexport function isVisible(element: HTMLElement) {\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n}\n\nexport function waitForNextPaint() {\n return new Promise(resolve => nextPaint(resolve));\n}\n\nexport function capitalize(value: string) {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n\nexport function pick(props: string[]): (obj: object) => object {\n return obj => {\n return props.reduce((memo, prop) => {\n return {\n ...memo,\n [prop]: obj[prop],\n };\n }, {});\n };\n}\n\nexport function loc(key: string, subs?: Record<string, any> | string[]) {\n if (!key) return '';\n if (window.Tecton?.noStrings === true) {\n return key;\n }\n return window?.TectonElements?.loc(key, subs) ?? key;\n}\n\n/**\n * Returns browser name, version, platform, and context (browser vs app WebView).\n * Desktop Chrome: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36\n * Desktop Safari: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.4 Safari/605.1.15\n * Desktop Edge: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0\n * Desktop Firefox: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0\n * Mobile app Android: Mozilla/5.0 (Linux; Android 16; sdk_gphone64_arm64 Build/BE2A.250530.026.D1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/146.0.7680.177 Mobile Safari/537.36\n * Mobile browser Android: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Mobile Safari/537.36\n * Mobile app iOS: Mozilla/5.0 (iPhone; CPU iPhone OS 18_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148\n * Mobile browser iOS: Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1 -> 18.7 is the OS version, 26.0.1 is the Safari version\n */\nexport function getBrowserInfo() {\n const userAgent = navigator.userAgent;\n let name = 'Unknown';\n let version = 'Unknown';\n\n // Detect platform\n const isMobileDevice = /Android|iPhone|iPad|iPod/i.test(userAgent) || userAgent.includes(' iOS/');\n const platform = isMobileDevice ? 'mobile' : 'desktop';\n\n // Detect context — app (WebView) vs standalone browser\n let context = 'browser';\n if (isMobileDevice) {\n const isAndroidWebView = userAgent.includes('; wv)');\n const isIOSDevice = /iPhone|iPad|iPod/.test(userAgent) || userAgent.includes(' iOS/');\n const isIOSWebView = isIOSDevice && !userAgent.includes('Safari');\n if (isAndroidWebView || isIOSWebView) {\n context = 'app';\n }\n }\n\n // Detect browser name and version — check mobile-specific patterns first\n if (userAgent.includes(' iPhone OS') && !userAgent.includes('Safari')) {\n // iOS app WebView — no \"Safari\" token in userAgent\n name = 'Safari';\n version = userAgent.split(' iPhone OS')[1].trim().split(/\\s/)[0].replace(/_/g, '.');\n } else if (userAgent.includes(' iOS/')) {\n // Alternate iOS app userAgent format (e.g. ngam-ios/26.5.0.107 arm64 iOS/26.4 CFNetwork/1.0 Darwin/25.4.0)\n name = 'Safari';\n version = userAgent.split(' iOS/')[1].split(/\\s/)[0];\n } else if (userAgent.includes('Edg')) {\n name = 'Edge';\n const match = userAgent.match(/Edg\\/(\\d+(?:\\.\\d+)+)/);\n if (match && match[1]) {\n version = match[1];\n }\n } else if (userAgent.includes('Firefox')) {\n name = 'Firefox';\n const match = userAgent.match(/Firefox\\/(\\d+\\.\\d+)/);\n if (match && match[1]) {\n version = match[1];\n }\n } else if (userAgent.includes('Chrome')) {\n name = 'Chrome';\n const match = userAgent.match(/Chrome\\/(\\d+\\.\\d+\\.\\d+\\.\\d+)/);\n if (match && match[1]) {\n version = match[1];\n }\n } else if (userAgent.includes('Safari')) {\n name = 'Safari';\n const match = userAgent.match(/Version\\/(\\d+(?:\\.\\d+)+)/);\n if (match && match[1]) {\n version = match[1];\n }\n }\n\n return { name, version, platform, context };\n}\n\nexport function renderLabel(target: FormFieldTypes | Q2RadioGroup | Q2CheckboxGroup | Q2Select | Q2Calendar) {\n const { label, hideLabel, optional, readonly } = target;\n const labelClasses: string[] = ['input-label'];\n let helpText = '';\n\n let shouldHideLabel = hideLabel;\n if (!shouldHideLabel) {\n const labelSlotElements = target.hostElement.querySelectorAll<HTMLSlotElement>('[slot=\"label\"]');\n const hasSlotContent = labelSlotElements.length > 0;\n const hasLabel = !!label;\n\n shouldHideLabel = hasLabel || hasSlotContent ? false : true;\n }\n\n if (shouldHideLabel) labelClasses.push('sr');\n if (optional) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.optional')}</span>;\n }\n if (readonly) {\n helpText = <span class=\"optional-tag\">{loc('tecton.element.input.readonly')}</span>;\n labelClasses.push('readonly-field');\n }\n return (\n <label\n htmlFor={target.inputId}\n class={labelClasses.join(' ')}\n >\n <slot name=\"label\">\n {label ? loc(label) : undefined}\n {helpText}\n </slot>\n </label>\n );\n}\n\nexport function hasSlotContent(target: HTMLElement, slotName: string) {\n return target.querySelector(`[slot=\"${slotName}\"]`) !== null;\n}\n\nexport function handleAriaLabel(\n target:\n | Q2Input\n | Q2Select\n | Q2Radio\n | Q2Checkbox\n | Q2EditableField\n | Q2Dropdown\n | Q2DropdownItem\n | Q2Loading\n | Q2Carousel\n | Q2Calendar\n | Q2Btn\n) {\n const { ariaLabel } = target;\n if (!ariaLabel) return;\n\n // If empty ariaLabel prop is set to primitive symbol by framework wrapper, set ariaLabel to undefined and return\n const FW_WRAPPERS_EMPTY_PROP = Symbol().toString();\n if (ariaLabel === FW_WRAPPERS_EMPTY_PROP) {\n target.ariaLabel = undefined;\n return;\n }\n\n // If ariaLabel is set, set hideLabel to true and set label to ariaLabel\n if ('hideLabel' in target) target.hideLabel = true;\n target.label = loc(ariaLabel);\n target.ariaLabel = undefined;\n}\n\n/**\n * Handles when a prop has been renamed on a component without introducing a breaking change.\n */\nexport function handleRenamedProp(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n oldProp: string,\n newProp: string,\n removeOldProp?: boolean\n) {\n if (typeof target[oldProp] === 'undefined') return;\n\n // If old prop has value, aka set in component, call handleDeprecationWarning()\n if (target[oldProp]) {\n handleDeprecationWarning(target, oldProp, 'prop');\n }\n\n target[newProp] = target[oldProp];\n\n if (removeOldProp) {\n delete target[oldProp];\n }\n}\n\nexport function handleDeprecationWarning(\n target: Q2Btn | Q2Calendar | Q2Dropdown | Q2Popover,\n deprecatedItemName: string,\n deprecatedItemType: 'function' | 'prop' | 'method' | 'event'\n) {\n if (window.location.hostname === 'localhost' || window.location.host === 'stack.q2developer.com') {\n if (target[deprecatedItemName] === 'undefined') return;\n\n const componentName =\n target.constructor?.name?.toLowerCase()?.slice(2) || target.hostElement?.tagName?.toLowerCase().slice(3);\n switch (deprecatedItemType) {\n case 'prop':\n if (deprecatedItemName === 'size' && componentName === 'btn') {\n console.warn(\n `The property of size in q2-btn should not be typeof number, or typeof string containing a number. This functionality will be deprecated in an upcoming release. Instead, please use the value 'undefined', or typeof string with any of the following values: \"small\" / \"medium\" / \"large\" `\n );\n } else {\n console.warn(\n `The property ${deprecatedItemName} in q2-${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n }\n break;\n\n case 'function':\n console.warn(\n `The function ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'method':\n console.warn(\n `The method ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n case 'event':\n console.warn(\n `The event ${deprecatedItemName} in ${componentName} has been marked for deprecation and will be removed in an upcoming major release.`\n );\n break;\n\n default:\n console.error(\n `handleDeprecationWarning --> No type found for desired deprecation: ${deprecatedItemName} in q2-${componentName}: deprecatedItemType = ${deprecatedItemName}`\n );\n }\n }\n}\n\nexport function renderMessages(target: FormFieldTypes) {\n const type = target.hasError ? 'danger' : 'info';\n\n return (\n <div class=\"messages-container\">\n <q2-message\n appearance=\"minimal\"\n description\n type={type}\n test-id=\"message\"\n >\n <ul id={target.inputDescribedBy}>\n {target.messages.map(message => (\n <li test-id=\"messageListItem\">{loc(message)}</li>\n ))}\n </ul>\n </q2-message>\n </div>\n );\n}\n\nexport function setMessageHeight(target: FormFieldTypes) {\n const messageContainer = (target.hostElement.shadowRoot as ShadowRoot).querySelector<HTMLDivElement>(\n '.messages-container'\n );\n const q2Message = messageContainer.querySelector('q2-message');\n nextPaint(() => {\n const height = target.showMessages && target.hasFocus ? q2Message.getBoundingClientRect().height : 0;\n\n if (messageContainer.style.getPropertyValue('height') === `${height}px`) return;\n\n if (height === 0) {\n q2Message.classList.add('invisible');\n messageContainer.style.removeProperty('height');\n } else {\n q2Message.classList.remove('invisible');\n messageContainer.style.setProperty('height', `${height}px`);\n }\n });\n}\n\nexport const resizeIframe = () => {\n return window.TectonElements?.resizeIframe?.();\n};\n\n// Handling color attribute (deprecated)\nexport const handleColor = (target: Q2Btn) => {\n if (!target.intent && ['primary', 'secondary'].includes(target.color)) {\n target.intent = `workflow-${target.color}` as HTMLQ2BtnElement['intent'];\n target.color = undefined;\n }\n};\n\n/**\n * Gets all translated text content from an element, including shadow DOM content\n *\n * @param {Element} element - The element to extract text from\n * @param {Object} options - Configuration options\n * @param {boolean} [options.trim=true] - Whether to trim whitespace\n * @param {boolean} [options.normalizeWhitespace=false] - Whether to normalize whitespace\n * @param {boolean} [options.skipComponentReady=false] - Skip waiting for components (for test environments)\n * @return {Promise<string>} All translated text content in DOM order\n */\nexport const getAllText = async (element, options = {}) => {\n if (!element) return '';\n\n const opts = {\n trim: true,\n normalizeWhitespace: false,\n skipComponentReady: false,\n ...options,\n };\n\n const nodesToSkip = new Set(['STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE', '#comment']);\n const processedNodes = new WeakSet();\n let result = '';\n\n async function processNode(node) {\n if (processedNodes.has(node) || nodesToSkip.has(node.nodeName)) return;\n\n processedNodes.add(node);\n\n // Handle text nodes\n if (node.nodeType === Node.TEXT_NODE) {\n const text = opts.trim ? node.textContent.trim() : node.textContent;\n\n if (text) {\n // Add space between adjacent text nodes if needed\n if (result && !result.endsWith(' ') && !text.startsWith(' ')) {\n result += ' ';\n }\n\n // Translate the text\n result += opts.skipComponentReady ? window.TectonElements?.loc(text) : loc(text);\n }\n return;\n }\n\n // Handle element nodes\n if (node.nodeType === Node.ELEMENT_NODE) {\n // Wait for Stencil component if needed\n const isStencilComponent = node.nodeName.startsWith('Q2-') && typeof node.componentOnReady === 'function';\n\n if (isStencilComponent && !opts.skipComponentReady) {\n await node.componentOnReady();\n }\n\n // Process children in light DOM\n for (const child of node.childNodes) {\n await processNode(child);\n }\n\n // Process shadow DOM if present\n if (node.shadowRoot) {\n for (const shadowChild of node.shadowRoot.childNodes) {\n await processNode(shadowChild);\n }\n }\n\n // Handle slot elements with assigned nodes\n if (node.nodeName === 'SLOT' && typeof node.assignedNodes === 'function') {\n const assignedNodes = node.assignedNodes();\n\n if (assignedNodes.length > 0) {\n for (const assigned of assignedNodes) {\n if (!processedNodes.has(assigned)) {\n await processNode(assigned);\n }\n }\n } else {\n // Process slot fallback content\n for (const fallback of node.childNodes) {\n if (!processedNodes.has(fallback)) {\n await processNode(fallback);\n }\n }\n }\n }\n }\n }\n\n await processNode(element);\n\n // Apply final formatting\n if (opts.trim) {\n result = result.trim();\n }\n\n if (opts.normalizeWhitespace) {\n result = result.replace(/\\s+/g, ' ');\n }\n\n return result;\n};\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"q2-action-group2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/q2-action-group/q2-action-group.scss?tag=q2-action-group&encapsulation=shadow","src/components/q2-action-group/q2-action-group.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host(:not([hidden])) {\n display: block;\n width: 100%;\n --comp-default-action-group-margin: #{var-list(--app-scale-5x, 25px)} 0;\n margin: var-list(--tct-action-group-margin, --comp-default-action-group-margin);\n}\n\n.container {\n --comp-default-action-group-gap: #{var-list(--tct-action-group-gap, --app-scale-2x, 10px)};\n --comp-link-gap: #{var-list(--tct-action-group-gap, --app-scale-4x, 20px)};\n --tct-btn-icon-height: 30px;\n width: 100%;\n display: flex;\n gap: var(--comp-default-action-group-gap);\n\n &.has-q2-link {\n gap: var(--comp-link-gap);\n }\n\n &.has-q2-btn-coin {\n column-gap: var-list(--tct-action-group-coin-column-gap, --app-scale-1x, 5px);\n row-gap: var-list(--tct-action-group-coin-row-gap, --app-scale-5x, 25px);\n }\n\n &.vertical {\n flex-direction: var-list(--tct-action-group-vertical-flex-direction, column);\n\n ::slotted(q2-btn) {\n display: block;\n width: 100%;\n }\n }\n\n &.horizontal {\n justify-content: var-list(--tct-action-group-horizontal-justify-content, flex-start);\n flex-direction: var-list(--tct-action-group-horizontal-flex-direction, row-reverse);\n align-items: var-list(--tct-action-group-horizontal-align-items, center);\n flex-wrap: var-list(--tct-action-group-horizontal-flex-wrap, wrap);\n\n &.full-width {\n --tct-action-group-horizontal-justify-content: space-around;\n flex-wrap: nowrap;\n }\n\n &.has-q2-btn-coin {\n justify-content: var(--tct-action-group-coin-horizontal-justify-content, center);\n flex-direction: var(--tct-action-group-horizontal-flex-direction, row);\n }\n\n ::slotted(:not(q2-btn)) {\n position: relative;\n }\n\n ::slotted(:not(q2-btn):not(.is-last-action))::before {\n content: '';\n display: inline-block;\n width: 0;\n height: var(--tct-action-group-separator-height, 20px);\n border-left: 1px solid #{var-list(--tct-action-group-separator-color, --t-gray-12, #d9d9d9)};\n position: absolute;\n left: calc(var(--comp-link-gap) * -0.5);\n top: 50%;\n transform: translateY(-50%);\n }\n }\n\n &.vertical,\n &.horizontal.full-width {\n ::slotted(q2-btn) {\n display: block;\n width: 100%;\n }\n }\n\n :host([full-width]:not([full-width=\"false\"])) & {\n justify-content: space-evenly;\n }\n}\n","import { Q2ResizeObserverCustomEvent } from '@/components';\nimport { nextPaint } from '@/utils';\nimport { Component, ComponentInterface, h, Element, Prop, State, Watch } from '@stencil/core';\n\n/**\n * @name Action Group\n * @category Display\n * @summary Use for laying out groups of buttons or links with consistent spacing.\n */\n@Component({\n tag: 'q2-action-group',\n styleUrl: 'q2-action-group.scss',\n shadow: true,\n})\nexport class Q2ActionGroup implements ComponentInterface {\n // #region Own Properties\n\n container: HTMLDivElement;\n mutationObserver: MutationObserver;\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 autoOrientation: 'vertical' | 'horizontal' = 'vertical';\n\n @State()\n slottedElements: HTMLElement[] = [];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Whether the slotted elements should take up the full width of the container when in horizontal orientation.\n *\n * @warning\n * This will prevent the buttons from wrapping when the container is too small to fit all buttons.\n */\n @Prop({ reflect: true })\n fullWidth: boolean;\n\n /**\n * The orientation of the buttons, which will override the auto orientation.\n *\n * @info\n * This will override and disable the auto determination of the orientation.\n * @warning\n * Vertical orientation is not supported for [Links](https://tecton.q2developer.com/design-system/q2-link/)\n * or `\"coin\"` [Buttons](https://tecton.q2developer.com/design-system/q2-btn/), and will be set to \"horizontal\".\n */\n @Prop({ reflect: true, mutable: true })\n orientation: 'auto' | 'vertical' | 'horizontal' = 'auto';\n\n /**\n * The width, in pixels, that determines whether to display the buttons in vertical or horizontal orientation\n *\n * @info\n * The component determines this based on the width of the element itself, not the browser window.\n */\n @Prop({ reflect: false })\n orientationThreshold: number = 440;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback(): void {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n }\n\n componentWillLoad() {\n this.filterSlottedElements();\n }\n\n componentDidLoad() {\n this.initMutationObserver();\n }\n\n componentDidRender() {\n this.handleSeparator();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('orientation')\n toggleHiddenForOneFrame() {\n const { container } = this;\n if (!container) return;\n container.style.display = 'none';\n // Fixes Safari not making the buttons fill the container when going from horizontal and full-width to vertical\n nextPaint(() =>\n nextPaint(() => {\n container.style.display = null;\n this.filterSlottedElements();\n })\n );\n }\n\n // #endregion\n // #region Local Methods\n\n get computedOrientation(): 'vertical' | 'horizontal' {\n let orientation = this.orientation;\n if (!orientation) orientation = 'auto';\n return orientation === 'auto' ? this.autoOrientation : orientation;\n }\n\n get shouldDisableResizeObserver(): boolean {\n let orientation = this.orientation;\n if (!orientation) orientation = 'auto';\n // these are not supported in a 'vertical' orientation, so we will disable resizing\n if (!this.hasBtnOnly(this.slottedElements)) return true;\n return orientation !== 'auto';\n }\n\n filterSlottedElements = () => {\n if (!('HTMLSlotElement' in window)) return;\n const { computedOrientation } = this;\n // get the elements of the hostElement\n const assignedElements = Array.from(this.hostElement.children);\n if (!assignedElements.length) return;\n\n // Remove all elements that are not approved Tecton components\n const approvedElements = ['Q2-BTN', 'Q2-LINK', 'Q2-DROPDOWN', 'Q2-TOOLTIP'];\n let flattened = this.flattenElements(assignedElements).filter(el => {\n // Handle Q2-TOOLTIP validation\n if (el.tagName === 'Q2-TOOLTIP') {\n if (el.children.length !== 1) {\n console.warn('Q2-ACTION-GROUP: Q2-TOOLTIP is only allowed a single child inside Q2-ACTION-GROUP.');\n el.remove();\n return false;\n }\n if (el.children[0] && !['Q2-BTN', 'Q2-LINK'].includes(el.children[0].tagName)) {\n console.warn(\n 'Q2-ACTION-GROUP: Q2-TOOLTIP is only allowed to have a Q2-BTN or a Q2-LINK inside Q2-ACTION-GROUP.'\n );\n el.remove();\n return false;\n }\n return true;\n }\n\n const allowed = approvedElements.includes(el.tagName);\n if (!allowed) el.remove();\n return allowed;\n });\n\n // Filter out non-coined buttons if coin exists\n if (this.hasCoin(flattened)) {\n flattened = flattened.filter(el => {\n let tagName = el.tagName;\n let intent = el.getAttribute('intent');\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n intent = el.children[0].getAttribute('intent');\n }\n if (tagName === 'Q2-BTN' && intent === 'coin') {\n return true;\n } else {\n el.remove();\n return false;\n }\n });\n }\n\n const incompatibleOrientation = computedOrientation === 'vertical' && !this.hasBtnOnly(flattened);\n if (incompatibleOrientation) {\n console.warn(\n 'Q2-ACTION-GROUP: \"Vertical\" orientation is supported only for Q2-BTN (not coin intent), otherwise orientation will be set to \"horizontal\".'\n );\n this.orientation = 'horizontal';\n }\n this.slottedElements = flattened;\n };\n\n flattenElements = (assignedElements: Element[]): HTMLElement[] => {\n const flattened = [];\n assignedElements.forEach(el => {\n if (el.tagName === 'SLOT') {\n const slotAssignedElements = (el as HTMLSlotElement).assignedElements({ flatten: true });\n slotAssignedElements.forEach(slotEl => {\n flattened.push(slotEl);\n });\n } else {\n flattened.push(el);\n }\n });\n return flattened;\n };\n\n handleFullWidth(fullWidth: boolean) {\n this.slottedElements.forEach(el => {\n const element = el.tagName === 'Q2-TOOLTIP' ? el.children[0] : el;\n if (['Q2-LINK', 'Q2-DROPDOWN'].includes(element.tagName)) {\n if (fullWidth) element.setAttribute('full-width', '');\n else element.removeAttribute('full-width');\n }\n });\n }\n\n handleResize = (\n event: Q2ResizeObserverCustomEvent<{\n entries: ResizeObserverEntry[];\n }>\n ) => {\n const width = event.detail.entries[0].contentRect.width;\n const shouldBeVertical = this.orientationThreshold > width;\n this.autoOrientation = shouldBeVertical ? 'vertical' : 'horizontal';\n };\n\n handleSeparator = () => {\n const list = this.slottedElements.filter(el => {\n let tagName = el.tagName;\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n }\n return ['Q2-LINK', 'Q2-DROPDOWN'].includes(tagName);\n });\n list.forEach((link, index) => {\n link.classList.remove('is-last-action');\n if (index === list.length - 1) link.classList.add('is-last-action');\n });\n };\n\n hasBtnOnly(elements: HTMLElement[]) {\n return elements.every(el => {\n let tagName = el.tagName;\n let intent = el.getAttribute('intent');\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n intent = el.children[0].getAttribute('intent');\n }\n return tagName === 'Q2-BTN' && intent !== 'coin';\n });\n }\n\n hasCoin(elements: HTMLElement[]) {\n return elements.find(el => {\n let tagName = el.tagName;\n let intent = el.getAttribute('intent');\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n intent = el.children[0].getAttribute('intent');\n }\n return tagName === 'Q2-BTN' && intent === 'coin';\n });\n }\n\n initMutationObserver = () => {\n if (!('MutationObserver' in window)) return;\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, subtree: true });\n this.mutationObserver = observer;\n };\n\n onMutationObserved = () => {\n this.filterSlottedElements();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { shouldDisableResizeObserver, computedOrientation, fullWidth, slottedElements } = this;\n const containerClassNames = ['container'];\n if (fullWidth && computedOrientation === 'horizontal') containerClassNames.push('full-width');\n containerClassNames.push(computedOrientation);\n slottedElements.forEach(el => {\n let tagName = el.tagName.toLowerCase();\n let intent = el.getAttribute('intent');\n if (tagName === 'q2-tooltip') {\n tagName = el.children[0].tagName.toLowerCase();\n intent = el.children[0].getAttribute('intent');\n if (!containerClassNames.includes('has-q2-tooltip')) containerClassNames.push('has-q2-tooltip');\n }\n const className = `has-${tagName}${tagName === 'q2-btn' && intent === 'coin' ? '-coin' : ''}`;\n if (!containerClassNames.includes(className)) containerClassNames.push(className);\n });\n this.handleFullWidth(!!fullWidth);\n\n return (\n <q2-resize-observer\n onTctResize={this.handleResize}\n disabled={shouldDisableResizeObserver}\n >\n <div\n ref={el => (this.container = el)}\n class={containerClassNames.join(' ')}\n role=\"group\"\n >\n <slot />\n </div>\n </q2-resize-observer>\n );\n }\n\n // #endregion\n}\n"],"version":3}
|
|
1
|
+
{"file":"q2-action-group2.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/q2-action-group/q2-action-group.scss?tag=q2-action-group&encapsulation=shadow","src/components/q2-action-group/q2-action-group.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n:host(:not([hidden])) {\n display: block;\n width: 100%;\n --comp-default-action-group-margin: #{var-list(--app-scale-5x, 25px)} 0;\n margin: var-list(--tct-action-group-margin, --comp-default-action-group-margin);\n}\n\n.container {\n --comp-default-action-group-gap: #{var-list(--tct-action-group-gap, --app-scale-2x, 10px)};\n --comp-link-gap: #{var-list(--tct-action-group-gap, --app-scale-4x, 20px)};\n --tct-btn-icon-height: 30px;\n width: 100%;\n display: flex;\n gap: var(--comp-default-action-group-gap);\n\n &.has-q2-link {\n gap: var(--comp-link-gap);\n }\n\n &.has-q2-btn-coin {\n column-gap: var-list(--tct-action-group-coin-column-gap, --app-scale-1x, 5px);\n row-gap: var-list(--tct-action-group-coin-row-gap, --app-scale-5x, 25px);\n }\n\n &.vertical {\n flex-direction: var-list(--tct-action-group-vertical-flex-direction, column);\n\n ::slotted(q2-btn) {\n display: block;\n width: 100%;\n }\n }\n\n &.horizontal {\n justify-content: var-list(--tct-action-group-horizontal-justify-content, flex-start);\n flex-direction: var-list(--tct-action-group-horizontal-flex-direction, row-reverse);\n align-items: var-list(--tct-action-group-horizontal-align-items, center);\n flex-wrap: var-list(--tct-action-group-horizontal-flex-wrap, wrap);\n\n &.full-width {\n --tct-action-group-horizontal-justify-content: space-around;\n flex-wrap: nowrap;\n }\n\n &.has-q2-btn-coin {\n justify-content: var(--tct-action-group-coin-horizontal-justify-content, center);\n flex-direction: var(--tct-action-group-horizontal-flex-direction, row);\n }\n\n ::slotted(:not(q2-btn)) {\n position: relative;\n }\n\n ::slotted(:not(q2-btn):not(.is-last-action))::before {\n content: '';\n display: inline-block;\n width: 0;\n height: var(--tct-action-group-separator-height, 20px);\n border-left: 1px solid #{var-list(--tct-action-group-separator-color, --t-gray-12, #d9d9d9)};\n position: absolute;\n left: calc(var(--comp-link-gap) * -0.5);\n top: 50%;\n transform: translateY(-50%);\n }\n }\n\n &.vertical,\n &.horizontal.full-width {\n ::slotted(q2-btn) {\n display: block;\n width: 100%;\n }\n }\n\n :host([full-width]:not([full-width=\"false\"])) & {\n justify-content: space-evenly;\n }\n}\n","import { Q2ResizeObserverCustomEvent } from '@/components';\nimport { nextPaint } from '@/utils';\nimport { Component, ComponentInterface, h, Element, Prop, State, Watch } from '@stencil/core';\n\n/**\n * @name Action Group\n * @category Display\n * @summary Use for laying out groups of buttons or links with consistent spacing.\n */\n@Component({\n tag: 'q2-action-group',\n styleUrl: 'q2-action-group.scss',\n shadow: true,\n})\nexport class Q2ActionGroup implements ComponentInterface {\n // #region Own Properties\n\n container: HTMLDivElement;\n mutationObserver: MutationObserver;\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 autoOrientation: 'vertical' | 'horizontal' = 'vertical';\n\n @State()\n slottedElements: HTMLElement[] = [];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Whether the slotted elements should take up the full width of the container when in horizontal orientation.\n *\n * @warning\n * This will prevent the buttons from wrapping when the container is too small to fit all buttons.\n */\n @Prop({ reflect: true })\n fullWidth: boolean;\n\n /**\n * The orientation of the buttons, which will override the auto orientation.\n *\n * @info\n * This will override and disable the auto determination of the orientation.\n * @warning\n * Vertical orientation is not supported for [Links](https://tecton.q2developer.com/design-system/q2-link/)\n * or `\"coin\"` [Buttons](https://tecton.q2developer.com/design-system/q2-btn/), and will be set to \"horizontal\".\n */\n @Prop({ reflect: true, mutable: true })\n orientation: 'auto' | 'vertical' | 'horizontal' = 'auto';\n\n /**\n * The width, in pixels, that determines whether to display the buttons in vertical or horizontal orientation\n *\n * @info\n * The component determines this based on the width of the element itself, not the browser window.\n */\n @Prop({ reflect: false })\n orientationThreshold: number = 440;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback(): void {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n }\n\n componentWillLoad() {\n this.filterSlottedElements();\n }\n\n componentDidLoad() {\n this.initMutationObserver();\n }\n\n componentDidRender() {\n this.handleSeparator();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('orientation')\n toggleHiddenForOneFrame() {\n const { container } = this;\n if (!container) return;\n container.style.display = 'none';\n // Fixes Safari not making the buttons fill the container when going from horizontal and full-width to vertical\n nextPaint(() =>\n nextPaint(() => {\n container.style.display = null;\n this.filterSlottedElements();\n })\n );\n }\n\n // #endregion\n // #region Local Methods\n\n get computedOrientation(): 'vertical' | 'horizontal' {\n let orientation = this.orientation;\n if (!orientation) orientation = 'auto';\n return orientation === 'auto' ? this.autoOrientation : orientation;\n }\n\n get shouldDisableResizeObserver(): boolean {\n let orientation = this.orientation;\n if (!orientation) orientation = 'auto';\n // these are not supported in a 'vertical' orientation, so we will disable resizing\n if (!this.hasBtnOnly(this.slottedElements)) return true;\n return orientation !== 'auto';\n }\n\n filterSlottedElements = () => {\n if (!('HTMLSlotElement' in window)) return;\n const { computedOrientation } = this;\n // get the elements of the hostElement\n const assignedElements = Array.from(this.hostElement.children);\n if (!assignedElements.length) return;\n\n // Remove all elements that are not approved Tecton components\n const approvedElements = ['Q2-BTN', 'Q2-LINK', 'Q2-DROPDOWN', 'Q2-TOOLTIP'];\n let flattened = this.flattenElements(assignedElements).filter(el => {\n // Handle Q2-TOOLTIP validation\n if (el.tagName === 'Q2-TOOLTIP') {\n if (el.children.length !== 1) {\n console.warn('Q2-ACTION-GROUP: Q2-TOOLTIP is only allowed a single child inside Q2-ACTION-GROUP.');\n el.remove();\n return false;\n }\n if (el.children[0] && !['Q2-BTN', 'Q2-LINK'].includes(el.children[0].tagName)) {\n console.warn(\n 'Q2-ACTION-GROUP: Q2-TOOLTIP is only allowed to have a Q2-BTN or a Q2-LINK inside Q2-ACTION-GROUP.'\n );\n el.remove();\n return false;\n }\n return true;\n }\n\n const allowed = approvedElements.includes(el.tagName);\n if (!allowed) el.remove();\n return allowed;\n });\n\n // Filter out non-coined buttons if coin exists\n if (this.hasCoin(flattened)) {\n flattened = flattened.filter(el => {\n let tagName = el.tagName;\n let intent = el.getAttribute('intent');\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n intent = el.children[0].getAttribute('intent');\n }\n if (tagName === 'Q2-BTN' && intent === 'coin') {\n return true;\n } else {\n el.remove();\n return false;\n }\n });\n }\n\n const incompatibleOrientation = computedOrientation === 'vertical' && !this.hasBtnOnly(flattened);\n if (incompatibleOrientation) {\n console.warn(\n 'Q2-ACTION-GROUP: \"Vertical\" orientation is supported only for Q2-BTN (not coin intent), otherwise orientation will be set to \"horizontal\".'\n );\n this.orientation = 'horizontal';\n }\n this.slottedElements = flattened;\n };\n\n flattenElements = (assignedElements: Element[]): HTMLElement[] => {\n const flattened = [];\n assignedElements.forEach(el => {\n if (el.tagName === 'SLOT') {\n const slotAssignedElements = (el as HTMLSlotElement).assignedElements({ flatten: true });\n slotAssignedElements.forEach(slotEl => {\n flattened.push(slotEl);\n });\n } else {\n flattened.push(el);\n }\n });\n return flattened;\n };\n\n handleFullWidth(fullWidth: boolean) {\n this.slottedElements.forEach(el => {\n const element = el.tagName === 'Q2-TOOLTIP' ? el.children[0] : el;\n if (['Q2-LINK', 'Q2-DROPDOWN'].includes(element.tagName)) {\n if (fullWidth) element.setAttribute('full-width', '');\n else element.removeAttribute('full-width');\n }\n });\n }\n\n handleResize = (\n event: Q2ResizeObserverCustomEvent<{\n entries: ResizeObserverEntry[];\n }>\n ) => {\n const width = event.detail.entries[0].contentRect.width;\n const shouldBeVertical = this.orientationThreshold > width;\n this.autoOrientation = shouldBeVertical ? 'vertical' : 'horizontal';\n };\n\n handleSeparator = () => {\n const list = this.slottedElements.filter(el => {\n let tagName = el.tagName;\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n }\n return ['Q2-LINK', 'Q2-DROPDOWN'].includes(tagName);\n });\n list.forEach((link, index) => {\n link.classList.remove('is-last-action');\n if (index === list.length - 1) link.classList.add('is-last-action');\n });\n };\n\n hasBtnOnly(elements: HTMLElement[]) {\n return elements.every(el => {\n let tagName = el.tagName;\n let intent = el.getAttribute('intent');\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n intent = el.children[0].getAttribute('intent');\n }\n return tagName === 'Q2-BTN' && intent !== 'coin';\n });\n }\n\n hasCoin(elements: HTMLElement[]) {\n return elements.find(el => {\n let tagName = el.tagName;\n let intent = el.getAttribute('intent');\n if (el.tagName === 'Q2-TOOLTIP') {\n tagName = el.children[0].tagName;\n intent = el.children[0].getAttribute('intent');\n }\n return tagName === 'Q2-BTN' && intent === 'coin';\n });\n }\n\n initMutationObserver = () => {\n if (!('MutationObserver' in window)) return;\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true, subtree: true });\n this.mutationObserver = observer;\n };\n\n onMutationObserved = () => {\n this.filterSlottedElements();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { shouldDisableResizeObserver, computedOrientation, fullWidth, slottedElements } = this;\n const containerClassNames = ['container'];\n if (fullWidth && computedOrientation === 'horizontal') containerClassNames.push('full-width');\n containerClassNames.push(computedOrientation);\n slottedElements.forEach(el => {\n let tagName = el.tagName.toLowerCase();\n let intent = el.getAttribute('intent');\n if (tagName === 'q2-tooltip') {\n tagName = el.children[0].tagName.toLowerCase();\n intent = el.children[0].getAttribute('intent');\n if (!containerClassNames.includes('has-q2-tooltip')) containerClassNames.push('has-q2-tooltip');\n }\n const className = `has-${tagName}${tagName === 'q2-btn' && intent === 'coin' ? '-coin' : ''}`;\n if (!containerClassNames.includes(className)) containerClassNames.push(className);\n });\n this.handleFullWidth(!!fullWidth);\n\n return (\n <q2-resize-observer\n onTctResize={this.handleResize}\n disabled={shouldDisableResizeObserver}\n >\n <div\n ref={el => (this.container = el)}\n class={containerClassNames.join(' ')}\n role=\"group\"\n >\n <slot />\n </div>\n </q2-resize-observer>\n );\n }\n\n // #endregion\n}\n"],"version":3}
|
|
@@ -28,6 +28,23 @@ const Q2ActionSheet$1 = /*@__PURE__*/ proxyCustomElement(class Q2ActionSheet ext
|
|
|
28
28
|
// #region State Properties
|
|
29
29
|
this.isScrollable = false;
|
|
30
30
|
this.renderStatus = 'is-closing';
|
|
31
|
+
/**
|
|
32
|
+
* Focuses the last visible (non-hidden, non-disabled) option in the option list.
|
|
33
|
+
* Uses the async getOptions() method, but is invoked after preventDefault() has
|
|
34
|
+
* already been called synchronously by the caller.
|
|
35
|
+
*/
|
|
36
|
+
this.focusLastVisibleOption = async () => {
|
|
37
|
+
if (!this.optionListElement)
|
|
38
|
+
return;
|
|
39
|
+
const allOptions = await this.optionListElement.getOptions();
|
|
40
|
+
const lastVisibleOption = allOptions
|
|
41
|
+
.slice()
|
|
42
|
+
.reverse()
|
|
43
|
+
.find(opt => !opt.hidden && !opt.disabled);
|
|
44
|
+
if (lastVisibleOption) {
|
|
45
|
+
lastVisibleOption.focus();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
31
48
|
this.generateOptgroup = (option) => {
|
|
32
49
|
const optgroupElement = document.createElement('q2-optgroup');
|
|
33
50
|
if (option.label)
|
|
@@ -56,6 +73,91 @@ const Q2ActionSheet$1 = /*@__PURE__*/ proxyCustomElement(class Q2ActionSheet ext
|
|
|
56
73
|
});
|
|
57
74
|
return optionElement;
|
|
58
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Handles keyboard navigation within the action sheet dialog.
|
|
78
|
+
* Manages Tab navigation between options and action buttons (close/done).
|
|
79
|
+
* Allows Tab to exit to browser chrome when reaching boundaries.
|
|
80
|
+
*
|
|
81
|
+
* NOTE: This handler is intentionally synchronous. `event.preventDefault()`
|
|
82
|
+
* must be called before the browser processes the Tab key (i.e., during the
|
|
83
|
+
* synchronous portion of the keydown event). Introducing an `await` here
|
|
84
|
+
* allows the browser to shift focus before preventDefault runs, which causes
|
|
85
|
+
* Tab from the close button to escape the dialog instead of cycling back to
|
|
86
|
+
* the options.
|
|
87
|
+
* @param event - The keyboard event.
|
|
88
|
+
*/
|
|
89
|
+
this.handleDialogKeydown = (event) => {
|
|
90
|
+
const { data } = this;
|
|
91
|
+
// Only activate for list appearance with an option list
|
|
92
|
+
if (!data || data.appearance !== 'list' || !this.optionListElement)
|
|
93
|
+
return;
|
|
94
|
+
const { key, shiftKey } = event;
|
|
95
|
+
if (key !== 'Tab')
|
|
96
|
+
return;
|
|
97
|
+
const shadowActiveElement = this.hostElement.shadowRoot.activeElement;
|
|
98
|
+
const closeButton = this.closeButtonElement;
|
|
99
|
+
const doneButton = this.doneButtonElement;
|
|
100
|
+
const isInCloseButton = shadowActiveElement === closeButton;
|
|
101
|
+
const isInDoneButton = shadowActiveElement === doneButton;
|
|
102
|
+
// q2-option lives in light DOM, so document.activeElement is the option element itself when focused.
|
|
103
|
+
// Avoid `await optionListElement.getOptions()` here — that defers the handler past
|
|
104
|
+
// the browser's default Tab handling, making preventDefault() ineffective.
|
|
105
|
+
const activeElement = document.activeElement;
|
|
106
|
+
const isOnOption = !!activeElement &&
|
|
107
|
+
(activeElement.tagName === 'Q2-OPTION' || activeElement.tagName === 'Q2-DROPDOWN-ITEM') &&
|
|
108
|
+
this.hostElement.contains(activeElement);
|
|
109
|
+
if (shiftKey) {
|
|
110
|
+
// Shift+Tab: if on close button
|
|
111
|
+
if (isInCloseButton) {
|
|
112
|
+
// With a done button (multi-select): allow default to exit to browser.
|
|
113
|
+
// Browser Shift+Tab from the URL bar lands on the done button (last
|
|
114
|
+
// tabbable in DOM order), which redirects to the last option via
|
|
115
|
+
// focusLastVisibleOption — so choices remain reachable.
|
|
116
|
+
if (doneButton) {
|
|
117
|
+
// Let it bubble - exits to browser chrome
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Without a done button (single-select): redirect to the last visible
|
|
121
|
+
// option. Otherwise focus would exit to the URL bar and the next
|
|
122
|
+
// Shift+Tab back into the page would land on the close button (the
|
|
123
|
+
// only tabbable in the modal), trapping the user in URL ↔ close
|
|
124
|
+
// with no path back to choices.
|
|
125
|
+
event.preventDefault();
|
|
126
|
+
this.focusLastVisibleOption();
|
|
127
|
+
}
|
|
128
|
+
// Shift+Tab: if on done button, focus last option
|
|
129
|
+
else if (isInDoneButton) {
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
this.focusLastVisibleOption();
|
|
132
|
+
}
|
|
133
|
+
// Shift+Tab: if on any option, go to close button
|
|
134
|
+
else if (isOnOption && closeButton) {
|
|
135
|
+
event.preventDefault();
|
|
136
|
+
closeButton.focus();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Forward Tab: if on close button, skip to first/selected option
|
|
141
|
+
if (isInCloseButton) {
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
this.optionListElement.focus();
|
|
144
|
+
}
|
|
145
|
+
// Forward Tab: if on done button, allow default to exit to browser
|
|
146
|
+
else if (isInDoneButton) {
|
|
147
|
+
// Let it bubble - exits to browser chrome
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Forward Tab: if on any option
|
|
151
|
+
else if (isOnOption) {
|
|
152
|
+
if (doneButton) {
|
|
153
|
+
// With done button: go to done button
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
doneButton.focus();
|
|
156
|
+
}
|
|
157
|
+
// else: No done button - allow default Tab behavior to exit to browser
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
59
161
|
this.onCancel = (event) => {
|
|
60
162
|
var _a, _b;
|
|
61
163
|
event.preventDefault();
|
|
@@ -100,7 +202,7 @@ const Q2ActionSheet$1 = /*@__PURE__*/ proxyCustomElement(class Q2ActionSheet ext
|
|
|
100
202
|
const { listProps, slotsHtml = [] } = data;
|
|
101
203
|
return (h(Fragment, null, slotsHtml
|
|
102
204
|
.filter(entry => entry.slot === 'top')
|
|
103
|
-
.map(entry => (h("div", { innerHTML: sanitizeActionSheetSlotHtml(entry.html) }))), h("div", { class: "content", ref: el => (this.contentElement = el) }, h("q2-option-list", { ref: el => (this.optionListElement = el), multiple: listProps.multiple, noSelect: listProps.noSelect, onChange: this.onListChange, onPopoverState: this.onListPopoverStateChange, selectedOptions: listProps.selectedOptions }, h("slot", null))), h("footer", null, listProps.multiple && (h("q2-btn", { "test-id": "btnDone", intent: "workflow-primary", onClick: this.onListDone }, loc('tecton.element.actionSheet.done')))), slotsHtml
|
|
205
|
+
.map(entry => (h("div", { innerHTML: sanitizeActionSheetSlotHtml(entry.html) }))), h("div", { class: "content", ref: el => (this.contentElement = el) }, h("q2-option-list", { ref: el => (this.optionListElement = el), multiple: listProps.multiple, noSelect: listProps.noSelect, onChange: this.onListChange, onPopoverState: this.onListPopoverStateChange, selectedOptions: listProps.selectedOptions }, h("slot", null))), h("footer", null, listProps.multiple && (h("q2-btn", { ref: el => (this.doneButtonElement = el), "test-id": "btnDone", intent: "workflow-primary", onClick: this.onListDone }, loc('tecton.element.actionSheet.done')))), slotsHtml
|
|
104
206
|
.filter(entry => entry.slot === 'bottom')
|
|
105
207
|
.map(entry => (h("div", { innerHTML: sanitizeActionSheetSlotHtml(entry.html) })))));
|
|
106
208
|
};
|
|
@@ -115,9 +217,12 @@ const Q2ActionSheet$1 = /*@__PURE__*/ proxyCustomElement(class Q2ActionSheet ext
|
|
|
115
217
|
// #region Component Lifecycle Events
|
|
116
218
|
disconnectedCallback() {
|
|
117
219
|
this.dialogElement.removeEventListener('cancel', this.onCancel);
|
|
220
|
+
this.dialogElement.removeEventListener('keydown', this.handleDialogKeydown, true);
|
|
118
221
|
}
|
|
119
222
|
componentDidLoad() {
|
|
120
223
|
this.dialogElement.addEventListener('cancel', this.onCancel);
|
|
224
|
+
// Use capture phase to intercept Tab before option-list handles it
|
|
225
|
+
this.dialogElement.addEventListener('keydown', this.handleDialogKeydown, true);
|
|
121
226
|
this.ready.emit();
|
|
122
227
|
}
|
|
123
228
|
// #endregion
|
|
@@ -219,7 +324,7 @@ const Q2ActionSheet$1 = /*@__PURE__*/ proxyCustomElement(class Q2ActionSheet ext
|
|
|
219
324
|
}
|
|
220
325
|
const appearance = (data === null || data === void 0 ? void 0 : data.appearance) || 'slot';
|
|
221
326
|
const interiorClasses = `interior is-${appearance}`;
|
|
222
|
-
return (h("dialog", { key: '
|
|
327
|
+
return (h("dialog", { key: '4a0e3a165326ab9e724600d7e030fa39095dcda0', ref: el => (this.dialogElement = el), class: renderStatus, onClick: this.onClick }, h("div", { key: '9848ffb2d692a788ad1cf1d606f3cfd8638501ae', class: interiorClasses }, showHeader && (h("header", { key: '2a573e272202699a8bf225ae74263aea107f4e5d' }, h("div", { key: '6ea6f8b415ecba0414d337efc1ce4cfdb0ec0cc9', class: "title" }, (data === null || data === void 0 ? void 0 : data.title) || this.title), !this.hideClose && (h("q2-btn", { key: '8f5efe5b235afadcaba63cd9ab0906c01cbb07a0', ref: el => (this.closeButtonElement = el), class: "btn-close", "test-id": "btnClose", onClick: this.onCancel, label: "tecton.element.actionSheet.close", "hide-label": true }, h("q2-icon", { key: 'af64434f4d0ec15d183a91501e48cc550fc2532e', type: "close" }))))), ((_a = this.data) === null || _a === void 0 ? void 0 : _a.description) && h("p", { key: 'a2044acff20cfc72cbde4d0899d34e51ac390984' }, data.description), RenderContent && h(RenderContent, { key: '558338b884c43bc014cc577581646fe830b7bc77', data: this.data }))));
|
|
223
328
|
}
|
|
224
329
|
get hostElement() { return this; }
|
|
225
330
|
static get style() { return q2ActionSheetCss; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"q2-action-sheet.js","mappings":"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","names":["Q2ActionSheet","__stencil_proxyCustomElement"],"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"],"version":3}
|
|
1
|
+
{"file":"q2-action-sheet.js","mappings":"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","names":["Q2ActionSheet","__stencil_proxyCustomElement"],"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"],"version":3}
|