q2-tecton-elements 1.53.0 → 1.53.2
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/cjs/click-elsewhere_2.cjs.entry.js +64 -61
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
- package/dist/cjs/{index-07285783.js → index-76f63767.js} +1 -21
- package/dist/cjs/index-76f63767.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
- package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
- package/dist/cjs/q2-badge_7.cjs.entry.js +12 -4
- package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
- package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
- 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 +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +10 -12
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +7 -8
- 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-file-picker.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 +3 -3
- package/dist/cjs/q2-legend.cjs.entry.js +1 -1
- package/dist/cjs/q2-loc.cjs.entry.js +2 -2
- package/dist/cjs/q2-message.cjs.entry.js +2 -2
- package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
- package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
- package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
- package/dist/cjs/q2-option.cjs.entry.js +2 -2
- package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
- package/dist/cjs/q2-pill.cjs.entry.js +2 -2
- 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 +3 -3
- package/dist/cjs/q2-select.cjs.entry.js +89 -13
- 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 +2 -2
- package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
- package/dist/cjs/q2-tag.cjs.entry.js +2 -2
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +3 -2
- package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
- package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
- package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
- package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
- package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
- package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
- package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +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-btn/test/q2-btn-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
- package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
- package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
- 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-calendar/test/validation-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-card/q2-card.js.map +1 -1
- package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
- package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
- package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
- package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
- package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
- package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
- package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
- package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
- package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +9 -11
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +5 -17
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
- package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-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-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-example/q2-example.js.map +1 -1
- package/dist/collection/components/q2-example/test/q2-example.e2e.js.map +1 -1
- package/dist/collection/components/q2-example/test/q2-example.spec.js.map +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js.map +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -1
- package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-icon/q2-icon-types.js.map +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-icon/test/q2-icon-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alpha.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alphanumeric.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/currency.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/date.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/numeric.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/phone.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/postal.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/ssn.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/tin.spec.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input.js +1 -1
- package/dist/collection/components/q2-input/q2-input.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.spec.js.map +1 -1
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-item/q2-item.js.map +1 -1
- package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
- package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
- package/dist/collection/components/q2-link/q2-link.js.map +1 -1
- package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-list/q2-list.js.map +1 -1
- package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
- package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
- package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
- package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loc/q2-loc.js +1 -1
- package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
- package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loc/test/q2-loc-test.spec.js.map +1 -1
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-message/q2-message.js.map +1 -1
- package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
- package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-option/q2-option.js +1 -1
- package/dist/collection/components/q2-option/q2-option.js.map +1 -1
- package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
- package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
- package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
- 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-pill/q2-pill.js.map +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +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.map +1 -1
- package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
- package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
- package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -1
- package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -1
- package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -1
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-section/q2-section.js.map +1 -1
- package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-select/q2-select.js +110 -15
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js +412 -0
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
- package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
- package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
- package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
- 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/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
- package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/utils/action-sheet.js.map +1 -1
- package/dist/collection/utils/charting.js.map +1 -1
- package/dist/collection/utils/helpers.js.map +1 -1
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/collection/utils/sanitize-html-string.js.map +1 -1
- package/dist/collection/utils/sanitize-regex-string.js.map +1 -1
- package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
- package/dist/collection/utils/test/index.spec.js.map +1 -1
- package/dist/components/index2.js +1 -20
- package/dist/components/index2.js.map +1 -1
- package/dist/components/q2-action-group.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-carousel-pane.js +2 -2
- 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-currency.js +1 -1
- package/dist/components/q2-detail.js +1 -1
- package/dist/components/q2-dropdown.js +9 -11
- 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-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-loc.js +1 -1
- package/dist/components/q2-message2.js +1 -1
- package/dist/components/q2-month-picker.js +2 -2
- package/dist/components/q2-optgroup2.js +1 -1
- package/dist/components/q2-option2.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-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 +92 -16
- package/dist/components/q2-select2.js.map +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/click-elsewhere_2.entry.js +64 -61
- package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
- package/dist/esm/{index-d18e2a20.js → index-504f1a9e.js} +2 -21
- package/dist/esm/index-504f1a9e.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group.entry.js +2 -2
- package/dist/esm/q2-action-sheet.entry.js +2 -2
- package/dist/esm/q2-avatar.entry.js +1 -1
- package/dist/esm/q2-badge_7.entry.js +12 -4
- package/dist/esm/q2-badge_7.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +1 -1
- package/dist/esm/q2-card.entry.js +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +3 -3
- package/dist/esm/q2-carousel.entry.js +1 -1
- package/dist/esm/q2-chart-area.entry.js +2 -2
- package/dist/esm/q2-chart-bar.entry.js +2 -2
- package/dist/esm/q2-chart-donut.entry.js +2 -2
- 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 +2 -2
- package/dist/esm/q2-dropdown-item.entry.js +1 -1
- package/dist/esm/q2-dropdown.entry.js +10 -12
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +7 -8
- package/dist/esm/q2-editable-field.entry.js.map +1 -1
- package/dist/esm/q2-example.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-item_3.entry.js +3 -3
- package/dist/esm/q2-legend.entry.js +1 -1
- package/dist/esm/q2-loc.entry.js +2 -2
- package/dist/esm/q2-message.entry.js +2 -2
- package/dist/esm/q2-month-picker.entry.js +3 -3
- package/dist/esm/q2-optgroup.entry.js +2 -2
- package/dist/esm/q2-option-list.entry.js +1 -1
- package/dist/esm/q2-option.entry.js +2 -2
- package/dist/esm/q2-pagination.entry.js +4 -4
- package/dist/esm/q2-pill.entry.js +2 -2
- 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 +3 -3
- package/dist/esm/q2-select.entry.js +90 -14
- 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 +2 -2
- package/dist/esm/q2-stepper.entry.js +2 -2
- package/dist/esm/q2-tag.entry.js +2 -2
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +3 -2
- package/dist/esm/q2-textarea.entry.js.map +1 -1
- package/dist/esm/q2-tooltip.entry.js +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/jest.setup.js +22 -0
- package/dist/jest.setup.js.map +1 -0
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +175 -163
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/{index-d18e2a20.js → index-504f1a9e.js} +51 -69
- package/dist/q2-tecton-elements/index-504f1a9e.js.map +1 -0
- package/dist/q2-tecton-elements/q2-action-group.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +34 -34
- package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +25 -17
- package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +101 -101
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-currency.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.js +39 -39
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +14 -16
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +27 -18
- package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-item_3.entry.js +19 -19
- package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-loc.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-message.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-option-list.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-pagination.entry.js +34 -34
- package/dist/q2-tecton-elements/q2-pill.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +19 -19
- package/dist/q2-tecton-elements/q2-select.entry.js +156 -92
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +37 -37
- package/dist/q2-tecton-elements/q2-stepper.entry.js +29 -29
- package/dist/q2-tecton-elements/q2-tag.entry.js +25 -25
- 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 +4 -3
- package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
- package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +1 -0
- package/dist/types/components/q2-btn/q2-btn.d.ts +1 -0
- package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +1 -4
- package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +2 -1
- package/dist/types/components/q2-icon/q2-icon.d.ts +1 -0
- package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
- package/dist/types/components/q2-select/q2-select.d.ts +19 -0
- package/package.json +3 -3
- package/dist/cjs/index-07285783.js.map +0 -1
- package/dist/esm/index-d18e2a20.js.map +0 -1
- package/dist/q2-tecton-elements/index-d18e2a20.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { newSpecPage } from "@stencil/core/testing";
|
|
2
2
|
import { Q2Popover } from "../q2-popover";
|
|
3
|
+
import { handleDeprecationWarning } from "../../../utils/index";
|
|
3
4
|
describe('popover', () => {
|
|
4
5
|
let specPopover;
|
|
5
6
|
const samplePlatformDimensions = {
|
|
@@ -14,15 +15,78 @@ describe('popover', () => {
|
|
|
14
15
|
platformUrl: '',
|
|
15
16
|
platformDimensions: samplePlatformDimensions,
|
|
16
17
|
};
|
|
18
|
+
const enablePopoverAPI = () => {
|
|
19
|
+
Object.defineProperty(HTMLElement.prototype, 'popover', { value: true, configurable: true });
|
|
20
|
+
};
|
|
17
21
|
describe('Props', () => {
|
|
18
|
-
describe('
|
|
19
|
-
it('
|
|
22
|
+
describe('align', () => {
|
|
23
|
+
it('adds the left class on the container by default', async () => {
|
|
20
24
|
const page = await newSpecPage({
|
|
21
25
|
components: [Q2Popover],
|
|
22
26
|
html: `<q2-popover></q2-popover>`,
|
|
23
27
|
});
|
|
24
|
-
expect(page.root.shadowRoot.firstElementChild.classList.contains('
|
|
28
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('left')).toBeTruthy();
|
|
29
|
+
});
|
|
30
|
+
it('adds the left class on the container when align is "left"', async () => {
|
|
31
|
+
const page = await newSpecPage({
|
|
32
|
+
components: [Q2Popover],
|
|
33
|
+
html: `<q2-popover align="left"></q2-popover>`,
|
|
34
|
+
});
|
|
35
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('left')).toBeTruthy();
|
|
25
36
|
});
|
|
37
|
+
it('adds the right class on the container when align is "right"', async () => {
|
|
38
|
+
const page = await newSpecPage({
|
|
39
|
+
components: [Q2Popover],
|
|
40
|
+
html: `<q2-popover align="right"></q2-popover>`,
|
|
41
|
+
});
|
|
42
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('right')).toBeTruthy();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('block', () => {
|
|
46
|
+
it('adds the block class on the container when block is true', async () => {
|
|
47
|
+
const page = await newSpecPage({
|
|
48
|
+
components: [Q2Popover],
|
|
49
|
+
html: `<q2-popover block="true"></q2-popover>`,
|
|
50
|
+
});
|
|
51
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('block')).toBeTruthy();
|
|
52
|
+
});
|
|
53
|
+
it('does not add the block class when block is false', async () => {
|
|
54
|
+
const page = await newSpecPage({
|
|
55
|
+
components: [Q2Popover],
|
|
56
|
+
html: `<q2-popover block="false"></q2-popover>`,
|
|
57
|
+
});
|
|
58
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('block')).toBeFalsy();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('direction', () => {
|
|
62
|
+
const setupPopoverWithDirection = async (direction) => {
|
|
63
|
+
const page = await newSpecPage({
|
|
64
|
+
components: [Q2Popover],
|
|
65
|
+
html: `<q2-popover direction="${direction}"></q2-popover>`,
|
|
66
|
+
});
|
|
67
|
+
// Mock essential dependencies
|
|
68
|
+
window.visualViewport = { width: 800, height: 600 };
|
|
69
|
+
page.rootInstance.addViewportListeners = jest.fn();
|
|
70
|
+
page.rootInstance.controlElement = document.createElement('div');
|
|
71
|
+
// Simulate opening the popover and setting the direction
|
|
72
|
+
page.rootInstance.open = true;
|
|
73
|
+
page.rootInstance.currentDirection = direction;
|
|
74
|
+
page.rootInstance.show = true;
|
|
75
|
+
await page.waitForChanges();
|
|
76
|
+
return page;
|
|
77
|
+
};
|
|
78
|
+
it('adds the up class on the container when direction is "up" and popover is open', async () => {
|
|
79
|
+
const page = await setupPopoverWithDirection('up');
|
|
80
|
+
expect(page.rootInstance.currentDirection).toBe('up');
|
|
81
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('up')).toBeTruthy();
|
|
82
|
+
});
|
|
83
|
+
it('adds the down class on the container when direction is "down" and popover is open', async () => {
|
|
84
|
+
const page = await setupPopoverWithDirection('down');
|
|
85
|
+
expect(page.rootInstance.currentDirection).toBe('down');
|
|
86
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('down')).toBeTruthy();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('mode', () => {
|
|
26
90
|
it('adds the legacy class on the container when mode is "legacy"', async () => {
|
|
27
91
|
const page = await newSpecPage({
|
|
28
92
|
components: [Q2Popover],
|
|
@@ -30,9 +94,175 @@ describe('popover', () => {
|
|
|
30
94
|
});
|
|
31
95
|
expect(page.root.shadowRoot.firstElementChild.classList.contains('legacy')).toBeTruthy();
|
|
32
96
|
});
|
|
97
|
+
it('sets mode to legacy and adds the legacy class when Popover API is NOT supported at runtime', async () => {
|
|
98
|
+
const page = await newSpecPage({
|
|
99
|
+
components: [Q2Popover],
|
|
100
|
+
html: `<q2-popover></q2-popover>`,
|
|
101
|
+
});
|
|
102
|
+
expect(page.rootInstance.mode).toBe('legacy');
|
|
103
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('legacy')).toBeTruthy();
|
|
104
|
+
});
|
|
105
|
+
it('does not add the legacy class when Popover API is supported at runtime', async () => {
|
|
106
|
+
const page = await newSpecPage({
|
|
107
|
+
components: [Q2Popover],
|
|
108
|
+
html: `<q2-popover></q2-popover>`,
|
|
109
|
+
});
|
|
110
|
+
enablePopoverAPI();
|
|
111
|
+
page.rootInstance.mode = null;
|
|
112
|
+
page.rootInstance.componentWillLoad();
|
|
113
|
+
await page.waitForChanges();
|
|
114
|
+
expect(page.rootInstance.mode).not.toBe('legacy');
|
|
115
|
+
expect(page.root.shadowRoot.firstElementChild.classList.contains('legacy')).toBeFalsy();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('open', () => {
|
|
119
|
+
it('sets the open attribute on the hostElement when open is true', async () => {
|
|
120
|
+
const page = await newSpecPage({
|
|
121
|
+
components: [Q2Popover],
|
|
122
|
+
html: `<q2-popover></q2-popover>`,
|
|
123
|
+
});
|
|
124
|
+
page.rootInstance.addViewportListeners = jest.fn();
|
|
125
|
+
page.rootInstance.removeViewportListeners = jest.fn();
|
|
126
|
+
page.rootInstance.open = true;
|
|
127
|
+
await page.waitForChanges();
|
|
128
|
+
expect(page.rootInstance.hostElement.hasAttribute('open')).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
it('removes the open attribute on the hostElement when open is false', async () => {
|
|
131
|
+
const page = await newSpecPage({
|
|
132
|
+
components: [Q2Popover],
|
|
133
|
+
html: `<q2-popover></q2-popover>`,
|
|
134
|
+
});
|
|
135
|
+
page.rootInstance.addViewportListeners = jest.fn();
|
|
136
|
+
page.rootInstance.removeViewportListeners = jest.fn();
|
|
137
|
+
page.rootInstance.open = false;
|
|
138
|
+
await page.waitForChanges();
|
|
139
|
+
expect(page.rootInstance.hostElement.hasAttribute('open')).toBe(false);
|
|
140
|
+
});
|
|
33
141
|
});
|
|
34
142
|
});
|
|
35
|
-
describe('
|
|
143
|
+
describe('Events', () => {
|
|
144
|
+
describe('popoverStateChanged', () => {
|
|
145
|
+
let specPopover;
|
|
146
|
+
let page;
|
|
147
|
+
beforeEach(async () => {
|
|
148
|
+
page = await newSpecPage({
|
|
149
|
+
components: [Q2Popover],
|
|
150
|
+
html: `<q2-popover></q2-popover>`,
|
|
151
|
+
});
|
|
152
|
+
specPopover = page.rootInstance;
|
|
153
|
+
specPopover.addViewportListeners = jest.fn();
|
|
154
|
+
specPopover.removeViewportListeners = jest.fn();
|
|
155
|
+
});
|
|
156
|
+
it('emits popoverStateChanged when open changes to true', async () => {
|
|
157
|
+
const popoverStateChangedSpy = jest.spyOn(specPopover.popoverStateChanged, 'emit');
|
|
158
|
+
specPopover.open = true;
|
|
159
|
+
await page.waitForChanges();
|
|
160
|
+
expect(popoverStateChangedSpy).toHaveBeenCalledWith({ open: true });
|
|
161
|
+
});
|
|
162
|
+
it('emits popoverStateChanged when open changes to false', async () => {
|
|
163
|
+
const popoverStateChangedSpy = jest.spyOn(specPopover.popoverStateChanged, 'emit');
|
|
164
|
+
specPopover.open = false;
|
|
165
|
+
await page.waitForChanges();
|
|
166
|
+
expect(popoverStateChangedSpy).toHaveBeenCalledWith({ open: false });
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('Lifecycle Events', () => {
|
|
171
|
+
describe('disconnectedCallback', () => {
|
|
172
|
+
beforeEach(async () => {
|
|
173
|
+
specPopover = new Q2Popover();
|
|
174
|
+
specPopover.addViewportListeners = jest.fn();
|
|
175
|
+
specPopover.removeViewportListeners = jest.fn();
|
|
176
|
+
specPopover.containerElement = document.createElement('div');
|
|
177
|
+
specPopover.contentElement = document.createElement('div');
|
|
178
|
+
specPopover.controlElement = document.createElement('div');
|
|
179
|
+
});
|
|
180
|
+
it('calls removeViewportListeners', async () => {
|
|
181
|
+
specPopover.disconnectedCallback();
|
|
182
|
+
expect(specPopover.removeViewportListeners).toHaveBeenCalled();
|
|
183
|
+
});
|
|
184
|
+
it('removes the toggle event listener from containerElement', async () => {
|
|
185
|
+
const removeEventListenerSpy = jest.spyOn(specPopover.containerElement, 'removeEventListener');
|
|
186
|
+
specPopover.disconnectedCallback();
|
|
187
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('toggle', specPopover.handlePopoverToggleEvent);
|
|
188
|
+
});
|
|
189
|
+
it('sets containerElement to null', async () => {
|
|
190
|
+
expect(specPopover.containerElement).not.toBeNull();
|
|
191
|
+
specPopover.disconnectedCallback();
|
|
192
|
+
expect(specPopover.containerElement).toBeNull();
|
|
193
|
+
});
|
|
194
|
+
it('sets contentElement to null', async () => {
|
|
195
|
+
expect(specPopover.contentElement).not.toBeNull();
|
|
196
|
+
specPopover.disconnectedCallback();
|
|
197
|
+
expect(specPopover.contentElement).toBeNull();
|
|
198
|
+
});
|
|
199
|
+
it('sets controlElement to null', async () => {
|
|
200
|
+
expect(specPopover.controlElement).not.toBeNull();
|
|
201
|
+
specPopover.disconnectedCallback();
|
|
202
|
+
expect(specPopover.controlElement).toBeNull();
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe('componentDidLoad', () => {
|
|
206
|
+
it('calls handleMinHeight', async () => {
|
|
207
|
+
specPopover = new Q2Popover();
|
|
208
|
+
specPopover.handleMinHeight = jest.fn();
|
|
209
|
+
specPopover.componentDidLoad();
|
|
210
|
+
expect(specPopover.handleMinHeight).toHaveBeenCalled();
|
|
211
|
+
});
|
|
212
|
+
it('when Popover API is supported, it sets up the "toggle" Popover API event listener on container element', async () => {
|
|
213
|
+
specPopover = new Q2Popover();
|
|
214
|
+
enablePopoverAPI();
|
|
215
|
+
specPopover.containerElement = document.createElement('div');
|
|
216
|
+
specPopover.containerElement.addEventListener = jest.fn();
|
|
217
|
+
specPopover.componentDidLoad();
|
|
218
|
+
expect(specPopover.containerElement.addEventListener).toHaveBeenCalledWith('toggle', specPopover.handlePopoverToggleEvent);
|
|
219
|
+
});
|
|
220
|
+
it('when open is true it calls determinePopDirection', async () => {
|
|
221
|
+
specPopover = new Q2Popover();
|
|
222
|
+
specPopover.open = true;
|
|
223
|
+
specPopover.determinePopDirection = jest.fn();
|
|
224
|
+
specPopover.componentDidLoad();
|
|
225
|
+
expect(specPopover.determinePopDirection).toHaveBeenCalled();
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
describe('componentWillLoad', () => {
|
|
229
|
+
it('if supportsPopoverAPI is false it sets mode to "legacy"', async () => {
|
|
230
|
+
specPopover = new Q2Popover();
|
|
231
|
+
specPopover.componentWillLoad();
|
|
232
|
+
expect(specPopover.mode).toBe('legacy');
|
|
233
|
+
});
|
|
234
|
+
it('if supportsPopoverAPI is true it does NOT set mode to "legacy"', async () => {
|
|
235
|
+
specPopover = new Q2Popover();
|
|
236
|
+
enablePopoverAPI();
|
|
237
|
+
specPopover.componentWillLoad();
|
|
238
|
+
expect(specPopover.mode).toBeNull();
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe('Listeners', () => {
|
|
243
|
+
describe('popoverState', () => {
|
|
244
|
+
it('updates open property when event detail and attribute do not match', async () => {
|
|
245
|
+
specPopover = new Q2Popover();
|
|
246
|
+
specPopover.open = false;
|
|
247
|
+
specPopover.popoverStateHandler(new CustomEvent('popoverState', { detail: { open: true } }));
|
|
248
|
+
expect(specPopover.open).toBe(true);
|
|
249
|
+
});
|
|
250
|
+
it('does not update the open property if detail and attribute match', async () => {
|
|
251
|
+
specPopover = new Q2Popover();
|
|
252
|
+
specPopover.open = true;
|
|
253
|
+
specPopover.popoverStateHandler(new CustomEvent('popoverState', { detail: { open: true } }));
|
|
254
|
+
expect(specPopover.open).toBe(true);
|
|
255
|
+
});
|
|
256
|
+
it('calls stopPropogation on the event', async () => {
|
|
257
|
+
specPopover = new Q2Popover();
|
|
258
|
+
const event = new CustomEvent('popoverState', { detail: { open: true } });
|
|
259
|
+
const stopSpy = jest.spyOn(event, 'stopPropagation');
|
|
260
|
+
specPopover.popoverStateHandler(event);
|
|
261
|
+
expect(stopSpy).toHaveBeenCalled();
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
describe('Public Methods API', () => {
|
|
36
266
|
beforeEach(() => {
|
|
37
267
|
specPopover = new Q2Popover();
|
|
38
268
|
});
|
|
@@ -58,48 +288,520 @@ describe('popover', () => {
|
|
|
58
288
|
});
|
|
59
289
|
});
|
|
60
290
|
});
|
|
61
|
-
describe('
|
|
62
|
-
|
|
63
|
-
|
|
291
|
+
describe('Watchers', () => {
|
|
292
|
+
describe('minHeightProvided', () => {
|
|
293
|
+
it('calls handleMinHeight', async () => {
|
|
294
|
+
specPopover = new Q2Popover();
|
|
295
|
+
specPopover.handleMinHeight = jest.fn();
|
|
296
|
+
specPopover.minHeight = 100;
|
|
297
|
+
specPopover.minHeightProvided();
|
|
298
|
+
expect(specPopover.handleMinHeight).toHaveBeenCalled();
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
describe('openChanged', () => {
|
|
302
|
+
beforeEach(async () => {
|
|
303
|
+
specPopover = new Q2Popover();
|
|
304
|
+
specPopover.addViewportListeners = jest.fn();
|
|
305
|
+
specPopover.removeViewportListeners = jest.fn();
|
|
306
|
+
specPopover.determinePopDirection = jest.fn();
|
|
307
|
+
specPopover.clearCSSProperties = jest.fn();
|
|
308
|
+
});
|
|
309
|
+
it('calls popoverStateChanged with the new open value', async () => {
|
|
310
|
+
specPopover.popoverStateChanged = { emit: jest.fn() };
|
|
311
|
+
await specPopover.openChanged(true);
|
|
312
|
+
expect(specPopover.popoverStateChanged.emit).toHaveBeenCalledWith({ open: true });
|
|
313
|
+
});
|
|
314
|
+
describe('when open is true', () => {
|
|
315
|
+
it('calls addViewportListeners', async () => {
|
|
316
|
+
await specPopover.openChanged(true);
|
|
317
|
+
expect(specPopover.addViewportListeners).toHaveBeenCalled();
|
|
318
|
+
});
|
|
319
|
+
it('calls determinePopDirection', async () => {
|
|
320
|
+
await specPopover.openChanged(true);
|
|
321
|
+
expect(specPopover.determinePopDirection).toHaveBeenCalled();
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
describe('when open is false', () => {
|
|
325
|
+
it('calls removeViewportListeners', async () => {
|
|
326
|
+
await specPopover.openChanged(false);
|
|
327
|
+
expect(specPopover.removeViewportListeners).toHaveBeenCalled();
|
|
328
|
+
});
|
|
329
|
+
it('sets currentDirection to undefined', async () => {
|
|
330
|
+
specPopover.currentDirection = 'up';
|
|
331
|
+
expect(specPopover.currentDirection).toBe('up');
|
|
332
|
+
await specPopover.openChanged(false);
|
|
333
|
+
expect(specPopover.currentDirection).toBeUndefined();
|
|
334
|
+
});
|
|
335
|
+
it('sets show to false if mode is legacy', async () => {
|
|
336
|
+
specPopover.mode = 'legacy';
|
|
337
|
+
specPopover.show = true;
|
|
338
|
+
expect(specPopover.show).toBe(true);
|
|
339
|
+
await specPopover.openChanged(false);
|
|
340
|
+
expect(specPopover.show).toBe(false);
|
|
341
|
+
});
|
|
342
|
+
it('sets show to false if Popover API is not supported', async () => {
|
|
343
|
+
specPopover.show = true;
|
|
344
|
+
expect(specPopover.show).toBe(true);
|
|
345
|
+
await specPopover.openChanged(false);
|
|
346
|
+
expect(specPopover.show).toBe(false);
|
|
347
|
+
});
|
|
348
|
+
it('calls hidePopover if Popover API is supported', async () => {
|
|
349
|
+
enablePopoverAPI();
|
|
350
|
+
specPopover.containerElement = document.createElement('div');
|
|
351
|
+
specPopover.containerElement.hidePopover = jest.fn();
|
|
352
|
+
await specPopover.openChanged(false);
|
|
353
|
+
expect(specPopover.containerElement.hidePopover).toHaveBeenCalled();
|
|
354
|
+
});
|
|
355
|
+
it('calls clearCSSProperties', async () => {
|
|
356
|
+
await specPopover.openChanged(false);
|
|
357
|
+
expect(specPopover.clearCSSProperties).toHaveBeenCalled();
|
|
358
|
+
});
|
|
359
|
+
});
|
|
64
360
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
361
|
+
});
|
|
362
|
+
describe('Local Methods', () => {
|
|
363
|
+
describe('Getters', () => {
|
|
364
|
+
beforeEach(() => {
|
|
365
|
+
specPopover = new Q2Popover();
|
|
69
366
|
});
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
367
|
+
describe('isModule', () => {
|
|
368
|
+
it('returns false when window top matches window and platformDimensions is not defined', async () => {
|
|
369
|
+
expect(window.top).toBe(window);
|
|
370
|
+
expect(window.Tecton).toBeUndefined();
|
|
371
|
+
expect(specPopover.isModule).toBe(false);
|
|
372
|
+
});
|
|
373
|
+
it('returns false when window top does not match window and platformDimensions is not defined', async () => {
|
|
374
|
+
const windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
|
|
375
|
+
expect(window.top).not.toEqual(window);
|
|
376
|
+
expect(window.Tecton).toBeUndefined();
|
|
377
|
+
expect(specPopover.isModule).toBe(false);
|
|
378
|
+
windowSpy.mockRestore();
|
|
379
|
+
});
|
|
380
|
+
it('returns false when window top matches window and platformDimensions is defined', async () => {
|
|
381
|
+
window.Tecton = sampleTectonWindow;
|
|
382
|
+
expect(window.top).toBe(window);
|
|
383
|
+
expect(window.Tecton.platformDimensions).toBeTruthy();
|
|
384
|
+
expect(specPopover.isModule).toBe(false);
|
|
385
|
+
});
|
|
386
|
+
it('returns true when window top does not match window and platformDimensions is defined', async () => {
|
|
387
|
+
const windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
|
|
388
|
+
window.Tecton = sampleTectonWindow;
|
|
389
|
+
expect(specPopover.isModule).toBe(true);
|
|
390
|
+
windowSpy.mockRestore();
|
|
391
|
+
});
|
|
73
392
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
393
|
+
describe('providedDirection', () => {
|
|
394
|
+
it('returns direction when "up"', async () => {
|
|
395
|
+
specPopover.direction = 'up';
|
|
396
|
+
expect(specPopover.providedDirection).toBe('up');
|
|
397
|
+
});
|
|
398
|
+
it('returns direction when "down"', async () => {
|
|
399
|
+
specPopover.direction = 'down';
|
|
400
|
+
expect(specPopover.providedDirection).toBe('down');
|
|
401
|
+
});
|
|
402
|
+
it('returns undefined when not "up" or "down"', async () => {
|
|
403
|
+
specPopover.direction = 'bottom';
|
|
404
|
+
expect(specPopover.providedDirection).toBeUndefined();
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
describe('supportsPopoverAPI', () => {
|
|
408
|
+
it('returns false when Popover API is not supported', async () => {
|
|
409
|
+
specPopover = new Q2Popover();
|
|
410
|
+
expect(specPopover.supportsPopoverAPI).toBe(false);
|
|
411
|
+
});
|
|
412
|
+
it('returns true when Popover API is supported', async () => {
|
|
413
|
+
enablePopoverAPI();
|
|
414
|
+
specPopover = new Q2Popover();
|
|
415
|
+
expect(specPopover.supportsPopoverAPI).toBe(true);
|
|
416
|
+
});
|
|
77
417
|
});
|
|
78
418
|
});
|
|
79
|
-
describe('
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
419
|
+
describe('Methods', () => {
|
|
420
|
+
describe('addViewPortListeners', () => {
|
|
421
|
+
let specPopover;
|
|
422
|
+
let windowAddEventListenerSpy;
|
|
423
|
+
let visualViewportAddEventListenerSpy;
|
|
424
|
+
let screenOrientationAddEventListenerSpy;
|
|
425
|
+
beforeEach(() => {
|
|
426
|
+
specPopover = new Q2Popover();
|
|
427
|
+
windowAddEventListenerSpy = jest.spyOn(window, 'addEventListener');
|
|
428
|
+
// Mock visualViewport
|
|
429
|
+
const mockVisualViewport = {
|
|
430
|
+
addEventListener: jest.fn(),
|
|
431
|
+
removeEventListener: jest.fn(),
|
|
432
|
+
width: 800,
|
|
433
|
+
height: 600,
|
|
434
|
+
};
|
|
435
|
+
Object.defineProperty(window, 'visualViewport', {
|
|
436
|
+
value: mockVisualViewport,
|
|
437
|
+
configurable: true,
|
|
438
|
+
});
|
|
439
|
+
global.visualViewport = mockVisualViewport;
|
|
440
|
+
visualViewportAddEventListenerSpy = jest.spyOn(mockVisualViewport, 'addEventListener');
|
|
441
|
+
// Mock screen.orientation
|
|
442
|
+
const mockScreenOrientation = {
|
|
443
|
+
addEventListener: jest.fn(),
|
|
444
|
+
removeEventListener: jest.fn(),
|
|
445
|
+
};
|
|
446
|
+
const mockScreen = { orientation: mockScreenOrientation };
|
|
447
|
+
Object.defineProperty(window, 'screen', {
|
|
448
|
+
value: mockScreen,
|
|
449
|
+
configurable: true,
|
|
450
|
+
});
|
|
451
|
+
global.screen = mockScreen;
|
|
452
|
+
screenOrientationAddEventListenerSpy = jest.spyOn(mockScreenOrientation, 'addEventListener');
|
|
453
|
+
});
|
|
454
|
+
afterEach(() => {
|
|
455
|
+
windowAddEventListenerSpy.mockRestore();
|
|
456
|
+
visualViewportAddEventListenerSpy.mockRestore();
|
|
457
|
+
screenOrientationAddEventListenerSpy.mockRestore();
|
|
458
|
+
delete global.visualViewport;
|
|
459
|
+
delete global.screen;
|
|
460
|
+
delete window.visualViewport;
|
|
461
|
+
delete window.screen;
|
|
462
|
+
});
|
|
463
|
+
it('adds resize listener to window with viewPortOrientationChanged handler', () => {
|
|
464
|
+
specPopover.addViewportListeners();
|
|
465
|
+
expect(windowAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
|
|
466
|
+
});
|
|
467
|
+
it('adds resize listener to visualViewport with viewPortChanged handler', () => {
|
|
468
|
+
specPopover.addViewportListeners();
|
|
469
|
+
expect(visualViewportAddEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
|
|
470
|
+
});
|
|
471
|
+
it('adds scroll listener to window with viewPortChanged handler and proper options', () => {
|
|
472
|
+
specPopover.addViewportListeners();
|
|
473
|
+
expect(windowAddEventListenerSpy).toHaveBeenCalledWith('scroll', specPopover.viewPortChanged, {
|
|
474
|
+
passive: true,
|
|
475
|
+
capture: true,
|
|
476
|
+
});
|
|
477
|
+
});
|
|
478
|
+
it('adds orientationchange listener to screen.orientation with viewPortOrientationChanged handler', () => {
|
|
479
|
+
specPopover.addViewportListeners();
|
|
480
|
+
expect(screenOrientationAddEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
|
|
481
|
+
});
|
|
482
|
+
it('adds orientationchange listener to window with viewPortOrientationChanged handler', () => {
|
|
483
|
+
specPopover.addViewportListeners();
|
|
484
|
+
expect(windowAddEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
|
|
485
|
+
});
|
|
486
|
+
it('adds all expected listeners when called', () => {
|
|
487
|
+
specPopover.addViewportListeners();
|
|
488
|
+
expect(windowAddEventListenerSpy).toHaveBeenCalled();
|
|
489
|
+
expect(visualViewportAddEventListenerSpy).toHaveBeenCalled();
|
|
490
|
+
expect(screenOrientationAddEventListenerSpy).toHaveBeenCalled();
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
describe('clearCSSProperties', () => {
|
|
494
|
+
let specPopover;
|
|
495
|
+
let containerElement;
|
|
496
|
+
beforeEach(() => {
|
|
497
|
+
specPopover = new Q2Popover();
|
|
498
|
+
containerElement = document.createElement('div');
|
|
499
|
+
containerElement.style.setProperty('--comp-pop-max-height', '100px');
|
|
500
|
+
containerElement.style.setProperty('--comp-pop-top', '20px');
|
|
501
|
+
containerElement.style.setProperty('--comp-pop-bottom', '25px');
|
|
502
|
+
containerElement.style.setProperty('--comp-pop-left', '30px');
|
|
503
|
+
containerElement.style.setProperty('--comp-pop-right', '35px');
|
|
504
|
+
containerElement.style.setProperty('--comp-pop-width', '200px');
|
|
505
|
+
containerElement.style.setProperty('--comp-pop-opacity', '1');
|
|
506
|
+
specPopover.containerElement = containerElement;
|
|
507
|
+
});
|
|
508
|
+
it('clears the necessary CSS properties', async () => {
|
|
509
|
+
await specPopover.clearCSSProperties();
|
|
510
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
511
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
512
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
513
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBeFalsy();
|
|
514
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBeFalsy();
|
|
515
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBeFalsy();
|
|
516
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBeFalsy();
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
describe('determinePopDirection', () => {
|
|
520
|
+
let specPopover;
|
|
521
|
+
let controlElement;
|
|
522
|
+
let containerElement;
|
|
523
|
+
beforeEach(() => {
|
|
524
|
+
specPopover = new Q2Popover();
|
|
525
|
+
controlElement = document.createElement('div');
|
|
526
|
+
containerElement = document.createElement('div');
|
|
527
|
+
specPopover.controlElement = controlElement;
|
|
528
|
+
specPopover.containerElement = containerElement;
|
|
529
|
+
window.visualViewport = { width: 800, height: 600 };
|
|
530
|
+
specPopover.setDirectionAndShow = jest.fn();
|
|
531
|
+
});
|
|
532
|
+
it('sets the direction to up when control element has more space above it', async () => {
|
|
533
|
+
const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
|
|
534
|
+
top: 500,
|
|
535
|
+
bottom: 550,
|
|
536
|
+
});
|
|
537
|
+
await specPopover.determinePopDirection();
|
|
538
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
|
|
539
|
+
expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
|
|
540
|
+
controlSpy.mockRestore();
|
|
541
|
+
});
|
|
542
|
+
it('sets the direction to down when control element has more space below it', async () => {
|
|
543
|
+
const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
|
|
544
|
+
top: 100,
|
|
545
|
+
bottom: 150,
|
|
546
|
+
});
|
|
547
|
+
await specPopover.determinePopDirection();
|
|
548
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('440px');
|
|
549
|
+
expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
|
|
550
|
+
controlSpy.mockRestore();
|
|
551
|
+
});
|
|
552
|
+
});
|
|
553
|
+
describe('handleMinHeight', () => {
|
|
554
|
+
it('calls handleDeprecationWarning for minHeight', async () => {
|
|
555
|
+
specPopover = new Q2Popover();
|
|
556
|
+
const handleDeprecationMock = jest.fn();
|
|
557
|
+
handleDeprecationWarning = handleDeprecationMock;
|
|
558
|
+
specPopover.minHeight = 100;
|
|
559
|
+
specPopover.handleMinHeight();
|
|
560
|
+
expect(handleDeprecationWarning).toHaveBeenCalled();
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
describe('removeViewportListeners', () => {
|
|
564
|
+
let specPopover;
|
|
565
|
+
let windowRemoveEventListenerSpy;
|
|
566
|
+
let visualViewportRemoveEventListenerSpy;
|
|
567
|
+
let screenOrientationRemoveEventListenerSpy;
|
|
568
|
+
beforeEach(() => {
|
|
569
|
+
specPopover = new Q2Popover();
|
|
570
|
+
windowRemoveEventListenerSpy = jest.spyOn(window, 'removeEventListener');
|
|
571
|
+
// Mock visualViewport
|
|
572
|
+
const mockVisualViewport = {
|
|
573
|
+
removeEventListener: jest.fn(),
|
|
574
|
+
};
|
|
575
|
+
Object.defineProperty(window, 'visualViewport', {
|
|
576
|
+
value: mockVisualViewport,
|
|
577
|
+
configurable: true,
|
|
578
|
+
});
|
|
579
|
+
global.visualViewport = mockVisualViewport;
|
|
580
|
+
visualViewportRemoveEventListenerSpy = jest.spyOn(mockVisualViewport, 'removeEventListener');
|
|
581
|
+
// Mock screen.orientation
|
|
582
|
+
const mockScreenOrientation = {
|
|
583
|
+
removeEventListener: jest.fn(),
|
|
584
|
+
};
|
|
585
|
+
const mockScreen = { orientation: mockScreenOrientation };
|
|
586
|
+
Object.defineProperty(window, 'screen', {
|
|
587
|
+
value: mockScreen,
|
|
588
|
+
configurable: true,
|
|
589
|
+
});
|
|
590
|
+
global.screen = mockScreen;
|
|
591
|
+
screenOrientationRemoveEventListenerSpy = jest.spyOn(mockScreenOrientation, 'removeEventListener');
|
|
592
|
+
});
|
|
593
|
+
afterEach(() => {
|
|
594
|
+
windowRemoveEventListenerSpy.mockRestore();
|
|
595
|
+
visualViewportRemoveEventListenerSpy.mockRestore();
|
|
596
|
+
screenOrientationRemoveEventListenerSpy.mockRestore();
|
|
597
|
+
delete global.visualViewport;
|
|
598
|
+
delete global.screen;
|
|
599
|
+
delete window.visualViewport;
|
|
600
|
+
delete window.screen;
|
|
601
|
+
});
|
|
602
|
+
it('removes resize listener from window with viewPortOrientationChanged handler', () => {
|
|
603
|
+
specPopover.removeViewportListeners();
|
|
604
|
+
expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortOrientationChanged);
|
|
605
|
+
});
|
|
606
|
+
it('removes resize listener from visualViewport with viewPortChanged handler', () => {
|
|
607
|
+
specPopover.removeViewportListeners();
|
|
608
|
+
expect(visualViewportRemoveEventListenerSpy).toHaveBeenCalledWith('resize', specPopover.viewPortChanged);
|
|
609
|
+
});
|
|
610
|
+
it('removes scroll listener from window with viewPortChanged handler and proper options', () => {
|
|
611
|
+
specPopover.removeViewportListeners();
|
|
612
|
+
expect(windowRemoveEventListenerSpy).toHaveBeenNthCalledWith(2, 'scroll', specPopover.viewPortChanged, { capture: true });
|
|
613
|
+
});
|
|
614
|
+
it('removes orientationchange listener from screen.orientation with viewPortOrientationChanged handler', () => {
|
|
615
|
+
specPopover.removeViewportListeners();
|
|
616
|
+
expect(screenOrientationRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
|
|
617
|
+
});
|
|
618
|
+
it('removes orientationchange listener from window with viewPortOrientationChanged handler', () => {
|
|
619
|
+
specPopover.removeViewportListeners();
|
|
620
|
+
expect(windowRemoveEventListenerSpy).toHaveBeenCalledWith('orientationchange', specPopover.viewPortOrientationChanged);
|
|
621
|
+
});
|
|
622
|
+
});
|
|
623
|
+
describe('setAbsoluteCSSProperties', () => {
|
|
624
|
+
let specPopover;
|
|
625
|
+
let containerElement;
|
|
626
|
+
beforeEach(() => {
|
|
627
|
+
specPopover = new Q2Popover();
|
|
628
|
+
containerElement = document.createElement('div');
|
|
629
|
+
specPopover.mode = 'legacy';
|
|
630
|
+
specPopover.containerElement = containerElement;
|
|
631
|
+
const controlElement = document.createElement('div');
|
|
632
|
+
controlElement.getBoundingClientRect = jest.fn().mockReturnValue({
|
|
633
|
+
top: 20,
|
|
634
|
+
bottom: 70,
|
|
635
|
+
left: 30,
|
|
636
|
+
right: 80,
|
|
637
|
+
});
|
|
638
|
+
specPopover.controlElement = controlElement;
|
|
639
|
+
window.visualViewport = { width: 800, height: 600 };
|
|
640
|
+
});
|
|
641
|
+
it('sets the necessary CSS properties', async () => {
|
|
642
|
+
await specPopover.setAbsoluteCSSProperties();
|
|
643
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
644
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
645
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
646
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('0');
|
|
647
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('unset');
|
|
648
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('');
|
|
649
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBe('1');
|
|
650
|
+
});
|
|
651
|
+
it('sets the necessary CSS properties when align is right', async () => {
|
|
652
|
+
specPopover.align = 'right';
|
|
653
|
+
await specPopover.setAbsoluteCSSProperties();
|
|
654
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('unset');
|
|
655
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('0');
|
|
656
|
+
});
|
|
657
|
+
it('sets --comp-pop-bottom when direction is up', async () => {
|
|
658
|
+
specPopover.currentDirection = 'up';
|
|
659
|
+
await specPopover.setAbsoluteCSSProperties();
|
|
660
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
661
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('0px');
|
|
662
|
+
});
|
|
663
|
+
it('does not set --comp-pop-top when direction is down', async () => {
|
|
664
|
+
specPopover.currentDirection = 'down';
|
|
665
|
+
await specPopover.setAbsoluteCSSProperties();
|
|
666
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBe('');
|
|
667
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('');
|
|
668
|
+
});
|
|
669
|
+
it('sets --comp-pop-width when block is true', async () => {
|
|
670
|
+
specPopover.block = true;
|
|
671
|
+
await specPopover.setAbsoluteCSSProperties();
|
|
672
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('100%');
|
|
673
|
+
});
|
|
674
|
+
});
|
|
675
|
+
describe('setDirectionAndShow', () => {
|
|
676
|
+
let specPopover;
|
|
677
|
+
let containerElement;
|
|
678
|
+
beforeEach(() => {
|
|
679
|
+
specPopover = new Q2Popover();
|
|
680
|
+
containerElement = document.createElement('div');
|
|
681
|
+
specPopover.containerElement = containerElement;
|
|
682
|
+
specPopover.setPopoverAPICSSProperties = jest.fn();
|
|
683
|
+
specPopover.setAbsoluteCSSProperties = jest.fn();
|
|
684
|
+
specPopover.scrollContainerTo = jest.fn();
|
|
685
|
+
});
|
|
686
|
+
it('does nothing when open is false', async () => {
|
|
687
|
+
specPopover.open = false;
|
|
688
|
+
specPopover.setDirectionAndShow('up');
|
|
689
|
+
expect(specPopover.currentDirection).toBeUndefined();
|
|
690
|
+
expect(specPopover.show).toBe(false);
|
|
691
|
+
expect(specPopover.setPopoverAPICSSProperties).not.toHaveBeenCalled();
|
|
692
|
+
expect(specPopover.setAbsoluteCSSProperties).not.toHaveBeenCalled();
|
|
693
|
+
});
|
|
694
|
+
describe('when open is true', () => {
|
|
695
|
+
beforeEach(() => {
|
|
696
|
+
specPopover.open = true;
|
|
697
|
+
});
|
|
698
|
+
it('sets the direction, shows the popover, and sets fixed position properties', async () => {
|
|
699
|
+
enablePopoverAPI();
|
|
700
|
+
containerElement.showPopover = jest.fn();
|
|
701
|
+
specPopover.setDirectionAndShow('up');
|
|
702
|
+
expect(specPopover.currentDirection).toBe('up');
|
|
703
|
+
expect(specPopover.setPopoverAPICSSProperties).toHaveBeenCalled();
|
|
704
|
+
expect(specPopover.setAbsoluteCSSProperties).not.toHaveBeenCalled();
|
|
705
|
+
expect(containerElement.showPopover).toHaveBeenCalled();
|
|
706
|
+
});
|
|
707
|
+
it('sets the direction, shows the popover, and sets absolute position properties when mode is "legacy"', async () => {
|
|
708
|
+
specPopover.mode = 'legacy';
|
|
709
|
+
specPopover.setDirectionAndShow('up');
|
|
710
|
+
expect(specPopover.currentDirection).toBe('up');
|
|
711
|
+
expect(specPopover.show).toBe(true);
|
|
712
|
+
expect(specPopover.setPopoverAPICSSProperties).not.toHaveBeenCalled();
|
|
713
|
+
expect(specPopover.setAbsoluteCSSProperties).toHaveBeenCalled();
|
|
714
|
+
});
|
|
715
|
+
});
|
|
716
|
+
});
|
|
717
|
+
describe('setPopoverAPICSSProperties', () => {
|
|
718
|
+
let specPopover;
|
|
719
|
+
let containerElement;
|
|
720
|
+
beforeEach(() => {
|
|
721
|
+
window.visualViewport = { width: 800, height: 600, offsetTop: 0 };
|
|
722
|
+
window.innerHeight = 600;
|
|
723
|
+
window.scrollY = 0;
|
|
724
|
+
specPopover = new Q2Popover();
|
|
725
|
+
containerElement = document.createElement('div');
|
|
726
|
+
specPopover.containerElement = containerElement;
|
|
727
|
+
const controlElement = document.createElement('div');
|
|
728
|
+
controlElement.getBoundingClientRect = jest.fn().mockReturnValue({
|
|
729
|
+
top: 20,
|
|
730
|
+
bottom: 70,
|
|
731
|
+
left: 30,
|
|
732
|
+
right: 80,
|
|
733
|
+
});
|
|
734
|
+
specPopover.controlElement = controlElement;
|
|
735
|
+
});
|
|
736
|
+
it('sets the necessary CSS properties', async () => {
|
|
737
|
+
await specPopover.setPopoverAPICSSProperties();
|
|
738
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
739
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
740
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
741
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('30px');
|
|
742
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('unset');
|
|
743
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBeFalsy();
|
|
744
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBe('1');
|
|
745
|
+
});
|
|
746
|
+
it('sets --comp-pop-right when align is right', async () => {
|
|
747
|
+
specPopover.align = 'right';
|
|
748
|
+
await specPopover.setPopoverAPICSSProperties();
|
|
749
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('unset');
|
|
750
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('720px');
|
|
751
|
+
});
|
|
752
|
+
it('sets --comp-pop-bottom when direction is up', async () => {
|
|
753
|
+
specPopover.currentDirection = 'up';
|
|
754
|
+
await specPopover.setPopoverAPICSSProperties();
|
|
755
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
756
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('580px');
|
|
757
|
+
});
|
|
758
|
+
it('sets --comp-pop-top when direction is down', async () => {
|
|
759
|
+
specPopover.currentDirection = 'down';
|
|
760
|
+
await specPopover.setPopoverAPICSSProperties();
|
|
761
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBe('70px');
|
|
762
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
763
|
+
});
|
|
764
|
+
it('sets --comp-pop-width when block is true', async () => {
|
|
765
|
+
specPopover.block = true;
|
|
766
|
+
await specPopover.setPopoverAPICSSProperties();
|
|
767
|
+
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('0px');
|
|
768
|
+
});
|
|
769
|
+
});
|
|
770
|
+
describe('viewPortChanged', () => {
|
|
771
|
+
let specPopover;
|
|
772
|
+
let windowSpy;
|
|
773
|
+
beforeEach(() => {
|
|
774
|
+
specPopover = new Q2Popover();
|
|
775
|
+
windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
|
|
776
|
+
window.Tecton = sampleTectonWindow;
|
|
777
|
+
expect(specPopover.isModule).toBe(true);
|
|
778
|
+
specPopover.determinePopDirection = jest.fn();
|
|
779
|
+
});
|
|
780
|
+
afterEach(() => {
|
|
781
|
+
windowSpy.mockRestore();
|
|
782
|
+
});
|
|
783
|
+
it('calls determinePopDirection when open is true', async () => {
|
|
784
|
+
specPopover.open = true;
|
|
785
|
+
specPopover.viewPortChanged();
|
|
786
|
+
expect(specPopover.determinePopDirection).toHaveBeenCalled();
|
|
787
|
+
});
|
|
788
|
+
it('does nothing when open is false', async () => {
|
|
789
|
+
specPopover.open = false;
|
|
790
|
+
specPopover.viewPortChanged();
|
|
791
|
+
expect(specPopover.determinePopDirection).not.toHaveBeenCalled();
|
|
792
|
+
});
|
|
793
|
+
});
|
|
794
|
+
describe('viewPortOrientationChanged', () => {
|
|
795
|
+
let specPopover;
|
|
796
|
+
beforeEach(() => {
|
|
797
|
+
specPopover = new Q2Popover();
|
|
798
|
+
specPopover.viewPortChanged = jest.fn();
|
|
799
|
+
});
|
|
800
|
+
it('sets orientationChanged to true and calls viewportChanged', async () => {
|
|
801
|
+
specPopover.viewPortOrientationChanged();
|
|
802
|
+
expect(specPopover.orientationChanged).toBe(true);
|
|
803
|
+
expect(specPopover.viewPortChanged).toHaveBeenCalled();
|
|
804
|
+
});
|
|
103
805
|
});
|
|
104
806
|
});
|
|
105
807
|
});
|
|
@@ -199,399 +901,5 @@ describe('popover', () => {
|
|
|
199
901
|
});
|
|
200
902
|
});
|
|
201
903
|
});
|
|
202
|
-
describe('viewPortChanged', () => {
|
|
203
|
-
let specPopover;
|
|
204
|
-
let windowSpy;
|
|
205
|
-
beforeEach(() => {
|
|
206
|
-
specPopover = new Q2Popover();
|
|
207
|
-
windowSpy = jest.spyOn(window, 'top', 'get').mockReturnValue({});
|
|
208
|
-
window.Tecton = sampleTectonWindow;
|
|
209
|
-
expect(specPopover.isModule).toBe(true);
|
|
210
|
-
specPopover.determinePopDirection = jest.fn();
|
|
211
|
-
});
|
|
212
|
-
afterEach(() => {
|
|
213
|
-
windowSpy.mockRestore();
|
|
214
|
-
});
|
|
215
|
-
it('calls determinePopDirection when open is true', async () => {
|
|
216
|
-
specPopover.open = true;
|
|
217
|
-
await specPopover.viewPortChanged();
|
|
218
|
-
expect(specPopover.determinePopDirection).toHaveBeenCalled();
|
|
219
|
-
});
|
|
220
|
-
it('does nothing when open is false', async () => {
|
|
221
|
-
specPopover.open = false;
|
|
222
|
-
await specPopover.viewPortChanged();
|
|
223
|
-
expect(specPopover.determinePopDirection).not.toHaveBeenCalled();
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
describe('viewPortOrientationChanged', () => {
|
|
227
|
-
let specPopover;
|
|
228
|
-
beforeEach(() => {
|
|
229
|
-
specPopover = new Q2Popover();
|
|
230
|
-
specPopover.viewPortChanged = jest.fn();
|
|
231
|
-
});
|
|
232
|
-
it('sets orientationChanged to true and calls viewportChanged', async () => {
|
|
233
|
-
await specPopover.viewPortOrientationChanged();
|
|
234
|
-
expect(specPopover.orientationChanged).toBe(true);
|
|
235
|
-
expect(specPopover.viewPortChanged).toHaveBeenCalled();
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
describe('setFixedCSSProperties', () => {
|
|
239
|
-
let specPopover;
|
|
240
|
-
let containerElement;
|
|
241
|
-
beforeEach(() => {
|
|
242
|
-
window.visualViewport = { width: 800, height: 600 };
|
|
243
|
-
specPopover = new Q2Popover();
|
|
244
|
-
containerElement = document.createElement('div');
|
|
245
|
-
specPopover.containerElement = containerElement;
|
|
246
|
-
specPopover.rootElementRect = {
|
|
247
|
-
top: 0,
|
|
248
|
-
bottom: 0,
|
|
249
|
-
left: 0,
|
|
250
|
-
right: 0,
|
|
251
|
-
height: window.visualViewport.height,
|
|
252
|
-
width: window.visualViewport.width,
|
|
253
|
-
};
|
|
254
|
-
const controlElement = document.createElement('div');
|
|
255
|
-
controlElement.getBoundingClientRect = jest.fn().mockReturnValue({
|
|
256
|
-
top: 20,
|
|
257
|
-
bottom: 70,
|
|
258
|
-
left: 30,
|
|
259
|
-
right: 80,
|
|
260
|
-
});
|
|
261
|
-
specPopover.controlElement = controlElement;
|
|
262
|
-
});
|
|
263
|
-
it('sets the necessary CSS properties', async () => {
|
|
264
|
-
await specPopover.setFixedCSSProperties();
|
|
265
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
266
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
267
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
268
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('30px');
|
|
269
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('720px');
|
|
270
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBeFalsy();
|
|
271
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBe('1');
|
|
272
|
-
});
|
|
273
|
-
it('sets --comp-pop-bottom when direction is up', async () => {
|
|
274
|
-
specPopover.currentDirection = 'up';
|
|
275
|
-
await specPopover.setFixedCSSProperties();
|
|
276
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
277
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('580px');
|
|
278
|
-
});
|
|
279
|
-
it('sets --comp-pop-top when direction is down', async () => {
|
|
280
|
-
specPopover.currentDirection = 'down';
|
|
281
|
-
await specPopover.setFixedCSSProperties();
|
|
282
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBe('70px');
|
|
283
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
284
|
-
});
|
|
285
|
-
it('sets --comp-pop-width when block is true', async () => {
|
|
286
|
-
specPopover.block = true;
|
|
287
|
-
await specPopover.setFixedCSSProperties();
|
|
288
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('0px');
|
|
289
|
-
});
|
|
290
|
-
describe('when rootElementRect is bonkers', () => {
|
|
291
|
-
beforeEach(() => {
|
|
292
|
-
specPopover.rootElementRect = {
|
|
293
|
-
top: 50,
|
|
294
|
-
bottom: 650,
|
|
295
|
-
left: 50,
|
|
296
|
-
right: 750,
|
|
297
|
-
height: 600,
|
|
298
|
-
width: 700,
|
|
299
|
-
};
|
|
300
|
-
const controlElement = document.createElement('div');
|
|
301
|
-
controlElement.getBoundingClientRect = jest.fn().mockReturnValue({
|
|
302
|
-
top: 70,
|
|
303
|
-
bottom: 120,
|
|
304
|
-
left: 80,
|
|
305
|
-
right: 130,
|
|
306
|
-
});
|
|
307
|
-
specPopover.controlElement = controlElement;
|
|
308
|
-
});
|
|
309
|
-
it('sets the necessary CSS properties', async () => {
|
|
310
|
-
await specPopover.setFixedCSSProperties();
|
|
311
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
312
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
313
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
314
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('30px');
|
|
315
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('620px');
|
|
316
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBeFalsy();
|
|
317
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBe('1');
|
|
318
|
-
});
|
|
319
|
-
it('sets --comp-pop-bottom when direction is up', async () => {
|
|
320
|
-
specPopover.currentDirection = 'up';
|
|
321
|
-
await specPopover.setFixedCSSProperties();
|
|
322
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
323
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('580px');
|
|
324
|
-
});
|
|
325
|
-
it('sets --comp-pop-top when direction is down', async () => {
|
|
326
|
-
specPopover.currentDirection = 'down';
|
|
327
|
-
await specPopover.setFixedCSSProperties();
|
|
328
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBe('70px');
|
|
329
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
330
|
-
});
|
|
331
|
-
it('sets --comp-pop-width when block is true', async () => {
|
|
332
|
-
specPopover.block = true;
|
|
333
|
-
await specPopover.setFixedCSSProperties();
|
|
334
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('0px');
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
});
|
|
338
|
-
describe('setAbsoluteCSSProperties', () => {
|
|
339
|
-
let specPopover;
|
|
340
|
-
let containerElement;
|
|
341
|
-
beforeEach(() => {
|
|
342
|
-
specPopover = new Q2Popover();
|
|
343
|
-
containerElement = document.createElement('div');
|
|
344
|
-
specPopover.mode = 'legacy';
|
|
345
|
-
specPopover.containerElement = containerElement;
|
|
346
|
-
const controlElement = document.createElement('div');
|
|
347
|
-
controlElement.getBoundingClientRect = jest.fn().mockReturnValue({
|
|
348
|
-
top: 20,
|
|
349
|
-
bottom: 70,
|
|
350
|
-
left: 30,
|
|
351
|
-
right: 80,
|
|
352
|
-
});
|
|
353
|
-
specPopover.controlElement = controlElement;
|
|
354
|
-
window.visualViewport = { width: 800, height: 600 };
|
|
355
|
-
});
|
|
356
|
-
it('sets the necessary CSS properties', async () => {
|
|
357
|
-
await specPopover.setAbsoluteCSSProperties();
|
|
358
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
359
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
360
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
361
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('0');
|
|
362
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('unset');
|
|
363
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('');
|
|
364
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBe('1');
|
|
365
|
-
});
|
|
366
|
-
it('sets the necessary CSS properties when align is right', async () => {
|
|
367
|
-
specPopover.align = 'right';
|
|
368
|
-
await specPopover.setAbsoluteCSSProperties();
|
|
369
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBe('unset');
|
|
370
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBe('0');
|
|
371
|
-
});
|
|
372
|
-
it('sets --comp-pop-bottom when direction is up', async () => {
|
|
373
|
-
specPopover.currentDirection = 'up';
|
|
374
|
-
await specPopover.setAbsoluteCSSProperties();
|
|
375
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
376
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('0px');
|
|
377
|
-
});
|
|
378
|
-
it('does not set --comp-pop-top when direction is down', async () => {
|
|
379
|
-
specPopover.currentDirection = 'down';
|
|
380
|
-
await specPopover.setAbsoluteCSSProperties();
|
|
381
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBe('');
|
|
382
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBe('');
|
|
383
|
-
});
|
|
384
|
-
it('sets --comp-pop-width when block is true', async () => {
|
|
385
|
-
specPopover.block = true;
|
|
386
|
-
await specPopover.setAbsoluteCSSProperties();
|
|
387
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBe('100%');
|
|
388
|
-
});
|
|
389
|
-
});
|
|
390
|
-
describe('clearCSSProperties', () => {
|
|
391
|
-
let specPopover;
|
|
392
|
-
let containerElement;
|
|
393
|
-
beforeEach(() => {
|
|
394
|
-
specPopover = new Q2Popover();
|
|
395
|
-
containerElement = document.createElement('div');
|
|
396
|
-
containerElement.style.setProperty('--comp-pop-max-height', '100px');
|
|
397
|
-
containerElement.style.setProperty('--comp-pop-top', '20px');
|
|
398
|
-
containerElement.style.setProperty('--comp-pop-bottom', '25px');
|
|
399
|
-
containerElement.style.setProperty('--comp-pop-left', '30px');
|
|
400
|
-
containerElement.style.setProperty('--comp-pop-right', '35px');
|
|
401
|
-
containerElement.style.setProperty('--comp-pop-width', '200px');
|
|
402
|
-
containerElement.style.setProperty('--comp-pop-opacity', '1');
|
|
403
|
-
specPopover.containerElement = containerElement;
|
|
404
|
-
});
|
|
405
|
-
it('clears the necessary CSS properties', async () => {
|
|
406
|
-
await specPopover.clearCSSProperties();
|
|
407
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBeFalsy();
|
|
408
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-top')).toBeFalsy();
|
|
409
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-bottom')).toBeFalsy();
|
|
410
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-left')).toBeFalsy();
|
|
411
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-right')).toBeFalsy();
|
|
412
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-width')).toBeFalsy();
|
|
413
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-opacity')).toBeFalsy();
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
|
-
describe('setDirectionAndShow', () => {
|
|
417
|
-
let specPopover;
|
|
418
|
-
let containerElement;
|
|
419
|
-
beforeEach(() => {
|
|
420
|
-
specPopover = new Q2Popover();
|
|
421
|
-
containerElement = document.createElement('div');
|
|
422
|
-
specPopover.containerElement = containerElement;
|
|
423
|
-
specPopover.setRootElement = jest.fn();
|
|
424
|
-
specPopover.setFixedCSSProperties = jest.fn();
|
|
425
|
-
specPopover.setAbsoluteCSSProperties = jest.fn();
|
|
426
|
-
specPopover.scrollContainerTo = jest.fn();
|
|
427
|
-
});
|
|
428
|
-
it('does nothing when open is false', async () => {
|
|
429
|
-
specPopover.open = false;
|
|
430
|
-
await specPopover.setDirectionAndShow('up');
|
|
431
|
-
expect(specPopover.currentDirection).toBeUndefined();
|
|
432
|
-
expect(specPopover.show).toBe(false);
|
|
433
|
-
expect(specPopover.setRootElement).toHaveBeenCalled();
|
|
434
|
-
expect(specPopover.setFixedCSSProperties).not.toHaveBeenCalled();
|
|
435
|
-
expect(specPopover.setAbsoluteCSSProperties).not.toHaveBeenCalled();
|
|
436
|
-
});
|
|
437
|
-
describe('when open is true', () => {
|
|
438
|
-
beforeEach(() => {
|
|
439
|
-
specPopover.open = true;
|
|
440
|
-
});
|
|
441
|
-
it('sets the direction, shows the popover, and sets fixed position properties', async () => {
|
|
442
|
-
await specPopover.setDirectionAndShow('up');
|
|
443
|
-
expect(specPopover.currentDirection).toBe('up');
|
|
444
|
-
expect(specPopover.show).toBe(true);
|
|
445
|
-
expect(specPopover.setRootElement).toHaveBeenCalled();
|
|
446
|
-
expect(specPopover.setFixedCSSProperties).toHaveBeenCalled();
|
|
447
|
-
expect(specPopover.setAbsoluteCSSProperties).not.toHaveBeenCalled();
|
|
448
|
-
});
|
|
449
|
-
it('sets the direction, shows the popover, and sets absolute position properties when mode is "legacy"', async () => {
|
|
450
|
-
specPopover.mode = 'legacy';
|
|
451
|
-
await specPopover.setDirectionAndShow('up');
|
|
452
|
-
expect(specPopover.currentDirection).toBe('up');
|
|
453
|
-
expect(specPopover.show).toBe(true);
|
|
454
|
-
expect(specPopover.setRootElement).toHaveBeenCalled();
|
|
455
|
-
expect(specPopover.setFixedCSSProperties).not.toHaveBeenCalled();
|
|
456
|
-
expect(specPopover.setAbsoluteCSSProperties).toHaveBeenCalled();
|
|
457
|
-
});
|
|
458
|
-
});
|
|
459
|
-
});
|
|
460
|
-
describe('determinePopDirection', () => {
|
|
461
|
-
let specPopover;
|
|
462
|
-
let controlElement;
|
|
463
|
-
let containerElement;
|
|
464
|
-
beforeEach(() => {
|
|
465
|
-
specPopover = new Q2Popover();
|
|
466
|
-
controlElement = document.createElement('div');
|
|
467
|
-
containerElement = document.createElement('div');
|
|
468
|
-
specPopover.controlElement = controlElement;
|
|
469
|
-
specPopover.containerElement = containerElement;
|
|
470
|
-
window.visualViewport = { width: 800, height: 600 };
|
|
471
|
-
specPopover.setDirectionAndShow = jest.fn();
|
|
472
|
-
});
|
|
473
|
-
it('sets the direction to up when control element has more space above it', async () => {
|
|
474
|
-
const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
|
|
475
|
-
top: 500,
|
|
476
|
-
bottom: 550,
|
|
477
|
-
});
|
|
478
|
-
await specPopover.determinePopDirection();
|
|
479
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('490px');
|
|
480
|
-
expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('up');
|
|
481
|
-
controlSpy.mockRestore();
|
|
482
|
-
});
|
|
483
|
-
it('sets the direction to down when control element has more space below it', async () => {
|
|
484
|
-
const controlSpy = jest.spyOn(controlElement, 'getBoundingClientRect').mockReturnValue({
|
|
485
|
-
top: 100,
|
|
486
|
-
bottom: 150,
|
|
487
|
-
});
|
|
488
|
-
await specPopover.determinePopDirection();
|
|
489
|
-
expect(containerElement.style.getPropertyValue('--comp-pop-max-height')).toBe('440px');
|
|
490
|
-
expect(specPopover.setDirectionAndShow).toHaveBeenCalledWith('down');
|
|
491
|
-
controlSpy.mockRestore();
|
|
492
|
-
});
|
|
493
|
-
});
|
|
494
|
-
describe('openChanged', () => {
|
|
495
|
-
beforeEach(() => {
|
|
496
|
-
specPopover = new Q2Popover();
|
|
497
|
-
specPopover.setRootElement = jest.fn();
|
|
498
|
-
specPopover.addViewportListeners = jest.fn();
|
|
499
|
-
specPopover.determinePopDirection = jest.fn();
|
|
500
|
-
specPopover.removeViewportListeners = jest.fn();
|
|
501
|
-
specPopover.clearCSSProperties = jest.fn();
|
|
502
|
-
});
|
|
503
|
-
it('sets open to true when open is false', async () => {
|
|
504
|
-
specPopover.currentDirection = 'down';
|
|
505
|
-
specPopover.show = true;
|
|
506
|
-
await specPopover.openChanged(true);
|
|
507
|
-
expect(specPopover.currentDirection).toBe('down');
|
|
508
|
-
expect(specPopover.show).toBeTruthy();
|
|
509
|
-
expect(specPopover.setRootElement).toHaveBeenCalled();
|
|
510
|
-
expect(specPopover.addViewportListeners).toHaveBeenCalled();
|
|
511
|
-
expect(specPopover.determinePopDirection).toHaveBeenCalled();
|
|
512
|
-
expect(specPopover.removeViewportListeners).not.toHaveBeenCalled();
|
|
513
|
-
expect(specPopover.clearCSSProperties).not.toHaveBeenCalled();
|
|
514
|
-
});
|
|
515
|
-
it('sets open to false when open is true', async () => {
|
|
516
|
-
specPopover.currentDirection = 'down';
|
|
517
|
-
specPopover.show = true;
|
|
518
|
-
await specPopover.openChanged(false);
|
|
519
|
-
expect(specPopover.currentDirection).toBeUndefined();
|
|
520
|
-
expect(specPopover.show).toBeFalsy();
|
|
521
|
-
expect(specPopover.setRootElement).toHaveBeenCalled();
|
|
522
|
-
expect(specPopover.addViewportListeners).not.toHaveBeenCalled();
|
|
523
|
-
expect(specPopover.determinePopDirection).not.toHaveBeenCalled();
|
|
524
|
-
expect(specPopover.clearCSSProperties).toHaveBeenCalled();
|
|
525
|
-
expect(specPopover.clearCSSProperties).toHaveBeenCalled();
|
|
526
|
-
});
|
|
527
|
-
});
|
|
528
|
-
describe('setRootElement', () => {
|
|
529
|
-
let computedStyleStub = {};
|
|
530
|
-
const popoverDOMRect = {
|
|
531
|
-
top: 50,
|
|
532
|
-
bottom: 125,
|
|
533
|
-
left: 50,
|
|
534
|
-
right: 50,
|
|
535
|
-
height: 75,
|
|
536
|
-
width: 700,
|
|
537
|
-
};
|
|
538
|
-
beforeEach(() => {
|
|
539
|
-
computedStyleStub = {
|
|
540
|
-
transform: 'none',
|
|
541
|
-
filter: 'none',
|
|
542
|
-
perspective: 'none',
|
|
543
|
-
contain: 'none',
|
|
544
|
-
containerType: 'normal',
|
|
545
|
-
willChange: 'auto',
|
|
546
|
-
};
|
|
547
|
-
window.visualViewport = { width: 800, height: 600 };
|
|
548
|
-
specPopover = new Q2Popover();
|
|
549
|
-
window.getComputedStyle = jest.fn().mockReturnValue(computedStyleStub);
|
|
550
|
-
specPopover.hostElement.getBoundingClientRect = jest.fn().mockReturnValue(popoverDOMRect);
|
|
551
|
-
});
|
|
552
|
-
it('sets the rootElementRect by default', async () => {
|
|
553
|
-
await specPopover.setRootElement();
|
|
554
|
-
expect(specPopover.rootElementRect).toEqual({
|
|
555
|
-
top: 0,
|
|
556
|
-
bottom: 0,
|
|
557
|
-
left: 0,
|
|
558
|
-
right: 0,
|
|
559
|
-
height: 600,
|
|
560
|
-
width: 800,
|
|
561
|
-
});
|
|
562
|
-
});
|
|
563
|
-
describe('when a containing block is created by applying CSS properties', () => {
|
|
564
|
-
it('returns the currentElementRect when transform is applied', async () => {
|
|
565
|
-
computedStyleStub.transform = 'translate(10px, 20px)';
|
|
566
|
-
await specPopover.setRootElement();
|
|
567
|
-
expect(specPopover.rootElementRect).toEqual(popoverDOMRect);
|
|
568
|
-
});
|
|
569
|
-
it('returns the currentElementRect when filter is applied', async () => {
|
|
570
|
-
computedStyleStub.filter = 'blur(5px)';
|
|
571
|
-
await specPopover.setRootElement();
|
|
572
|
-
expect(specPopover.rootElementRect).toEqual(popoverDOMRect);
|
|
573
|
-
});
|
|
574
|
-
it('returns the currentElementRect when perspective is applied', async () => {
|
|
575
|
-
computedStyleStub.perspective = '100px';
|
|
576
|
-
await specPopover.setRootElement();
|
|
577
|
-
expect(specPopover.rootElementRect).toEqual(popoverDOMRect);
|
|
578
|
-
});
|
|
579
|
-
it('returns the currentElementRect when contain is applied', async () => {
|
|
580
|
-
computedStyleStub.contain = 'layout';
|
|
581
|
-
await specPopover.setRootElement();
|
|
582
|
-
expect(specPopover.rootElementRect).toEqual(popoverDOMRect);
|
|
583
|
-
});
|
|
584
|
-
it('returns the currentElementRect when containerType is applied', async () => {
|
|
585
|
-
computedStyleStub.containerType = 'none';
|
|
586
|
-
await specPopover.setRootElement();
|
|
587
|
-
expect(specPopover.rootElementRect).toEqual(popoverDOMRect);
|
|
588
|
-
});
|
|
589
|
-
it('returns the currentElementRect when willChange is applied', async () => {
|
|
590
|
-
computedStyleStub.willChange = 'transform';
|
|
591
|
-
await specPopover.setRootElement();
|
|
592
|
-
expect(specPopover.rootElementRect).toEqual(popoverDOMRect);
|
|
593
|
-
});
|
|
594
|
-
});
|
|
595
|
-
});
|
|
596
904
|
});
|
|
597
905
|
//# sourceMappingURL=q2-popover-test.spec.js.map
|