q2-tecton-elements 1.55.4 → 1.55.6
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 +421 -363
- package/dist/cjs/{index-e0aba375.js → index-f69742cf.js} +1 -1
- package/dist/cjs/{index-e0aba375.js.map → index-f69742cf.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
- package/dist/cjs/q2-badge_7.cjs.entry.js +11 -3
- package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
- package/dist/cjs/q2-carousel.cjs.entry.js +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 +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/q2-currency.cjs.entry.js +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
- package/dist/cjs/q2-detail.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +32 -31
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +6 -7
- package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-example.cjs.entry.js +1 -1
- package/dist/cjs/q2-form.cjs.entry.js +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
- package/dist/cjs/q2-item_3.cjs.entry.js +2 -2
- package/dist/cjs/q2-legend.cjs.entry.js +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +1 -1
- package/dist/cjs/q2-modal.cjs.entry.js +1 -1
- package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
- package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
- package/dist/cjs/q2-option-list_2.cjs.entry.js +64 -61
- package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +3 -3
- package/dist/cjs/q2-pill.cjs.entry.js +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +1 -1
- package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
- package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-section.cjs.entry.js +2 -2
- package/dist/cjs/q2-select.cjs.entry.js +80 -10
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
- package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
- package/dist/cjs/q2-tag.cjs.entry.js +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +2 -1
- package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/collection-manifest.json +6 -6
- package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
- package/dist/collection/components/q2-btn/q2-btn.js +4 -0
- package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js +1 -1
- package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel/q2-carousel.js +1 -1
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.js +1 -1
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js +1 -1
- package/dist/collection/components/q2-data-table/q2-data-table.js +8 -8
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +33 -31
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +34 -32
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-editable-field/q2-editable-field.js +12 -7
- package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.js +5 -5
- package/dist/collection/components/q2-form/q2-form.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-icon/q2-icon.js +4 -0
- package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input.js +2 -2
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js +1 -1
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-modal/q2-modal.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js +7 -7
- package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-pill/q2-pill.js +1 -1
- package/dist/collection/components/q2-popover/q2-popover.css +18 -10
- package/dist/collection/components/q2-popover/q2-popover.js +64 -60
- package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
- package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -34
- package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +743 -435
- package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
- package/dist/collection/components/q2-radio/q2-radio.js +1 -1
- package/dist/collection/components/q2-radio-group/q2-radio-group.js +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-select/q2-select.js +96 -14
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js +327 -0
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +3 -3
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +5 -0
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-textarea/q2-textarea.js +2 -1
- package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/components/q2-action-group2.js +1 -1
- package/dist/components/q2-action-sheet.js +1 -1
- package/dist/components/q2-avatar2.js +1 -1
- package/dist/components/q2-btn2.js +4 -0
- package/dist/components/q2-btn2.js.map +1 -1
- package/dist/components/q2-calendar.js +1 -1
- package/dist/components/q2-carousel-pane.js +2 -2
- package/dist/components/q2-carousel.js +1 -1
- package/dist/components/q2-chart-area.js +1 -1
- package/dist/components/q2-chart-bar.js +1 -1
- package/dist/components/q2-chart-donut.js +1 -1
- package/dist/components/q2-checkbox-group.js +1 -1
- package/dist/components/q2-checkbox2.js +1 -1
- package/dist/components/q2-currency.js +1 -1
- package/dist/components/q2-data-table.js +1 -1
- package/dist/components/q2-detail.js +1 -1
- package/dist/components/q2-dropdown.js +32 -31
- package/dist/components/q2-dropdown.js.map +1 -1
- package/dist/components/q2-editable-field.js +7 -8
- package/dist/components/q2-editable-field.js.map +1 -1
- package/dist/components/q2-example.js +1 -1
- package/dist/components/q2-form.js +1 -1
- package/dist/components/q2-formatted-text.js +1 -1
- package/dist/components/q2-icon2.js +4 -0
- package/dist/components/q2-icon2.js.map +1 -1
- package/dist/components/q2-input2.js +1 -1
- package/dist/components/q2-item2.js +1 -1
- package/dist/components/q2-legend2.js +1 -1
- package/dist/components/q2-list2.js +1 -1
- package/dist/components/q2-message2.js +1 -1
- package/dist/components/q2-modal.js +1 -1
- package/dist/components/q2-month-picker.js +2 -2
- package/dist/components/q2-optgroup2.js +1 -1
- package/dist/components/q2-option-list2.js +1 -1
- package/dist/components/q2-pagination.js +3 -3
- package/dist/components/q2-pill.js +1 -1
- package/dist/components/q2-popover2.js +63 -60
- package/dist/components/q2-popover2.js.map +1 -1
- package/dist/components/q2-radio-group.js +1 -1
- package/dist/components/q2-radio.js +1 -1
- package/dist/components/q2-relative-time.js +1 -1
- package/dist/components/q2-resize-observer2.js +1 -1
- package/dist/components/q2-section.js +2 -2
- package/dist/components/q2-select2.js +84 -14
- 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.js +1 -1
- package/dist/components/q2-tab-container.js +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tag.js +1 -1
- package/dist/components/q2-textarea.js +2 -1
- package/dist/components/q2-textarea.js.map +1 -1
- package/dist/components/tecton-tab-pane.js +2 -2
- package/dist/esm/{index-3bb7a785.js → index-3184c760.js} +1 -1
- package/dist/esm/{index-3bb7a785.js.map → index-3184c760.js.map} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group.entry.js +1 -1
- package/dist/esm/q2-action-sheet.entry.js +1 -1
- package/dist/esm/q2-avatar.entry.js +1 -1
- package/dist/esm/q2-badge_7.entry.js +11 -3
- package/dist/esm/q2-badge_7.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +2 -2
- package/dist/esm/q2-carousel-pane.entry.js +2 -2
- package/dist/esm/q2-carousel.entry.js +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 +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +1 -1
- package/dist/esm/q2-checkbox.entry.js +1 -1
- package/dist/esm/q2-currency.entry.js +1 -1
- package/dist/esm/q2-data-table.entry.js +1 -1
- package/dist/esm/q2-detail.entry.js +1 -1
- package/dist/esm/q2-dropdown.entry.js +32 -31
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +6 -7
- package/dist/esm/q2-editable-field.entry.js.map +1 -1
- package/dist/esm/q2-example.entry.js +1 -1
- package/dist/esm/q2-form.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-item_3.entry.js +2 -2
- package/dist/esm/q2-legend.entry.js +1 -1
- package/dist/esm/q2-message.entry.js +1 -1
- package/dist/esm/q2-modal.entry.js +1 -1
- package/dist/esm/q2-month-picker.entry.js +2 -2
- package/dist/esm/q2-optgroup.entry.js +1 -1
- package/dist/esm/q2-option-list_2.entry.js +64 -61
- package/dist/esm/q2-option-list_2.entry.js.map +1 -1
- package/dist/esm/q2-pagination.entry.js +3 -3
- package/dist/esm/q2-pill.entry.js +1 -1
- package/dist/esm/q2-radio-group.entry.js +1 -1
- package/dist/esm/q2-radio.entry.js +1 -1
- package/dist/esm/q2-relative-time.entry.js +2 -2
- package/dist/esm/q2-resize-observer.entry.js +1 -1
- package/dist/esm/q2-section.entry.js +2 -2
- package/dist/esm/q2-select.entry.js +82 -12
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +1 -1
- package/dist/esm/q2-stepper.entry.js +1 -1
- package/dist/esm/q2-tag.entry.js +1 -1
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +2 -1
- package/dist/esm/q2-textarea.entry.js.map +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/{index-3bb7a785.js → index-3184c760.js} +1 -1
- package/dist/q2-tecton-elements/q2-action-group.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +62 -62
- package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +24 -16
- package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +13 -13
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-currency.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-data-table.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-detail.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +34 -32
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +26 -17
- 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-form.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-item_3.entry.js +18 -18
- package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-message.entry.js +20 -20
- package/dist/q2-tecton-elements/q2-modal.entry.js +17 -17
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +30 -30
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js +138 -127
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-pagination.entry.js +24 -24
- package/dist/q2-tecton-elements/q2-pill.entry.js +13 -13
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +33 -33
- package/dist/q2-tecton-elements/q2-radio.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +11 -11
- package/dist/q2-tecton-elements/q2-select.entry.js +146 -88
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +11 -11
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +28 -28
- package/dist/q2-tecton-elements/q2-stepper.entry.js +12 -12
- package/dist/q2-tecton-elements/q2-tag.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -2
- package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +9 -9
- package/dist/types/components/q2-action-group/q2-action-group.d.ts +1 -0
- package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +60 -0
- package/dist/types/components/q2-btn/q2-btn.d.ts +1 -0
- package/dist/types/components/q2-calendar/q2-calendar.d.ts +327 -0
- package/dist/types/components/q2-carousel/q2-carousel.d.ts +95 -0
- package/dist/types/components/q2-data-table/q2-data-table.d.ts +261 -0
- package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +180 -0
- package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +141 -0
- package/dist/types/components/q2-icon/q2-icon.d.ts +1 -0
- package/dist/types/components/q2-loading/skeleton/shapes.d.ts +1 -0
- package/dist/types/components/q2-optgroup/q2-optgroup.d.ts +1 -1
- package/dist/types/components/q2-option-list/q2-option-list.d.ts +100 -0
- package/dist/types/components/q2-pagination/q2-pagination.d.ts +117 -0
- package/dist/types/components/q2-pill/q2-pill.d.ts +143 -0
- package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
- package/dist/types/components/q2-select/q2-select.d.ts +256 -0
- package/dist/types/components/q2-stepper/q2-stepper.d.ts +61 -0
- package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +68 -0
- package/dist/types/components/q2-tab-container/q2-tab-container.d.ts +2 -2
- package/dist/types/components/q2-tag/q2-tag.d.ts +91 -0
- package/dist/types/utils/action-sheet.d.ts +12 -0
- package/package.json +4 -3
- /package/dist/q2-tecton-elements/{index-3bb7a785.js.map → index-3184c760.js.map} +0 -0
- /package/dist/types/{Users/kvanhouten/Documents/Work/tecton_extra → builds/q2e/development/tecton/tecton}/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionListStyle0","Q2OptionList","this","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","clickHandler","event","target","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","stopPropagation","activeIndex","customSearch","allOptions","key","nextIndex","searchString","searchOptions","type","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","selectedOptions","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","includes","isInLightDom","hostElement","contains","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","addEventListener","once","firstVisibleOption","isFirstVisibleOptionActive","undefined","adjustActiveOptionAndScroll","lastVisibleOption","isLastVisibleOptionActive","searchAndFocus","keyValue","shouldSelect","reorder","pivotIndex","list","map","index","slice","buildQueue","now","getTime","push","searchIndex","keyStr","join","sanitizedKeyStr","v","display","RegExp","setFocus","matched","loc","componentWillLoad","hasOptions","querySelectorAll","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","forEach","fn","handleClick","delegateFocus","isEventFromElement","setActiveOption","setFocusedOption","getContents","allContents","getOptions","handleExternalKeydown","updateMultipleOptionAttrs","updateSingleOptionAttrs","showSelectedUpdated","showSelected","_multiSelectHidden","selected","rootSlot","getRootSlot","acceptedTags","Set","filter","has","tagName","contents","extractOptions","elements","reduce","acc","separator","Array","from","children","hidden","disabledGroup","numToAdd","scrollToActiveOption","optionRole","role","focusSelectedSibling","hasNoSiblings","selectedOptionVisibleIndex","indexOf","nextVisibleSiblingIndex","nextVisibleSibling","nextSiblingIndex","firstSelected","findIndex","firstEnabled","direction","activeOption","visibleActiveOptionIndex","nextVisibleOptionIndex","nextVisibleOption","slot","querySelector","assignedElements","_a","hasAnotherSlot","waitForNextPaint","resetTimer","searchStringTimer","clearTimeout","window","setTimeout","scrollIntoView","block","selectedOption","selectedValue","value","displayValue","innerText","trim","valueObject","values","isAlreadySelected","change","elementIndex","isOptionVisible","isVisible","focus","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","label","onKeyDown","onClick","q2PopoverCss","Q2PopoverStyle0","Q2Popover","displayBuffer","orientationChanged","handleMinHeight","minHeight","handleDeprecationWarning","setAbsoluteCSSProperties","async","controlElement","containerElement","currentDirection","align","style","setProperty","controlStyle","getComputedStyle","controlSize","parseInt","height","borderTopWidth","borderBottomWidth","setFixedCSSProperties","rootElementRect","top","controlTop","bottom","controlBottom","left","controlLeft","right","controlRight","_b","getBoundingClientRect","call","popoverLeft","offsetWidth","width","viewPortChanged","determinePopDirection","viewPortOrientationChanged","disconnectedCallback","removeViewportListeners","popoverStateHandler","detail","scrollContainerTo","options","scrollTo","toggle","minHeightProvided","openChanged","setRootElement","popoverStateChanged","addViewportListeners","show","clearCSSProperties","isModule","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","providedDirection","validatedMaxHeight","maxHeight","isNaN","passive","capture","screen","orientation","removeProperty","windowHeight","maxSpaceAbove","maxSpaceBelow","outletOffset","innerHeight","_c","distanceToIframeBottom","visualViewport","viewableSpaceBelow","isIframeShorterThanWindow","directionWithMostSpace","shouldUpdateMaxHeight","getPropertyValue","currentOrDetermineDirection","priorityMaxHeight","setDirectionAndShow","removeEventListener","isOpen","mode","currentElement","document","documentElement","computedStyle","transform","perspective","containerType","willChange","contain","rootNode","getRootNode","isRootNodeWebComponent","ShadowRoot","host","HTMLElement","parentElement","containerClasses","tabIndex"],"sources":["src/utils/sanitize-regex-string.ts","src/components/q2-option-list/q2-option-list.scss?tag=q2-option-list&encapsulation=shadow","src/components/q2-option-list/q2-option-list.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["export default function sanitizeRegexString(regexString: string) {\n return regexString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n position: relative;\n width: 100%;\n display: block;\n line-height: var-list(var-prefixer(option-list-line-height),--app-line-height, 1.428571429em);\n}\n\n.content {\n text-align: start;\n\n :host([is-sizeable]) & {\n display: block;\n height: auto;\n }\n}\n","import sanitizeRegexString from '@/utils/sanitize-regex-string';\nimport {\n Component,\n Prop,\n h,\n Event,\n State,\n Element,\n ComponentInterface,\n Host,\n EventEmitter,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\nimport { isEventFromElement, isVisible, loc, nextPaint, overrideFocus, waitForNextPaint } from 'src/utils';\n\nexport interface IOptionValue {\n value: string;\n display?: string;\n}\n\nexport type ValidOptionElements = HTMLQ2OptionElement | HTMLQ2DropdownItemElement;\n\n@Component({ tag: 'q2-option-list', shadow: true, styleUrl: 'q2-option-list.scss' })\nexport class Q2OptionList implements ComponentInterface {\n // #region Own Properties\n\n activeIndex: number;\n contentElement: HTMLElement;\n keyStore: {\n queue: string[];\n lastPressedAt: Date;\n } = {\n queue: [],\n lastPressedAt: new Date(),\n };\n pivotIndex: number;\n scheduledAfterRender: (() => void)[] = [];\n searchString: string;\n searchStringTimer: number;\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 hasOptions: boolean;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates a custom search is being implemented for the option list. */\n @Prop({ reflect: true })\n customSearch: boolean;\n\n /** Disables the option list. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n label: string = loc('tecton.element.optionList.label');\n\n /**\n * Enables the multi-select ability for the option list.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /** Disables the logic that handles selecting and focusing an option in the option list. */\n @Prop({ reflect: true })\n noSelect: boolean;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: IOptionValue[] = [];\n\n /** Applies focus to the selected option. */\n @Prop({ reflect: true, mutable: true })\n showSelected: boolean;\n\n /** Translates to the role of the option list */\n @Prop()\n type: 'menu' | 'listbox' = 'listbox';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n */\n @Event()\n change: EventEmitter<{ value: string; values: IOptionValue[] }>;\n\n /**\n * Emitted to indicate the intended state of the popover.\n * @private\n */\n @Event()\n popoverState: EventEmitter<{ open: boolean; action: 'close' | 'select' | 'open' }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.hasOptions = !!this.hostElement.querySelectorAll(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n ).length;\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.checkOptions();\n this.selectedOptionsUpdated();\n this.ready.emit();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.popoverState.emit({ open: true, action: 'open' });\n const { activeIndex } = this;\n if (typeof activeIndex === 'number' && activeIndex > -1) {\n this.setActiveOption();\n this.setFocusedOption();\n } else {\n this.setDefaultActiveElement();\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async getContents(): Promise<(HTMLQ2OptgroupElement | ValidOptionElements)[]> {\n return this.allContents;\n }\n\n @Method()\n async getOptions(): Promise<ValidOptionElements[]> {\n return this.allOptions;\n }\n\n @Method()\n async handleExternalKeydown(event: KeyboardEvent) {\n this.externalKeydownHandler(event);\n }\n\n @Method()\n async setActiveElement(index: number) {\n this.activeIndex = index;\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n @Method()\n async setDefaultActiveElement() {\n this.activeIndex = this.getDefaultActiveIndex();\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsUpdated() {\n if (this.multiple) {\n this.updateMultipleOptionAttrs();\n } else {\n this.updateSingleOptionAttrs();\n }\n }\n\n @Watch('showSelected')\n showSelectedUpdated(showSelected: boolean) {\n if (showSelected && this.selectedOptions.length === 0) {\n this.showSelected = false;\n return;\n }\n this.allOptions.forEach(option => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = showSelected ? !option.selected : false;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get allContents(): (HTMLQ2OptgroupElement | ValidOptionElements)[] {\n const rootSlot = this.getRootSlot(this.hostElement);\n const acceptedTags = new Set(['Q2-OPTGROUP', 'Q2-OPTION', 'Q2-DROPDOWN-ITEM']);\n return rootSlot.filter(element => acceptedTags.has(element.tagName)) as (\n | HTMLQ2OptgroupElement\n | ValidOptionElements\n )[];\n }\n\n get allOptions(): ValidOptionElements[] {\n const contents = this.allContents;\n\n const extractOptions = (\n elements: (HTMLQ2OptgroupElement | ValidOptionElements | Element)[]\n ): ValidOptionElements[] => {\n return elements.reduce((acc, element) => {\n if (element.tagName === 'Q2-OPTION' || element.tagName === 'Q2-DROPDOWN-ITEM') {\n return (element as ValidOptionElements).separator ? acc : [...acc, element];\n } else if (element.tagName === 'Q2-OPTGROUP') {\n return [...acc, ...extractOptions(Array.from(element.children))];\n } else {\n return acc;\n }\n }, []);\n };\n\n return extractOptions(contents);\n }\n\n get allVisibleOptions(): ValidOptionElements[] {\n return this.allOptions.filter(\n option =>\n !option.hidden &&\n (!('_multiSelectHidden' in option) || !option._multiSelectHidden) &&\n !option.disabled &&\n (!('disabledGroup' in option) || !option.disabledGroup)\n );\n }\n\n adjustActiveOptionAndScroll(numToAdd: number) {\n this.activeIndex += numToAdd;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n checkOptions() {\n const { type } = this;\n if (!type) return;\n const optionRole = type === 'menu' ? 'menuitem' : 'option';\n this.allOptions.forEach(option => {\n option.role = optionRole;\n });\n }\n\n clickHandler = (event: Event) => {\n const target = event.target as ValidOptionElements;\n const option = target.closest<ValidOptionElements>(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n );\n this.selectOption(option);\n if (this.multiple) return;\n this.popoverState.emit({ open: false, action: 'select' });\n };\n\n /* tslint:disable:cyclomatic-complexity */\n externalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n const { key } = event;\n\n let nextIndex;\n switch (key) {\n case ' ':\n if (this.searchString) {\n if (customSearch) break;\n\n this.searchOptions(key, true);\n break;\n } else if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'Enter':\n if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max((activeIndex || 0) - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min((activeIndex || 0) + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, true);\n break;\n }\n };\n\n /* tslint:enable:cyclomatic-complexity */\n\n focusoutHandler = (event: FocusEvent) => {\n const { relatedTarget } = event as unknown as { relatedTarget: ValidOptionElements };\n const isInQ2OptionList = this.allOptions.includes(relatedTarget);\n const isInLightDom = !isInQ2OptionList && this.hostElement.contains(relatedTarget);\n if (isInQ2OptionList || isInLightDom) {\n event.stopPropagation();\n }\n };\n\n focusSelectedSibling(option: ValidOptionElements) {\n const { allVisibleOptions, allOptions } = this;\n const hasNoSiblings = allVisibleOptions.length < 2;\n if (hasNoSiblings) {\n this.showSelected = false;\n return;\n }\n\n const selectedOptionVisibleIndex = allVisibleOptions.indexOf(option);\n const nextVisibleSiblingIndex = selectedOptionVisibleIndex\n ? selectedOptionVisibleIndex - 1\n : selectedOptionVisibleIndex + 1;\n const nextVisibleSibling = allVisibleOptions[nextVisibleSiblingIndex];\n const nextSiblingIndex = allOptions.indexOf(nextVisibleSibling);\n\n this.activeIndex = nextSiblingIndex;\n this.setFocusedOption();\n this.scheduledAfterRender.push(() => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = !option.selected;\n });\n }\n\n getDefaultActiveIndex() {\n const { allOptions } = this;\n const firstSelected = allOptions.findIndex(element => {\n return 'selected' in element && element.selected;\n });\n if (firstSelected > -1) return firstSelected;\n\n const firstEnabled = allOptions.findIndex(element => !element.hidden);\n if (firstEnabled > -1) return firstEnabled;\n\n return 0;\n }\n\n getNextVisibleIndex(direction) {\n const { allVisibleOptions, allOptions, activeIndex } = this;\n const activeOption = allOptions[activeIndex];\n const visibleActiveOptionIndex = allVisibleOptions.indexOf(activeOption);\n let nextVisibleOptionIndex = visibleActiveOptionIndex + direction;\n\n if (nextVisibleOptionIndex < 0) {\n nextVisibleOptionIndex = allVisibleOptions.length - 1;\n } else if (nextVisibleOptionIndex > allVisibleOptions.length - 1) {\n nextVisibleOptionIndex = 0;\n }\n\n const nextVisibleOption = allVisibleOptions[nextVisibleOptionIndex];\n return allOptions.indexOf(nextVisibleOption);\n }\n\n getRootSlot(element: Element): Element[] {\n const slot = element.querySelector('slot');\n const assignedElements = slot?.assignedElements() ?? Array.from(element.children);\n const hasAnotherSlot = !!assignedElements.length && assignedElements[0].tagName === 'SLOT';\n if (hasAnotherSlot) {\n return this.getRootSlot(assignedElements[0]);\n } else {\n return assignedElements;\n }\n }\n\n internalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions, allVisibleOptions, multiple } = this;\n const { key, shiftKey } = event;\n\n let newOption: ValidOptionElements;\n switch (key) {\n case ' ':\n if (this.searchString && !this.multiple) {\n if (customSearch) break;\n\n this.searchOptions(key, false);\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n\n break;\n\n case 'Enter':\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n const firstVisibleOption = allVisibleOptions[0];\n const isFirstVisibleOptionActive = firstVisibleOption.active;\n if (isFirstVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'ArrowDown':\n event.preventDefault();\n const lastVisibleOption = allVisibleOptions[allVisibleOptions.length - 1];\n const isLastVisibleOptionActive = lastVisibleOption.active;\n if (isLastVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min(activeIndex + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n if (shiftKey) break;\n if (this.multiple && this.type === 'listbox') break;\n if (this.type === 'menu') {\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) return;\n this.selectOption(newOption);\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, false);\n break;\n }\n };\n\n async openDropdownWithActiveElement(activeIndex: number) {\n if (this.disabled) return;\n this.popoverState.emit({ open: true, action: 'open' });\n await waitForNextPaint();\n this.activeIndex = activeIndex;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n resetTimer() {\n if (this.searchStringTimer) {\n clearTimeout(this.searchStringTimer);\n }\n\n this.searchStringTimer = window.setTimeout(() => {\n this.searchString = null;\n }, 2000);\n }\n\n scrollToActiveOption() {\n const activeOption = this.allOptions[this.activeIndex];\n activeOption?.scrollIntoView({ block: 'center' });\n }\n\n searchAndFocus = (keyValue: string, shouldSelect: boolean) => {\n // pseudo search in non-searchable select\n const reorder = () => {\n this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;\n const list = this.allOptions.map((element, index) => ({ element, index }));\n return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];\n };\n\n const buildQueue = () => {\n const now = new Date();\n if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {\n // empty stored keys if delay > 1s\n this.keyStore.queue.length = 0;\n }\n if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {\n this.keyStore.queue.push(keyValue);\n }\n this.keyStore.lastPressedAt = now;\n };\n\n const searchIndex = (list: any[]) => {\n const keyStr = this.keyStore.queue.join('');\n const sanitizedKeyStr = sanitizeRegexString(keyStr);\n return list.find(v => {\n return (\n !v.element.disabled &&\n v.element.display &&\n (v.element.display.match(new RegExp(`^${sanitizedKeyStr}`, 'i')) ||\n v.element.display.replace(/\\s/g, '').match(new RegExp(`^${sanitizedKeyStr}`, 'i')))\n );\n });\n };\n\n const setFocus = ({ index }) => {\n if (this.multiple) {\n // multiple: should open to make sure that which options are selected\n this.openDropdownWithActiveElement(index);\n } else {\n this.activeIndex = index;\n if (shouldSelect) {\n this.selectOption(this.allOptions[index]);\n this.popoverState.emit({ open: false, action: 'select' });\n } else this.setActiveElement(index);\n }\n };\n\n buildQueue();\n const matched = searchIndex(reorder());\n if (matched) {\n setFocus(matched);\n }\n };\n\n searchOptions(key: string, shouldSelect?: boolean) {\n this.searchString = key;\n this.searchAndFocus(key, shouldSelect);\n }\n\n selectOption(selectedOption: ValidOptionElements) {\n const { multiple, noSelect, showSelected } = this;\n if (\n !selectedOption ||\n selectedOption.disabled ||\n ('disabledGroup' in selectedOption && selectedOption.disabledGroup)\n )\n return;\n const selectedValue = selectedOption.value;\n const displayValue =\n 'display' in selectedOption && selectedOption.display\n ? selectedOption.display\n : selectedOption.innerText.trim();\n const valueObject = {\n value: selectedValue,\n display: displayValue,\n };\n\n let values: IOptionValue[] = [];\n if (multiple) {\n const { selectedOptions } = this;\n const isAlreadySelected = selectedOptions.find(option => option.value === selectedValue);\n\n if (isAlreadySelected) {\n values = selectedOptions.filter(({ value }) => value !== selectedValue);\n } else {\n values = [...selectedOptions, valueObject];\n }\n\n if (showSelected) this.focusSelectedSibling(selectedOption);\n } else {\n values = [valueObject];\n }\n\n if (noSelect) this.setActiveElement(null);\n else this.selectedOptions = values;\n\n this.change.emit({ value: selectedValue, values });\n }\n\n setActiveOption() {\n const activeIndex = this.activeIndex;\n\n this.allOptions.forEach((element, elementIndex) => {\n element.active = activeIndex === elementIndex;\n });\n }\n\n setFocusedOption() {\n const option = this.allOptions[this.activeIndex];\n if (!option) return;\n\n const isOptionVisible = isVisible(option);\n if (isOptionVisible) option.focus();\n else nextPaint(() => option.focus());\n }\n\n updateMultipleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValues = selectedOptions.map(({ value }) => value);\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = selectedValues.includes(element.value);\n });\n }\n\n updateSingleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValue = selectedOptions[0]?.value || undefined;\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = element.value === selectedValue;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <Host>\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n onFocusout={this.focusoutHandler}\n >\n <div\n class=\"options\"\n aria-label={loc('tecton.element.optionList.label', [this.label])}\n aria-multiselectable={`${!!this.multiple}`}\n role={this.type || 'listbox'}\n onKeyDown={this.internalKeydownHandler}\n onClick={this.clickHandler}\n >\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.container {\n display: none;\n}\n\n.show {\n display: block;\n position: fixed;\n z-index: var-list(--tct-popover-z-index, 50);\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(--tct-popover-box-shadow, --app-shadow-1, unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)\"));\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the following --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n :host([block]) & {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n :host([align='left']) & {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n :host([align='right']) & {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n &.legacy {\n position: absolute;\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint } from '../../utils';\n\n@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n // #region Own Properties\n\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n /** remove when Popover API is supported in iOS */\n orientationChanged: boolean = false;\n rootElementRect: DOMRect;\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 currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when Popover API is supported in iOS\n @State()\n show: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop()\n controlElement: HTMLElement;\n\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true })\n direction: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n maxHeight: number;\n\n /** @deprecated */\n @Prop()\n minHeight: number;\n\n @Prop()\n mode: 'legacy' = null;\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n }\n\n componentDidLoad() {\n this.handleMinHeight();\n if (this.open) this.determinePopDirection();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n @Watch('open')\n async openChanged(open: boolean) {\n this.setRootElement();\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n this.show = false;\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n get providedDirection(): 'up' | 'down' | undefined {\n const { direction } = this;\n switch (direction) {\n case 'up':\n case 'down':\n return direction;\n default:\n return undefined;\n }\n }\n\n get validatedMaxHeight(): number | undefined {\n const { maxHeight } = this;\n return isNaN(maxHeight) ? undefined : maxHeight;\n }\n\n addViewportListeners() {\n window.addEventListener('resize', this.viewPortOrientationChanged);\n // #region remove when Popover API is supported in iOS\n window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });\n screen?.orientation?.addEventListener('change', this.viewPortOrientationChanged);\n window.addEventListener('orientationchange', this.viewPortOrientationChanged);\n\n // #endregion\n }\n\n clearCSSProperties() {\n this.containerElement.style.removeProperty('--comp-pop-max-height');\n this.containerElement.style.removeProperty('--comp-pop-top');\n this.containerElement.style.removeProperty('--comp-pop-bottom');\n this.containerElement.style.removeProperty('--comp-pop-left');\n this.containerElement.style.removeProperty('--comp-pop-right');\n this.containerElement.style.removeProperty('--comp-pop-width');\n this.containerElement.style.removeProperty('--comp-pop-opacity');\n }\n\n async determinePopDirection() {\n const { containerElement, controlElement, providedDirection, displayBuffer } = this;\n if (containerElement) containerElement.style.maxHeight = null;\n\n await waitForNextPaint();\n\n const { isModule } = this;\n const { top: controlTop, bottom: controlBottom } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n };\n\n let windowHeight: number;\n let maxSpaceAbove: number;\n let maxSpaceBelow: number;\n\n if (isModule) {\n const { outletOffset = 0, innerHeight = window.innerHeight } = window.Tecton?.platformDimensions || {};\n const distanceToIframeBottom = window.visualViewport.height - controlBottom;\n const viewableSpaceBelow = innerHeight - (outletOffset + controlBottom);\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n windowHeight = innerHeight;\n // If the top of the module is below the top of the window we just use the controlTop\n // Otherwise we need to add the outletOffset to the controlTop\n maxSpaceAbove = (outletOffset > 0 ? controlTop : controlTop + outletOffset) - displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.visualViewport.height;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n\n // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n const currentOrDetermineDirection = this.currentDirection || providedDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n const priorityMaxHeight = this.validatedMaxHeight || maxSpaceAbove;\n const maxHeight = Math.min(maxSpaceAbove, priorityMaxHeight);\n containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);\n }\n this.setDirectionAndShow('up');\n break;\n case 'down':\n if (shouldUpdateMaxHeight) {\n const priorityMaxHeight = this.validatedMaxHeight || maxSpaceBelow;\n const maxHeight = Math.min(maxSpaceBelow, priorityMaxHeight);\n containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);\n }\n this.setDirectionAndShow('down');\n break;\n default:\n break;\n }\n }\n\n handleMinHeight = () => {\n if (this.minHeight) {\n handleDeprecationWarning(this, 'minHeight', 'prop');\n }\n };\n\n removeViewportListeners() {\n window.removeEventListener('resize', this.viewPortOrientationChanged);\n // #region remove when Popover API is supported in iOS\n window.removeEventListener('scroll', this.viewPortChanged);\n screen?.orientation?.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n window.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n\n // #endregion\n }\n\n setAbsoluteCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, align } = this;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', '0');\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', '0');\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) {\n containerElement.style.setProperty('--comp-pop-width', '100%');\n }\n\n if (currentDirection === 'up') {\n const controlStyle = getComputedStyle(controlElement);\n const controlSize =\n parseInt(controlStyle.height || '0') +\n parseInt(controlStyle.borderTopWidth || '0') +\n parseInt(controlStyle.borderBottomWidth || '0');\n\n containerElement.style.setProperty('--comp-pop-bottom', `${controlSize}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setDirectionAndShow(direction: 'up' | 'down') {\n this.setRootElement();\n // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the\n // popover can be closed between the time the popover is opened and the time the direction is determined\n const isOpen = this.open;\n if (!isOpen) return;\n\n this.currentDirection = direction;\n this.show = true;\n if (this.mode === 'legacy') {\n this.setAbsoluteCSSProperties();\n } else {\n this.setFixedCSSProperties();\n }\n }\n\n setFixedCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, rootElementRect } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n const popoverLeft: number = controlLeft - rootElementRect.left;\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement?.offsetWidth || 0}px`);\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft}px`);\n containerElement.style.setProperty(\n '--comp-pop-right',\n `${rootElementRect.width + rootElementRect.left - controlRight}px`\n );\n\n if (currentDirection === 'up') {\n containerElement.style.setProperty(\n '--comp-pop-bottom',\n `${rootElementRect.height + rootElementRect.top - controlTop}px`\n );\n }\n if (currentDirection === 'down') {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom - rootElementRect.top}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setRootElement() {\n let currentElement: HTMLElement = this.hostElement;\n\n while (currentElement && currentElement !== document.documentElement) {\n const computedStyle = window.getComputedStyle(currentElement);\n\n // Check if the element has any styles applied that create a new containg block\n if (\n computedStyle.transform !== 'none' ||\n computedStyle.filter !== 'none' ||\n computedStyle.perspective !== 'none' ||\n computedStyle.containerType !== 'normal' ||\n ['transform', 'perspective', 'filter'].includes(computedStyle.willChange) ||\n ['layout', 'paint', 'strict', 'content'].includes(computedStyle.contain)\n ) {\n this.rootElementRect = currentElement.getBoundingClientRect();\n return;\n }\n\n const rootNode = currentElement.getRootNode();\n const isRootNodeWebComponent =\n typeof ShadowRoot !== 'undefined' &&\n rootNode instanceof ShadowRoot &&\n rootNode.host instanceof HTMLElement;\n if (isRootNodeWebComponent) {\n currentElement = rootNode.host;\n } else {\n currentElement = currentElement.parentElement;\n }\n }\n\n // Return the document's bounding rect if no element is found\n this.rootElementRect = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: window.visualViewport.height,\n width: window.visualViewport.width,\n } as DOMRect;\n }\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n viewPortOrientationChanged = () => {\n this.orientationChanged = true;\n this.viewPortChanged();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const containerClasses = ['container', this.currentDirection];\n if (this.show) containerClasses.push('show');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n tabIndex={-1}\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["sanitizeRegexString","regexString","replace","q2OptionListCss","Q2OptionListStyle0","Q2OptionList","this","keyStore","queue","lastPressedAt","Date","scheduledAfterRender","clickHandler","event","target","option","closest","selectOption","multiple","popoverState","emit","open","action","externalKeydownHandler","stopPropagation","activeIndex","customSearch","allOptions","key","nextIndex","searchString","searchOptions","type","openDropdownWithActiveElement","setDefaultActiveElement","nextPaint","preventDefault","selectedOptions","length","getDefaultActiveIndex","getNextVisibleIndex","Math","max","min","noSelect","setActiveElement","match","focusoutHandler","relatedTarget","isInQ2OptionList","includes","isInLightDom","hostElement","contains","internalKeydownHandler","allVisibleOptions","shiftKey","newOption","find","element","active","disabled","addEventListener","once","firstVisibleOption","isFirstVisibleOptionActive","undefined","adjustActiveOptionAndScroll","lastVisibleOption","isLastVisibleOptionActive","searchAndFocus","keyValue","shouldSelect","reorder","pivotIndex","list","map","index","slice","buildQueue","now","getTime","push","searchIndex","keyStr","join","sanitizedKeyStr","v","display","RegExp","setFocus","matched","loc","componentWillLoad","hasOptions","querySelectorAll","componentDidLoad","overrideFocus","checkOptions","selectedOptionsUpdated","ready","componentDidRender","forEach","fn","handleClick","delegateFocus","isEventFromElement","setActiveOption","setFocusedOption","getContents","allContents","getOptions","handleExternalKeydown","updateMultipleOptionAttrs","updateSingleOptionAttrs","showSelectedUpdated","showSelected","_multiSelectHidden","selected","rootSlot","getRootSlot","acceptedTags","Set","filter","has","tagName","contents","extractOptions","elements","reduce","acc","separator","Array","from","children","hidden","disabledGroup","numToAdd","scrollToActiveOption","optionRole","role","focusSelectedSibling","hasNoSiblings","selectedOptionVisibleIndex","indexOf","nextVisibleSiblingIndex","nextVisibleSibling","nextSiblingIndex","firstSelected","findIndex","firstEnabled","direction","activeOption","visibleActiveOptionIndex","nextVisibleOptionIndex","nextVisibleOption","slot","querySelector","assignedElements","_a","hasAnotherSlot","waitForNextPaint","resetTimer","searchStringTimer","clearTimeout","window","setTimeout","scrollIntoView","block","selectedOption","selectedValue","value","displayValue","innerText","trim","valueObject","values","isAlreadySelected","change","elementIndex","isOptionVisible","isVisible","focus","selectedValues","render","h","Host","class","ref","el","contentElement","onFocusout","label","onKeyDown","onClick","q2PopoverCss","Q2PopoverStyle0","Q2Popover","displayBuffer","orientationChanged","handleMinHeight","minHeight","handleDeprecationWarning","handlePopoverToggleEvent","popoverStateChanged","newState","setAbsoluteCSSProperties","async","controlElement","containerElement","currentDirection","align","style","setProperty","controlStyle","getComputedStyle","controlSize","parseInt","height","borderTopWidth","borderBottomWidth","setPopoverAPICSSProperties","isModule","top","controlTop","bottom","controlBottom","left","controlLeft","right","controlRight","_b","getBoundingClientRect","call","popoverLeft","popoverRight","_c","visualViewport","width","scrollX","offsetWidth","innerHeight","_d","offsetTop","scrollY","_f","_e","viewPortChanged","determinePopDirection","viewPortOrientationChanged","disconnectedCallback","removeViewportListeners","removeEventListener","supportsPopoverAPI","console","warn","mode","popoverStateHandler","detail","scrollContainerTo","options","scrollTo","toggle","minHeightProvided","openChanged","addViewportListeners","show","hidePopover","clearCSSProperties","isIframe","hasPlatformDimensions","Object","keys","Tecton","platformDimensions","providedDirection","hasOwn","HTMLElement","prototype","validatedMaxHeight","maxHeight","isNaN","passive","capture","screen","orientation","removeProperty","windowHeight","maxSpaceAbove","maxSpaceBelow","outletOffset","distanceToIframeBottom","viewableSpaceBelow","isIframeShorterThanWindow","directionWithMostSpace","shouldUpdateMaxHeight","getPropertyValue","currentOrDetermineDirection","priorityMaxHeight","setDirectionAndShow","isOpen","showPopover","containerClasses","tabIndex","popover"],"sources":["src/utils/sanitize-regex-string.ts","src/components/q2-option-list/q2-option-list.scss?tag=q2-option-list&encapsulation=shadow","src/components/q2-option-list/q2-option-list.tsx","src/components/q2-popover/q2-popover.scss?tag=q2-popover&encapsulation=shadow","src/components/q2-popover/q2-popover.tsx"],"sourcesContent":["export default function sanitizeRegexString(regexString: string) {\n return regexString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n position: relative;\n width: 100%;\n display: block;\n line-height: var-list(var-prefixer(option-list-line-height),--app-line-height, 1.428571429em);\n}\n\n.content {\n text-align: start;\n\n :host([is-sizeable]) & {\n display: block;\n height: auto;\n }\n}\n","import sanitizeRegexString from '@/utils/sanitize-regex-string';\nimport {\n Component,\n Prop,\n h,\n Event,\n State,\n Element,\n ComponentInterface,\n Host,\n EventEmitter,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\nimport { isEventFromElement, isVisible, loc, nextPaint, overrideFocus, waitForNextPaint } from 'src/utils';\n\nexport interface IOptionValue {\n value: string;\n display?: string;\n}\n\nexport type ValidOptionElements = HTMLQ2OptionElement | HTMLQ2DropdownItemElement;\n\n@Component({ tag: 'q2-option-list', shadow: true, styleUrl: 'q2-option-list.scss' })\nexport class Q2OptionList implements ComponentInterface {\n // #region Own Properties\n\n activeIndex: number;\n contentElement: HTMLElement;\n keyStore: {\n queue: string[];\n lastPressedAt: Date;\n } = {\n queue: [],\n lastPressedAt: new Date(),\n };\n pivotIndex: number;\n scheduledAfterRender: (() => void)[] = [];\n searchString: string;\n searchStringTimer: number;\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 hasOptions: boolean;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n align: 'left' | 'right';\n\n /** Indicates a custom search is being implemented for the option list. */\n @Prop({ reflect: true })\n customSearch: boolean;\n\n /** Disables the option list. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Determines the label that is applied to the option list for accessibility purposes. */\n @Prop()\n label: string = loc('tecton.element.optionList.label');\n\n /**\n * Enables the multi-select ability for the option list.\n * @info\n * Only applicable when options are provided.\n */\n @Prop({ reflect: true })\n multiple: boolean;\n\n /** Disables the logic that handles selecting and focusing an option in the option list. */\n @Prop({ reflect: true })\n noSelect: boolean;\n\n /** A list of the selected options on the element. */\n @Prop({ mutable: true })\n selectedOptions: IOptionValue[] = [];\n\n /** Applies focus to the selected option. */\n @Prop({ reflect: true, mutable: true })\n showSelected: boolean;\n\n /** Translates to the role of the option list */\n @Prop()\n type: 'menu' | 'listbox' = 'listbox';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when an option is selected or deselected.\n *\n * When the multi-select is enabled, the `value` property will be `undefined` and the `selectedOptions` property\n * will contain the selected option values.\n */\n @Event()\n change: EventEmitter<{ value: string; values: IOptionValue[] }>;\n\n /**\n * Emitted to indicate the intended state of the popover.\n * @private\n */\n @Event()\n popoverState: EventEmitter<{ open: boolean; action: 'close' | 'select' | 'open' }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n ready: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.hasOptions = !!this.hostElement.querySelectorAll(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n ).length;\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n this.checkOptions();\n this.selectedOptionsUpdated();\n this.ready.emit();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.popoverState.emit({ open: true, action: 'open' });\n const { activeIndex } = this;\n if (typeof activeIndex === 'number' && activeIndex > -1) {\n this.setActiveOption();\n this.setFocusedOption();\n } else {\n this.setDefaultActiveElement();\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async getContents(): Promise<(HTMLQ2OptgroupElement | ValidOptionElements)[]> {\n return this.allContents;\n }\n\n @Method()\n async getOptions(): Promise<ValidOptionElements[]> {\n return this.allOptions;\n }\n\n @Method()\n async handleExternalKeydown(event: KeyboardEvent) {\n this.externalKeydownHandler(event);\n }\n\n @Method()\n async setActiveElement(index: number) {\n this.activeIndex = index;\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n @Method()\n async setDefaultActiveElement() {\n this.activeIndex = this.getDefaultActiveIndex();\n this.setActiveOption();\n this.setFocusedOption();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('selectedOptions')\n selectedOptionsUpdated() {\n if (this.multiple) {\n this.updateMultipleOptionAttrs();\n } else {\n this.updateSingleOptionAttrs();\n }\n }\n\n @Watch('showSelected')\n showSelectedUpdated(showSelected: boolean) {\n if (showSelected && this.selectedOptions.length === 0) {\n this.showSelected = false;\n return;\n }\n this.allOptions.forEach(option => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = showSelected ? !option.selected : false;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get allContents(): (HTMLQ2OptgroupElement | ValidOptionElements)[] {\n const rootSlot = this.getRootSlot(this.hostElement);\n const acceptedTags = new Set(['Q2-OPTGROUP', 'Q2-OPTION', 'Q2-DROPDOWN-ITEM']);\n return rootSlot.filter(element => acceptedTags.has(element.tagName)) as (\n | HTMLQ2OptgroupElement\n | ValidOptionElements\n )[];\n }\n\n get allOptions(): ValidOptionElements[] {\n const contents = this.allContents;\n\n const extractOptions = (\n elements: (HTMLQ2OptgroupElement | ValidOptionElements | Element)[]\n ): ValidOptionElements[] => {\n return elements.reduce((acc, element) => {\n if (element.tagName === 'Q2-OPTION' || element.tagName === 'Q2-DROPDOWN-ITEM') {\n return (element as ValidOptionElements).separator ? acc : [...acc, element];\n } else if (element.tagName === 'Q2-OPTGROUP') {\n return [...acc, ...extractOptions(Array.from(element.children))];\n } else {\n return acc;\n }\n }, []);\n };\n\n return extractOptions(contents);\n }\n\n get allVisibleOptions(): ValidOptionElements[] {\n return this.allOptions.filter(\n option =>\n !option.hidden &&\n (!('_multiSelectHidden' in option) || !option._multiSelectHidden) &&\n !option.disabled &&\n (!('disabledGroup' in option) || !option.disabledGroup)\n );\n }\n\n adjustActiveOptionAndScroll(numToAdd: number) {\n this.activeIndex += numToAdd;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n checkOptions() {\n const { type } = this;\n if (!type) return;\n const optionRole = type === 'menu' ? 'menuitem' : 'option';\n this.allOptions.forEach(option => {\n option.role = optionRole;\n });\n }\n\n clickHandler = (event: Event) => {\n const target = event.target as ValidOptionElements;\n const option = target.closest<ValidOptionElements>(\n 'q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])'\n );\n this.selectOption(option);\n if (this.multiple) return;\n this.popoverState.emit({ open: false, action: 'select' });\n };\n\n /* tslint:disable:cyclomatic-complexity */\n externalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions } = this;\n const { key } = event;\n\n let nextIndex;\n switch (key) {\n case ' ':\n if (this.searchString) {\n if (customSearch) break;\n\n this.searchOptions(key, true);\n break;\n } else if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'Enter':\n if (this.type === 'menu') {\n this.activeIndex = 0;\n this.openDropdownWithActiveElement(0);\n } else {\n this.setDefaultActiveElement();\n nextPaint(() => this.popoverState.emit({ open: true, action: 'open' }));\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = !!this.selectedOptions.length ? this.getDefaultActiveIndex() : this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.openDropdownWithActiveElement(nextIndex);\n break;\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max((activeIndex || 0) - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min((activeIndex || 0) + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, true);\n break;\n }\n };\n\n /* tslint:enable:cyclomatic-complexity */\n\n focusoutHandler = (event: FocusEvent) => {\n const { relatedTarget } = event as unknown as { relatedTarget: ValidOptionElements };\n const isInQ2OptionList = this.allOptions.includes(relatedTarget);\n const isInLightDom = !isInQ2OptionList && this.hostElement.contains(relatedTarget);\n if (isInQ2OptionList || isInLightDom) {\n event.stopPropagation();\n }\n };\n\n focusSelectedSibling(option: ValidOptionElements) {\n const { allVisibleOptions, allOptions } = this;\n const hasNoSiblings = allVisibleOptions.length < 2;\n if (hasNoSiblings) {\n this.showSelected = false;\n return;\n }\n\n const selectedOptionVisibleIndex = allVisibleOptions.indexOf(option);\n const nextVisibleSiblingIndex = selectedOptionVisibleIndex\n ? selectedOptionVisibleIndex - 1\n : selectedOptionVisibleIndex + 1;\n const nextVisibleSibling = allVisibleOptions[nextVisibleSiblingIndex];\n const nextSiblingIndex = allOptions.indexOf(nextVisibleSibling);\n\n this.activeIndex = nextSiblingIndex;\n this.setFocusedOption();\n this.scheduledAfterRender.push(() => {\n if (!('_multiSelectHidden' in option)) return;\n option._multiSelectHidden = !option.selected;\n });\n }\n\n getDefaultActiveIndex() {\n const { allOptions } = this;\n const firstSelected = allOptions.findIndex(element => {\n return 'selected' in element && element.selected;\n });\n if (firstSelected > -1) return firstSelected;\n\n const firstEnabled = allOptions.findIndex(element => !element.hidden);\n if (firstEnabled > -1) return firstEnabled;\n\n return 0;\n }\n\n getNextVisibleIndex(direction) {\n const { allVisibleOptions, allOptions, activeIndex } = this;\n const activeOption = allOptions[activeIndex];\n const visibleActiveOptionIndex = allVisibleOptions.indexOf(activeOption);\n let nextVisibleOptionIndex = visibleActiveOptionIndex + direction;\n\n if (nextVisibleOptionIndex < 0) {\n nextVisibleOptionIndex = allVisibleOptions.length - 1;\n } else if (nextVisibleOptionIndex > allVisibleOptions.length - 1) {\n nextVisibleOptionIndex = 0;\n }\n\n const nextVisibleOption = allVisibleOptions[nextVisibleOptionIndex];\n return allOptions.indexOf(nextVisibleOption);\n }\n\n getRootSlot(element: Element): Element[] {\n const slot = element.querySelector('slot');\n const assignedElements = slot?.assignedElements() ?? Array.from(element.children);\n const hasAnotherSlot = !!assignedElements.length && assignedElements[0].tagName === 'SLOT';\n if (hasAnotherSlot) {\n return this.getRootSlot(assignedElements[0]);\n } else {\n return assignedElements;\n }\n }\n\n internalKeydownHandler = (event: KeyboardEvent) => {\n event.stopPropagation();\n const { activeIndex, customSearch, allOptions, allVisibleOptions, multiple } = this;\n const { key, shiftKey } = event;\n\n let newOption: ValidOptionElements;\n switch (key) {\n case ' ':\n if (this.searchString && !this.multiple) {\n if (customSearch) break;\n\n this.searchOptions(key, false);\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n\n break;\n\n case 'Enter':\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) break;\n this.selectOption(newOption);\n if (multiple) break;\n this.hostElement.addEventListener(\n 'tctClick',\n () => {\n this.popoverState.emit({ open: false, action: 'select' });\n },\n { once: true }\n );\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n const firstVisibleOption = allVisibleOptions[0];\n const isFirstVisibleOptionActive = firstVisibleOption.active;\n if (isFirstVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(-1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'ArrowDown':\n event.preventDefault();\n const lastVisibleOption = allVisibleOptions[allVisibleOptions.length - 1];\n const isLastVisibleOptionActive = lastVisibleOption.active;\n if (isLastVisibleOptionActive) break;\n if (activeIndex === undefined) {\n this.setDefaultActiveElement();\n break;\n } else {\n const nextIndex = this.getNextVisibleIndex(1);\n if (nextIndex === -1) break;\n this.adjustActiveOptionAndScroll(nextIndex - activeIndex);\n break;\n }\n\n case 'Home':\n event.preventDefault();\n this.openDropdownWithActiveElement(0);\n break;\n\n case 'End':\n event.preventDefault();\n this.openDropdownWithActiveElement(allOptions.length - 1);\n break;\n\n case 'PageUp':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.max(activeIndex - 10, 0));\n break;\n\n case 'PageDown':\n event.preventDefault();\n this.openDropdownWithActiveElement(Math.min(activeIndex + 10, allOptions.length - 1));\n break;\n\n case 'Tab':\n if (shiftKey) break;\n if (this.multiple && this.type === 'listbox') break;\n if (this.type === 'menu') {\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n }\n\n newOption = allOptions.find(element => element.active);\n if (!newOption || newOption.disabled) return;\n this.selectOption(newOption);\n break;\n\n case 'Esc':\n case 'Escape':\n if (this.noSelect) this.setActiveElement(null);\n this.popoverState.emit({ open: false, action: 'close' });\n break;\n\n default:\n if (customSearch) break;\n if (!key.match(/^[\\w]$/)) break;\n\n this.searchOptions(key, false);\n break;\n }\n };\n\n async openDropdownWithActiveElement(activeIndex: number) {\n if (this.disabled) return;\n this.popoverState.emit({ open: true, action: 'open' });\n await waitForNextPaint();\n this.activeIndex = activeIndex;\n this.setActiveOption();\n this.setFocusedOption();\n this.scrollToActiveOption();\n }\n\n resetTimer() {\n if (this.searchStringTimer) {\n clearTimeout(this.searchStringTimer);\n }\n\n this.searchStringTimer = window.setTimeout(() => {\n this.searchString = null;\n }, 2000);\n }\n\n scrollToActiveOption() {\n const activeOption = this.allOptions[this.activeIndex];\n activeOption?.scrollIntoView({ block: 'center' });\n }\n\n searchAndFocus = (keyValue: string, shouldSelect: boolean) => {\n // pseudo search in non-searchable select\n const reorder = () => {\n this.pivotIndex = this.pivotIndex === undefined ? 0 : (this.activeIndex || 0) + 1;\n const list = this.allOptions.map((element, index) => ({ element, index }));\n return [...list.slice(this.pivotIndex), ...list.slice(0, this.pivotIndex)];\n };\n\n const buildQueue = () => {\n const now = new Date();\n if (now.getTime() - this.keyStore.lastPressedAt.getTime() > 1000) {\n // empty stored keys if delay > 1s\n this.keyStore.queue.length = 0;\n }\n if (this.keyStore.queue.length !== 1 || this.keyStore.queue[0] !== keyValue) {\n this.keyStore.queue.push(keyValue);\n }\n this.keyStore.lastPressedAt = now;\n };\n\n const searchIndex = (list: any[]) => {\n const keyStr = this.keyStore.queue.join('');\n const sanitizedKeyStr = sanitizeRegexString(keyStr);\n return list.find(v => {\n return (\n !v.element.disabled &&\n v.element.display &&\n (v.element.display.match(new RegExp(`^${sanitizedKeyStr}`, 'i')) ||\n v.element.display.replace(/\\s/g, '').match(new RegExp(`^${sanitizedKeyStr}`, 'i')))\n );\n });\n };\n\n const setFocus = ({ index }) => {\n if (this.multiple) {\n // multiple: should open to make sure that which options are selected\n this.openDropdownWithActiveElement(index);\n } else {\n this.activeIndex = index;\n if (shouldSelect) {\n this.selectOption(this.allOptions[index]);\n this.popoverState.emit({ open: false, action: 'select' });\n } else this.setActiveElement(index);\n }\n };\n\n buildQueue();\n const matched = searchIndex(reorder());\n if (matched) {\n setFocus(matched);\n }\n };\n\n searchOptions(key: string, shouldSelect?: boolean) {\n this.searchString = key;\n this.searchAndFocus(key, shouldSelect);\n }\n\n selectOption(selectedOption: ValidOptionElements) {\n const { multiple, noSelect, showSelected } = this;\n if (\n !selectedOption ||\n selectedOption.disabled ||\n ('disabledGroup' in selectedOption && selectedOption.disabledGroup)\n )\n return;\n const selectedValue = selectedOption.value;\n const displayValue =\n 'display' in selectedOption && selectedOption.display\n ? selectedOption.display\n : selectedOption.innerText.trim();\n const valueObject = {\n value: selectedValue,\n display: displayValue,\n };\n\n let values: IOptionValue[] = [];\n if (multiple) {\n const { selectedOptions } = this;\n const isAlreadySelected = selectedOptions.find(option => option.value === selectedValue);\n\n if (isAlreadySelected) {\n values = selectedOptions.filter(({ value }) => value !== selectedValue);\n } else {\n values = [...selectedOptions, valueObject];\n }\n\n if (showSelected) this.focusSelectedSibling(selectedOption);\n } else {\n values = [valueObject];\n }\n\n if (noSelect) this.setActiveElement(null);\n else this.selectedOptions = values;\n\n this.change.emit({ value: selectedValue, values });\n }\n\n setActiveOption() {\n const activeIndex = this.activeIndex;\n\n this.allOptions.forEach((element, elementIndex) => {\n element.active = activeIndex === elementIndex;\n });\n }\n\n setFocusedOption() {\n const option = this.allOptions[this.activeIndex];\n if (!option) return;\n\n const isOptionVisible = isVisible(option);\n if (isOptionVisible) option.focus();\n else nextPaint(() => option.focus());\n }\n\n updateMultipleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValues = selectedOptions.map(({ value }) => value);\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = selectedValues.includes(element.value);\n });\n }\n\n updateSingleOptionAttrs() {\n const { allOptions, selectedOptions } = this;\n const selectedValue = selectedOptions[0]?.value || undefined;\n if (this.noSelect) return;\n allOptions.forEach(element => {\n if (!('selected' in element)) return;\n element.selected = element.value === selectedValue;\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <Host>\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n onFocusout={this.focusoutHandler}\n >\n <div\n class=\"options\"\n aria-label={loc('tecton.element.optionList.label', [this.label])}\n aria-multiselectable={`${!!this.multiple}`}\n role={this.type || 'listbox'}\n onKeyDown={this.internalKeydownHandler}\n onClick={this.clickHandler}\n >\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n.legacy {\n &.container {\n display: none;\n }\n\n &.show {\n display: block;\n z-index: var-list(--tct-popover-z-index, 50);\n }\n}\n\n:popover-open,\n.show {\n position: absolute;\n margin: 0;\n padding: 0;\n overflow: auto;\n background: var-list(--tct-popover-background, --app-white, #ffffff);\n color: var-list(--tct-popover-font-color, --t-text, #4d4d4d);\n min-width: var-list(--tct-popover-min-width, 135px);\n margin-block: var-list(--tct-popover-margin-block, 0);\n box-shadow: var-list(\n --tct-popover-box-shadow,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n border-width: var-list(--tct-popover-border-width, 0);\n border-style: solid;\n border-color: var-list(--tct-popover-border-color, transparent);\n border-radius: var-list(--tct-popover-border-radius, 0);\n // the --comp variables are set via JS\n max-height: var(--comp-pop-max-height);\n left: var(--comp-pop-left);\n opacity: var(--comp-pop-opacity, 0);\n\n &.block {\n right: unset;\n width: var(--comp-pop-width);\n min-width: var-list(--tct-popover-min-width, unset);\n }\n\n &.left {\n left: var(--comp-pop-left);\n right: unset;\n }\n\n &.right {\n right: var(--comp-pop-right);\n left: unset;\n }\n\n &.down {\n top: var-list(--tct-popover-top, --comp-pop-top);\n bottom: unset;\n }\n\n &.up {\n top: unset;\n bottom: var(--comp-pop-bottom);\n }\n\n @include tiny-scrollbar();\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Watch,\n Method,\n Listen,\n EventEmitter,\n Event,\n State,\n} from '@stencil/core';\nimport { handleDeprecationWarning, waitForNextPaint } from '../../utils';\n\n@Component({ tag: 'q2-popover', shadow: true, styleUrl: 'q2-popover.scss' })\nexport class Q2Popover implements ComponentInterface {\n // #region Own Properties\n\n containerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n /**\n * The number of pixels to leave between the popover and the edge of the viewport\n */\n displayBuffer = 10;\n orientationChanged: boolean = false;\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 currentDirection: 'down' | 'up' = undefined;\n\n // remove `show` when Popover API is supported in iOS\n @State()\n show: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Aligns the popover to the left or right side of the control element. */\n @Prop({ reflect: true })\n align: 'left' | 'right' = 'left';\n\n /** Indicates the popover will match the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** The element that controls the popover's behavior. */\n @Prop()\n controlElement: HTMLElement;\n\n /**\n * Force the direction of the popover when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ reflect: true })\n direction: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n maxHeight: number;\n\n /** @deprecated */\n @Prop()\n minHeight: number;\n\n @Prop()\n mode: 'legacy' = null;\n\n /** Controls whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the popover is opened or closed.\n */\n @Event()\n popoverStateChanged: EventEmitter<{ open: boolean }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.removeViewportListeners();\n this.containerElement.removeEventListener('toggle', this.handlePopoverToggleEvent);\n this.containerElement = null;\n this.contentElement = null;\n this.controlElement = null;\n }\n\n componentWillLoad() {\n if (!this.supportsPopoverAPI) {\n console.warn(\n 'The Popover API is not supported in this browser. Please update your browser to the latest version. The component will use legacy mode.'\n );\n this.mode = 'legacy';\n }\n }\n\n componentDidLoad() {\n this.handleMinHeight();\n if (this.supportsPopoverAPI) this.containerElement.addEventListener('toggle', this.handlePopoverToggleEvent);\n if (this.open) this.determinePopDirection();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('popoverState')\n popoverStateHandler(event: CustomEvent<{ open: boolean }>) {\n const {\n detail: { open },\n } = event;\n if (open === this.open) return;\n\n this.open = open;\n event.stopPropagation();\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async scrollContainerTo(options: ScrollToOptions) {\n this.containerElement.scrollTo(options);\n }\n\n @Method()\n async toggle() {\n this.open = !this.open;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('minHeight')\n minHeightProvided() {\n this.handleMinHeight();\n }\n\n @Watch('open')\n async openChanged(open: boolean) {\n this.popoverStateChanged.emit({ open });\n\n if (open) {\n this.addViewportListeners();\n this.determinePopDirection();\n } else {\n this.removeViewportListeners();\n this.currentDirection = undefined;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = false;\n } else {\n this.containerElement.hidePopover();\n }\n\n await waitForNextPaint();\n this.clearCSSProperties();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get isModule() {\n const isIframe = window !== window.top;\n const hasPlatformDimensions = Object.keys(window.Tecton?.platformDimensions ?? {}).length > 0;\n return isIframe && hasPlatformDimensions;\n }\n\n get providedDirection(): 'up' | 'down' | undefined {\n const { direction } = this;\n switch (direction) {\n case 'up':\n case 'down':\n return direction;\n default:\n return undefined;\n }\n }\n\n get supportsPopoverAPI(): boolean {\n return Object.hasOwn(HTMLElement.prototype, 'popover');\n }\n\n get validatedMaxHeight(): number | undefined {\n const { maxHeight } = this;\n return isNaN(maxHeight) ? undefined : maxHeight;\n }\n\n addViewportListeners() {\n window.addEventListener('resize', this.viewPortOrientationChanged);\n visualViewport?.addEventListener('resize', this.viewPortChanged);\n window.addEventListener('scroll', this.viewPortChanged, { passive: true, capture: true });\n screen?.orientation?.addEventListener('orientationchange', this.viewPortOrientationChanged);\n window.addEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n clearCSSProperties() {\n this.containerElement.style.removeProperty('--comp-pop-max-height');\n this.containerElement.style.removeProperty('--comp-pop-top');\n this.containerElement.style.removeProperty('--comp-pop-bottom');\n this.containerElement.style.removeProperty('--comp-pop-left');\n this.containerElement.style.removeProperty('--comp-pop-right');\n this.containerElement.style.removeProperty('--comp-pop-width');\n this.containerElement.style.removeProperty('--comp-pop-opacity');\n }\n\n async determinePopDirection() {\n const { containerElement, controlElement, providedDirection, displayBuffer } = this;\n if (containerElement) containerElement.style.maxHeight = null;\n\n await waitForNextPaint();\n\n const { isModule } = this;\n const { top: controlTop, bottom: controlBottom } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n };\n\n let windowHeight: number;\n let maxSpaceAbove: number;\n let maxSpaceBelow: number;\n\n if (isModule) {\n const { outletOffset = 0, innerHeight = window.innerHeight } = window.Tecton?.platformDimensions || {};\n const distanceToIframeBottom = window.visualViewport.height - controlBottom;\n const viewableSpaceBelow = innerHeight - (outletOffset + controlBottom);\n const isIframeShorterThanWindow = distanceToIframeBottom < viewableSpaceBelow;\n windowHeight = innerHeight;\n // If the top of the module is below the top of the window we just use the controlTop\n // Otherwise we need to add the outletOffset to the controlTop\n maxSpaceAbove = (outletOffset > 0 ? controlTop : controlTop + outletOffset) - displayBuffer;\n maxSpaceBelow = isIframeShorterThanWindow\n ? distanceToIframeBottom - displayBuffer\n : viewableSpaceBelow - displayBuffer;\n } else {\n windowHeight = window.visualViewport.height;\n maxSpaceAbove = controlTop - displayBuffer;\n maxSpaceBelow = windowHeight - controlBottom - displayBuffer;\n }\n\n const directionWithMostSpace: 'up' | 'down' = maxSpaceAbove > maxSpaceBelow ? 'up' : 'down';\n\n // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)\n const shouldUpdateMaxHeight =\n !containerElement.style.getPropertyValue('--comp-pop-max-height') || this.orientationChanged;\n // we do not want to constantly update the max-height after an orientation change, so we switch this back to false\n this.orientationChanged = false;\n const currentOrDetermineDirection = this.currentDirection || providedDirection || directionWithMostSpace;\n\n switch (currentOrDetermineDirection) {\n case 'up':\n if (shouldUpdateMaxHeight) {\n const priorityMaxHeight = this.validatedMaxHeight || maxSpaceAbove;\n const maxHeight = Math.min(maxSpaceAbove, priorityMaxHeight);\n containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);\n }\n this.setDirectionAndShow('up');\n break;\n case 'down':\n if (shouldUpdateMaxHeight) {\n const priorityMaxHeight = this.validatedMaxHeight || maxSpaceBelow;\n const maxHeight = Math.min(maxSpaceBelow, priorityMaxHeight);\n containerElement.style.setProperty('--comp-pop-max-height', `${maxHeight}px`);\n }\n this.setDirectionAndShow('down');\n break;\n default:\n break;\n }\n }\n\n handleMinHeight = () => {\n if (this.minHeight) {\n handleDeprecationWarning(this, 'minHeight', 'prop');\n }\n };\n\n handlePopoverToggleEvent = (event: ToggleEvent) => {\n this.popoverStateChanged.emit({ open: event.newState === 'open' });\n };\n\n removeViewportListeners() {\n window.removeEventListener('resize', this.viewPortOrientationChanged);\n visualViewport?.removeEventListener('resize', this.viewPortChanged);\n window.removeEventListener('scroll', this.viewPortChanged, { capture: true });\n screen?.orientation?.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n window.removeEventListener('orientationchange', this.viewPortOrientationChanged);\n }\n\n setAbsoluteCSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, align } = this;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', '0');\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', '0');\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) {\n containerElement.style.setProperty('--comp-pop-width', '100%');\n }\n\n if (currentDirection === 'up') {\n const controlStyle = getComputedStyle(controlElement);\n const controlSize =\n parseInt(controlStyle.height || '0') +\n parseInt(controlStyle.borderTopWidth || '0') +\n parseInt(controlStyle.borderBottomWidth || '0');\n\n containerElement.style.setProperty('--comp-pop-bottom', `${controlSize}px`);\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n setDirectionAndShow(direction: 'up' | 'down') {\n // Due to some runtime inconsistency across devices/browsers we need to add one more check here because the\n // popover can be closed between the time the popover is opened and the time the direction is determined\n const isOpen = this.open;\n if (!isOpen) return;\n\n this.currentDirection = direction;\n if (this.mode === 'legacy' || !this.supportsPopoverAPI) {\n this.show = true;\n this.setAbsoluteCSSProperties();\n } else {\n this.setPopoverAPICSSProperties();\n this.containerElement.showPopover();\n }\n }\n\n setPopoverAPICSSProperties = async () => {\n const { controlElement, containerElement, currentDirection, isModule, align } = this;\n const {\n top: controlTop,\n bottom: controlBottom,\n left: controlLeft,\n right: controlRight,\n } = controlElement?.getBoundingClientRect?.() ?? {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n\n const popoverLeft: number = controlLeft;\n const popoverRight: number = window?.visualViewport?.width - controlRight;\n\n if (align === 'right') {\n containerElement.style.setProperty('--comp-pop-right', `${popoverRight - window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-left', 'unset');\n } else {\n containerElement.style.setProperty('--comp-pop-left', `${popoverLeft + window.scrollX}px`);\n containerElement.style.setProperty('--comp-pop-right', 'unset');\n }\n\n if (this.block) containerElement.style.setProperty('--comp-pop-width', `${controlElement?.offsetWidth || 0}px`);\n\n if (currentDirection === 'up') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-bottom', `${window.innerHeight - controlTop}px`);\n } else {\n containerElement.style.setProperty(\n '--comp-pop-bottom',\n `${window.innerHeight - controlTop - window?.visualViewport?.offsetTop - window.scrollY}px`\n );\n }\n }\n\n if (currentDirection === 'down') {\n if (isModule) {\n containerElement.style.setProperty('--comp-pop-top', `${controlBottom}px`);\n } else {\n containerElement.style.setProperty(\n '--comp-pop-top',\n `${controlBottom + (window?.visualViewport?.offsetTop ?? 0) + window.scrollY}px`\n );\n }\n }\n\n // Wait for one paint to prevent layout thrashing\n await waitForNextPaint();\n containerElement.style.setProperty('--comp-pop-opacity', '1');\n };\n\n viewPortChanged = () => {\n if (!this.open) return;\n this.determinePopDirection();\n };\n\n viewPortOrientationChanged = () => {\n this.orientationChanged = true;\n this.viewPortChanged();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const containerClasses = ['container', this.currentDirection, this.align];\n if (this.show) containerClasses.push('show');\n if (this.block) containerClasses.push('block');\n if (this.mode === 'legacy') containerClasses.push('legacy');\n\n return (\n <div\n ref={el => (this.containerElement = el)}\n class={containerClasses.join(' ')}\n test-id=\"outerContainer\"\n tabIndex={-1}\n popover=\"auto\"\n >\n <div\n ref={el => (this.contentElement = el)}\n class=\"content\"\n >\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
|
|
@@ -229,8 +229,8 @@ const h = class {
|
|
|
229
229
|
render() {
|
|
230
230
|
var t;
|
|
231
231
|
const {pagesOnly: e, recordsOnly: n, isFullViewHidden: a, recordTypeWithDefault: s, totalPages: o, totalWithDefault: c, pageWithDefault: d, currentRange: h, nextRange: l, prevRange: p, showPerPageSelect: g} = this;
|
|
232
|
-
const
|
|
233
|
-
const
|
|
232
|
+
const u = d < 2;
|
|
233
|
+
const f = d === o;
|
|
234
234
|
let b = r("tecton.element.pagination.goToNext");
|
|
235
235
|
let v = r("tecton.element.pagination.goToPrevious");
|
|
236
236
|
if (e) {
|
|
@@ -255,12 +255,12 @@ const h = class {
|
|
|
255
255
|
});
|
|
256
256
|
}
|
|
257
257
|
return i("nav", {
|
|
258
|
-
key: "
|
|
258
|
+
key: "522f7a6ca80da14c71ab8e4c16345f780bdfedb7",
|
|
259
259
|
class: "container",
|
|
260
260
|
ref: t => this.containerElement = t,
|
|
261
261
|
"aria-label": r("tecton.element.pagination.title")
|
|
262
262
|
}, i("div", {
|
|
263
|
-
key: "
|
|
263
|
+
key: "7192232f0c101c7d91681d6aeb71d9816bc54ec9",
|
|
264
264
|
class: "description",
|
|
265
265
|
"test-id": "description"
|
|
266
266
|
}, e ? r("tecton.element.pagination.pages", {
|
|
@@ -271,45 +271,45 @@ const h = class {
|
|
|
271
271
|
recordType: s.toLowerCase(),
|
|
272
272
|
total: c.toLocaleString()
|
|
273
273
|
})), i("div", {
|
|
274
|
-
key: "
|
|
274
|
+
key: "82b75af4cd9e03338e9fe262d8881fbf36b7a591",
|
|
275
275
|
class: "btn-group"
|
|
276
276
|
}, i("q2-btn", {
|
|
277
|
-
key: "
|
|
277
|
+
key: "6a5a7a66e845acf4d56cbd0cebe42568c399434e",
|
|
278
278
|
ref: t => this.firstPageBtn = t,
|
|
279
279
|
label: r("tecton.element.pagination.goToFirstPage"),
|
|
280
|
-
disabled:
|
|
280
|
+
disabled: u,
|
|
281
281
|
hidden: a,
|
|
282
282
|
onClick: () => this.handlePageChange(1),
|
|
283
283
|
"test-id": "firstPageBtn",
|
|
284
284
|
"hide-label": true
|
|
285
285
|
}, i("q2-icon", {
|
|
286
|
-
key: "
|
|
286
|
+
key: "2d601f453125c485ad742a6b0ef90724f390da32",
|
|
287
287
|
type: "chevron-double-left"
|
|
288
288
|
})), i("q2-btn", {
|
|
289
|
-
key: "
|
|
289
|
+
key: "9b177b458d7d1b0a6408c51ad146308d8cef1123",
|
|
290
290
|
ref: t => this.prevPageBtn = t,
|
|
291
291
|
label: v,
|
|
292
|
-
disabled:
|
|
292
|
+
disabled: u,
|
|
293
293
|
onClick: () => this.handlePageChange(d - 1),
|
|
294
294
|
"test-id": "prevPageBtn",
|
|
295
295
|
"hide-label": true
|
|
296
296
|
}, i("q2-icon", {
|
|
297
|
-
key: "
|
|
297
|
+
key: "c7c017d0542756c0d0b33fbca98b0b87f014e1f9",
|
|
298
298
|
type: "chevron-left"
|
|
299
299
|
}))), i("div", {
|
|
300
|
-
key: "
|
|
300
|
+
key: "afa7a54817a9d79cc2ca17749e5778b4cd2ded66",
|
|
301
301
|
class: "controls",
|
|
302
302
|
hidden: a,
|
|
303
303
|
"test-id": "controls"
|
|
304
304
|
}, i("span", {
|
|
305
|
-
key: "
|
|
305
|
+
key: "24549c54a21e204c50797738287010af4414d2a9",
|
|
306
306
|
"aria-hidden": "true"
|
|
307
307
|
}, r("tecton.element.pagination.page")), i("div", {
|
|
308
|
-
key: "
|
|
308
|
+
key: "3ee4e68f1528ad2a947e816e8b4aa3f70d25b7f7",
|
|
309
309
|
class: "input-wrapper",
|
|
310
310
|
onClick: () => this.inputField.dispatchEvent(new FocusEvent("focus"))
|
|
311
311
|
}, i("q2-input", {
|
|
312
|
-
key: "
|
|
312
|
+
key: "d937bdb0510012fde31a06fbd781e9bfa5dc72f8",
|
|
313
313
|
ref: t => this.inputField = t,
|
|
314
314
|
type: "number",
|
|
315
315
|
value: `${d}`,
|
|
@@ -325,36 +325,36 @@ const h = class {
|
|
|
325
325
|
"test-id": "pageInput",
|
|
326
326
|
current: "page"
|
|
327
327
|
})), i("span", {
|
|
328
|
-
key: "
|
|
328
|
+
key: "f334329061ef618c1db563ac01a763fb6416d1b1",
|
|
329
329
|
"aria-hidden": "true"
|
|
330
330
|
}, r("tecton.element.pagination.ofPages", [ o.toLocaleString() ]))), i("div", {
|
|
331
|
-
key: "
|
|
331
|
+
key: "02b29f060edb638e8cf0c7bb7cda4d0485af2481",
|
|
332
332
|
class: "btn-group"
|
|
333
333
|
}, i("q2-btn", {
|
|
334
|
-
key: "
|
|
334
|
+
key: "9a75c84ecc03f11dd852200966f2db2a28fd5bcf",
|
|
335
335
|
ref: t => this.nextPageBtn = t,
|
|
336
336
|
label: b,
|
|
337
|
-
disabled:
|
|
337
|
+
disabled: f,
|
|
338
338
|
onClick: () => this.handlePageChange(d + 1),
|
|
339
339
|
"test-id": "nextPageBtn",
|
|
340
340
|
"hide-label": true
|
|
341
341
|
}, i("q2-icon", {
|
|
342
|
-
key: "
|
|
342
|
+
key: "b6727d1d7f018d60e4f31c0099af29efc9abb8a0",
|
|
343
343
|
type: "chevron-right"
|
|
344
344
|
})), i("q2-btn", {
|
|
345
|
-
key: "
|
|
345
|
+
key: "2b0ed22e5d397aa7affc12e7bee1c8d4dc284484",
|
|
346
346
|
ref: t => this.lastPageBtn = t,
|
|
347
347
|
label: "tecton.element.pagination.goToLastPage",
|
|
348
|
-
disabled:
|
|
348
|
+
disabled: f,
|
|
349
349
|
hidden: a,
|
|
350
350
|
onClick: () => this.handlePageChange(o),
|
|
351
351
|
"test-id": "lastPageBtn",
|
|
352
352
|
"hide-label": true
|
|
353
353
|
}, i("q2-icon", {
|
|
354
|
-
key: "
|
|
354
|
+
key: "95c98ee4c4c1bcfb709e9a3a2c1648eca717f8b3",
|
|
355
355
|
type: "chevron-double-right"
|
|
356
356
|
}))), i("div", {
|
|
357
|
-
key: "
|
|
357
|
+
key: "44e21a845dce96cc86b35df24bead60b4542b99f",
|
|
358
358
|
class: "per-page",
|
|
359
359
|
hidden: a || !((t = this.perPageIncrements) === null || t === void 0 ? void 0 : t.length)
|
|
360
360
|
}, g && this.renderPerPage()));
|
|
@@ -344,19 +344,19 @@ const v = class {
|
|
|
344
344
|
if (t || i) r.push("has-icon");
|
|
345
345
|
if (t) r.push("has-options");
|
|
346
346
|
return e("click-elsewhere", {
|
|
347
|
-
key: "
|
|
347
|
+
key: "c9b3e809fd37896292b160ae76cc0f5c6922ae6a",
|
|
348
348
|
onChange: this.onClickElsewhere
|
|
349
349
|
}, e("div", {
|
|
350
|
-
key: "
|
|
350
|
+
key: "0827c66963b1823bb295bc3f3faa6ca42dddef0f",
|
|
351
351
|
class: r.join(" ")
|
|
352
352
|
}, e("div", {
|
|
353
|
-
key: "
|
|
353
|
+
key: "0433e16bc73d9e3f16779b6caf389cd93f72bb3e",
|
|
354
354
|
class: "btn-height-wrapper",
|
|
355
355
|
ref: t => this.primaryBtnWrapper = t,
|
|
356
356
|
onClick: this.handleWrapperClick,
|
|
357
357
|
tabIndex: -1
|
|
358
358
|
}, e("button", {
|
|
359
|
-
key: "
|
|
359
|
+
key: "8050576845cdb23971103766f2401064ce0cad88",
|
|
360
360
|
class: "btn-primary",
|
|
361
361
|
"test-id": "btn-control",
|
|
362
362
|
type: "button",
|
|
@@ -372,10 +372,10 @@ const v = class {
|
|
|
372
372
|
"aria-label": this.buttonContent,
|
|
373
373
|
"aria-describedby": t && "option-description" || undefined
|
|
374
374
|
}, this.truncatedButtonContent, !t && i && e("span", {
|
|
375
|
-
key: "
|
|
375
|
+
key: "336ae9801e05bd79e9295500840888f13b1c8965",
|
|
376
376
|
class: "sr"
|
|
377
377
|
}, "(", c("tecton.element.pill.active"), ")"))), this.renderIcon(), !!t && this.renderHiddenElement()), this.optionCount > 0 && e("q2-popover", {
|
|
378
|
-
key: "
|
|
378
|
+
key: "8b5aaba68697d6697b0676b12e22dd5ae2bff171",
|
|
379
379
|
ref: t => this.popoverElement = t,
|
|
380
380
|
controlElement: this.primaryBtn,
|
|
381
381
|
open: this.open,
|
|
@@ -385,20 +385,20 @@ const v = class {
|
|
|
385
385
|
align: this.popoverAlignment,
|
|
386
386
|
onFocusout: this.handleFocusOut
|
|
387
387
|
}, e("div", {
|
|
388
|
-
key: "
|
|
388
|
+
key: "a549cebcd60061337dd5050a7c032b6a8fc17bda",
|
|
389
389
|
class: "popover-content"
|
|
390
390
|
}, e("div", {
|
|
391
|
-
key: "
|
|
391
|
+
key: "d2fa4b73da36e0e99ed757ff79ce267222212dd8",
|
|
392
392
|
ref: t => this.popoverTopContainer = t,
|
|
393
393
|
class: "popover-top-container",
|
|
394
394
|
tabindex: "-1",
|
|
395
395
|
hidden: !this.hasPopoverTop,
|
|
396
396
|
onKeyDown: this.handleKeydown
|
|
397
397
|
}, e("slot", {
|
|
398
|
-
key: "
|
|
398
|
+
key: "29853c6df6666b9f1140bec1f1f4228cc678d975",
|
|
399
399
|
name: "popover-top"
|
|
400
400
|
})), e("q2-option-list", {
|
|
401
|
-
key: "
|
|
401
|
+
key: "6ec051510319b4754990db8116b59cf143dec6be",
|
|
402
402
|
type: "listbox",
|
|
403
403
|
ref: t => this.optionList = t,
|
|
404
404
|
id: "option-list",
|
|
@@ -408,16 +408,16 @@ const v = class {
|
|
|
408
408
|
onReady: () => this.updateSelectedOptionElements(),
|
|
409
409
|
label: c("tecton.element.optionList.label", [ this.optionListLabel ])
|
|
410
410
|
}, e("slot", {
|
|
411
|
-
key: "
|
|
411
|
+
key: "f05e10a03bab9955e957a347210e67fdd792ea7d"
|
|
412
412
|
})), e("div", {
|
|
413
|
-
key: "
|
|
413
|
+
key: "c09db49ec7e48e707bc5f2757df5cfb980c29e35",
|
|
414
414
|
ref: t => this.popoverBottomContainer = t,
|
|
415
415
|
class: "popover-bottom-container",
|
|
416
416
|
tabindex: "-1",
|
|
417
417
|
hidden: !this.hasPopoverBottom,
|
|
418
418
|
onKeyDown: this.handleKeydown
|
|
419
419
|
}, e("slot", {
|
|
420
|
-
key: "
|
|
420
|
+
key: "c6c2b55e80afaff64211777bf7c2994da15a3bc7",
|
|
421
421
|
name: "popover-bottom"
|
|
422
422
|
})))));
|
|
423
423
|
}
|