q2-tecton-elements 1.53.1 → 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 +59 -60
- 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 +4 -4
- 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 +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +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 +2 -2
- 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.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.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.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.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 +59 -59
- 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 +1 -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-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-example.js +1 -1
- package/dist/components/q2-formatted-text.js +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 +58 -59
- 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 +1 -1
- package/dist/components/tecton-tab-pane.js +2 -2
- package/dist/esm/click-elsewhere_2.entry.js +59 -60
- 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 +4 -4
- 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 +1 -1
- package/dist/esm/q2-editable-field.entry.js +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 +2 -2
- 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 +170 -164
- 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 +17 -17
- 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 +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +8 -8
- 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 +3 -3
- 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-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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-currency.js","sourceRoot":"","sources":["../../../src/components/q2-currency/q2-currency.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Watch, h, ComponentInterface, Element, Method } from '@stencil/core';\n@Component({ tag: 'q2-currency', shadow: true, styleUrl: 'q2-currency.scss' })\nexport class Q2Currency implements ComponentInterface {\n // #region Own Properties\n\n /** @private The parts of the formatted number. */\n formattedParts: Intl.NumberFormatPart[];\n /** @private The full currency for aria-label purposes. */\n readableCurrency: string;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** The amount you want formatted. */\n @Prop({ reflect: true })\n amount: number;\n\n /** Formats the `amount` to a specific currency. */\n @Prop({ reflect: true })\n currency: string = 'USD';\n\n /** Formats to the language provided. Accepts multiple locales in an array as sequential fallbacks. */\n @Prop({ reflect: true })\n locale: string | string[] = document.documentElement.lang || 'en-US';\n\n /**\n * Determine how the positive or negative sign should display.\n *\n * Behavior:\n * - `always`: Always display the sign.\n * - `auto`: Sign displays for negative numbers only, including negative zero.\n * - `exceptZero`: Sign displays for positive and negative numbers, but not zero.\n * - `never`: Never display the sign.\n */\n @Prop({ reflect: true })\n signDisplay: 'never' | 'auto' | 'always' | 'exceptZero' = 'auto';\n\n /** Applies styling based on the size provided. If no size is provided, it will display as inline text. */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n /** @private Inherited from q2-detail when slotted to match styling of q2-detail and q2-currency texts. */\n @Prop({ reflect: true })\n slotSize: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad(): void | Promise<void> {\n this.formatCurrency();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to select a tab pane corresponding with the value.\n *\n * @testOnly\n */\n @Method()\n async displayedMessageValue() {\n const currency = this.hostElement.shadowRoot.querySelector('[test-id=\"q2CurrencyInner\"]');\n return currency?.ariaLabel;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('amount')\n @Watch('currency')\n @Watch('locale')\n @Watch('size')\n @Watch('slotSize')\n @Watch('signDisplay')\n propsUpdated() {\n this.formatCurrency();\n }\n\n // #endregion\n // #region Local Methods\n\n get amountCore(): string {\n const { formattedParts, shouldSuperscriptFraction } = this;\n let amount: string = '';\n\n for (const part of formattedParts) {\n if (\n part.type === 'integer' ||\n part.type === 'decimal' ||\n part.type === 'group' ||\n part.type === 'literal'\n ) {\n amount += part.value;\n }\n }\n\n // removes trailing decimal point if superscripting the fraction\n if (shouldSuperscriptFraction && amount[amount.length - 1] === '.') amount = amount.slice(0, -1);\n // removes end whitespace that breaks formatting\n amount = amount.trimEnd();\n\n return amount;\n }\n\n get currencyClasses(): string {\n const classes = ['currency'];\n const sizeClass = this.size ? this.size : this.slotSize;\n\n if (!!sizeClass) classes.push(`currency-${sizeClass}`);\n\n return classes.join(' ');\n }\n\n get currencyIsFront(): boolean {\n const index = this.formattedParts.findIndex((part: Intl.NumberFormatPart) => part.type === 'currency');\n if (index === 0 || index === 1) return true;\n return false;\n }\n\n get currencySymbol(): string {\n const { formattedParts, currencyIsFront } = this;\n const currencyIndex = formattedParts.findIndex((part: Intl.NumberFormatPart) => part.type === 'currency');\n const symbol = formattedParts[currencyIndex].value;\n return currencyIsFront ? symbol : ' ' + symbol;\n }\n\n get fraction(): string {\n const { formattedParts } = this;\n const fraction = formattedParts.find((part: Intl.NumberFormatPart) => part.type === 'fraction');\n if (!fraction) return;\n\n return fraction.value;\n }\n\n get hasPlusMinusSign(): boolean {\n return this.formattedParts.some(\n (part: Intl.NumberFormatPart) => part.type === 'minusSign' || part.type === 'plusSign'\n );\n }\n\n get plusMinusSign(): string {\n const { formattedParts, hasPlusMinusSign } = this;\n if (!hasPlusMinusSign) return;\n\n const sign = formattedParts.find(\n (part: Intl.NumberFormatPart) => part.type === 'minusSign' || part.type === 'plusSign'\n );\n return sign.value;\n }\n\n get shouldSuperscriptFraction(): boolean {\n const fractionIndex = this.formattedParts.findIndex((part: Intl.NumberFormatPart) => part.type === 'fraction');\n const commaBeforeFraction = this.formattedParts[fractionIndex - 1].value === ',';\n\n if (commaBeforeFraction || !this.currencyIsFront || this.sizeValue === 'small' || !this.sizeProvided)\n return false;\n\n return true;\n }\n\n get shouldSuperscriptSymbol(): boolean {\n if (!this.currencyIsFront || this.sizeProvided) return true;\n\n return false;\n }\n\n get sizeProvided(): boolean {\n return !!this.size || !!this.slotSize;\n }\n\n get sizeValue(): string {\n return this.size ? this.size : this.slotSize;\n }\n\n formatCurrency() {\n const formatOptions = new Intl.NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n signDisplay: this.signDisplay,\n });\n this.formattedParts = formatOptions.formatToParts(this.amount);\n this.readableCurrency = formatOptions.format(this.amount);\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const {\n hasPlusMinusSign,\n plusMinusSign,\n currencyIsFront,\n currencySymbol,\n shouldSuperscriptSymbol,\n amountCore,\n fraction,\n shouldSuperscriptFraction,\n readableCurrency,\n currencyClasses,\n } = this;\n\n return (\n <div\n test-id=\"q2CurrencyInner\"\n class={currencyClasses}\n aria-label={readableCurrency}\n >\n {hasPlusMinusSign && <span>{plusMinusSign}</span>}\n {currencyIsFront && <span class={shouldSuperscriptSymbol ? 'superscript' : ''}>{currencySymbol}</span>}\n <span>{amountCore}</span>\n <span class={shouldSuperscriptFraction ? 'superscript' : ''}>{fraction}</span>\n {!currencyIsFront && <span class={shouldSuperscriptSymbol ? 'superscript' : ''}>{currencySymbol}</span>}\n </div>\n );\n }\n\n // #endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"q2-currency.js","sourceRoot":"","sources":["../../../../src/components/q2-currency/q2-currency.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Watch, h, ComponentInterface, Element, Method } from '@stencil/core';\n@Component({ tag: 'q2-currency', shadow: true, styleUrl: 'q2-currency.scss' })\nexport class Q2Currency implements ComponentInterface {\n // #region Own Properties\n\n /** @private The parts of the formatted number. */\n formattedParts: Intl.NumberFormatPart[];\n /** @private The full currency for aria-label purposes. */\n readableCurrency: string;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** The amount you want formatted. */\n @Prop({ reflect: true })\n amount: number;\n\n /** Formats the `amount` to a specific currency. */\n @Prop({ reflect: true })\n currency: string = 'USD';\n\n /** Formats to the language provided. Accepts multiple locales in an array as sequential fallbacks. */\n @Prop({ reflect: true })\n locale: string | string[] = document.documentElement.lang || 'en-US';\n\n /**\n * Determine how the positive or negative sign should display.\n *\n * Behavior:\n * - `always`: Always display the sign.\n * - `auto`: Sign displays for negative numbers only, including negative zero.\n * - `exceptZero`: Sign displays for positive and negative numbers, but not zero.\n * - `never`: Never display the sign.\n */\n @Prop({ reflect: true })\n signDisplay: 'never' | 'auto' | 'always' | 'exceptZero' = 'auto';\n\n /** Applies styling based on the size provided. If no size is provided, it will display as inline text. */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n /** @private Inherited from q2-detail when slotted to match styling of q2-detail and q2-currency texts. */\n @Prop({ reflect: true })\n slotSize: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad(): void | Promise<void> {\n this.formatCurrency();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to select a tab pane corresponding with the value.\n *\n * @testOnly\n */\n @Method()\n async displayedMessageValue() {\n const currency = this.hostElement.shadowRoot.querySelector('[test-id=\"q2CurrencyInner\"]');\n return currency?.ariaLabel;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('amount')\n @Watch('currency')\n @Watch('locale')\n @Watch('size')\n @Watch('slotSize')\n @Watch('signDisplay')\n propsUpdated() {\n this.formatCurrency();\n }\n\n // #endregion\n // #region Local Methods\n\n get amountCore(): string {\n const { formattedParts, shouldSuperscriptFraction } = this;\n let amount: string = '';\n\n for (const part of formattedParts) {\n if (\n part.type === 'integer' ||\n part.type === 'decimal' ||\n part.type === 'group' ||\n part.type === 'literal'\n ) {\n amount += part.value;\n }\n }\n\n // removes trailing decimal point if superscripting the fraction\n if (shouldSuperscriptFraction && amount[amount.length - 1] === '.') amount = amount.slice(0, -1);\n // removes end whitespace that breaks formatting\n amount = amount.trimEnd();\n\n return amount;\n }\n\n get currencyClasses(): string {\n const classes = ['currency'];\n const sizeClass = this.size ? this.size : this.slotSize;\n\n if (!!sizeClass) classes.push(`currency-${sizeClass}`);\n\n return classes.join(' ');\n }\n\n get currencyIsFront(): boolean {\n const index = this.formattedParts.findIndex((part: Intl.NumberFormatPart) => part.type === 'currency');\n if (index === 0 || index === 1) return true;\n return false;\n }\n\n get currencySymbol(): string {\n const { formattedParts, currencyIsFront } = this;\n const currencyIndex = formattedParts.findIndex((part: Intl.NumberFormatPart) => part.type === 'currency');\n const symbol = formattedParts[currencyIndex].value;\n return currencyIsFront ? symbol : ' ' + symbol;\n }\n\n get fraction(): string {\n const { formattedParts } = this;\n const fraction = formattedParts.find((part: Intl.NumberFormatPart) => part.type === 'fraction');\n if (!fraction) return;\n\n return fraction.value;\n }\n\n get hasPlusMinusSign(): boolean {\n return this.formattedParts.some(\n (part: Intl.NumberFormatPart) => part.type === 'minusSign' || part.type === 'plusSign'\n );\n }\n\n get plusMinusSign(): string {\n const { formattedParts, hasPlusMinusSign } = this;\n if (!hasPlusMinusSign) return;\n\n const sign = formattedParts.find(\n (part: Intl.NumberFormatPart) => part.type === 'minusSign' || part.type === 'plusSign'\n );\n return sign.value;\n }\n\n get shouldSuperscriptFraction(): boolean {\n const fractionIndex = this.formattedParts.findIndex((part: Intl.NumberFormatPart) => part.type === 'fraction');\n const commaBeforeFraction = this.formattedParts[fractionIndex - 1].value === ',';\n\n if (commaBeforeFraction || !this.currencyIsFront || this.sizeValue === 'small' || !this.sizeProvided)\n return false;\n\n return true;\n }\n\n get shouldSuperscriptSymbol(): boolean {\n if (!this.currencyIsFront || this.sizeProvided) return true;\n\n return false;\n }\n\n get sizeProvided(): boolean {\n return !!this.size || !!this.slotSize;\n }\n\n get sizeValue(): string {\n return this.size ? this.size : this.slotSize;\n }\n\n formatCurrency() {\n const formatOptions = new Intl.NumberFormat(this.locale, {\n style: 'currency',\n currency: this.currency,\n signDisplay: this.signDisplay,\n });\n this.formattedParts = formatOptions.formatToParts(this.amount);\n this.readableCurrency = formatOptions.format(this.amount);\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const {\n hasPlusMinusSign,\n plusMinusSign,\n currencyIsFront,\n currencySymbol,\n shouldSuperscriptSymbol,\n amountCore,\n fraction,\n shouldSuperscriptFraction,\n readableCurrency,\n currencyClasses,\n } = this;\n\n return (\n <div\n test-id=\"q2CurrencyInner\"\n class={currencyClasses}\n aria-label={readableCurrency}\n >\n {hasPlusMinusSign && <span>{plusMinusSign}</span>}\n {currencyIsFront && <span class={shouldSuperscriptSymbol ? 'superscript' : ''}>{currencySymbol}</span>}\n <span>{amountCore}</span>\n <span class={shouldSuperscriptFraction ? 'superscript' : ''}>{fraction}</span>\n {!currencyIsFront && <span class={shouldSuperscriptSymbol ? 'superscript' : ''}>{currencySymbol}</span>}\n </div>\n );\n }\n\n // #endregion\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-currency-test.e2e.js","sourceRoot":"","sources":["../../../../src/components/q2-currency/test/q2-currency-test.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,SAAS,iBAAiB,CAAC,KAO1B;IACG,IAAI,SAAS,GAAW,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,SAAS,IAAI,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,SAAS,IAAI,cAAc,KAAK,CAAC,QAAQ,GAAG,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,SAAS,IAAI,YAAY,KAAK,CAAC,MAAM,GAAG,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,SAAS,IAAI,UAAU,KAAK,CAAC,IAAI,GAAG,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,SAAS,IAAI,kBAAkB,KAAK,CAAC,WAAW,GAAG,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,SAAS,IAAI,eAAe,KAAK,CAAC,QAAQ,GAAG,CAAC;IAClD,CAAC;IACD,OAAO,WAAW,CAAC;QACf,UAAU,EAAE,CAAC,UAAU,CAAC;QACxB,IAAI,EAAE,gBAAgB,SAAS,iBAAiB;KACnD,CAAC,CAAC;AACP,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,+BAA+B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,IAAI,IAAc,CAAC;IAEnB,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACrB,IAAI,GAAG,MAAM,iBAAiB,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;SAS7B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;gBACtC,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAC5C,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,CAAC,OAAO;oBAChB,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;iBAU7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;gBACjD,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBAC7C,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;YAClB,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;gBAC3B,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,OAAO;iBAChB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBAC5B,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,QAAQ;iBACjB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;gBAC3B,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,OAAO;iBAChB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;YACzB,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC7C,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;oBAC7C,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,CAAC,OAAO;wBAChB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;qBAClB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;qBAU7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;oBAC/C,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,CAAC,OAAO;wBAChB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,QAAQ;qBACxB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;qBAU7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;oBAC/D,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,CAAC,CAAC;wBACV,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,YAAY;qBAC5B,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;oBAEH,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,CAAC,OAAO;wBAChB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,YAAY;qBAC5B,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;qBAU7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;oBAC/C,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,CAAC,OAAO;wBAChB,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,OAAO;qBACvB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC7C,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;oBACpD,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;qBAClB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;oBAClD,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,QAAQ;qBACxB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;qBAU7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;oBACpE,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,YAAY;qBAC5B,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;yBASzB,CAAC,CAAC;oBAEP,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,YAAY;qBAC5B,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;yBAUzB,CAAC,CAAC;gBACX,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;oBAC/C,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,WAAW,EAAE,OAAO;qBACvB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACtB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC3B,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;oBAC5C,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,QAAQ;qBACrB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;oBACrE,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;wBACf,IAAI,EAAE,OAAO;wBACb,QAAQ,EAAE,OAAO;qBACpB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC/B,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;oBACvC,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC3B,MAAM,EAAE,OAAO;wBACf,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,OAAO;qBAClB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;qBAS7B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACnF,IAAI,GAAG,MAAM,iBAAiB,CAAC;gBAC3B,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;iBAUzB,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAC5C,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,QAAQ;iBACjB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBACvD,IAAI,GAAG,MAAM,iBAAiB,CAAC;oBAC3B,MAAM,EAAE,OAAO;oBACf,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,OAAO;iBAClB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;iBAS7B,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC3B,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC,CAAC;gBACvE,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC/C,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC1B,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;gBAC/D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAC,CAAC;gBACnF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;gBACjE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { SpecPage, newSpecPage } from '@stencil/core/testing';\nimport { setup, evaluateA11y, getListOfStyleCompilationIssues } from '@/utils/helpers';\nimport { Q2Currency } from '../q2-currency';\n\nfunction createNewSpecPage(props: {\n amount?: number;\n currency?: string;\n locale?: string;\n size?: string;\n slotSize?: string;\n signDisplay?: string;\n}) {\n let htmlProps: string = '';\n if (!isNaN(props.amount)) {\n htmlProps += ` amount=${props.amount}`;\n }\n if (!!props.currency) {\n htmlProps += ` currency=\"${props.currency}\"`;\n }\n if (!!props.locale) {\n htmlProps += ` locale=\"${props.locale}\"`;\n }\n if (!!props.size) {\n htmlProps += ` size=\"${props.size}\"`;\n }\n if (!!props.signDisplay) {\n htmlProps += ` sign-display=\"${props.signDisplay}\"`;\n }\n if (!!props.slotSize) {\n htmlProps += ` slot-size=\"${props.slotSize}\"`;\n }\n return newSpecPage({\n components: [Q2Currency],\n html: `<q2-currency ${htmlProps}></q2-currency>`,\n });\n}\n\ndescribe('q2-currency', () => {\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-currency></q2-currency>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-currency')).toHaveLength(0);\n });\n\n let page: SpecPage;\n\n it('renders', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n describe('Props', () => {\n describe('amount', () => {\n it('should render the amount', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.amount).toBe(1234.56);\n });\n it('should accept negative numbers', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.amount).toBe(-1234.56);\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('currency', () => {\n it('renders appropriate currency symbol', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'EUR',\n locale: 'en-US',\n });\n expect(page.root.currency).toBe('EUR');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"EUR\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"€1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>€</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('locale', () => {\n it('renders according to the locale', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'es-MX',\n });\n expect(page.root.locale).toBe('es-MX');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"es-MX\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"USD 1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>USD</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('size', () => {\n it('renders small', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'small',\n });\n expect(page.root.size).toBe('small');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"small\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-small\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n it('renders medium', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'medium',\n });\n expect(page.root.size).toBe('medium');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n it('renders large', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'large',\n });\n expect(page.root.size).toBe('large');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"large\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-large\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n\n describe('signDisplay', () => {\n describe('when currency value is negative', () => {\n it('renders a negative sign on auto', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.signDisplay).toBe('auto');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('renders a negative sign on always', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'always',\n });\n expect(page.root.signDisplay).toBe('always');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"always\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('renders only when value is not zero on exceptZero', async () => {\n page = await createNewSpecPage({\n amount: -0,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"0\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"$0.00\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>0.</span>\n <span>00</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('does not render when set to never', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'never',\n });\n expect(page.root.signDisplay).toBe('never');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"never\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('when currency value is positive', () => {\n it('does not display positive sign on auto', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.signDisplay).toBe('auto');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('displays the positive sign on always', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'always',\n });\n expect(page.root.signDisplay).toBe('always');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"always\">\n <mock:shadow-root>\n <div aria-label=\"+$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>+</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('renders sign only when value is not zero on exceptZero', async () => {\n page = await createNewSpecPage({\n amount: 0,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"0\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"$0.00\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>0.</span>\n <span>00</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"+$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>+</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('does not render when set to never', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'never',\n });\n expect(page.root.signDisplay).toBe('never');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"never\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n });\n\n describe('slotSize', () => {\n describe('when provided', () => {\n it('applies size class to currency', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n slotSize: 'medium',\n });\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" slot-size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('does NOT apply if the size property is already provided', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'large',\n slotSize: 'small',\n });\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"large\" slot-size=\"small\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-large\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('when not provided', () => {\n it('does NOT apply size class', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n });\n });\n\n describe('superscript styling behavior', () => {\n it('if the fraction separator is a comma, do not superscript the fraction', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'DKK',\n locale: 'da-DK',\n size: 'medium',\n });\n expect(page.root.currency).toBe('DKK');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"DKK\" locale=\"da-DK\" size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"1.234,56 kr.\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span>1.234,</span>\n <span>56</span>\n <span class='superscript'>kr.</span>\n </mock:shadow-root>\n </q2-currency>\n\n `);\n });\n\n describe('in relation to size property', () => {\n it('if provided: apply superscript', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'medium',\n });\n expect(page.root.size).toBe('medium');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n it('if NOT provided: do NOT apply superscript', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.size).toBe(undefined);\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({ html: `<q2-currency amount=\"1234.56\" />` });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {});\n describe('Other', () => {});\n });\n\n describe('Test methods', () => {\n describe('displayedMessageValue', () => {\n it('should show currency value with proper formatting', async () => {\n const page = await setup({ html: '<q2-currency amount=\"1234.56\"></q2-currency>' });\n const currency = await page.find('q2-currency');\n const value = await currency.callMethod('displayedMessageValue');\n await page.waitForChanges();\n expect(value).toBe('$1,234.56');\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"q2-currency-test.e2e.js","sourceRoot":"","sources":["../../../../../src/components/q2-currency/test/q2-currency-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { SpecPage, newSpecPage } from '@stencil/core/testing';\nimport { setup, evaluateA11y, getListOfStyleCompilationIssues } from '@/utils/helpers';\nimport { Q2Currency } from '../q2-currency';\n\nfunction createNewSpecPage(props: {\n amount?: number;\n currency?: string;\n locale?: string;\n size?: string;\n slotSize?: string;\n signDisplay?: string;\n}) {\n let htmlProps: string = '';\n if (!isNaN(props.amount)) {\n htmlProps += ` amount=${props.amount}`;\n }\n if (!!props.currency) {\n htmlProps += ` currency=\"${props.currency}\"`;\n }\n if (!!props.locale) {\n htmlProps += ` locale=\"${props.locale}\"`;\n }\n if (!!props.size) {\n htmlProps += ` size=\"${props.size}\"`;\n }\n if (!!props.signDisplay) {\n htmlProps += ` sign-display=\"${props.signDisplay}\"`;\n }\n if (!!props.slotSize) {\n htmlProps += ` slot-size=\"${props.slotSize}\"`;\n }\n return newSpecPage({\n components: [Q2Currency],\n html: `<q2-currency ${htmlProps}></q2-currency>`,\n });\n}\n\ndescribe('q2-currency', () => {\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-currency></q2-currency>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-currency')).toHaveLength(0);\n });\n\n let page: SpecPage;\n\n it('renders', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n describe('Props', () => {\n describe('amount', () => {\n it('should render the amount', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.amount).toBe(1234.56);\n });\n it('should accept negative numbers', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.amount).toBe(-1234.56);\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('currency', () => {\n it('renders appropriate currency symbol', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'EUR',\n locale: 'en-US',\n });\n expect(page.root.currency).toBe('EUR');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"EUR\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"€1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>€</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('locale', () => {\n it('renders according to the locale', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'es-MX',\n });\n expect(page.root.locale).toBe('es-MX');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"es-MX\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"USD 1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>USD</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('size', () => {\n it('renders small', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'small',\n });\n expect(page.root.size).toBe('small');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"small\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-small\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n it('renders medium', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'medium',\n });\n expect(page.root.size).toBe('medium');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n it('renders large', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'large',\n });\n expect(page.root.size).toBe('large');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"large\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-large\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n\n describe('signDisplay', () => {\n describe('when currency value is negative', () => {\n it('renders a negative sign on auto', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.signDisplay).toBe('auto');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('renders a negative sign on always', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'always',\n });\n expect(page.root.signDisplay).toBe('always');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"always\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('renders only when value is not zero on exceptZero', async () => {\n page = await createNewSpecPage({\n amount: -0,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"0\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"$0.00\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>0.</span>\n <span>00</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"-$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>-</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('does not render when set to never', async () => {\n page = await createNewSpecPage({\n amount: -1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'never',\n });\n expect(page.root.signDisplay).toBe('never');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"-1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"never\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('when currency value is positive', () => {\n it('does not display positive sign on auto', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.signDisplay).toBe('auto');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('displays the positive sign on always', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'always',\n });\n expect(page.root.signDisplay).toBe('always');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"always\">\n <mock:shadow-root>\n <div aria-label=\"+$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>+</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('renders sign only when value is not zero on exceptZero', async () => {\n page = await createNewSpecPage({\n amount: 0,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"0\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"$0.00\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>0.</span>\n <span>00</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'exceptZero',\n });\n expect(page.root.signDisplay).toBe('exceptZero');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"exceptZero\">\n <mock:shadow-root>\n <div aria-label=\"+$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>+</span>\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('does not render when set to never', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n signDisplay: 'never',\n });\n expect(page.root.signDisplay).toBe('never');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"never\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n });\n\n describe('slotSize', () => {\n describe('when provided', () => {\n it('applies size class to currency', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n slotSize: 'medium',\n });\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" slot-size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n it('does NOT apply if the size property is already provided', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'large',\n slotSize: 'small',\n });\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"large\" slot-size=\"small\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-large\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n describe('when not provided', () => {\n it('does NOT apply size class', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n });\n });\n\n describe('superscript styling behavior', () => {\n it('if the fraction separator is a comma, do not superscript the fraction', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'DKK',\n locale: 'da-DK',\n size: 'medium',\n });\n expect(page.root.currency).toBe('DKK');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"DKK\" locale=\"da-DK\" size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"1.234,56 kr.\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span>1.234,</span>\n <span>56</span>\n <span class='superscript'>kr.</span>\n </mock:shadow-root>\n </q2-currency>\n\n `);\n });\n\n describe('in relation to size property', () => {\n it('if provided: apply superscript', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n size: 'medium',\n });\n expect(page.root.size).toBe('medium');\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" size=\"medium\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency currency-medium\" test-id=\"q2CurrencyInner\">\n <span class='superscript'>$</span>\n <span>1,234</span>\n <span class='superscript'>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n\n it('if NOT provided: do NOT apply superscript', async () => {\n page = await createNewSpecPage({\n amount: 1234.56,\n currency: 'USD',\n locale: 'en-US',\n });\n expect(page.root.size).toBe(undefined);\n expect(page.root).toEqualHtml(`\n <q2-currency amount=\"1234.56\" currency=\"USD\" locale=\"en-US\" sign-display=\"auto\">\n <mock:shadow-root>\n <div aria-label=\"$1,234.56\" class=\"currency\" test-id=\"q2CurrencyInner\">\n <span>$</span>\n <span>1,234.</span>\n <span>56</span>\n </mock:shadow-root>\n </q2-currency>\n `);\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({ html: `<q2-currency amount=\"1234.56\" />` });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {});\n describe('Other', () => {});\n });\n\n describe('Test methods', () => {\n describe('displayedMessageValue', () => {\n it('should show currency value with proper formatting', async () => {\n const page = await setup({ html: '<q2-currency amount=\"1234.56\"></q2-currency>' });\n const currency = await page.find('q2-currency');\n const value = await currency.callMethod('displayedMessageValue');\n await page.waitForChanges();\n expect(value).toBe('$1,234.56');\n });\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-data-table.js","sourceRoot":"","sources":["../../../src/components/q2-data-table/q2-data-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Watch,\n Event,\n Element,\n EventEmitter,\n Fragment,\n Listen,\n Method,\n} from '@stencil/core';\nimport { loc, resizeIframe } from '../../utils';\n\nexport type Q2DataTableCellAlignOptions = 'start' | 'center' | 'end';\n\nexport type Q2DataTableCellType =\n | {\n // defines the type of cell\n type?: 'text' | 'number' | 'icon' | 'boolean' | 'code';\n }\n | {\n // when type='badge'\n type?: 'badge';\n badgeStatus?: HTMLQ2BadgeElement['status'];\n badgeTheme?: HTMLQ2BadgeElement['theme'];\n };\n\nexport type Q2DataTableHeader = {\n title: string;\n align?: Q2DataTableCellAlignOptions;\n // Will be autogenerated from the title if not provided\n // The key is used to grab the data from the row data\n key?: string;\n // Enables sorting for this column when true\n // Manual will prevent automatic sorting and updating of the sorting indicators in the header\n sortable?: boolean | 'auto' | 'manual';\n width?: string;\n // defines background for the column\n backgroundColor?: string;\n sorted?: 'ASC' | 'DESC';\n ariaLabel?: string;\n lineClamp?: number;\n verticalAlign?: 'top' | 'bottom';\n} & Partial<Q2DataTableCellType>;\n\nexport type Q2DataTableCell = {\n value: string | number | boolean;\n align?: Q2DataTableCellAlignOptions;\n ariaLabel?: string;\n lineClamp?: number;\n verticalAlign?: 'top' | 'bottom';\n} & Q2DataTableCellType;\n\nexport type Q2DataTableBaseRow = {\n id: string | number;\n selected?: boolean;\n expanded?: boolean;\n disabled?: boolean;\n};\n\nexport type Q2DataTableCells = Record<string, string | number | Q2DataTableCell>;\nexport type Q2DataTableSerializedCells = Record<string, Q2DataTableCell>;\n\nexport type Q2DataTableRow = Q2DataTableBaseRow & {\n cells: Q2DataTableCells;\n};\nexport type Q2DataTableSerializedRow = Q2DataTableBaseRow & {\n cells: Q2DataTableSerializedCells;\n};\n\n@Component({ tag: 'q2-data-table', shadow: true, styleUrl: 'q2-data-table.scss' })\nexport class Q2DataTable implements ComponentInterface {\n // #region Own Properties\n\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\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 allRowsSelected: boolean = false;\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n hasDropdowns: boolean = false;\n\n @State()\n hasExpandableRows: boolean = false;\n\n @State()\n hasRowData: boolean = false;\n\n @State()\n serializedHeaders: Q2DataTableHeader[] = [];\n\n @State()\n serializedRows: Q2DataTableSerializedRow[] = [];\n\n @State()\n someRowsSelected: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Adds borders between rows and/or columns in the table. */\n @Prop({ mutable: true, reflect: true })\n bordered: boolean | 'horizontal' | 'vertical' | 'grid';\n\n /** Provides a caption for the data table. */\n @Prop({ mutable: true })\n caption: string;\n\n /** Adds the ability to click a row and have the table emit an event with the selected row's data. */\n @Prop({ mutable: true, reflect: true })\n clickable: boolean;\n\n /** Determines the amount of padding for each of the cells in the table. */\n @Prop({ mutable: true, reflect: true })\n density: 'compact' | 'normal' | 'comfortable';\n\n /** Determines the `q2-icon` that will display when `rows` has no value. */\n @Prop({ reflect: true })\n emptyIcon: string = 'inbox';\n\n /** Determines the message that will display when `rows` has no value.\n * @localizable\n */\n @Prop({ reflect: true })\n emptyMessage: string = 'tecton.element.dataTable.emptyMessage';\n\n /**\n * Defines the headers of the table.\n *\n * **Example:**\n * @snippet\n * element.headers = [\n * {\n * title: 'Day of the Week',\n * key: 'day',\n * },\n * {\n * title: 'Sales',\n * key: 'sales',\n * align: 'end',\n * }\n * ]\n *\n */\n @Prop({ mutable: true })\n headers: Q2DataTableHeader[];\n\n /** Hides the caption from view, but still makes it available to screen readers for accessibility purposes. */\n @Prop({ mutable: true, reflect: true })\n hideCaption: boolean;\n\n /**\n * Visually hides the `Select` button that displays when `clickable=true`. It will still be discoverable by assistive technologies.\n *\n * @info\n * Use of this property requires `clickable` to be set to `true`.\n */\n @Prop({ mutable: true })\n hideClickable: boolean;\n\n /** Displays a loading state on the table to indicate background activity. */\n @Prop({ mutable: true, reflect: true })\n loading: boolean;\n\n /**\n * Defines the rows of the table.\n *\n * **Example:**\n * @snippet\n * element.rows = [\n * {\n * id: 1,\n * cells: {\n * day: 'Monday',\n * sales: 93\n * }\n * },\n * {\n * id: 2,\n * cells: {\n * day: 'Tuesday',\n * sales: 127\n * }\n * },\n * {\n * id: 3,\n * cells: {\n * day: 'Wednesday',\n * sales: 121\n * }\n * ]\n */\n @Prop({ mutable: true })\n rows: Q2DataTableRow[];\n\n /** Adds a checkbox to each row of the table making it selectable. */\n @Prop({ mutable: true, reflect: true })\n selectable: boolean;\n\n /**\n * Determines if the selectable checkboxes allow for multi-select or not. If set to \"single\", once a row is selected, all other rows will be disabled.\n * See the documentation on the `select` event for how to handle selections.\n *\n * @warning\n * Use of this property requires `selectable` to be set to `true`.\n */\n @Prop({ mutable: true })\n selectMode: 'multiple' | 'single' = 'multiple';\n\n /** Adds a shadow to the table */\n @Prop({ mutable: true, reflect: true })\n shadowed: boolean;\n\n /** Enables alternating background colors for the table rows */\n @Prop({ reflect: true })\n striped: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a row is clicked.\n *\n * Requires the `clickable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default click behavior.\n */\n @Event()\n click: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when a row is selected.\n *\n * Requires the `selectable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default selection behavior.\n */\n @Event()\n select: EventEmitter<{\n row: Q2DataTableSerializedRow;\n rows: Q2DataTableSerializedRow[];\n allSelected: boolean;\n }>;\n\n /**\n * Emitted when the select-all checkbox is toggled.\n *\n * Requires the `selectable` prop to be set to `true` and the `selectMode` prop to be set to `multiple`.\n *\n * Call `event.preventDefault()` to prevent the default behavior.\n */\n @Event()\n selectAllRows: EventEmitter<{ checked: boolean }>;\n\n /**\n * Emitted when a column is sorted.\n *\n * Requires the `sortable` prop to be set to `true` on the column.\n *\n * Call `event.preventDefault()` to prevent the default sorting behavior.\n */\n @Event()\n sort: EventEmitter<{ header: Q2DataTableHeader; direction: 'ASC' | 'DESC' }>;\n\n /**\n * Emitted when an expandable row is toggled.\n *\n * Requires content in the `row-{id}-expandable-content` slot.\n *\n * Call `event.preventDefault()` to prevent the default toggling behavior.\n */\n @Event()\n toggle: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n componentWillLoad() {\n this.headersHandler(this.headers);\n this.rowsHandler(this.rows);\n }\n\n componentDidLoad(): void {\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver(() => this.checkSlots());\n observer.observe(this.hostElement, { childList: true, subtree: true, attributes: true });\n this.mutationObserver = observer;\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => resizeIframe());\n this.resizeObserver.observe(this.hostElement);\n }\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n onClickListener(event: MouseEvent) {\n if (event instanceof PointerEvent) event.stopImmediatePropagation();\n }\n\n @Listen('selectAllRows')\n onSelectAllRows(event: CustomEvent<{ checked: boolean }>) {\n event.stopPropagation();\n const { checked } = event.detail;\n const selectedRows = checked\n ? this.serializedRows.map(row => {\n if (row.disabled) {\n return row;\n } else {\n return {\n ...row,\n selected: checked,\n };\n }\n })\n : [];\n const selectEvent = this.select.emit({ row: undefined, rows: selectedRows, allSelected: checked });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.disabled) return row;\n row.selected = checked;\n return row;\n });\n this.allRowsSelected = checked;\n this.someRowsSelected = false;\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to click a row that accepts a row ID that is will be clicked.\n *\n * @testOnly\n */\n @Method()\n async clickRow(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"clickable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method that returns the plain text value of a particular cell (including slot content).\n *\n * @testOnly\n */\n @Method()\n async getCellContent(rowId: number | string, columnKey: string) {\n const slotContent = this.hostElement.querySelector(`[slot=row-${rowId}-cell-${columnKey}`)?.textContent;\n const text = this.hostElement.shadowRoot.querySelector(\n `slot[name=row-${rowId}-cell-${columnKey}]`\n )?.textContent;\n return slotContent || text || '';\n }\n\n /**\n * A method to sort a column that accepts a header object with key</b> and <b>sorted</b> property.\n *\n * @testOnly\n */\n @Method()\n async sortColumn(header: Q2DataTableHeader) {\n const btn = this.hostElement.shadowRoot.querySelector(`#header-${header.key} q2-btn[test-id=\"sort-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row expansion that accepts a row ID that will be clicked to expand or collapse the expandable content\n *\n * @testOnly\n */\n @Method()\n async toggleRowExpansion(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"expandable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row selection that accepts a row ID whose checkbox will be checked, if the feature is enabled.\n *\n * @testOnly\n */\n @Method()\n async toggleRowSelect(rowId: number | string) {\n const chk = this.hostElement.shadowRoot.querySelector(\n `#row-${rowId} q2-checkbox[test-id=\"select-row-control\"]`\n );\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n /**\n * A method to toggle select all button (checkbox) on left top corner.\n *\n * @testOnly\n */\n @Method()\n async toggleSelectAllRows() {\n if (!this.selectable) return;\n const chk = this.hostElement.shadowRoot.querySelector(`q2-checkbox[test-id=\"select-all-rows-control\"]`);\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('headers')\n headersHandler(headers: Q2DataTableHeader[] = []) {\n this.serializedHeaders = headers.map<Q2DataTableHeader>(header => {\n const { title } = header;\n let { key } = header;\n\n // If no key is provided, generate one from the title\n if (!key) key = title.toLowerCase().replace(/\\s/g, '-');\n\n return {\n key,\n ...header,\n };\n });\n }\n\n @Watch('rows')\n rowsHandler(rows: Q2DataTableRow[] = []) {\n const { serializedHeaders, mappedHeaders } = this;\n const defaultRow = {\n id: null,\n cells: {},\n selected: false,\n expanded: false,\n disabled: false,\n };\n\n // tracks if the select-all checkbox should be visually updated as the `rows` are built\n let isAllSelected = true;\n let isIndeterminate = false;\n\n const serializedRows = rows.map(({ id, cells, selected, expanded, disabled }) => {\n const serializedCells = Object.entries(cells).reduce<Q2DataTableSerializedCells>(\n (accum, [cellKey, cellData]) => {\n const header = mappedHeaders[cellKey] || ({} as Q2DataTableHeader);\n const { align, type = 'text', lineClamp, verticalAlign } = header;\n\n const isBadge = 'type' in header && header.type === 'badge';\n const defaultCell: Q2DataTableCell = {\n value: '',\n ariaLabel: undefined,\n type,\n align,\n lineClamp,\n verticalAlign,\n badgeStatus: isBadge ? header.badgeStatus : undefined,\n badgeTheme: isBadge ? header.badgeTheme : undefined,\n };\n\n const result: Q2DataTableCell =\n typeof cellData === 'object'\n ? { ...defaultCell, ...cellData }\n : { ...defaultCell, value: cellData };\n\n accum[cellKey] = result;\n return accum;\n },\n {}\n );\n\n if (isAllSelected && !selected) isAllSelected = false;\n if (!isAllSelected && selected) isIndeterminate = true;\n return {\n ...defaultRow,\n id,\n selected: !!selected,\n expanded: !!expanded,\n disabled: !!disabled,\n cells: serializedCells,\n };\n });\n\n const sortedHeader = serializedHeaders.find(({ sorted }) => sorted);\n const shouldAutoSort = !!sortedHeader && sortedHeader.sortable !== 'manual';\n\n this.hasRowData = !!rows.length;\n this.allRowsSelected = this.hasRowData && isAllSelected;\n this.someRowsSelected = this.hasRowData && isIndeterminate;\n\n this.serializedRows = !!shouldAutoSort ? this.sortRows(serializedRows, sortedHeader) : serializedRows;\n this.checkSlots();\n }\n\n @Watch('selectable')\n selectableHandler() {\n if (this.selectable === false) {\n this.selectAllRows.emit({ checked: false });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get mappedHeaders() {\n return this.serializedHeaders.reduce<Record<string, Q2DataTableHeader>>((accum, header) => {\n accum[header.key] = header;\n return accum;\n }, {});\n }\n\n get numberOfColumns() {\n return (\n (this.serializedHeaders?.length ?? 0) +\n (this.selectable ? 1 : 0) +\n (this.clickable ? 1 : 0) +\n (this.hasExpandableRows ? 1 : 0) +\n (this.hasDropdowns ? 1 : 0)\n );\n }\n\n get selectedRow() {\n return this.selectedRows.find(({ selected }) => !!selected);\n }\n\n get selectedRows() {\n return this.serializedRows.filter(({ selected }) => selected);\n }\n\n checkSlots = () => {\n this.hasExpandableRows = !!(this.hostElement?.querySelector(`[slot$=\"-expandable-content\"]`) ?? false);\n this.hasDropdowns = !!(this.hostElement?.querySelector(`[slot$=\"-dropdown\"]`) ?? false);\n\n // The booleans above may not change, even if the slot has content\n // So we increment this property to force a re-render and ensure proper rendering\n this.checkSlotCount += 1;\n };\n\n onClickRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n this.click.emit({ row });\n };\n\n onClickTableRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n if (this.clickable) {\n this.onClickRow(event, row);\n } else if (this.hasExpandableRows) {\n this.onToggleRow(event, row);\n }\n };\n\n onControlContainerClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n onSelectRow = (event: CustomEvent<{ checked: boolean }>, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const { selectMode, serializedRows, selectedRows: currentlySelectedRows } = this;\n const { checked } = event.detail;\n\n const selectedRow = { ...row, selected: checked };\n let selectedRows;\n if (selectMode === 'single') {\n selectedRows = checked ? [selectedRow] : [];\n } else {\n selectedRows = checked\n ? [...currentlySelectedRows, selectedRow]\n : currentlySelectedRows.filter(row => row.id !== selectedRow.id);\n }\n\n const allRowsSelected = selectedRows.length === serializedRows.length;\n const isIndeterminate = !allRowsSelected && selectedRows.length > 0;\n const selectEvent = this.select.emit({ row: selectedRow, rows: selectedRows, allSelected: allRowsSelected });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => (row.id === selectedRow.id ? selectedRow : row));\n this.allRowsSelected = allRowsSelected;\n this.someRowsSelected = isIndeterminate;\n };\n\n onSort = (header: Q2DataTableHeader) => {\n const direction = header.sorted === 'ASC' ? 'DESC' : 'ASC';\n const sortKey = header.key;\n const sortEvent = this.sort.emit({ header, direction });\n if (sortEvent.defaultPrevented) return;\n\n const shouldAutoSort = header.sortable !== 'manual';\n if (!shouldAutoSort) return;\n\n this.serializedHeaders = this.serializedHeaders.map<Q2DataTableHeader>(serializedHeader => {\n const sorted = sortKey === serializedHeader.key ? direction : undefined;\n return { ...serializedHeader, sorted };\n });\n\n this.serializedRows = this.sortRows(this.serializedRows, { ...header, sorted: direction });\n };\n\n onToggleRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const selectedRow = { ...row, expanded: !row.expanded };\n const toggleEvent = this.toggle.emit({ row: selectedRow });\n if (toggleEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.id === selectedRow.id) return selectedRow;\n else return { ...row };\n });\n };\n\n sortRows(rows: Q2DataTableSerializedRow[], header: Q2DataTableHeader) {\n const { key, sorted } = header;\n const direction = sorted || 'ASC';\n\n const sortedRows = [...rows].sort((a, b) => {\n const aValue = a.cells[key].value;\n const bValue = b.cells[key].value;\n\n if (aValue < bValue) return direction === 'ASC' ? -1 : 1;\n if (aValue > bValue) return direction === 'ASC' ? 1 : -1;\n return 0;\n });\n\n return sortedRows;\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { caption } = this;\n return (\n <div class=\"container\">\n <table>\n {caption && <caption class={this.hideCaption ? 'sr' : undefined}>{caption}</caption>}\n {this.renderTableColGroup()}\n {this.renderTableHeader()}\n {this.renderEmptyState()}\n {this.renderTableRows()}\n </table>\n </div>\n );\n }\n\n renderCellContent(cell: Q2DataTableCell) {\n if (!cell) return;\n\n const { type, ariaLabel, value } = cell;\n\n if ([undefined, null].includes(value)) return;\n\n switch (type) {\n case 'badge':\n let valueAsInt;\n switch (typeof value) {\n case 'string':\n valueAsInt = parseFloat(value);\n break;\n\n case 'boolean':\n valueAsInt = value ? 1 : 0;\n break;\n\n default:\n valueAsInt = value;\n break;\n }\n\n return (\n <q2-badge\n aria-label={ariaLabel}\n value={valueAsInt}\n theme={cell.badgeTheme}\n status={cell.badgeStatus}\n size=\"large\"\n ></q2-badge>\n );\n\n case 'icon':\n const valueAsString = typeof value === 'string' ? value : `${value}`;\n return (\n <q2-icon\n label={ariaLabel}\n type={valueAsString}\n ></q2-icon>\n );\n\n case 'boolean':\n return !!value ? (\n <q2-icon\n label={loc('tecton.element.dataTable.booleanTrue')}\n type=\"checkmark\"\n ></q2-icon>\n ) : (\n <div aria-label={loc('tecton.element.dataTable.booleanFalse')}></div>\n );\n\n case 'code':\n return <code aria-label={ariaLabel}>{value}</code>;\n\n default:\n return <div aria-label={ariaLabel}>{value}</div>;\n }\n }\n\n renderEmptyState() {\n const { hasRowData, numberOfColumns, emptyIcon, emptyMessage, loading } = this;\n if (hasRowData || loading) return null;\n\n return (\n <tbody>\n <tr class=\"empty-state\">\n <td colSpan={numberOfColumns}>\n <slot name=\"empty-table\">\n <div class=\"empty-state-content\">\n <q2-icon type={emptyIcon}></q2-icon>\n <p>{loc(emptyMessage)}</p>\n </div>\n </slot>\n </td>\n </tr>\n </tbody>\n );\n }\n\n renderTableColGroup() {\n const { serializedHeaders: headers, selectable, clickable, hasExpandableRows, hasDropdowns } = this;\n\n if (!headers.length) return null;\n\n return (\n <colgroup>\n {selectable && <col class=\"select-column\" />}\n {headers.map(({ width, backgroundColor }) => (\n <col style={{ width, backgroundColor }} />\n ))}\n {clickable && <col class=\"click-column\" />}\n {hasExpandableRows && <col class=\"expandable-row-control-column\" />}\n {hasDropdowns && <col class=\"dropdown-column\" />}\n </colgroup>\n );\n }\n\n renderTableHeader() {\n const {\n serializedHeaders: headers,\n selectable,\n clickable,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n allRowsSelected,\n someRowsSelected,\n hasRowData,\n loading,\n } = this;\n\n if (!headers.length) return null;\n\n return (\n <thead>\n <tr>\n {selectable && (\n <th>\n {selectMode === 'multiple' && (\n <q2-checkbox\n label={loc('tecton.element.dataTable.selectAllRows')}\n hide-label\n onChange={() => this.selectAllRows.emit({ checked: !allRowsSelected })}\n checked={hasRowData && allRowsSelected && !someRowsSelected}\n indeterminate={hasRowData && someRowsSelected && !allRowsSelected}\n disabled={loading || !hasRowData}\n test-id=\"select-all-rows-control\"\n ></q2-checkbox>\n )}\n </th>\n )}\n {headers.map(header => {\n const { align, sorted, verticalAlign } = header;\n const headerClasses = [];\n if (align) headerClasses.push(`align-${align}`);\n if (verticalAlign) headerClasses.push(`vertical-align-${verticalAlign}`);\n if (!!sorted) headerClasses.push('sorted');\n return (\n <th\n class={headerClasses.join(' ')}\n id={`header-${header.key}`}\n >\n {header.sortable ? (\n <q2-btn\n onClick={() => this.onSort(header)}\n test-id=\"sort-control\"\n disabled={this.loading}\n >\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n\n {!!sorted ? (\n <q2-icon\n class={`sorted-indicator direction-${sorted}`}\n type=\"arrow-down\"\n label={\n sorted === 'ASC'\n ? loc('tecton.element.dataTable.sortedAscending')\n : loc('tecton.element.dataTable.sortedDescending')\n }\n test-id=\"sorted-indicator\"\n ></q2-icon>\n ) : (\n <q2-icon\n class={`sorted-indicator`}\n type=\"sort\"\n label={loc('tecton.element.dataTable.clickToSort')}\n test-id=\"sorted-indicator\"\n ></q2-icon>\n )}\n </div>\n </q2-btn>\n ) : (\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n </div>\n )}\n </th>\n );\n })}\n {clickable && (\n <th\n id=\"click\"\n class={hideClickable ? 'sr' : undefined}\n >\n <span class=\"sr\">{loc('tecton.element.dataTable.clickRow')}</span>\n </th>\n )}\n {hasExpandableRows && (\n <th id=\"toggle\">\n <span class=\"sr\">{loc('tecton.element.dataTable.toggleRow')}</span>\n </th>\n )}\n {hasDropdowns && (\n <th>\n <span class=\"sr\">{loc('tecton.element.dataTable.dropdown')}</span>\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n renderTableRows() {\n const {\n serializedHeaders: headers,\n serializedRows: rows,\n selectable,\n clickable,\n striped,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n numberOfColumns,\n loading,\n } = this;\n\n if (loading) {\n return (\n <tbody>\n <tr class=\"loading-row\">\n <td colSpan={numberOfColumns}>\n <q2-loading inline></q2-loading>\n </td>\n </tr>\n </tbody>\n );\n }\n\n let isSelectDisabled = false;\n let selectedRow;\n if (selectMode === 'single') {\n selectedRow = this.selectedRow;\n isSelectDisabled = !!selectedRow;\n }\n const clickableClasses = [];\n if (clickable) clickableClasses.push('click-column');\n if (hideClickable) clickableClasses.push('sr');\n const clickableClassString = clickableClasses.join(' ');\n\n return (\n <tbody>\n {rows.map(row => {\n const cellSlotPrefix = `row-${row.id}-cell`;\n const expandableRowName = `row-${row.id}-expandable-content`;\n const dropdownCellName = `row-${row.id}-dropdown`;\n const rowHasExpandableSlot =\n hasExpandableRows && !!this.hostElement.querySelector(`[slot=\"${expandableRowName}\"]`);\n const rowHasDropdownSlot =\n hasDropdowns && !!this.hostElement.querySelector(`[slot=\"${dropdownCellName}\"]`);\n const rowClasses = [];\n if (rowHasExpandableSlot) rowClasses.push('expandable');\n if (clickable) rowClasses.push('clickable');\n if (striped) rowClasses.push('striped');\n if (row.expanded) rowClasses.push('expanded');\n if (row.selected) rowClasses.push('selected');\n const rowIsClickable = clickable || rowHasExpandableSlot;\n\n return (\n <Fragment>\n <tr\n id={`row-${row.id}`}\n class={rowClasses.join(' ')}\n onClick={rowIsClickable && (e => this.onClickTableRow(e, row))}\n tabIndex={rowIsClickable ? -1 : undefined}\n >\n {selectable && (\n <td\n class=\"select-column\"\n onClick={this.onControlContainerClick}\n >\n <q2-checkbox\n label={loc('tecton.element.dataTable.selectRow')}\n hide-label\n checked={row.selected}\n disabled={(isSelectDisabled && row !== selectedRow) || row.disabled}\n onChange={e => this.onSelectRow(e, row)}\n test-id=\"select-row-control\"\n ></q2-checkbox>\n </td>\n )}\n {headers.map(({ key }) => {\n const cell = row.cells[key];\n const lineClamp = cell?.lineClamp;\n const cellAlign = cell?.align;\n const cellVerticalAlign = cell?.verticalAlign;\n const cellClasses = [];\n if (cellAlign) cellClasses.push(`align-${cellAlign}`);\n if (cellVerticalAlign) cellClasses.push(`vertical-align-${cellVerticalAlign}`);\n if (lineClamp) cellClasses.push('clamped');\n const cellStyles = lineClamp\n ? { '--comp-line-clamp-count': `${lineClamp}` }\n : undefined;\n\n return (\n <td\n class={cellClasses.join(' ')}\n style={cellStyles}\n >\n <slot name={`${cellSlotPrefix}-${key}`}>\n {this.renderCellContent(cell)}\n </slot>\n </td>\n );\n })}\n {clickable && (\n <td class={clickableClassString}>\n <q2-btn\n intent=\"neutral\"\n size=\"small\"\n onClick={e => this.onClickRow(e, row)}\n test-id=\"clickable-row-control\"\n >\n {loc('tecton.element.dataTable.clickRow')}\n </q2-btn>\n </td>\n )}\n {hasExpandableRows && (\n <td\n class=\"expandable-row-control-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasExpandableSlot && (\n <q2-btn\n onClick={e => this.onToggleRow(e, row)}\n ariaExpanded={`${row.expanded}`}\n ariaControls={expandableRowName}\n ariaLabel={loc('tecton.element.dataTable.toggleRow')}\n test-id=\"expandable-row-control\"\n >\n <q2-icon\n type=\"chevron-down\"\n class=\"toggle-expandable-row\"\n ></q2-icon>\n </q2-btn>\n )}\n </td>\n )}\n {hasDropdowns && (\n <td\n class=\"dropdown-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasDropdownSlot && <slot name={dropdownCellName}></slot>}\n </td>\n )}\n </tr>\n {rowHasExpandableSlot && (\n <tr\n id={expandableRowName}\n class=\"expandable-row\"\n hidden={!row.expanded}\n aria-hidden={!row.expanded}\n >\n <td\n colSpan={numberOfColumns}\n headers=\"toggle\"\n >\n <div class=\"expandable-content\">\n <slot name={expandableRowName}></slot>\n </div>\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n );\n }\n\n // #endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"q2-data-table.js","sourceRoot":"","sources":["../../../../src/components/q2-data-table/q2-data-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n State,\n Prop,\n h,\n ComponentInterface,\n Watch,\n Event,\n Element,\n EventEmitter,\n Fragment,\n Listen,\n Method,\n} from '@stencil/core';\nimport { loc, resizeIframe } from '../../utils';\n\nexport type Q2DataTableCellAlignOptions = 'start' | 'center' | 'end';\n\nexport type Q2DataTableCellType =\n | {\n // defines the type of cell\n type?: 'text' | 'number' | 'icon' | 'boolean' | 'code';\n }\n | {\n // when type='badge'\n type?: 'badge';\n badgeStatus?: HTMLQ2BadgeElement['status'];\n badgeTheme?: HTMLQ2BadgeElement['theme'];\n };\n\nexport type Q2DataTableHeader = {\n title: string;\n align?: Q2DataTableCellAlignOptions;\n // Will be autogenerated from the title if not provided\n // The key is used to grab the data from the row data\n key?: string;\n // Enables sorting for this column when true\n // Manual will prevent automatic sorting and updating of the sorting indicators in the header\n sortable?: boolean | 'auto' | 'manual';\n width?: string;\n // defines background for the column\n backgroundColor?: string;\n sorted?: 'ASC' | 'DESC';\n ariaLabel?: string;\n lineClamp?: number;\n verticalAlign?: 'top' | 'bottom';\n} & Partial<Q2DataTableCellType>;\n\nexport type Q2DataTableCell = {\n value: string | number | boolean;\n align?: Q2DataTableCellAlignOptions;\n ariaLabel?: string;\n lineClamp?: number;\n verticalAlign?: 'top' | 'bottom';\n} & Q2DataTableCellType;\n\nexport type Q2DataTableBaseRow = {\n id: string | number;\n selected?: boolean;\n expanded?: boolean;\n disabled?: boolean;\n};\n\nexport type Q2DataTableCells = Record<string, string | number | Q2DataTableCell>;\nexport type Q2DataTableSerializedCells = Record<string, Q2DataTableCell>;\n\nexport type Q2DataTableRow = Q2DataTableBaseRow & {\n cells: Q2DataTableCells;\n};\nexport type Q2DataTableSerializedRow = Q2DataTableBaseRow & {\n cells: Q2DataTableSerializedCells;\n};\n\n@Component({ tag: 'q2-data-table', shadow: true, styleUrl: 'q2-data-table.scss' })\nexport class Q2DataTable implements ComponentInterface {\n // #region Own Properties\n\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\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 allRowsSelected: boolean = false;\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n hasDropdowns: boolean = false;\n\n @State()\n hasExpandableRows: boolean = false;\n\n @State()\n hasRowData: boolean = false;\n\n @State()\n serializedHeaders: Q2DataTableHeader[] = [];\n\n @State()\n serializedRows: Q2DataTableSerializedRow[] = [];\n\n @State()\n someRowsSelected: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Adds borders between rows and/or columns in the table. */\n @Prop({ mutable: true, reflect: true })\n bordered: boolean | 'horizontal' | 'vertical' | 'grid';\n\n /** Provides a caption for the data table. */\n @Prop({ mutable: true })\n caption: string;\n\n /** Adds the ability to click a row and have the table emit an event with the selected row's data. */\n @Prop({ mutable: true, reflect: true })\n clickable: boolean;\n\n /** Determines the amount of padding for each of the cells in the table. */\n @Prop({ mutable: true, reflect: true })\n density: 'compact' | 'normal' | 'comfortable';\n\n /** Determines the `q2-icon` that will display when `rows` has no value. */\n @Prop({ reflect: true })\n emptyIcon: string = 'inbox';\n\n /** Determines the message that will display when `rows` has no value.\n * @localizable\n */\n @Prop({ reflect: true })\n emptyMessage: string = 'tecton.element.dataTable.emptyMessage';\n\n /**\n * Defines the headers of the table.\n *\n * **Example:**\n * @snippet\n * element.headers = [\n * {\n * title: 'Day of the Week',\n * key: 'day',\n * },\n * {\n * title: 'Sales',\n * key: 'sales',\n * align: 'end',\n * }\n * ]\n *\n */\n @Prop({ mutable: true })\n headers: Q2DataTableHeader[];\n\n /** Hides the caption from view, but still makes it available to screen readers for accessibility purposes. */\n @Prop({ mutable: true, reflect: true })\n hideCaption: boolean;\n\n /**\n * Visually hides the `Select` button that displays when `clickable=true`. It will still be discoverable by assistive technologies.\n *\n * @info\n * Use of this property requires `clickable` to be set to `true`.\n */\n @Prop({ mutable: true })\n hideClickable: boolean;\n\n /** Displays a loading state on the table to indicate background activity. */\n @Prop({ mutable: true, reflect: true })\n loading: boolean;\n\n /**\n * Defines the rows of the table.\n *\n * **Example:**\n * @snippet\n * element.rows = [\n * {\n * id: 1,\n * cells: {\n * day: 'Monday',\n * sales: 93\n * }\n * },\n * {\n * id: 2,\n * cells: {\n * day: 'Tuesday',\n * sales: 127\n * }\n * },\n * {\n * id: 3,\n * cells: {\n * day: 'Wednesday',\n * sales: 121\n * }\n * ]\n */\n @Prop({ mutable: true })\n rows: Q2DataTableRow[];\n\n /** Adds a checkbox to each row of the table making it selectable. */\n @Prop({ mutable: true, reflect: true })\n selectable: boolean;\n\n /**\n * Determines if the selectable checkboxes allow for multi-select or not. If set to \"single\", once a row is selected, all other rows will be disabled.\n * See the documentation on the `select` event for how to handle selections.\n *\n * @warning\n * Use of this property requires `selectable` to be set to `true`.\n */\n @Prop({ mutable: true })\n selectMode: 'multiple' | 'single' = 'multiple';\n\n /** Adds a shadow to the table */\n @Prop({ mutable: true, reflect: true })\n shadowed: boolean;\n\n /** Enables alternating background colors for the table rows */\n @Prop({ reflect: true })\n striped: boolean;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a row is clicked.\n *\n * Requires the `clickable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default click behavior.\n */\n @Event()\n click: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n /**\n * Emitted when a row is selected.\n *\n * Requires the `selectable` prop to be set to `true`.\n *\n * Call `event.preventDefault()` to prevent the default selection behavior.\n */\n @Event()\n select: EventEmitter<{\n row: Q2DataTableSerializedRow;\n rows: Q2DataTableSerializedRow[];\n allSelected: boolean;\n }>;\n\n /**\n * Emitted when the select-all checkbox is toggled.\n *\n * Requires the `selectable` prop to be set to `true` and the `selectMode` prop to be set to `multiple`.\n *\n * Call `event.preventDefault()` to prevent the default behavior.\n */\n @Event()\n selectAllRows: EventEmitter<{ checked: boolean }>;\n\n /**\n * Emitted when a column is sorted.\n *\n * Requires the `sortable` prop to be set to `true` on the column.\n *\n * Call `event.preventDefault()` to prevent the default sorting behavior.\n */\n @Event()\n sort: EventEmitter<{ header: Q2DataTableHeader; direction: 'ASC' | 'DESC' }>;\n\n /**\n * Emitted when an expandable row is toggled.\n *\n * Requires content in the `row-{id}-expandable-content` slot.\n *\n * Call `event.preventDefault()` to prevent the default toggling behavior.\n */\n @Event()\n toggle: EventEmitter<{ row: Q2DataTableSerializedRow }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n componentWillLoad() {\n this.headersHandler(this.headers);\n this.rowsHandler(this.rows);\n }\n\n componentDidLoad(): void {\n if (typeof MutationObserver !== 'undefined') {\n const observer = new MutationObserver(() => this.checkSlots());\n observer.observe(this.hostElement, { childList: true, subtree: true, attributes: true });\n this.mutationObserver = observer;\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => resizeIframe());\n this.resizeObserver.observe(this.hostElement);\n }\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click')\n onClickListener(event: MouseEvent) {\n if (event instanceof PointerEvent) event.stopImmediatePropagation();\n }\n\n @Listen('selectAllRows')\n onSelectAllRows(event: CustomEvent<{ checked: boolean }>) {\n event.stopPropagation();\n const { checked } = event.detail;\n const selectedRows = checked\n ? this.serializedRows.map(row => {\n if (row.disabled) {\n return row;\n } else {\n return {\n ...row,\n selected: checked,\n };\n }\n })\n : [];\n const selectEvent = this.select.emit({ row: undefined, rows: selectedRows, allSelected: checked });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.disabled) return row;\n row.selected = checked;\n return row;\n });\n this.allRowsSelected = checked;\n this.someRowsSelected = false;\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to click a row that accepts a row ID that is will be clicked.\n *\n * @testOnly\n */\n @Method()\n async clickRow(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"clickable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method that returns the plain text value of a particular cell (including slot content).\n *\n * @testOnly\n */\n @Method()\n async getCellContent(rowId: number | string, columnKey: string) {\n const slotContent = this.hostElement.querySelector(`[slot=row-${rowId}-cell-${columnKey}`)?.textContent;\n const text = this.hostElement.shadowRoot.querySelector(\n `slot[name=row-${rowId}-cell-${columnKey}]`\n )?.textContent;\n return slotContent || text || '';\n }\n\n /**\n * A method to sort a column that accepts a header object with key</b> and <b>sorted</b> property.\n *\n * @testOnly\n */\n @Method()\n async sortColumn(header: Q2DataTableHeader) {\n const btn = this.hostElement.shadowRoot.querySelector(`#header-${header.key} q2-btn[test-id=\"sort-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row expansion that accepts a row ID that will be clicked to expand or collapse the expandable content\n *\n * @testOnly\n */\n @Method()\n async toggleRowExpansion(rowId: number | string) {\n const btn = this.hostElement.shadowRoot.querySelector(`#row-${rowId} q2-btn[test-id=\"expandable-row-control\"]`);\n (btn as HTMLQ2BtnElement)?.click();\n }\n\n /**\n * A method to toggle row selection that accepts a row ID whose checkbox will be checked, if the feature is enabled.\n *\n * @testOnly\n */\n @Method()\n async toggleRowSelect(rowId: number | string) {\n const chk = this.hostElement.shadowRoot.querySelector(\n `#row-${rowId} q2-checkbox[test-id=\"select-row-control\"]`\n );\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n /**\n * A method to toggle select all button (checkbox) on left top corner.\n *\n * @testOnly\n */\n @Method()\n async toggleSelectAllRows() {\n if (!this.selectable) return;\n const chk = this.hostElement.shadowRoot.querySelector(`q2-checkbox[test-id=\"select-all-rows-control\"]`);\n (chk as HTMLQ2CheckboxElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('headers')\n headersHandler(headers: Q2DataTableHeader[] = []) {\n this.serializedHeaders = headers.map<Q2DataTableHeader>(header => {\n const { title } = header;\n let { key } = header;\n\n // If no key is provided, generate one from the title\n if (!key) key = title.toLowerCase().replace(/\\s/g, '-');\n\n return {\n key,\n ...header,\n };\n });\n }\n\n @Watch('rows')\n rowsHandler(rows: Q2DataTableRow[] = []) {\n const { serializedHeaders, mappedHeaders } = this;\n const defaultRow = {\n id: null,\n cells: {},\n selected: false,\n expanded: false,\n disabled: false,\n };\n\n // tracks if the select-all checkbox should be visually updated as the `rows` are built\n let isAllSelected = true;\n let isIndeterminate = false;\n\n const serializedRows = rows.map(({ id, cells, selected, expanded, disabled }) => {\n const serializedCells = Object.entries(cells).reduce<Q2DataTableSerializedCells>(\n (accum, [cellKey, cellData]) => {\n const header = mappedHeaders[cellKey] || ({} as Q2DataTableHeader);\n const { align, type = 'text', lineClamp, verticalAlign } = header;\n\n const isBadge = 'type' in header && header.type === 'badge';\n const defaultCell: Q2DataTableCell = {\n value: '',\n ariaLabel: undefined,\n type,\n align,\n lineClamp,\n verticalAlign,\n badgeStatus: isBadge ? header.badgeStatus : undefined,\n badgeTheme: isBadge ? header.badgeTheme : undefined,\n };\n\n const result: Q2DataTableCell =\n typeof cellData === 'object'\n ? { ...defaultCell, ...cellData }\n : { ...defaultCell, value: cellData };\n\n accum[cellKey] = result;\n return accum;\n },\n {}\n );\n\n if (isAllSelected && !selected) isAllSelected = false;\n if (!isAllSelected && selected) isIndeterminate = true;\n return {\n ...defaultRow,\n id,\n selected: !!selected,\n expanded: !!expanded,\n disabled: !!disabled,\n cells: serializedCells,\n };\n });\n\n const sortedHeader = serializedHeaders.find(({ sorted }) => sorted);\n const shouldAutoSort = !!sortedHeader && sortedHeader.sortable !== 'manual';\n\n this.hasRowData = !!rows.length;\n this.allRowsSelected = this.hasRowData && isAllSelected;\n this.someRowsSelected = this.hasRowData && isIndeterminate;\n\n this.serializedRows = !!shouldAutoSort ? this.sortRows(serializedRows, sortedHeader) : serializedRows;\n this.checkSlots();\n }\n\n @Watch('selectable')\n selectableHandler() {\n if (this.selectable === false) {\n this.selectAllRows.emit({ checked: false });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get mappedHeaders() {\n return this.serializedHeaders.reduce<Record<string, Q2DataTableHeader>>((accum, header) => {\n accum[header.key] = header;\n return accum;\n }, {});\n }\n\n get numberOfColumns() {\n return (\n (this.serializedHeaders?.length ?? 0) +\n (this.selectable ? 1 : 0) +\n (this.clickable ? 1 : 0) +\n (this.hasExpandableRows ? 1 : 0) +\n (this.hasDropdowns ? 1 : 0)\n );\n }\n\n get selectedRow() {\n return this.selectedRows.find(({ selected }) => !!selected);\n }\n\n get selectedRows() {\n return this.serializedRows.filter(({ selected }) => selected);\n }\n\n checkSlots = () => {\n this.hasExpandableRows = !!(this.hostElement?.querySelector(`[slot$=\"-expandable-content\"]`) ?? false);\n this.hasDropdowns = !!(this.hostElement?.querySelector(`[slot$=\"-dropdown\"]`) ?? false);\n\n // The booleans above may not change, even if the slot has content\n // So we increment this property to force a re-render and ensure proper rendering\n this.checkSlotCount += 1;\n };\n\n onClickRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n this.click.emit({ row });\n };\n\n onClickTableRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n if (this.clickable) {\n this.onClickRow(event, row);\n } else if (this.hasExpandableRows) {\n this.onToggleRow(event, row);\n }\n };\n\n onControlContainerClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n onSelectRow = (event: CustomEvent<{ checked: boolean }>, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const { selectMode, serializedRows, selectedRows: currentlySelectedRows } = this;\n const { checked } = event.detail;\n\n const selectedRow = { ...row, selected: checked };\n let selectedRows;\n if (selectMode === 'single') {\n selectedRows = checked ? [selectedRow] : [];\n } else {\n selectedRows = checked\n ? [...currentlySelectedRows, selectedRow]\n : currentlySelectedRows.filter(row => row.id !== selectedRow.id);\n }\n\n const allRowsSelected = selectedRows.length === serializedRows.length;\n const isIndeterminate = !allRowsSelected && selectedRows.length > 0;\n const selectEvent = this.select.emit({ row: selectedRow, rows: selectedRows, allSelected: allRowsSelected });\n if (selectEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => (row.id === selectedRow.id ? selectedRow : row));\n this.allRowsSelected = allRowsSelected;\n this.someRowsSelected = isIndeterminate;\n };\n\n onSort = (header: Q2DataTableHeader) => {\n const direction = header.sorted === 'ASC' ? 'DESC' : 'ASC';\n const sortKey = header.key;\n const sortEvent = this.sort.emit({ header, direction });\n if (sortEvent.defaultPrevented) return;\n\n const shouldAutoSort = header.sortable !== 'manual';\n if (!shouldAutoSort) return;\n\n this.serializedHeaders = this.serializedHeaders.map<Q2DataTableHeader>(serializedHeader => {\n const sorted = sortKey === serializedHeader.key ? direction : undefined;\n return { ...serializedHeader, sorted };\n });\n\n this.serializedRows = this.sortRows(this.serializedRows, { ...header, sorted: direction });\n };\n\n onToggleRow = (event: MouseEvent, row: Q2DataTableSerializedRow) => {\n event.stopPropagation();\n const selectedRow = { ...row, expanded: !row.expanded };\n const toggleEvent = this.toggle.emit({ row: selectedRow });\n if (toggleEvent.defaultPrevented) return;\n\n this.serializedRows = this.serializedRows.map(row => {\n if (row.id === selectedRow.id) return selectedRow;\n else return { ...row };\n });\n };\n\n sortRows(rows: Q2DataTableSerializedRow[], header: Q2DataTableHeader) {\n const { key, sorted } = header;\n const direction = sorted || 'ASC';\n\n const sortedRows = [...rows].sort((a, b) => {\n const aValue = a.cells[key].value;\n const bValue = b.cells[key].value;\n\n if (aValue < bValue) return direction === 'ASC' ? -1 : 1;\n if (aValue > bValue) return direction === 'ASC' ? 1 : -1;\n return 0;\n });\n\n return sortedRows;\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { caption } = this;\n return (\n <div class=\"container\">\n <table>\n {caption && <caption class={this.hideCaption ? 'sr' : undefined}>{caption}</caption>}\n {this.renderTableColGroup()}\n {this.renderTableHeader()}\n {this.renderEmptyState()}\n {this.renderTableRows()}\n </table>\n </div>\n );\n }\n\n renderCellContent(cell: Q2DataTableCell) {\n if (!cell) return;\n\n const { type, ariaLabel, value } = cell;\n\n if ([undefined, null].includes(value)) return;\n\n switch (type) {\n case 'badge':\n let valueAsInt;\n switch (typeof value) {\n case 'string':\n valueAsInt = parseFloat(value);\n break;\n\n case 'boolean':\n valueAsInt = value ? 1 : 0;\n break;\n\n default:\n valueAsInt = value;\n break;\n }\n\n return (\n <q2-badge\n aria-label={ariaLabel}\n value={valueAsInt}\n theme={cell.badgeTheme}\n status={cell.badgeStatus}\n size=\"large\"\n ></q2-badge>\n );\n\n case 'icon':\n const valueAsString = typeof value === 'string' ? value : `${value}`;\n return (\n <q2-icon\n label={ariaLabel}\n type={valueAsString}\n ></q2-icon>\n );\n\n case 'boolean':\n return !!value ? (\n <q2-icon\n label={loc('tecton.element.dataTable.booleanTrue')}\n type=\"checkmark\"\n ></q2-icon>\n ) : (\n <div aria-label={loc('tecton.element.dataTable.booleanFalse')}></div>\n );\n\n case 'code':\n return <code aria-label={ariaLabel}>{value}</code>;\n\n default:\n return <div aria-label={ariaLabel}>{value}</div>;\n }\n }\n\n renderEmptyState() {\n const { hasRowData, numberOfColumns, emptyIcon, emptyMessage, loading } = this;\n if (hasRowData || loading) return null;\n\n return (\n <tbody>\n <tr class=\"empty-state\">\n <td colSpan={numberOfColumns}>\n <slot name=\"empty-table\">\n <div class=\"empty-state-content\">\n <q2-icon type={emptyIcon}></q2-icon>\n <p>{loc(emptyMessage)}</p>\n </div>\n </slot>\n </td>\n </tr>\n </tbody>\n );\n }\n\n renderTableColGroup() {\n const { serializedHeaders: headers, selectable, clickable, hasExpandableRows, hasDropdowns } = this;\n\n if (!headers.length) return null;\n\n return (\n <colgroup>\n {selectable && <col class=\"select-column\" />}\n {headers.map(({ width, backgroundColor }) => (\n <col style={{ width, backgroundColor }} />\n ))}\n {clickable && <col class=\"click-column\" />}\n {hasExpandableRows && <col class=\"expandable-row-control-column\" />}\n {hasDropdowns && <col class=\"dropdown-column\" />}\n </colgroup>\n );\n }\n\n renderTableHeader() {\n const {\n serializedHeaders: headers,\n selectable,\n clickable,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n allRowsSelected,\n someRowsSelected,\n hasRowData,\n loading,\n } = this;\n\n if (!headers.length) return null;\n\n return (\n <thead>\n <tr>\n {selectable && (\n <th>\n {selectMode === 'multiple' && (\n <q2-checkbox\n label={loc('tecton.element.dataTable.selectAllRows')}\n hide-label\n onChange={() => this.selectAllRows.emit({ checked: !allRowsSelected })}\n checked={hasRowData && allRowsSelected && !someRowsSelected}\n indeterminate={hasRowData && someRowsSelected && !allRowsSelected}\n disabled={loading || !hasRowData}\n test-id=\"select-all-rows-control\"\n ></q2-checkbox>\n )}\n </th>\n )}\n {headers.map(header => {\n const { align, sorted, verticalAlign } = header;\n const headerClasses = [];\n if (align) headerClasses.push(`align-${align}`);\n if (verticalAlign) headerClasses.push(`vertical-align-${verticalAlign}`);\n if (!!sorted) headerClasses.push('sorted');\n return (\n <th\n class={headerClasses.join(' ')}\n id={`header-${header.key}`}\n >\n {header.sortable ? (\n <q2-btn\n onClick={() => this.onSort(header)}\n test-id=\"sort-control\"\n disabled={this.loading}\n >\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n\n {!!sorted ? (\n <q2-icon\n class={`sorted-indicator direction-${sorted}`}\n type=\"arrow-down\"\n label={\n sorted === 'ASC'\n ? loc('tecton.element.dataTable.sortedAscending')\n : loc('tecton.element.dataTable.sortedDescending')\n }\n test-id=\"sorted-indicator\"\n ></q2-icon>\n ) : (\n <q2-icon\n class={`sorted-indicator`}\n type=\"sort\"\n label={loc('tecton.element.dataTable.clickToSort')}\n test-id=\"sorted-indicator\"\n ></q2-icon>\n )}\n </div>\n </q2-btn>\n ) : (\n <div\n class=\"header-content\"\n aria-label={header.ariaLabel || undefined}\n >\n <slot name={`header-cell-${header.key}`}>{header.title}</slot>\n </div>\n )}\n </th>\n );\n })}\n {clickable && (\n <th\n id=\"click\"\n class={hideClickable ? 'sr' : undefined}\n >\n <span class=\"sr\">{loc('tecton.element.dataTable.clickRow')}</span>\n </th>\n )}\n {hasExpandableRows && (\n <th id=\"toggle\">\n <span class=\"sr\">{loc('tecton.element.dataTable.toggleRow')}</span>\n </th>\n )}\n {hasDropdowns && (\n <th>\n <span class=\"sr\">{loc('tecton.element.dataTable.dropdown')}</span>\n </th>\n )}\n </tr>\n </thead>\n );\n }\n\n renderTableRows() {\n const {\n serializedHeaders: headers,\n serializedRows: rows,\n selectable,\n clickable,\n striped,\n hideClickable,\n selectMode,\n hasExpandableRows,\n hasDropdowns,\n numberOfColumns,\n loading,\n } = this;\n\n if (loading) {\n return (\n <tbody>\n <tr class=\"loading-row\">\n <td colSpan={numberOfColumns}>\n <q2-loading inline></q2-loading>\n </td>\n </tr>\n </tbody>\n );\n }\n\n let isSelectDisabled = false;\n let selectedRow;\n if (selectMode === 'single') {\n selectedRow = this.selectedRow;\n isSelectDisabled = !!selectedRow;\n }\n const clickableClasses = [];\n if (clickable) clickableClasses.push('click-column');\n if (hideClickable) clickableClasses.push('sr');\n const clickableClassString = clickableClasses.join(' ');\n\n return (\n <tbody>\n {rows.map(row => {\n const cellSlotPrefix = `row-${row.id}-cell`;\n const expandableRowName = `row-${row.id}-expandable-content`;\n const dropdownCellName = `row-${row.id}-dropdown`;\n const rowHasExpandableSlot =\n hasExpandableRows && !!this.hostElement.querySelector(`[slot=\"${expandableRowName}\"]`);\n const rowHasDropdownSlot =\n hasDropdowns && !!this.hostElement.querySelector(`[slot=\"${dropdownCellName}\"]`);\n const rowClasses = [];\n if (rowHasExpandableSlot) rowClasses.push('expandable');\n if (clickable) rowClasses.push('clickable');\n if (striped) rowClasses.push('striped');\n if (row.expanded) rowClasses.push('expanded');\n if (row.selected) rowClasses.push('selected');\n const rowIsClickable = clickable || rowHasExpandableSlot;\n\n return (\n <Fragment>\n <tr\n id={`row-${row.id}`}\n class={rowClasses.join(' ')}\n onClick={rowIsClickable && (e => this.onClickTableRow(e, row))}\n tabIndex={rowIsClickable ? -1 : undefined}\n >\n {selectable && (\n <td\n class=\"select-column\"\n onClick={this.onControlContainerClick}\n >\n <q2-checkbox\n label={loc('tecton.element.dataTable.selectRow')}\n hide-label\n checked={row.selected}\n disabled={(isSelectDisabled && row !== selectedRow) || row.disabled}\n onChange={e => this.onSelectRow(e, row)}\n test-id=\"select-row-control\"\n ></q2-checkbox>\n </td>\n )}\n {headers.map(({ key }) => {\n const cell = row.cells[key];\n const lineClamp = cell?.lineClamp;\n const cellAlign = cell?.align;\n const cellVerticalAlign = cell?.verticalAlign;\n const cellClasses = [];\n if (cellAlign) cellClasses.push(`align-${cellAlign}`);\n if (cellVerticalAlign) cellClasses.push(`vertical-align-${cellVerticalAlign}`);\n if (lineClamp) cellClasses.push('clamped');\n const cellStyles = lineClamp\n ? { '--comp-line-clamp-count': `${lineClamp}` }\n : undefined;\n\n return (\n <td\n class={cellClasses.join(' ')}\n style={cellStyles}\n >\n <slot name={`${cellSlotPrefix}-${key}`}>\n {this.renderCellContent(cell)}\n </slot>\n </td>\n );\n })}\n {clickable && (\n <td class={clickableClassString}>\n <q2-btn\n intent=\"neutral\"\n size=\"small\"\n onClick={e => this.onClickRow(e, row)}\n test-id=\"clickable-row-control\"\n >\n {loc('tecton.element.dataTable.clickRow')}\n </q2-btn>\n </td>\n )}\n {hasExpandableRows && (\n <td\n class=\"expandable-row-control-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasExpandableSlot && (\n <q2-btn\n onClick={e => this.onToggleRow(e, row)}\n ariaExpanded={`${row.expanded}`}\n ariaControls={expandableRowName}\n ariaLabel={loc('tecton.element.dataTable.toggleRow')}\n test-id=\"expandable-row-control\"\n >\n <q2-icon\n type=\"chevron-down\"\n class=\"toggle-expandable-row\"\n ></q2-icon>\n </q2-btn>\n )}\n </td>\n )}\n {hasDropdowns && (\n <td\n class=\"dropdown-column\"\n onClick={this.onControlContainerClick}\n >\n {rowHasDropdownSlot && <slot name={dropdownCellName}></slot>}\n </td>\n )}\n </tr>\n {rowHasExpandableSlot && (\n <tr\n id={expandableRowName}\n class=\"expandable-row\"\n hidden={!row.expanded}\n aria-hidden={!row.expanded}\n >\n <td\n colSpan={numberOfColumns}\n headers=\"toggle\"\n >\n <div class=\"expandable-content\">\n <slot name={expandableRowName}></slot>\n </div>\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n );\n }\n\n // #endregion\n}\n"]}
|