q2-tecton-elements 1.51.1 → 1.52.1
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 +16 -5
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
- package/dist/cjs/{index-9aa4a776.js → index-07285783.js} +86 -2
- package/dist/cjs/index-07285783.js.map +1 -0
- package/dist/cjs/{index-14c3693c.js → index-e7e68b1e.js} +40 -5
- package/dist/cjs/index-e7e68b1e.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/q2-action-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-action-sheet.cjs.entry.js +3 -3
- package/dist/cjs/q2-avatar.cjs.entry.js +2 -2
- package/dist/cjs/q2-badge_7.cjs.entry.js +49 -44
- package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +17 -20
- package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +4 -2
- package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +4 -4
- package/dist/cjs/q2-carousel.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-area.cjs.entry.js +16 -3
- package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-bar.cjs.entry.js +3 -3
- package/dist/cjs/q2-chart-donut.cjs.entry.js +19 -3
- package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +6 -5
- package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/q2-currency.cjs.entry.js +14 -2
- package/dist/cjs/q2-currency.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +3 -3
- package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-detail.cjs.entry.js +3 -3
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +12 -14
- package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +7 -5
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +3 -3
- package/dist/cjs/q2-example.cjs.entry.js +145 -0
- package/dist/cjs/q2-example.cjs.entry.js.map +1 -0
- package/dist/cjs/q2-formatted-text.cjs.entry.js +2 -2
- package/dist/cjs/q2-item.cjs.entry.js +3 -3
- package/dist/cjs/q2-legend.cjs.entry.js +2 -2
- package/dist/cjs/q2-link.cjs.entry.js +4 -4
- package/dist/cjs/q2-link.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-list.cjs.entry.js +6 -7
- package/dist/cjs/q2-list.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-loading-element.cjs.entry.js +2 -2
- package/dist/cjs/q2-loc.cjs.entry.js +52 -3
- package/dist/cjs/q2-loc.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +3 -3
- package/dist/cjs/q2-month-picker.cjs.entry.js +4 -4
- package/dist/cjs/q2-optgroup.cjs.entry.js +5 -4
- package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-option-list.cjs.entry.js +2 -2
- package/dist/cjs/q2-option.cjs.entry.js +50 -33
- package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +11 -7
- package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pill.cjs.entry.js +19 -18
- package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js +5 -5
- package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +3 -3
- package/dist/cjs/q2-relative-time.cjs.entry.js +3 -3
- package/dist/cjs/q2-resize-observer.cjs.entry.js +2 -2
- package/dist/cjs/q2-section.cjs.entry.js +8 -6
- package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-select.cjs.entry.js +6 -5
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +5 -4
- package/dist/cjs/q2-stepper-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +16 -4
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper.cjs.entry.js +6 -4
- package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tag.cjs.entry.js +6 -4
- package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +2 -2
- package/dist/cjs/q2-textarea.cjs.entry.js +3 -3
- package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/{shapes-be198cc0.js → shapes-5d45fc11.js} +2 -2
- package/dist/cjs/{shapes-be198cc0.js.map → shapes-5d45fc11.js.map} +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +3 -3
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js +16 -18
- 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/test/q2-calendar-test.e2e.js +27 -0
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-card/q2-card.js +2 -0
- package/dist/collection/components/q2-card/q2-card.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +42 -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 +15 -0
- 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-donut/q2-chart-donut.js +41 -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 +11 -0
- package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +30 -23
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +4 -3
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js +37 -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 +34 -23
- 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 +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 +6 -4
- 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-dropdown/q2-dropdown.css +5 -0
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +10 -4
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +59 -14
- 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.css +29 -11
- package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +9 -11
- 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 +108 -74
- 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 +1 -1
- package/dist/collection/components/q2-example/q2-example.css +66 -0
- package/dist/collection/components/q2-example/q2-example.js +312 -0
- package/dist/collection/components/q2-example/q2-example.js.map +1 -0
- package/dist/collection/components/q2-example/test/q2-example.e2e.js +27 -0
- package/dist/collection/components/q2-example/test/q2-example.e2e.js.map +1 -0
- package/dist/collection/components/q2-example/test/q2-example.spec.js +126 -0
- package/dist/collection/components/q2-example/test/q2-example.spec.js.map +1 -0
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-input/formatting/alpha.spec.js +10 -0
- package/dist/collection/components/q2-input/formatting/alpha.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/alphanumeric.spec.js +7 -0
- package/dist/collection/components/q2-input/formatting/alphanumeric.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/currency.spec.js +20 -0
- package/dist/collection/components/q2-input/formatting/currency.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/date.js +1 -1
- package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/date.spec.js +17 -0
- package/dist/collection/components/q2-input/formatting/date.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/numeric.spec.js +32 -0
- package/dist/collection/components/q2-input/formatting/numeric.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/phone.spec.js +16 -0
- package/dist/collection/components/q2-input/formatting/phone.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/postal.js +1 -1
- package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/postal.spec.js +28 -0
- package/dist/collection/components/q2-input/formatting/postal.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/ssn.spec.js +7 -0
- package/dist/collection/components/q2-input/formatting/ssn.spec.js.map +1 -0
- package/dist/collection/components/q2-input/formatting/tin.spec.js +7 -0
- package/dist/collection/components/q2-input/formatting/tin.spec.js.map +1 -0
- package/dist/collection/components/q2-input/q2-input.js +58 -44
- package/dist/collection/components/q2-input/q2-input.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.e2e.js +259 -2106
- 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 +4035 -0
- package/dist/collection/components/q2-input/test/q2-input-test.spec.js.map +1 -0
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js +1 -1
- package/dist/collection/components/q2-link/q2-link.css +17 -20
- package/dist/collection/components/q2-link/q2-link.js +2 -2
- package/dist/collection/components/q2-link/q2-link.js.map +1 -1
- package/dist/collection/components/q2-link/test/q2-link-test.e2e.js +6 -6
- package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-list/q2-list.js +4 -5
- package/dist/collection/components/q2-list/q2-list.js.map +1 -1
- package/dist/collection/components/q2-loc/q2-loc.js +66 -4
- package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
- package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js +19 -30
- 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 +164 -0
- package/dist/collection/components/q2-loc/test/q2-loc-test.spec.js.map +1 -0
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +3 -2
- package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
- package/dist/collection/components/q2-option/q2-option.css +1 -1
- package/dist/collection/components/q2-option/q2-option.js +57 -34
- package/dist/collection/components/q2-option/q2-option.js.map +1 -1
- package/dist/collection/components/q2-option/test/q2-option-test.e2e.js +110 -106
- 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 +532 -0
- package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -0
- package/dist/collection/components/q2-pagination/q2-pagination.js +9 -5
- package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +18 -1
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-pill/q2-pill.js +18 -17
- package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +128 -57
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-popover/q2-popover.js +17 -4
- package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
- package/dist/collection/components/q2-radio/q2-radio.js +1 -1
- package/dist/collection/components/q2-radio-group/q2-radio-group.css +19 -9
- package/dist/collection/components/q2-radio-group/q2-radio-group.js +2 -2
- package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
- package/dist/collection/components/q2-section/q2-section.js +6 -4
- package/dist/collection/components/q2-section/q2-section.js.map +1 -1
- package/dist/collection/components/q2-select/q2-select.js +5 -3
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +123 -62
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.js +4 -2
- package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +3 -2
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +46 -2
- 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 +26 -0
- 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 +4 -3
- package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +5 -2
- package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +55 -4
- 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/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/utils/helpers.js +63 -41
- package/dist/collection/utils/helpers.js.map +1 -1
- package/dist/collection/utils/index.js +83 -0
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/index2.js +84 -1
- 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-calendar.js +16 -18
- package/dist/components/q2-calendar.js.map +1 -1
- package/dist/components/q2-card.js +2 -0
- package/dist/components/q2-card.js.map +1 -1
- package/dist/components/q2-carousel-pane.js +2 -2
- package/dist/components/q2-chart-area.js +16 -2
- package/dist/components/q2-chart-area.js.map +1 -1
- package/dist/components/q2-chart-bar.js +1 -1
- package/dist/components/q2-chart-donut.js +19 -2
- package/dist/components/q2-chart-donut.js.map +1 -1
- package/dist/components/q2-checkbox-group.js +5 -4
- package/dist/components/q2-checkbox-group.js.map +1 -1
- package/dist/components/q2-currency.js +15 -2
- package/dist/components/q2-currency.js.map +1 -1
- package/dist/components/q2-data-table.js +1 -1
- package/dist/components/q2-data-table.js.map +1 -1
- package/dist/components/q2-detail.js +1 -1
- package/dist/components/q2-dropdown-item2.js +12 -26
- package/dist/components/q2-dropdown-item2.js.map +1 -1
- package/dist/components/q2-dropdown.js +6 -3
- package/dist/components/q2-dropdown.js.map +1 -1
- package/dist/components/q2-editable-field.js +1 -1
- package/dist/components/q2-example.d.ts +11 -0
- package/dist/components/q2-example.js +170 -0
- package/dist/components/q2-example.js.map +1 -0
- package/dist/components/q2-formatted-text.js +1 -1
- package/dist/components/q2-input2.js +41 -37
- package/dist/components/q2-input2.js.map +1 -1
- package/dist/components/q2-item.js +1 -1
- package/dist/components/q2-legend2.js +1 -1
- package/dist/components/q2-link.js +3 -3
- package/dist/components/q2-link.js.map +1 -1
- package/dist/components/q2-list.js +4 -5
- package/dist/components/q2-list.js.map +1 -1
- package/dist/components/q2-loc.js +55 -2
- package/dist/components/q2-loc.js.map +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 +3 -2
- package/dist/components/q2-optgroup2.js.map +1 -1
- package/dist/components/q2-option-list2.js +1 -1
- package/dist/components/q2-option2.js +52 -33
- package/dist/components/q2-option2.js.map +1 -1
- package/dist/components/q2-pagination.js +9 -5
- package/dist/components/q2-pagination.js.map +1 -1
- package/dist/components/q2-pill.js +18 -17
- package/dist/components/q2-pill.js.map +1 -1
- package/dist/components/q2-popover2.js +16 -4
- package/dist/components/q2-popover2.js.map +1 -1
- package/dist/components/q2-radio-group.js +3 -3
- package/dist/components/q2-radio-group.js.map +1 -1
- package/dist/components/q2-radio.js +1 -1
- package/dist/components/q2-relative-time.js +1 -1
- package/dist/components/q2-resize-observer2.js +1 -1
- package/dist/components/q2-section.js +6 -4
- package/dist/components/q2-section.js.map +1 -1
- package/dist/components/q2-select2.js +6 -4
- package/dist/components/q2-select2.js.map +1 -1
- package/dist/components/q2-stepper-pane.js +3 -2
- package/dist/components/q2-stepper-pane.js.map +1 -1
- package/dist/components/q2-stepper-vertical.js +16 -3
- package/dist/components/q2-stepper-vertical.js.map +1 -1
- package/dist/components/q2-stepper.js +4 -2
- package/dist/components/q2-stepper.js.map +1 -1
- package/dist/components/q2-tab-container.js +4 -3
- package/dist/components/q2-tab-container.js.map +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tag.js +5 -2
- package/dist/components/q2-tag.js.map +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 +16 -5
- package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
- package/dist/esm/{index-1e1ce94e.js → index-7a5365e2.js} +40 -5
- package/dist/esm/index-7a5365e2.js.map +1 -0
- package/dist/esm/{index-844fc010.js → index-d18e2a20.js} +86 -3
- package/dist/esm/index-d18e2a20.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/q2-action-group.entry.js +2 -2
- package/dist/esm/q2-action-sheet.entry.js +3 -3
- package/dist/esm/q2-avatar.entry.js +2 -2
- package/dist/esm/q2-badge_7.entry.js +49 -44
- package/dist/esm/q2-badge_7.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +17 -20
- package/dist/esm/q2-calendar.entry.js.map +1 -1
- package/dist/esm/q2-card.entry.js +4 -2
- package/dist/esm/q2-card.entry.js.map +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +4 -4
- package/dist/esm/q2-carousel.entry.js +2 -2
- package/dist/esm/q2-chart-area.entry.js +16 -3
- package/dist/esm/q2-chart-area.entry.js.map +1 -1
- package/dist/esm/q2-chart-bar.entry.js +3 -3
- package/dist/esm/q2-chart-donut.entry.js +19 -3
- package/dist/esm/q2-chart-donut.entry.js.map +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +6 -5
- package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
- package/dist/esm/q2-checkbox.entry.js +2 -2
- package/dist/esm/q2-currency.entry.js +14 -2
- package/dist/esm/q2-currency.entry.js.map +1 -1
- package/dist/esm/q2-data-table.entry.js +3 -3
- package/dist/esm/q2-data-table.entry.js.map +1 -1
- package/dist/esm/q2-detail.entry.js +3 -3
- package/dist/esm/q2-dropdown-item.entry.js +12 -14
- package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
- package/dist/esm/q2-dropdown.entry.js +7 -5
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +3 -3
- package/dist/esm/q2-example.entry.js +141 -0
- package/dist/esm/q2-example.entry.js.map +1 -0
- package/dist/esm/q2-formatted-text.entry.js +2 -2
- package/dist/esm/q2-item.entry.js +3 -3
- package/dist/esm/q2-legend.entry.js +2 -2
- package/dist/esm/q2-link.entry.js +4 -4
- package/dist/esm/q2-link.entry.js.map +1 -1
- package/dist/esm/q2-list.entry.js +6 -7
- package/dist/esm/q2-list.entry.js.map +1 -1
- package/dist/esm/q2-loading-element.entry.js +2 -2
- package/dist/esm/q2-loc.entry.js +52 -3
- package/dist/esm/q2-loc.entry.js.map +1 -1
- package/dist/esm/q2-message.entry.js +3 -3
- package/dist/esm/q2-month-picker.entry.js +4 -4
- package/dist/esm/q2-optgroup.entry.js +5 -4
- package/dist/esm/q2-optgroup.entry.js.map +1 -1
- package/dist/esm/q2-option-list.entry.js +2 -2
- package/dist/esm/q2-option.entry.js +50 -33
- package/dist/esm/q2-option.entry.js.map +1 -1
- package/dist/esm/q2-pagination.entry.js +11 -7
- package/dist/esm/q2-pagination.entry.js.map +1 -1
- package/dist/esm/q2-pill.entry.js +19 -18
- package/dist/esm/q2-pill.entry.js.map +1 -1
- package/dist/esm/q2-radio-group.entry.js +5 -5
- package/dist/esm/q2-radio-group.entry.js.map +1 -1
- package/dist/esm/q2-radio.entry.js +3 -3
- package/dist/esm/q2-relative-time.entry.js +3 -3
- package/dist/esm/q2-resize-observer.entry.js +2 -2
- package/dist/esm/q2-section.entry.js +8 -6
- package/dist/esm/q2-section.entry.js.map +1 -1
- package/dist/esm/q2-select.entry.js +6 -5
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +5 -4
- package/dist/esm/q2-stepper-pane.entry.js.map +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +16 -4
- package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
- package/dist/esm/q2-stepper.entry.js +6 -4
- package/dist/esm/q2-stepper.entry.js.map +1 -1
- package/dist/esm/q2-tag.entry.js +6 -4
- package/dist/esm/q2-tag.entry.js.map +1 -1
- package/dist/esm/q2-tecton-elements.js +3 -3
- package/dist/esm/q2-textarea.entry.js +3 -3
- package/dist/esm/q2-tooltip.entry.js +2 -2
- package/dist/esm/{shapes-36183b2a.js → shapes-c7e1a3fa.js} +2 -2
- package/dist/esm/{shapes-36183b2a.js.map → shapes-c7e1a3fa.js.map} +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +3 -3
- package/dist/q2-tecton-elements/action-sheet-e64cb6f7.js +77 -0
- package/dist/q2-tecton-elements/{p-b7554a79.js.map → action-sheet-e64cb6f7.js.map} +1 -1
- package/dist/q2-tecton-elements/app-globals-0f993ce5.js +4 -0
- package/dist/q2-tecton-elements/{p-e1255160.js.map → app-globals-0f993ce5.js.map} +1 -1
- package/dist/q2-tecton-elements/charting-1abfb877.js +34872 -0
- package/dist/q2-tecton-elements/{p-2941aafa.js.map → charting-1abfb877.js.map} +1 -1
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +410 -0
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -0
- package/dist/q2-tecton-elements/dataSample-7b62e101.js +2602 -0
- package/dist/q2-tecton-elements/{p-ad80aef0.js.map → dataSample-7b62e101.js.map} +1 -1
- package/dist/q2-tecton-elements/index-3184c760.js +18168 -0
- package/dist/q2-tecton-elements/{p-f1e887f5.js.map → index-3184c760.js.map} +1 -1
- package/dist/q2-tecton-elements/index-7a5365e2.js +1792 -0
- package/dist/q2-tecton-elements/index-7a5365e2.js.map +1 -0
- package/dist/q2-tecton-elements/index-d18e2a20.js +323 -0
- package/dist/q2-tecton-elements/index-d18e2a20.js.map +1 -0
- package/dist/q2-tecton-elements/q2-action-group.entry.js +56 -0
- package/dist/q2-tecton-elements/{p-5637c486.entry.js.map → q2-action-group.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +1480 -0
- package/dist/q2-tecton-elements/{p-188eb162.entry.js.map → q2-action-sheet.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-avatar.entry.js +101 -0
- package/dist/q2-tecton-elements/{p-07d1c3ae.entry.js.map → q2-avatar.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +5449 -0
- package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-calendar.entry.js +1313 -0
- package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-card.entry.js +170 -0
- package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +130 -0
- package/dist/q2-tecton-elements/{p-7aef0c08.entry.js.map → q2-carousel-pane.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-carousel.entry.js +4613 -0
- package/dist/q2-tecton-elements/{p-e216ef3f.entry.js.map → q2-carousel.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +4330 -0
- package/dist/q2-tecton-elements/q2-chart-area.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +1479 -0
- package/dist/q2-tecton-elements/{p-7906f49e.entry.js.map → q2-chart-bar.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +4537 -0
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +166 -0
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +223 -0
- package/dist/q2-tecton-elements/{p-b7de110e.entry.js.map → q2-checkbox.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-currency.entry.js +153 -0
- package/dist/q2-tecton-elements/q2-currency.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-data-table.entry.js +622 -0
- package/dist/q2-tecton-elements/{p-7903cd15.entry.js.map → q2-data-table.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.js +128 -0
- package/dist/q2-tecton-elements/{p-f5f23659.entry.js.map → q2-detail.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +146 -0
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +430 -0
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +296 -0
- package/dist/q2-tecton-elements/{p-896c7008.entry.js.map → q2-editable-field.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-example.entry.js +152 -0
- package/dist/q2-tecton-elements/q2-example.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +73 -0
- package/dist/q2-tecton-elements/{p-7c9f8b62.entry.js.map → q2-formatted-text.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-item.entry.js +158 -0
- package/dist/q2-tecton-elements/{p-7c9a0122.entry.js.map → q2-item.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-legend.entry.js +146 -0
- package/dist/q2-tecton-elements/{p-ff8f1a32.entry.js.map → q2-legend.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-link.entry.js +83 -0
- package/dist/q2-tecton-elements/q2-link.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-list.entry.js +100 -0
- package/dist/q2-tecton-elements/q2-list.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-loading-element.entry.js +36 -0
- package/dist/q2-tecton-elements/{p-a068c84c.entry.js.map → q2-loading-element.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-loc.entry.js +82 -0
- package/dist/q2-tecton-elements/q2-loc.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-message.entry.js +99 -0
- package/dist/q2-tecton-elements/{p-8d2b02e1.entry.js.map → q2-message.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +198 -0
- package/dist/q2-tecton-elements/{p-8d07cf91.entry.js.map → q2-month-picker.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +88 -0
- package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-option-list.entry.js +585 -0
- package/dist/q2-tecton-elements/{p-a5d0e252.entry.js.map → q2-option-list.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.js +110 -0
- package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-pagination.entry.js +377 -0
- package/dist/q2-tecton-elements/q2-pagination.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-pill.entry.js +434 -0
- package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +227 -0
- package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-radio.entry.js +144 -0
- package/dist/q2-tecton-elements/{p-c235ab3f.entry.js.map → q2-radio.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +162 -0
- package/dist/q2-tecton-elements/{p-95a7c042.entry.js.map → q2-relative-time.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +100 -0
- package/dist/q2-tecton-elements/{p-e2c800ef.entry.js.map → q2-resize-observer.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +256 -0
- package/dist/q2-tecton-elements/q2-section.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-select.entry.js +684 -0
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +124 -0
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +356 -0
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-stepper.entry.js +332 -0
- package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-tag.entry.js +213 -0
- package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +21 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js +364 -0
- package/dist/q2-tecton-elements/{p-f135b265.entry.js.map → q2-textarea.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +105 -0
- package/dist/q2-tecton-elements/{p-c5667d5d.entry.js.map → q2-tooltip.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/sectorHelper-183cedd0.js +949 -0
- package/dist/q2-tecton-elements/{p-eea5aa01.js.map → sectorHelper-183cedd0.js.map} +1 -1
- package/dist/q2-tecton-elements/shapes-c7e1a3fa.js +132 -0
- package/dist/q2-tecton-elements/{p-50b425de.js.map → shapes-c7e1a3fa.js.map} +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +134 -0
- package/dist/q2-tecton-elements/{p-96b1406c.entry.js.map → tecton-tab-pane.entry.js.map} +1 -1
- package/dist/types/components/q2-calendar/q2-calendar.d.ts +4 -5
- package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +6 -0
- package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +6 -0
- package/dist/types/components/q2-currency/q2-currency.d.ts +7 -0
- package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +1 -1
- package/dist/types/components/q2-dropdown-item/q2-dropdown-item.d.ts +2 -2
- package/dist/types/components/q2-example/q2-example.d.ts +119 -0
- package/dist/types/components/q2-input/formatting/date.d.ts +22 -0
- package/dist/types/components/q2-input/formatting/postal.d.ts +197 -0
- package/dist/types/components/q2-input/q2-input.d.ts +15 -12
- package/dist/types/components/q2-loc/q2-loc.d.ts +15 -1
- package/dist/types/components/q2-option/q2-option.d.ts +11 -3
- package/dist/types/components/q2-pill/q2-pill.d.ts +3 -3
- package/dist/types/components/q2-popover/q2-popover.d.ts +1 -0
- package/dist/types/components/q2-select/q2-select.d.ts +1 -1
- package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +6 -0
- package/dist/types/components/q2-tag/q2-tag.d.ts +1 -1
- package/dist/types/components.d.ts +104 -14
- package/dist/types/utils/helpers.d.ts +13 -0
- package/dist/types/utils/index.d.ts +11 -0
- package/package.json +7 -7
- package/dist/cjs/index-14c3693c.js.map +0 -1
- package/dist/cjs/index-9aa4a776.js.map +0 -1
- package/dist/esm/index-1e1ce94e.js.map +0 -1
- package/dist/esm/index-844fc010.js.map +0 -1
- package/dist/q2-tecton-elements/p-06701928.entry.js +0 -2
- package/dist/q2-tecton-elements/p-06701928.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-07d1c3ae.entry.js +0 -2
- package/dist/q2-tecton-elements/p-1305f7ca.entry.js +0 -2
- package/dist/q2-tecton-elements/p-1305f7ca.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-15ac45d6.js +0 -2
- package/dist/q2-tecton-elements/p-15ac45d6.js.map +0 -1
- package/dist/q2-tecton-elements/p-16910682.entry.js +0 -2
- package/dist/q2-tecton-elements/p-16910682.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-188eb162.entry.js +0 -3
- package/dist/q2-tecton-elements/p-1c760a89.entry.js +0 -2
- package/dist/q2-tecton-elements/p-1c760a89.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-1c88d057.entry.js +0 -2
- package/dist/q2-tecton-elements/p-1c88d057.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-20a3d6ed.entry.js +0 -2
- package/dist/q2-tecton-elements/p-20a3d6ed.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-2733583e.entry.js +0 -2
- package/dist/q2-tecton-elements/p-2733583e.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-2941aafa.js +0 -39
- package/dist/q2-tecton-elements/p-3e428290.entry.js +0 -2
- package/dist/q2-tecton-elements/p-3e428290.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-4774e5b3.entry.js +0 -2
- package/dist/q2-tecton-elements/p-4774e5b3.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-490ef8e5.entry.js +0 -2
- package/dist/q2-tecton-elements/p-490ef8e5.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-4e10550d.entry.js +0 -2
- package/dist/q2-tecton-elements/p-4e10550d.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-50b425de.js +0 -2
- package/dist/q2-tecton-elements/p-50f7328f.entry.js +0 -2
- package/dist/q2-tecton-elements/p-50f7328f.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-5637c486.entry.js +0 -2
- package/dist/q2-tecton-elements/p-56df21b0.entry.js +0 -2
- package/dist/q2-tecton-elements/p-56df21b0.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-5a834214.entry.js +0 -2
- package/dist/q2-tecton-elements/p-5a834214.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-5f99a4a8.entry.js +0 -2
- package/dist/q2-tecton-elements/p-5f99a4a8.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-72d948b4.entry.js +0 -2
- package/dist/q2-tecton-elements/p-72d948b4.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-7903cd15.entry.js +0 -2
- package/dist/q2-tecton-elements/p-7906f49e.entry.js +0 -2
- package/dist/q2-tecton-elements/p-7aef0c08.entry.js +0 -2
- package/dist/q2-tecton-elements/p-7c9a0122.entry.js +0 -2
- package/dist/q2-tecton-elements/p-7c9f8b62.entry.js +0 -2
- package/dist/q2-tecton-elements/p-81fbe718.entry.js +0 -2
- package/dist/q2-tecton-elements/p-81fbe718.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-896c7008.entry.js +0 -2
- package/dist/q2-tecton-elements/p-8d07cf91.entry.js +0 -2
- package/dist/q2-tecton-elements/p-8d2b02e1.entry.js +0 -2
- package/dist/q2-tecton-elements/p-95a7c042.entry.js +0 -2
- package/dist/q2-tecton-elements/p-96b1406c.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a068c84c.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a47597dd.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a47597dd.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-a5d0e252.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a5f18e27.js +0 -3
- package/dist/q2-tecton-elements/p-a5f18e27.js.map +0 -1
- package/dist/q2-tecton-elements/p-ac6aa392.entry.js +0 -2
- package/dist/q2-tecton-elements/p-ac6aa392.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-ad057d10.entry.js +0 -2
- package/dist/q2-tecton-elements/p-ad057d10.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-ad80aef0.js +0 -2
- package/dist/q2-tecton-elements/p-b0e5e9dc.entry.js +0 -2
- package/dist/q2-tecton-elements/p-b0e5e9dc.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-b1784be3.entry.js +0 -2
- package/dist/q2-tecton-elements/p-b1784be3.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-b7554a79.js +0 -2
- package/dist/q2-tecton-elements/p-b7de110e.entry.js +0 -2
- package/dist/q2-tecton-elements/p-c235ab3f.entry.js +0 -2
- package/dist/q2-tecton-elements/p-c5667d5d.entry.js +0 -2
- package/dist/q2-tecton-elements/p-e1255160.js +0 -2
- package/dist/q2-tecton-elements/p-e216ef3f.entry.js +0 -2
- package/dist/q2-tecton-elements/p-e2c800ef.entry.js +0 -2
- package/dist/q2-tecton-elements/p-eea5aa01.js +0 -2
- package/dist/q2-tecton-elements/p-f135b265.entry.js +0 -2
- package/dist/q2-tecton-elements/p-f1e887f5.js +0 -2
- package/dist/q2-tecton-elements/p-f5f23659.entry.js +0 -2
- package/dist/q2-tecton-elements/p-f7867f21.entry.js +0 -2
- package/dist/q2-tecton-elements/p-f7867f21.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-ff8f1a32.entry.js +0 -2
- package/dist/q2-tecton-elements/p-fff01dc1.entry.js +0 -2
- package/dist/q2-tecton-elements/p-fff01dc1.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["formatDateISO","value","date","Date","isValidDate","formatISO","representation","memoizedFormatDateShort","formatDateShort","isoDate","toISOString","Intl","DateTimeFormat","month","day","year","timeZone","resolvedOptions","format","memoizedFormatDateLong","formatDateLong","memoizedFormatDateFull","formatDateFull","weekday","convertMomentFormat","stringFormat","replace","stringToDate","isString","undefined","result","dateParts","split","map","part","padStart","isIsoString","length","isCompleteDate","isPartialDate","isStandardSlashDate","includes","unshift","pop","UTC","parseInt","now","yearNumber","monthNumber","dayNumber","getFullYear","removeTimezoneOffset","timeZoneOffset","getTimezoneOffset","setMinutes","Math","abs","stringArrayToDate","dateArray","Array","isArray","setupMonthYear","monthIndex","getMonth","selectedYear","validateInput","input","validDays","validDates","invalidDates","startDate","endDate","formatString","assume","isValid","isAvailable","messageType","message","loc","inputDate","buildInputDate","getDate","calendarPosition","monthName","getMonths","getDay","isoString","isNotValidDate","isInvalidDate","isBeforeStartDate","isAfterEndDate","isInvalid","Number","twoDigitDay","fourDigitYear","assumeYear","monthDay","mm","dd","nowLocal","assumedYear","slice","toString","handleMissingZeros","match","sp","reorderDateString","firstDayOfWeekInMonth","getDays","getDaysOfWeek","generateDatesFromMonthYear","daysInMonth","getDaysInMonth","keys","reduce","acc","stepIndex","push","getValidDaysOfWeek","checksum","sunValid","monValid","tuesValid","wedsValid","thursValid","friValid","satValid","ret","validateAgainstChecksum","validDaysOfWeek","newDate","validateAgainstBlacklist","validateAgainstWhitelist","some","validDate","isSameDay","buildDates","selectedMonthYear","currentSelection","dateValidators","typedValue","validationFns","baseValidation","bind","generateDateList","isIncompleteDate","datesInMonth","dayInMonth","dateIndex","fn","dayState","getDayState","classList","generateClassesForCalDay","Object","assign","integer","isEmpty","isActivity","startOfMonthEmpties","addEmptiesMonthStart","endOfMonthEmpties","addEmptiesMonthEnd","isNewDateBeforeStartDate","isAfter","isNewDateAfterEndDate","isBefore","isNowAfterCutoffTime","cutOffTime","currentDate","isSelected","isToday","isStartDate","isEndDate","classes","join","monthStartDayOfWeek","addEmptyDates","monthEndDayOfWeek","emptyDate","from","to","q2CalendarCss","Q2CalendarStyle0","Q2Calendar","this","dayAbbrStrings","dayStrings","defaultFormatString","formatModifier","internalError","monthStrings","scheduledAfterRender","closeCalendar","open","focusInput","goToMonthYear","dateList","buildDateList","checkActiveCellForBlankness","onClickElsewhere","event","target","localName","stopPropagation","onDateKeydown","currentDay","dataset","generateDateFromDay","key","preventDefault","activateDay","addDays","shiftKey","find","selectDate","onDateSelection","dateCell","closest","clickedDate","onHeaderControlKeydown","hasSelectedCell","_a","calendarBody","querySelector","onInputBlur","isTypeable","daysOfWeekChecksum","setHints","defaultHintMessage","setCompleteInput","valueOnBlur","change","emit","onInputChange","onInputClick","disabled","toggleCalendar","onInputFocus","controlElement","tmpTypedValue","onInputInput","detail","onInputKeydown","dateValue","openCalendar","typeable","onInputKeyup","yyyy","validateDate","keyboardSelection","onPopupKeyup","onRefocus","btnPrevMonth","dispatchEvent","FocusEvent","readonly","invalid","success","connectedCallback","componentWillLoad","popDirectionHandler","handleAriaLabel","componentDidLoad","overrideFocus","hostElement","componentDidRender","setTimeout","forEach","defaultChangeHandler","onchange","handleClear","defaultErrorHandler","onerror","hintMessageType","hintMessage","delegateFocus","isEventFromElement","shadowRoot","focus","popoverStateHandler","defaultSuccessHandler","onsuccess","closePopover","_togglePopover","openPopover","setValue","waitForNextPaint","tableCell","calendarTable","click","typeValue","formattedDate","innerInputField","InputEvent","KeyboardEvent","ariaLabelObserver","cutoffTimeObserver","daysOfWeekChecksumObserver","endDateObserver","invalidDatesObserver","handleRenamedProp","startDateObserver","typeableChanged","valueObserver","validDatesObserver","newValue","isMoment","toDate","shortFormattedValue","canClear","clearable","computedPlaceholder","disabledMsg","buttonLabel","placeholder","currentWeeks","weeks","accum","item","index","chunkIndex","floor","ct","cutoffTime","isMomentString","test","errorList","errors","list","filter","error","concat","formattedValue","displayFormat","hintList","hints","hint","_b","selectedDate","selectedCell","toggleElement","btnCalendarToggle","focusDay","monthYear","calendarDays","h","role","ref","scope","onClick","onKeyDown","elm","week","ariaLabel","class","tabindex","activeElement","tagName","hasAttribute","calendarCells","querySelectorAll","indexOfCell","indexOf","dayToFocus","cell","hintMessageElement","present","errorCode","isSelectedMonthAndYear","calculationDateList","dateValueDayOfMonth","_c","isDateValueInvalid","console","warn","renderCalendarPopover","onKeyUp","calendarLabel","label","type","btnNextMonth","btnPrevYear","btnNextYear","id","disclaimer","onFocus","renderHintField","el","renderInputField","hideLabel","optional","ariaExpanded","onChange","onInput","onBlur","_role","_preventEntry","slot","render","popoverElement","direction","popoverDirection","minHeight","popoverMinHeight","align","popoverAlignment","mode","popoverMode","block"],"sources":["src/components/q2-calendar/q2-calendar-helpers.ts","src/components/q2-calendar/q2-calendar-validation.ts","src/components/q2-calendar/q2-calendar.scss?tag=q2-calendar&encapsulation=shadow","src/components/q2-calendar/q2-calendar.tsx"],"sourcesContent":["import { isValid as isValidDate, formatISO, setMinutes } from 'date-fns';\nimport { loc } from '../../utils';\nimport { ISelectedMonthYear, InputValidation } from './q2-calendar-types';\n\nexport interface IMomentLikeObject {\n toDate(): Date;\n}\n\nexport function formatDateISO(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n return formatISO(date, { representation: 'date' });\n}\n\nlet memoizedFormatDateShort: Intl.DateTimeFormat;\nexport function formatDateShort(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n\n const isoDate = date.toISOString();\n if (!memoizedFormatDateShort) {\n memoizedFormatDateShort = new Intl.DateTimeFormat('en-US', {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateShort.format(new Date(isoDate));\n}\n\nlet memoizedFormatDateLong: Intl.DateTimeFormat;\nexport function formatDateLong(value: string | Date) {\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateLong) {\n memoizedFormatDateLong = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n }\n\n return memoizedFormatDateLong.format(date);\n}\n\nlet memoizedFormatDateFull: Intl.DateTimeFormat;\nexport function formatDateFull(value: string | Date) {\n if (!value) return;\n const date = new Date(value);\n if (!isValidDate(date)) return;\n if (!memoizedFormatDateFull) {\n memoizedFormatDateFull = new Intl.DateTimeFormat('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n weekday: 'long',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n });\n }\n\n return memoizedFormatDateFull.format(date);\n}\n\nexport function convertMomentFormat(stringFormat: string) {\n return stringFormat\n .replace(/[d]/g, 'E')\n .replace(/[D]/g, 'd')\n .replace(/[Y]/g, 'y')\n .replace(/[l]/g, 'P')\n .replace(/[W]/g, 'I');\n}\n\nexport function stringToDate(date: string | null | void): Date | undefined {\n const isString = typeof date === 'string';\n if (!isString && date && isValidDate(new Date(date || undefined))) {\n date = formatDateISO(date);\n } else if (!date || !isValidDate(new Date(date))) {\n return undefined;\n }\n\n let result: Date;\n const dateParts = date.split(/[\\/\\-]/).map(part => part.padStart(2, '0'));\n const isIsoString = isString && date.length >= 24 && date[10] === 'T';\n const isCompleteDate = dateParts.length === 3;\n const isPartialDate = dateParts.length < 3;\n if (isIsoString) {\n date = date.split('T')[0];\n result = new Date(date);\n } else if (isCompleteDate) {\n const isStandardSlashDate = date.includes('/') && dateParts[2].length === 4;\n\n // Reorder mm/dd/yyyy dates for ISO formatting\n // [mm, dd, yyyy] -> [yyyy, mm, dd]\n if (isStandardSlashDate) dateParts.unshift(dateParts.pop());\n\n result = new Date(Date.UTC(parseInt(dateParts[0]), parseInt(dateParts[1]) - 1, parseInt(dateParts[2])));\n } else if (isPartialDate) {\n const now = new Date();\n\n let yearNumber: number;\n let monthNumber: string;\n let dayNumber: string;\n switch (dateParts.length) {\n case 1:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = '01';\n break;\n\n case 2:\n yearNumber = now.getFullYear();\n monthNumber = dateParts[0];\n dayNumber = dateParts[1];\n break;\n }\n\n result = new Date(`${yearNumber}-${monthNumber}-${dayNumber}`);\n }\n\n if (!isValidDate(result)) return undefined;\n\n // result = setHours(result, 0);\n result = removeTimezoneOffset(result);\n\n return isValidDate(result) ? result : undefined;\n}\n\nexport function removeTimezoneOffset(date: Date) {\n const timeZoneOffset = date.getTimezoneOffset();\n // Minutes compensation for some timezones like India, Central Australia and etc use GMT+5:30, GMT+9:30\n return setMinutes(date, timeZoneOffset + Math.abs(timeZoneOffset % 60));\n}\n\nexport function stringArrayToDate(dateArray: string[]): Date[] {\n if (!Array.isArray(dateArray) || dateArray.length === 0) {\n return [];\n }\n return dateArray.map(date => stringToDate(date));\n}\n\nexport function setupMonthYear(value: Date | undefined = new Date()): ISelectedMonthYear {\n return {\n monthIndex: value.getMonth(),\n selectedYear: value.getFullYear(),\n };\n}\n\nexport function validateInput(\n input: string = '',\n validDays: number[] = [],\n validDates: string[] = [], // white list\n invalidDates: string[] = [], // black list\n startDate: string,\n endDate: string,\n formatString: string = 'mm/dd/yyyy',\n assume: string\n): InputValidation {\n let isValid: boolean = true;\n let isAvailable: boolean = false;\n let messageType: string = 'info';\n let message: string = `${loc('tecton.element.calendar.hint.format')}: ${formatString}`;\n if (!input) {\n return { isValid, inputDate: new Date(''), isAvailable, messageType, message };\n }\n\n const inputDate = buildInputDate(input, assume);\n const month = inputDate.getMonth() + 1;\n const date = inputDate.getDate();\n const year = inputDate.getFullYear();\n const calendarPosition = [month, date, year];\n\n if (isValidDate(inputDate)) {\n const monthName = getMonths()[inputDate.getMonth()];\n\n if (input.length === 10) {\n isValid = true;\n messageType = null;\n message = null;\n }\n\n isAvailable = validDays.includes(inputDate.getDay());\n const isoString = formatDateISO(inputDate);\n\n if (isAvailable) {\n const isNotValidDate = validDates.length && !validDates.includes(isoString);\n const isInvalidDate = invalidDates.length && invalidDates.includes(isoString);\n const isBeforeStartDate = startDate && startDate > isoString;\n const isAfterEndDate = endDate && endDate < isoString;\n\n if (isNotValidDate || isInvalidDate || isBeforeStartDate || isAfterEndDate) {\n isAvailable = false;\n }\n }\n\n if (input.length >= 5 && !isAvailable) {\n isValid = false;\n messageType = 'error';\n const isInvalid = !monthName || !date || !year;\n message = isInvalid\n ? `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`\n : loc('tecton.element.calendar.hint.notAvailableDate', [formatDateLong(inputDate)]);\n }\n } else {\n isValid = false;\n messageType = 'error';\n message = `${loc('tecton.element.calendar.hint.invalidDate')}: ${formatString}`;\n }\n\n return {\n isValid,\n messageType,\n message,\n inputDate,\n isAvailable,\n calendarPosition,\n };\n}\n\nexport function buildInputDate(input: string, assume: string) {\n const now = new Date();\n // eslint-disable-next-line prefer-const\n let [month, day, year] = input.split('/');\n if (month === '0') month = '01';\n if (day === '0') day = '01';\n if (input.length === 10) {\n return new Date(input);\n } else if (month && day && Number(day) > 0) {\n const twoDigitDay = Number(day) < 10 ? `0${Number(day)}` : day;\n const fourDigitYear = !year || year.length < 4 ? assumeYear(month, day, assume) : year;\n return new Date(`${month}/${twoDigitDay}/${fourDigitYear}`);\n } else if (month) {\n return new Date(`${month}/01/${now.getFullYear()}`);\n }\n}\n\nfunction assumeYear(month: string, day: string, assume: string): string {\n const monthDay = `${month}/${day}`;\n const now = new Date();\n const mm: string = now.getMonth() < 9 ? `0${now.getMonth() + 1}` : `${now.getMonth() + 1}`;\n const dd: string = now.getDate() < 10 ? `0${now.getDate()}` : `${now.getDate()}`;\n const nowLocal = `${mm}/${dd}/${now.getFullYear()}`;\n let assumedYear = now.getFullYear();\n if (assume === 'future' && nowLocal.slice(0, 5) > monthDay) {\n assumedYear = now.getFullYear() + 1;\n } else if (assume === 'past' && nowLocal.slice(0, 5) < monthDay) {\n assumedYear = now.getFullYear() - 1;\n }\n return assumedYear.toString();\n}\n\nexport function handleMissingZeros(input): string {\n if (!input) {\n return '';\n }\n if (input.match(/^[1-9]\\/$/)) {\n return `0${input}/`;\n } else if (input.match(/^[0-9]{2}\\/[1-9]{1}\\/$/)) {\n const sp = input.split('/');\n return `${sp[0]}/0${sp[1]}/`;\n }\n return input;\n}\n\nexport function reorderDateString(input: string): string {\n const dateParts = (input || '').split('-');\n if (dateParts.length !== 3) return '';\n return `${dateParts[1]}/${dateParts[2]}/${dateParts[0]}`;\n}\n\nexport function firstDayOfWeekInMonth(month: number, year: number): number {\n return new Date(year, month, 1, 1, 1, 1, 1).getDay();\n}\n\nexport function getDays(): string[] {\n return [\n loc('tecton.element.calendar.days.short.Sunday'),\n loc('tecton.element.calendar.days.short.Monday'),\n loc('tecton.element.calendar.days.short.Tuesday'),\n loc('tecton.element.calendar.days.short.Wednesday'),\n loc('tecton.element.calendar.days.short.Thursday'),\n loc('tecton.element.calendar.days.short.Friday'),\n loc('tecton.element.calendar.days.short.Saturday'),\n ];\n}\n\nexport function getDaysOfWeek(): string[] {\n return [\n loc('tecton.element.calendar.days.Sunday'),\n loc('tecton.element.calendar.days.Monday'),\n loc('tecton.element.calendar.days.Tuesday'),\n loc('tecton.element.calendar.days.Wednesday'),\n loc('tecton.element.calendar.days.Thursday'),\n loc('tecton.element.calendar.days.Friday'),\n loc('tecton.element.calendar.days.Saturday'),\n ];\n}\n\nexport function getMonths(): string[] {\n return [\n loc('tecton.element.calendar.months.January'),\n loc('tecton.element.calendar.months.February'),\n loc('tecton.element.calendar.months.March'),\n loc('tecton.element.calendar.months.April'),\n loc('tecton.element.calendar.months.May'),\n loc('tecton.element.calendar.months.June'),\n loc('tecton.element.calendar.months.July'),\n loc('tecton.element.calendar.months.August'),\n loc('tecton.element.calendar.months.September'),\n loc('tecton.element.calendar.months.October'),\n loc('tecton.element.calendar.months.November'),\n loc('tecton.element.calendar.months.December'),\n ];\n}\n","import { firstDayOfWeekInMonth } from './q2-calendar-helpers';\nimport { getDaysInMonth, isSameDay, isBefore, isAfter, isValid as isValidDate } from 'date-fns';\nimport { CalendarDay, DateEmpty, Year, IDateValidators, ISelectedMonthYear } from './q2-calendar-types';\n\n// Validation Helpers\nexport type DateList = CalendarDay[];\nexport type IsValid = boolean;\nexport type IsActivityDate = boolean;\nexport type DateValidation = (date: Date) => IsValid;\n\nexport function generateDatesFromMonthYear(month: number, year: Year): Date[] {\n const daysInMonth = getDaysInMonth(new Date(year, month));\n\n return [...Array(daysInMonth).keys()].reduce((acc, stepIndex) => {\n acc.push(new Date(year, month, stepIndex + 1));\n return acc;\n }, []);\n}\n\nexport function getValidDaysOfWeek(checksum: number = 127): number[] {\n /* tslint:disable:no-bitwise */\n const sunValid = checksum & 1;\n const monValid = checksum & 2;\n const tuesValid = checksum & 4;\n const wedsValid = checksum & 8;\n const thursValid = checksum & 16;\n const friValid = checksum & 32;\n const satValid = checksum & 64;\n /* tslint:enable:no-bitwise */\n const ret = [];\n\n if (checksum <= 0) return ret;\n if (sunValid) ret.push(0);\n if (monValid) ret.push(1);\n if (tuesValid) ret.push(2);\n if (wedsValid) ret.push(3);\n if (thursValid) ret.push(4);\n if (friValid) ret.push(5);\n if (satValid) ret.push(6);\n\n return ret;\n}\n\nexport function validateAgainstChecksum(validDaysOfWeek: number[], newDate: Date): IsValid {\n return validDaysOfWeek.includes(newDate.getDay());\n}\n\nexport function validateAgainstBlacklist(invalidDates: Date[], newDate: Date): IsValid {\n return !validateAgainstWhitelist(invalidDates, newDate);\n}\n\nexport function validateAgainstWhitelist(validDates: Date[], newDate: Date): IsValid {\n return validDates.some(validDate => isSameDay(validDate, newDate));\n}\n\nexport function buildDates(\n validDaysOfWeek: number[],\n validDates: Date[],\n invalidDates: Date[],\n selectedMonthYear: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n typedValue: string\n): DateList {\n const validationFns = [baseValidation.bind(null, dateValidators, new Date())];\n if (validDates?.length) {\n validationFns.push(validateAgainstWhitelist.bind(null, validDates));\n } else {\n validationFns.push(validateAgainstChecksum.bind(null, validDaysOfWeek));\n }\n validationFns.push(validateAgainstBlacklist.bind(null, invalidDates));\n\n return generateDateList(selectedMonthYear, currentSelection, dateValidators, validationFns, typedValue);\n}\n\nexport function generateDateList(\n { monthIndex, selectedYear }: ISelectedMonthYear,\n currentSelection: Date | undefined,\n dateValidators: IDateValidators,\n validationFns: DateValidation[],\n typedValue: string\n): DateList {\n const isIncompleteDate = !isValidDate(new Date(typedValue));\n const datesInMonth = generateDatesFromMonthYear(monthIndex, selectedYear).map((dayInMonth, dateIndex) => {\n const isInvalid = validationFns.some(fn => !fn(dayInMonth));\n const dayState = getDayState(dayInMonth, dateValidators, currentSelection);\n const classList = generateClassesForCalDay({\n ...dayState,\n isInvalid,\n isIncompleteDate,\n });\n\n return {\n ...dayState,\n isValid: !isInvalid,\n date: dayInMonth,\n integer: dateIndex + 1,\n isEmpty: false,\n isActivity: false,\n classList,\n };\n });\n\n const startOfMonthEmpties = addEmptiesMonthStart(firstDayOfWeekInMonth(monthIndex, selectedYear));\n const endOfMonthEmpties = addEmptiesMonthEnd((startOfMonthEmpties.length + datesInMonth.length) % 7);\n\n return [...startOfMonthEmpties, ...datesInMonth, ...endOfMonthEmpties] as CalendarDay[];\n}\n\nexport function baseValidation(dateValidators: IDateValidators, now: Date, newDate: Date): boolean {\n const isNewDateBeforeStartDate = isAfter(dateValidators?.startDate, newDate);\n const isNewDateAfterEndDate = isBefore(dateValidators?.endDate, newDate);\n const isNowAfterCutoffTime = isSameDay(now, newDate) && isAfter(now, dateValidators?.cutOffTime);\n\n return !(isNewDateBeforeStartDate || isNowAfterCutoffTime || isNewDateAfterEndDate);\n}\n\nexport function getDayState(dayInMonth: Date, dateValidators: IDateValidators, currentDate: Date | undefined) {\n if (!currentDate) currentDate = new Date();\n const isSelected = currentDate && isSameDay(currentDate, dayInMonth);\n const isToday = isSameDay(dayInMonth, new Date());\n const isStartDate = isSameDay(dayInMonth, dateValidators?.startDate);\n const isEndDate = isSameDay(dayInMonth, dateValidators?.endDate);\n\n return { isSelected, isToday, isStartDate, isEndDate };\n}\n\nexport function generateClassesForCalDay({\n isInvalid,\n isSelected,\n isEndDate,\n isStartDate,\n isToday,\n isIncompleteDate,\n}: {\n isInvalid: boolean;\n isSelected: boolean;\n isEndDate: boolean;\n isStartDate: boolean;\n isToday: boolean;\n isIncompleteDate: boolean;\n}): string {\n const classes = [];\n if (!isInvalid) classes.push('is-valid');\n if (isSelected) classes.push('is-selected');\n if (isEndDate) classes.push('is-end-date');\n if (isStartDate) classes.push('is-start-date');\n if (isToday) classes.push('is-today');\n if (isSelected && isInvalid && !isIncompleteDate) classes.push('is-unavailable');\n\n return classes.join(' ');\n}\n\nexport function addEmptiesMonthStart(monthStartDayOfWeek: number): DateEmpty[] {\n return addEmptyDates(0, monthStartDayOfWeek);\n}\n\nexport function addEmptiesMonthEnd(monthEndDayOfWeek: number): DateEmpty[] {\n if (monthEndDayOfWeek === 0) return [];\n return addEmptyDates(monthEndDayOfWeek, 7);\n}\n\nexport const emptyDate: DateEmpty = {\n date: null,\n integer: null,\n isActivity: false,\n isEmpty: true,\n isValid: false,\n isToday: false,\n isSelected: false,\n isStartDate: false,\n isEndDate: false,\n classList: '',\n};\n\nexport function addEmptyDates(from: number, to: number): DateEmpty[] {\n if (from === 7) from = 0;\n return [...Array(to - from).keys()].map(() => ({ ...emptyDate }) as DateEmpty);\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n:host[hidden] {\n display: none;\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n\nq2-input {\n margin: 0;\n cursor: pointer;\n}\n\nq2-popover {\n --comp-min-tappable-size: 44px;\n --comp-table-border-spacing: 2px;\n --comp-min-tappable-size-and-spacing: calc(var(--comp-min-tappable-size) + var(--comp-table-border-spacing));\n --comp-popover-padding: #{var-list(var-prefixer(calendar-popover-padding), --app-scale-1x, 5px)};\n --comp-min-table-width: calc(var(--comp-min-tappable-size-and-spacing) * 7);\n --comp-table-container-border-spacing: calc(var(--comp-table-border-spacing) * 2);\n --comp-popover-total-padding: calc(var(--comp-popover-padding) * 2);\n\n --tct-popover-min-width: calc(\n var(--comp-min-table-width) + var(--comp-table-container-border-spacing) + var(--comp-popover-total-padding)\n );\n}\n\n.calendar-field-popup {\n padding: var(--comp-popover-padding);\n}\n\n.calendar-label {\n --comp-label-padding: #{var-list(\n --tct-calendar-label-padding,\n unquote('#{var-list(var-prefixer(calendar-label-vertical-padding), --tct-scale-2, --app-scale-2x, 10px)} 0')\n )};\n font-size: var-list(var-prefixer(calendar-label-font-size), 16px);\n flex: 1 1;\n flex-basis: calc(100% - var-list(--tct-btn-icon-width, 44px));\n margin: 0;\n padding: var(--comp-label-padding);\n}\n\n.cal-month-heading {\n padding: 0 0 0.75rem;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(var-prefixer(calendar-month-font-size), 16px);\n font-weight: var-list(var-prefixer(calendar-month-font-weight), 600);\n text-align: center;\n}\n\n.cal-month-text {\n min-width: 82px;\n display: inline-block;\n}\n\n.cal-year-text {\n min-width: 50px;\n display: inline-block;\n}\n\ntable {\n width: 100%;\n margin-bottom: 2px;\n text-align: center;\n border-spacing: var(--comp-table-border-spacing);\n}\n\nth {\n font-size: var-list(var-prefixer(calendar-day-heading-font-size), inherit);\n font-weight: var-list(var-prefixer(calendar-day-heading-font-weight), 600);\n width: 14.285714%;\n}\n\ntd {\n height: var(--comp-min-tappable-size);\n cursor: pointer;\n border: var-list(var-prefixer(calendar-day-border), 0);\n border-radius: var-list(var-prefixer(calendar-day-border-radius));\n\n &.is-unavailable {\n border: 1px solid var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n }\n\n &.is-valid:hover {\n border: var-list(var-prefixer(calendar-day-hover-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-hover-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n\n background: var-list(\n --tct-calendar-day-hover-background,\n var-prefixer(calendar-day-hover-bg),\n --tct-gray-14,\n --app-gray14,\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(var-prefixer(calendar-day-hover-font-color), inherit);\n }\n\n &[aria-hidden],\n &[aria-disabled] {\n pointer-events: none;\n cursor: not-allowed;\n }\n\n &[aria-disabled] {\n opacity: var-list(var-prefixer(calendar-day-disabled-opacity), --app-disabled-opacity, 0.4);\n }\n\n &[aria-selected] {\n border: var-list(var-prefixer(calendar-day-selected-border), var-prefixer(calendar-day-border) 0);\n border-radius: var-list(\n var-prefixer(calendar-day-selected-border-radius),\n var-prefixer(calendar-day-border-radius)\n );\n background: var-list(\n --tct-calendar-day-selected-background,\n var-prefixer(calendar-day-selected-bg),\n --tct-calendar-day-hover-background, \n var-prefixer(calendar-day-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l4,\n --app-gray-l4,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(calendar-day-selected-font-color),\n var-prefixer(calendar-day-hover-font-color),\n inherit\n );\n box-shadow: 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n );\n \n }\n &[aria-selected]:focus {\n box-shadow: 0 0 0 2px\n var-list(\n var-prefixer(calendar-day-selected-outline-color),\n --tct-stoplight-info,\n --const-stoplight-info,\n #0079c1\n ),\n 0 0 0 4px var(--const-focus-color, #0066cc)\n }\n}\n\n.today-decorator {\n text-transform: uppercase;\n font-weight: 700;\n font-size: 10px;\n height: 12px;\n}\n\n\n.calendar-disclaimer {\n font-size: var-list(\n var-prefixer(calendar-disclaimer-font-size),\n --tct-font-size-small,\n --app-font-size-small,\n 12px\n );\n border-style: solid;\n border-width: var-list(var-prefixer(calendar-disclaimer-border-width), unquote('1px 0 0 0'));\n border-color: var-list(\n var-prefixer(calendar-disclaimer-border-color),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #e6e6e6\n );\n padding: var-list(--tct-calendar-disclaimer-padding, --tct-scale-2, --app-scale-2x, 10px);\n text-align: left;\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Listen,\n Watch,\n Method,\n h,\n} from '@stencil/core';\nimport { ISelectedMonthYear, CalendarDay, IDateValidators } from './q2-calendar-types';\nimport { addDays, isSameDay, format, isValid as isValidDate } from 'date-fns';\nimport {\n stringToDate,\n setupMonthYear,\n getMonths,\n getDays,\n getDaysOfWeek,\n stringArrayToDate,\n convertMomentFormat,\n validateInput,\n handleMissingZeros,\n formatDateISO,\n formatDateShort,\n IMomentLikeObject,\n removeTimezoneOffset,\n reorderDateString,\n formatDateFull,\n} from './q2-calendar-helpers';\nimport { buildDates, getValidDaysOfWeek, DateList } from './q2-calendar-validation';\nimport {\n handleAriaLabel,\n loc,\n overrideFocus,\n isEventFromElement,\n handleRenamedProp,\n waitForNextPaint,\n} from '../../utils';\nimport { IEventDetail } from '../q2-input/q2-input-types';\nimport { Q2InputCustomEvent } from 'src/components';\n\n@Component({ tag: 'q2-calendar', shadow: true, styleUrl: 'q2-calendar.scss' })\nexport class Q2Calendar implements ComponentInterface {\n // #region Own Properties\n\n btnCalendarToggle: HTMLQ2BtnElement;\n btnNextMonth: HTMLQ2BtnElement;\n btnNextYear: HTMLQ2BtnElement;\n btnPrevMonth: HTMLQ2BtnElement;\n btnPrevYear: HTMLQ2BtnElement;\n calendarBody: HTMLDivElement;\n calendarTable: HTMLTableElement;\n dayAbbrStrings = getDays();\n dayStrings = getDaysOfWeek();\n defaultFormatString = 'mm/dd/yyyy';\n formatModifier: string = 'M/D/YYYY'; // To allow missing leading zero, 4/3/2021 => converts into 04/03/2021\n hintMessageElement: HTMLQ2MessageElement;\n internalError: string = '';\n monthStrings = getMonths();\n popoverElement?: HTMLQ2PopoverElement;\n scheduledAfterRender: (() => void)[] = [];\n selectedMonthYear: ISelectedMonthYear;\n valueOnBlur: string | { toDate(): Date };\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 controlElement: HTMLQ2InputElement;\n\n @State()\n dateList: CalendarDay[];\n\n @State()\n hintMessage: string = this.defaultHintMessage;\n\n @State()\n hintMessageType: 'info' | 'error' = 'info';\n\n @State()\n keyboardSelection: boolean = false;\n\n @State()\n typedValue: string = '';\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Detects the year automatically based on today's date when the user presses the `Escape` key or the `Blur` mouse event occurs.\n * Setting `future` or `past` as the value will increase or decrease the year by one, respectively.\n */\n @Prop({ reflect: true })\n assume: 'current' | 'future' | 'past' = 'current';\n\n /** @deprecated */\n @Prop({ reflect: true })\n buttonLabel: string;\n\n /** A label shown at the top of the popover date picker. */\n @Prop({ reflect: true })\n calendarLabel: string;\n\n /** Display a button in the input field allowing the user to clear their selection. */\n @Prop({ reflect: true })\n clearable: boolean;\n\n /**\n * Specifies a time of day after which a date is no longer valid.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n cutoffTime: string;\n\n /**\n * The most concise way to define valid days of the week for calendar. Each day of the week has a checksum value:\n *\n * - Sunday = 1\n * - Monday = 2\n * - Tuesday = 4\n * - Wednesday = 8\n * - Thursday = 16\n * - Friday = 32\n * - Saturday = 64\n *\n * Add the checksum values of your desired valid days together, and set `daysOfWeekChecksum` to that summed value.\n *\n * **Example:**\n * @snippet\n * element.daysOfWeekChecksum = 127 // All days of the week are valid\n * element.daysOfWeekChecksum = 62; // Only weekdays are valid\n * element.daysOfWeekChecksum = 65; // Only Saturday and Sunday are valid\n *\n */\n @Prop({ reflect: true })\n daysOfWeekChecksum: number;\n\n /** Disable the input field. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Text that displays as the placeholder when the field is marked `disabled`.\n * @localizable\n */\n @Prop({ reflect: true })\n disabledMsg: string;\n\n /** Text that appears at the bottom of the popover date picker. */\n @Prop({ reflect: true })\n disclaimer: string;\n\n /**\n * Determines the display format of the date field value.\n *\n * Must follow the [date-fns](https://date-fns.org/v2.28.0/docs/format) token specification.\n */\n @Prop({ reflect: true })\n displayFormat: string;\n\n /**\n * Defines the last selectable date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n endDate: string;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused and `typeable` is `true`.\n * @localizable\n */\n @Prop({ mutable: true })\n errors: string[];\n\n /** Hide the input field's ` <label> ` element from view. */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused and `typeable` is true.\n * @localizable\n */\n @Prop({ mutable: true })\n hints: string[];\n\n /** Show error styles when the calendar is in an errant state. */\n @Prop({ reflect: true, mutable: true })\n invalid: boolean;\n\n /**\n * Defines an explicit date blacklist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `invalidDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop()\n invalidDates: string[];\n\n /** The visible label for the `q2-calendar` input field. */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** @deprecated */\n @Prop()\n onsuccess: (e: CustomEvent) => void;\n\n /** Determine whether the popover is open or closed. */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** Appends \"(optional)\" to the label and sets `aria-required=\"false\"`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Text that appears within the input field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: 'up' | 'down';\n\n /** Aligns the popover date picker to the left or right side of the input field. */\n @Prop()\n popoverAlignment: 'left' | 'right';\n\n /**\n * Force the direction of the popover date picker when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ mutable: true })\n popoverDirection: 'up' | 'down';\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number = 355;\n\n /**\n * Determines the display mode of the popover.\n *\n * Providing a value of `legacy` instructs the popover to use absolute positioning instead of fixed positioning.\n *\n * @info\n * This is a temporary solution to work around styling issues related to using fixed positioning for the popover\n * when nested inside of elements with transform properties. This will be removed once the popover API is available\n * for use.\n */\n @Prop({ mutable: true })\n popoverMode: 'legacy' = null;\n\n /**\n * The field's content is not editable, but the field remains focusable.\n *\n * Appends \"(readonly)\" to the field label. Supersedes `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /**\n * Defines the first selectabe date in the date picker popover.\n *\n * @warning\n * Must be a valid ISO date string.\n */\n @Prop({ reflect: true })\n startDate: string;\n\n /** The user can type in the field. Only available in desktop browsers. */\n @Prop({ reflect: true })\n typeable: boolean;\n\n /**\n * Defines an explicit date whitelist.\n *\n * @warning\n * Must be a valid ISO date string.\n *\n * @info\n * When explicit date definitions like `validDates` is used, other date validity methods like `daysOfWeekChecksum` are overriden.\n */\n @Prop()\n validDates: string[];\n\n /**\n * The value of the `q2-calendar` element, e.g. the selected date.\n *\n * **How to change or clear the value with javascript:**\n * @snippet\n * // change date\n * element.value = '2022-12-21';\n * // clear date\n * element.value = null;\n */\n @Prop({ mutable: true, reflect: true })\n value: string | { toDate(): Date };\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when a date is selected or typed in the input field.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{\n // ISO formatted date\n value: string | null;\n }>;\n\n /**\n * Emitted when an invalid date is entered into the field.\n */\n @Event()\n error: EventEmitter<{ errors: { message: string; errorCode: string }[] }>;\n\n /**\n * Emitted when a valid date is entered or selected.\n */\n @Event()\n success: EventEmitter<{\n // ISO formatted date\n value: string;\n }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n connectedCallback() {\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n if (this.value && this.isTypeable && !this.typedValue) {\n this.typedValue = reorderDateString(this.value as string);\n }\n this.validateDate();\n }\n\n componentWillLoad() {\n this.popDirectionHandler();\n handleAriaLabel(this);\n }\n\n componentDidLoad(): void {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n setTimeout(() => {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }, 25);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange && !!event.detail) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('clear')\n handleClear() {\n this.change.emit({ value: null });\n this.value = null;\n this.typedValue = '';\n }\n\n @Listen('error')\n defaultErrorHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onerror) {\n if (this.hintMessageType === 'error' && this.hintMessage) {\n this.internalError = this.hintMessage;\n } else {\n this.internalError = loc('tecton.element.calendar.hint.invalidDate');\n }\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.controlElement.shadowRoot.querySelector<HTMLElement>('.input-field').focus();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n }\n\n @Listen('success')\n defaultSuccessHandler(event: CustomEvent) {\n if (event.target !== this.hostElement) {\n return;\n }\n\n if (typeof this.onsuccess === 'function') {\n this.onsuccess(event);\n } else {\n this.internalError = '';\n if (this.hintMessageType === 'error' && this.hintMessage) {\n this.hintMessage = null;\n this.hintMessageType = null;\n this.invalid = false;\n }\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the `<input>` to hide the popover if it is visible.\n *\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover if it is hidden.\n *\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the `<input>` to display the popover, moving to the correct month and year, and clicking the\n * provided date.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string | Date) {\n const date = typeof value === 'string' ? stringToDate(value) : value;\n if (!isValidDate(date)) return;\n\n await this.openPopover();\n await waitForNextPaint();\n\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n await waitForNextPaint();\n const tableCell = this.calendarTable?.querySelector<HTMLTableCellElement>(\n `td[data-date=\"${formatDateISO(date)}\"]`\n );\n tableCell?.click();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * While a `string` value can be passed, we recommended passing a `Date` object. If the value is invalid, the method\n * will not select the date.\n *\n * @warning\n * Only applicable when the input is typeable.\n *\n * @testOnly\n */\n @Method()\n async typeValue(value: string | Date) {\n if (!this.typeable) return;\n\n const date = typeof value === 'string' ? stringToDate(value) : value;\n const formattedDate = formatDateShort(date);\n if (!isValidDate(date)) return;\n\n const { innerInputField, controlElement } = this;\n innerInputField.focus();\n innerInputField.dispatchEvent(new FocusEvent('focus'));\n innerInputField.value = formattedDate;\n innerInputField.dispatchEvent(new InputEvent('input'));\n controlElement.dispatchEvent(new KeyboardEvent('keyup'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('cutoffTime')\n cutoffTimeObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('daysOfWeekChecksum')\n daysOfWeekChecksumObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('endDate')\n endDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('invalidDates')\n invalidDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('popDirection')\n popDirectionHandler() {\n handleRenamedProp(this, 'popDirection', 'popoverDirection');\n }\n\n @Watch('startDate')\n startDateObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('typeable')\n typeableChanged() {\n this.valueObserver(this.value);\n }\n\n @Watch('validDates')\n validDatesObserver() {\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n @Watch('value')\n valueObserver(newValue: string | IMomentLikeObject) {\n // resetting by empty string\n if (newValue === '') {\n this.value = undefined;\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n return;\n }\n const isMoment = newValue && typeof newValue !== 'string' && 'toDate' in newValue;\n const newDate = isMoment ? (newValue as IMomentLikeObject).toDate() : stringToDate(newValue as string);\n const shortFormattedValue = formatDateShort(newDate);\n if (this.isTypeable) {\n this.typedValue = shortFormattedValue;\n } else {\n this.controlElement.value = shortFormattedValue;\n this.selectedMonthYear = setupMonthYear(newDate);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n\n // reset hint when value is cleared\n if (this.invalid) return;\n\n if (shortFormattedValue) {\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n } else {\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get canClear() {\n if (this.isTypeable) {\n return this.clearable && !!this.typedValue;\n } else {\n return this.clearable && !!this.value;\n }\n }\n\n get computedPlaceholder(): string {\n if (this.disabled && this.disabledMsg) {\n return loc(this.disabledMsg);\n }\n\n if (this.buttonLabel && (this.disabled || this.placeholder)) {\n return loc(this.buttonLabel);\n }\n\n return (this.placeholder && loc(this.placeholder)) || '';\n }\n\n get currentWeeks() {\n const weeks = this.dateList.reduce<CalendarDay[][]>((accum, item, index) => {\n const chunkIndex = Math.floor(index / 7);\n\n if (!accum[chunkIndex]) {\n accum[chunkIndex] = [];\n }\n\n accum[chunkIndex].push(item);\n\n return accum;\n }, []);\n\n return weeks;\n }\n\n get dateValidators(): IDateValidators {\n const ct = new Date(this.cutoffTime || ''); // should fallback to InvalidDate\n return {\n startDate: stringToDate(this.startDate),\n endDate: stringToDate(this.endDate),\n cutOffTime: isValidDate(ct) ? ct : undefined,\n };\n }\n\n get dateValue(): Date | undefined {\n if (this.isTypeable) {\n return stringToDate(this.typedValue);\n } else {\n let { value } = this;\n const isMoment = value && typeof value !== 'string' && 'toDate' in value;\n if (isMoment) return (value as IMomentLikeObject).toDate();\n\n // stringified moment value assigned in html template e.g.) handlebar\n const isMomentString =\n typeof value === 'string' && value.split(' ').length === 6 && /GMT-\\d{4}/g.test(value);\n if (isMomentString) {\n value = formatDateISO(value as string);\n }\n\n return stringToDate(value as string);\n }\n }\n\n get defaultHintMessage() {\n return this.typeable\n ? loc('tecton.element.calendar.hint.format') + ': ' + this.defaultFormatString\n : loc('tecton.element.calendar.hint.select');\n }\n\n get errorList() {\n const { errors, internalError, invalid } = this;\n let list = [];\n if (internalError) {\n list = [internalError];\n }\n if (Array.isArray(errors) && errors.length) {\n list = errors\n .filter(error => !!error)\n .map(error => loc(error))\n .concat(list);\n } else if (!internalError && invalid) {\n return ['tecton.element.calendar.invalid'];\n }\n return list;\n }\n\n get formattedValue() {\n const { typedValue, dateValue, displayFormat, isTypeable } = this;\n if (isTypeable) return typedValue;\n\n if (dateValue === undefined) return '';\n if (displayFormat) return format(dateValue, convertMomentFormat(displayFormat));\n\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n }).format(dateValue);\n }\n\n get hintList() {\n const { hints, hintMessageType, hintMessage } = this;\n if (Array.isArray(hints) && hints.length) return hints.filter(hint => !!hint).map(hint => loc(hint));\n if (hintMessageType === 'info' && hintMessage) return [hintMessage];\n return [];\n }\n\n get innerInputField(): HTMLInputElement | HTMLButtonElement {\n return this.controlElement?.shadowRoot?.querySelector('.input-field');\n }\n\n get isTypeable(): boolean {\n return this.typeable;\n }\n\n get selectedDate() {\n const selectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n return selectedCell ? removeTimezoneOffset(new Date(selectedCell.dataset.date)) : null;\n }\n\n _togglePopover() {\n const toggleElement = this.typeable ? this.btnCalendarToggle : this.innerInputField;\n toggleElement?.click();\n toggleElement?.focus();\n toggleElement.dispatchEvent(new FocusEvent('focus'));\n }\n\n activateDay(date: Date) {\n this.goToMonthYear(date.getMonth(), date.getFullYear());\n this.scheduledAfterRender.push(() => this.focusDay(date));\n }\n\n buildDateList(monthYear: ISelectedMonthYear): DateList {\n const invalidDates = stringArrayToDate(this.invalidDates);\n const validDaysOfWeek = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const validDates = stringArrayToDate(this.validDates);\n return buildDates(\n validDaysOfWeek,\n validDates,\n invalidDates,\n monthYear,\n this.dateValue,\n this.dateValidators,\n this.typedValue\n );\n }\n\n calendarDays() {\n return (\n <table\n role=\"grid\"\n aria-labelledby=\"table-label\"\n ref={ref => (this.calendarTable = ref)}\n >\n <thead>\n <tr>\n {[...Array(7).keys()].map(index => (\n <th\n scope=\"col\"\n aria-label={this.dayStrings[index]}\n >\n {this.dayAbbrStrings[index]}\n </th>\n ))}\n </tr>\n </thead>\n <tbody\n onClick={this.onDateSelection}\n onKeyDown={this.onDateKeydown}\n ref={elm => (this.calendarBody = elm)}\n test-id=\"calendarTableBody\"\n >\n {this.currentWeeks.map(week => (\n <tr>\n {week.map(day => {\n let ariaLabel = '';\n if (day.isToday) ariaLabel = `${loc('tecton.element.calendar.today')}, `;\n ariaLabel += formatDateFull(day.date);\n if (day.isSelected) ariaLabel += ` (${loc('tecton.element.calendar.selected')})`;\n return (\n <td\n class={day.classList}\n aria-hidden={day.isEmpty ? 'true' : undefined}\n tabindex={day.isSelected ? 0 : -1}\n role={day.isSelected ? 'gridcell' : undefined}\n aria-selected={day.isSelected ? 'true' : undefined}\n aria-disabled={day.isValid ? undefined : 'true'}\n data-day={day.integer || undefined}\n data-date={day.date ? formatDateISO(day.date) : undefined}\n >\n {day?.isToday && (\n <div\n class=\"today-decorator\"\n aria-hidden=\"true\"\n >\n {loc('tecton.element.calendar.today')}\n </div>\n )}\n <div aria-label={ariaLabel}>{day?.integer ?? ''}</div>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n checkActiveCellForBlankness() {\n const activeElement = this.hostElement.shadowRoot.activeElement;\n if (!activeElement || activeElement.tagName !== 'TD' || !activeElement.hasAttribute('aria-hidden')) return;\n\n const { calendarBody } = this;\n const calendarCells = Array.from(calendarBody.querySelectorAll<Element>('td'));\n const indexOfCell = Array.from(calendarCells).indexOf(activeElement);\n\n const dayToFocus =\n indexOfCell < 15 ? 1 : calendarCells.filter(cell => !cell.hasAttribute('aria-hidden')).length;\n\n this.focusDay(this.generateDateFromDay(dayToFocus));\n }\n\n closeCalendar = () => {\n if (!this.open) return;\n this.open = false;\n this.focusInput();\n };\n\n async focusDay(date: Date) {\n if (!date) return;\n await waitForNextPaint();\n this.calendarBody.querySelector<HTMLElement>(`td[data-day=\"${date.getDate()}\"]`)?.focus();\n }\n\n focusInput() {\n this.controlElement?.focus();\n }\n\n generateDateFromDay(day: number) {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return new Date(selectedYear, monthIndex, day);\n }\n\n goToMonthYear = (monthIndex: number, year: number) => {\n if (monthIndex < 0) {\n monthIndex = 11;\n year--;\n } else if (monthIndex > 11) {\n monthIndex = 0;\n year++;\n }\n this.selectedMonthYear = {\n monthIndex,\n selectedYear: year,\n };\n this.dateList = this.buildDateList(this.selectedMonthYear);\n\n this.scheduledAfterRender.push(() => this.checkActiveCellForBlankness());\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n this.closeCalendar();\n }\n };\n\n onDateKeydown = (event: KeyboardEvent) => {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n const currentDay = parseInt((event.target as HTMLElement).dataset.day);\n const currentDate = this.generateDateFromDay(currentDay);\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -7));\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 7));\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 1));\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -1));\n break;\n\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear - 1);\n else this.goToMonthYear(monthIndex - 1, selectedYear);\n break;\n\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) this.goToMonthYear(monthIndex, selectedYear + 1);\n else this.goToMonthYear(monthIndex + 1, selectedYear);\n break;\n\n case 'Home':\n event.preventDefault();\n this.activateDay(addDays(currentDate, -currentDate.getDay()));\n break;\n\n case 'End':\n event.preventDefault();\n this.activateDay(addDays(currentDate, 6 - currentDate.getDay()));\n break;\n\n case 'Escape':\n event.preventDefault();\n this.closeCalendar();\n this.focusInput();\n break;\n\n case 'Enter':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n\n case ' ':\n event.preventDefault();\n if (!this.dateList.find(({ date }) => isSameDay(date, currentDate)).isValid) return;\n this.selectDate(currentDate);\n this.closeCalendar();\n this.focusInput();\n break;\n }\n };\n\n onDateSelection = (event: MouseEvent) => {\n const dateCell = (event.target as HTMLElement).closest<HTMLElement>('td:not([aria-hidden])');\n if (!dateCell) return;\n const clickedDate = removeTimezoneOffset(new Date(dateCell.dataset.date));\n this.selectDate(clickedDate);\n this.closeCalendar();\n };\n\n onHeaderControlKeydown = (event: KeyboardEvent) => {\n const currentDate = this.generateDateFromDay(1);\n const hasSelectedCell = this.calendarBody?.querySelector<HTMLTableCellElement>('[aria-selected=\"true\"]');\n\n if (event.key === 'Tab' && !hasSelectedCell) {\n event.preventDefault();\n this.activateDay(currentDate);\n }\n };\n\n onInputBlur = () => {\n if (!this.isTypeable) return;\n\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { typedValue } = this;\n const { isValid, inputDate, isAvailable } = validateInput(\n this.typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (!typedValue && inputDate?.toString() === 'Invalid Date') {\n // initial/clear state\n this.setHints({ isValid: true, message: this.defaultHintMessage, messageType: 'info' });\n } else if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.valueOnBlur = this.value;\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n };\n\n onInputChange = (event: Event) => {\n event.stopPropagation();\n };\n\n onInputClick = () => {\n if (this.disabled) return;\n this.toggleCalendar();\n };\n\n onInputFocus = (event: FocusEvent) => {\n if (!this.isTypeable) return;\n if (event.target === this.controlElement) {\n if (this.valueOnBlur && !this.value) {\n const tmpTypedValue = this.typedValue;\n this.value = this.valueOnBlur;\n this.typedValue = tmpTypedValue;\n this.valueOnBlur = null;\n }\n this.closeCalendar();\n }\n };\n\n onInputInput = ({ detail: { value } }: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n this.typedValue = value;\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const { dateValue } = this;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n break;\n\n case 'Enter':\n case ' ':\n if (this.typeable) break;\n event.preventDefault();\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n this.activateDay(dateValue || new Date());\n }\n break;\n }\n };\n\n onInputKeyup = (event: KeyboardEvent) => {\n if (this.disabled) {\n return;\n }\n\n switch (event.key) {\n case 'Escape':\n this.onInputBlur();\n this.closeCalendar();\n break;\n }\n\n if (!this.isTypeable) return;\n\n // handle missing zero in month and date\n this.typedValue = handleMissingZeros(this.typedValue);\n const { typedValue } = this;\n const validDays = getValidDaysOfWeek(this.daysOfWeekChecksum);\n const { isValid, message, messageType, inputDate, isAvailable, calendarPosition } = validateInput(\n typedValue,\n validDays,\n this.validDates,\n this.invalidDates,\n this.startDate,\n this.endDate,\n this.defaultFormatString,\n this.assume\n );\n\n if (calendarPosition) {\n const [mm, dd, yyyy] = calendarPosition;\n const date = new Date(yyyy, mm - 1, dd);\n if (isValidDate(date)) {\n this.selectedMonthYear = setupMonthYear(date);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.validateDate();\n }\n }\n\n if (event.key === 'Enter') {\n if (\n isValid ||\n (typedValue &&\n typedValue.length > 4 && // at least mm/dd provided\n inputDate &&\n isValidDate(inputDate) &&\n isAvailable)\n ) {\n this.setCompleteInput(inputDate);\n } else if (this.value) {\n this.value = null;\n this.change.emit({ value: null });\n this.typedValue = typedValue;\n }\n\n if (this.keyboardSelection) {\n this.keyboardSelection = false;\n this.closeCalendar();\n } else {\n this.toggleCalendar();\n }\n } else {\n this.setHints({ isValid, message, messageType });\n }\n };\n\n onPopupKeyup = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n this.onInputBlur();\n this.closeCalendar();\n }\n };\n\n onRefocus = () => {\n this.btnPrevMonth?.dispatchEvent(new FocusEvent('focus'));\n };\n\n openCalendar = () => {\n if (this.readonly || this.open) return;\n this.selectedMonthYear = setupMonthYear(this.dateValue);\n this.dateList = this.buildDateList(this.selectedMonthYear);\n this.open = true;\n };\n\n selectDate = (newDate: Date) => {\n const { isValid } = this.dateList.find(({ date }) => isSameDay(date, newDate));\n if (!isValid) return;\n this.change.emit({ value: formatDateISO(newDate) });\n this.typedValue = formatDateShort(newDate);\n this.invalid = false;\n this.success.emit({ value: formatDateISO(newDate) });\n };\n\n setCompleteInput(inputDate: Date) {\n const formattedDate = formatDateShort(inputDate);\n this.change.emit({ value: formatDateISO(inputDate) });\n this.typedValue = formattedDate;\n this.internalError = null;\n this.setHints({\n isValid: true,\n message: null,\n messageType: null,\n });\n }\n\n setHints({ isValid, message, messageType }) {\n if (message === this.hintMessage) return this.hintMessageElement?.present();\n this.invalid = !isValid;\n this.hintMessage = message;\n this.hintMessageType = messageType;\n if (messageType === 'error' && message) {\n this.internalError = message;\n this.error.emit({\n errors: [\n {\n message,\n errorCode: 'generalInvalid',\n },\n ],\n });\n }\n }\n\n toggleCalendar = () => {\n if (this.readonly) return;\n if (this.open) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n }\n };\n\n validateDate() {\n try {\n if (!!this.value) {\n const { dateValue } = this;\n const month = dateValue?.getMonth() ?? undefined;\n const year = dateValue?.getFullYear() ?? undefined;\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n\n const isSelectedMonthAndYear = month === monthIndex && year === selectedYear;\n let calculationDateList = [];\n\n if (!dateValue) {\n calculationDateList = [];\n } else if (isSelectedMonthAndYear) {\n calculationDateList = this.dateList;\n } else {\n calculationDateList = this.buildDateList({\n monthIndex: month,\n selectedYear: year,\n });\n }\n\n const dateValueDayOfMonth = dateValue?.getDate() ?? undefined;\n const isDateValueInvalid = dateValueDayOfMonth\n ? !calculationDateList.find(({ integer }) => integer === dateValueDayOfMonth).isValid\n : true;\n if (isDateValueInvalid) {\n this.error.emit({\n errors: [\n {\n message: `Value passed is invalid: The date ${this.value} is not valid`,\n errorCode: 'generalInvalid',\n },\n ],\n });\n } else {\n this.success.emit({ value: formatDateISO(dateValue) });\n }\n }\n } catch (error) {\n console.warn('Invalid moment value ', this.dateValue);\n }\n }\n\n // #endregion\n // #region Render Methods\n\n renderCalendarPopover() {\n const { monthIndex, selectedYear } = this.selectedMonthYear;\n return (\n <div\n class=\"calendar-field-popup\"\n onKeyUp={this.onPopupKeyup}\n >\n {this.calendarLabel && <p class=\"calendar-label\">{loc(this.calendarLabel)}</p>}\n <div class=\"cal-month-heading\">\n <q2-btn\n label={loc('tecton.element.calendar.previousMonth')}\n hide-label\n ref={elm => (this.btnPrevMonth = elm)}\n class=\"cal-nav-btn prev-month\"\n test-id=\"previousMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex - 1, selectedYear)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-month-text\">{this.monthStrings[monthIndex]}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextMonth')}\n hide-label\n class=\"cal-nav-btn next-month\"\n ref={elm => (this.btnNextMonth = elm)}\n test-id=\"nextMonthButton\"\n onClick={() => this.goToMonthYear(monthIndex + 1, selectedYear)}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n <q2-btn\n label={loc('tecton.element.calendar.previousYear')}\n hide-label\n class=\"cal-nav-btn prev-year\"\n ref={elm => (this.btnPrevYear = elm)}\n test-id=\"previousYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear - 1)}\n >\n <q2-icon type=\"chevron-left\" />\n </q2-btn>\n <span class=\"cal-year-text\">{this.selectedMonthYear.selectedYear}</span>\n <q2-btn\n label={loc('tecton.element.calendar.nextYear')}\n hide-label\n class=\"cal-nav-btn next-year\"\n ref={elm => (this.btnNextYear = elm)}\n test-id=\"nextYearButton\"\n onClick={() => this.goToMonthYear(monthIndex, selectedYear + 1)}\n onKeyDown={this.onHeaderControlKeydown}\n >\n <q2-icon type=\"chevron-right\" />\n </q2-btn>\n </div>\n <div\n class=\"sr\"\n aria-live=\"polite\"\n id=\"table-label\"\n >\n {`${this.monthStrings[monthIndex]} ${selectedYear}`}\n </div>\n {this.calendarDays()}\n {this.disclaimer && <div class=\"calendar-disclaimer\">{loc(this.disclaimer)}</div>}\n <q2-btn\n class=\"sr refocus-popup\"\n onFocus={this.onRefocus}\n />\n </div>\n );\n }\n\n renderHintField() {\n if (!this.hintMessage) return;\n\n return (\n <q2-message\n class=\"calendar-hint sr\"\n ref={el => (this.hintMessageElement = el)}\n type={this.hintMessageType}\n >\n {this.hintMessage}\n </q2-message>\n );\n }\n\n renderInputField() {\n const { isTypeable } = this;\n return (\n <q2-input\n ref={el => (this.controlElement = el)}\n class=\"calendar-input-field\"\n value={this.formattedValue}\n label={loc(this.label)}\n hideLabel={this.hideLabel}\n disabled={!!this.disabled}\n readonly={!!this.readonly}\n clearable={this.canClear}\n placeholder={this.computedPlaceholder}\n optional={!!this.optional}\n ariaExpanded={`${!!this.open}`}\n hints={this.hintList}\n errors={this.errorList}\n onClick={isTypeable ? undefined : this.onInputClick}\n onChange={this.onInputChange}\n onInput={this.onInputInput}\n onKeyDown={this.onInputKeydown}\n onKeyUp={this.onInputKeyup}\n onBlur={this.onInputBlur}\n onFocus={this.onInputFocus}\n icon-right={isTypeable ? undefined : 'calendar'}\n format-modifier={isTypeable ? this.formatModifier : this.displayFormat || this.formatModifier}\n type=\"date\"\n hide-messages={!isTypeable}\n test-id=\"inputAndCalendarToggle\"\n _role=\"combobox\"\n _preventEntry={!isTypeable}\n >\n {isTypeable && (\n <q2-btn\n ref={el => (this.btnCalendarToggle = el)}\n slot=\"input-right\"\n onClick={this.onInputClick}\n test-id=\"calendarToggle\"\n label=\"tecton.element.calendar.toggleAriaLabel\"\n hide-label\n >\n <q2-icon type=\"calendar\" />\n </q2-btn>\n )}\n </q2-input>\n );\n }\n\n render() {\n return (\n <click-elsewhere\n class={this.open ? 'dropdown-open' : undefined}\n onChange={this.onClickElsewhere}\n >\n {this.renderInputField()}\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.controlElement}\n open={this.open}\n direction={this.popoverDirection}\n minHeight={this.popoverMinHeight}\n align={this.popoverAlignment}\n mode={this.popoverMode || undefined}\n block\n >\n {this.renderHintField()}\n {this.renderCalendarPopover()}\n </q2-popover>\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { r as t, c as a, h as r, F as c, g as o } from "./index-7a5365e2.js";
|
|
2
|
+
|
|
3
|
+
import { k as e, o as i, i as s } from "./index-d18e2a20.js";
|
|
4
|
+
|
|
5
|
+
const n = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:block}.container{position:relative;width:100%;text-align:start;height:100%;display:grid;gap:var(--tct-card-gap, var(--t-card-gap, var(--app-scale-3x, 15px)));margin:0;color:var(--tct-card-color, var(--t-card-color, var(--t-text, #4d4d4d)));--comp-avatar-size:var(--tct-card-avatar-size, var(--t-card-avatar-size, 44px));--comp-chevron-size:0;--comp-bar-width:var(--tct-card-bar-width, var(--t-card-bar-width, var(--app-scale-2x, 10px)));--comp-card-padding:var(--tct-card-padding, var(--t-card-padding, var(--app-scale-4x, 20px)))}.container.is-small{--comp-avatar-size:var(--tct-card-avatar-size, var(--t-card-avatar-size, 26px))}.container.has-avatar{grid-template-columns:var(--comp-avatar-size) 1fr;--tct-avatar-width:var(--comp-avatar-size);--tct-avatar-height:var(--comp-avatar-size);--tct-icon-size:var(--comp-avatar-size)}:host([bar][is-static]) .container{padding-left:var(--comp-card-padding)}:host(:not([is-static])) .container{--comp-border-radius:var(--tct-card-border-radius, var(--t-card-border-radius, var(--app-border-radius-1, 4px)));--comp-border-width:var(--tct-card-border-width, var(--t-card-border-width, 0px));border:none;background:var(--tct-card-background, var(--t-card-background, var(--t-base, #ffffff)));padding:var(--comp-card-padding);text-decoration:none;border-width:var(--comp-border-width);border-color:var(--tct-card-border-color, var(--t-card-border-color, transparent));border-style:var(--tct-card-border-style, solid);border-radius:var(--comp-border-radius);transition:box-shadow var(--tct-tween-1, var(--app-tween-1, 0.2s ease));box-shadow:var(--tct-card-box-shadow, var(--t-card-box-shadow, var(--app-shadow-2, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14))))}:host(:not([is-static])) .container.clickable{cursor:pointer}@media (hover: hover){:host(:not([is-static])) .container.clickable{--comp-card-hover-box-shadow:var(--tct-card-hover-box-shadow, var(--t-card-hover-box-shadow, var(--app-shadow-3, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 8px 16px rgba(0, 0, 0, 0.14))))}:host(:not([is-static])) .container.clickable:hover,:host(:not([is-static])) .container.clickable:active,:host(:not([is-static])) .container.clickable:focus{color:var(--tct-card-color, var(--t-card-color, var(--t-text, #4d4d4d)));box-shadow:var(--const-double-focus-ring)}:host(:not([is-static])) .container.clickable:hover{box-shadow:var(--comp-card-hover-box-shadow)}:host(:not([is-static])) .container.clickable:focus:hover{box-shadow:var(--const-double-focus-ring), var(--comp-card-hover-box-shadow)}:host(:not([is-static])) .container.clickable:active{box-shadow:var(--tct-card-active-box-shadow, var(--t-card-active-box-shadow, var(--app-shadow-1, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14))))}}:host(:not([is-static])) .container.is-touch{--comp-chevron-size:var(--tct-card-chevron-size, var(--t-card-chevron-size, 26px));grid-template-columns:1fr var(--comp-chevron-size)}:host(:not([is-static])) .container.has-avatar.is-touch{grid-template-columns:var(--comp-avatar-size) 1fr var(--comp-chevron-size)}.content{overflow:hidden;display:grid;gap:var(--tct-card-content-gap, var(--t-card-content-gap, var(--app-scale-1x, 5px)));align-content:start}h3,p{margin:0;padding:0;line-height:var(--tct-card-font-height, var(--t-card-font-height, 20px))}h3{font-weight:var(--tct-card-font-weight, var(--t-card-font-weight, 600));font-size:var(--tct-card-font-size, var(--t-card-font-size, 17px));text-overflow:ellipsis;overflow:hidden;white-space:nowrap}p{text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.bar{--comp-bar-border-radius:calc(var(--comp-border-radius) - var(--comp-border-width));border-radius:var(--comp-bar-border-radius) 0 0 var(--comp-bar-border-radius);position:absolute;inset:0 auto auto 0;width:var(--comp-bar-width);background:var(--comp-bar-color);height:100%}.bar.color-primary{--comp-bar-color:var(--tct-card-bar-color-primary, var(--t-primary, #5446a4))}.bar.color-secondary{--comp-bar-color:var(--tct-card-bar-color-secondary, var(--t-secondary, #b6b3cc))}.bar.color-tertiary{--comp-bar-color:var(--tct-card-bar-color-tertiary, var(--t-tertiary, #ebe8fc))}.bar.color-info{--comp-bar-color:var(--tct-card-bar-color-info, var(--const-stoplight-info, #0079c1))}.bar.color-success{--comp-bar-color:var(--tct-card-bar-color-success, var(--const-stoplight-success, #0e8a00))}.bar.color-warning{--comp-bar-color:var(--tct-card-bar-color-warning, var(--const-stoplight-warning, #c35500))}.bar.color-alert{--comp-bar-color:var(--tct-card-bar-color-alert, var(--const-stoplight-alert, #c35500))}.bar.color-accent-1{--comp-bar-color:var(--tct-card-bar-color-accent-1, var(--t-accent-1, #e05252))}.bar.color-accent-2{--comp-bar-color:var(--tct-card-bar-color-accent-2, var(--t-accent-2, #e09952))}.bar.color-accent-3{--comp-bar-color:var(--tct-card-bar-color-accent-3, var(--t-accent-3, #e0e052))}.bar.color-accent-4{--comp-bar-color:var(--tct-card-bar-color-accent-4, var(--t-accent-4, #99e052))}.bar.color-accent-5{--comp-bar-color:var(--tct-card-bar-color-accent-5, var(--t-accent-5, #52e052))}.bar.color-accent-6{--comp-bar-color:var(--tct-card-bar-color-accent-6, var(--t-accent-6, #52e099))}.bar.color-accent-7{--comp-bar-color:var(--tct-card-bar-color-accent-7, var(--t-accent-7, #52e0e0))}.bar.color-accent-8{--comp-bar-color:var(--tct-card-bar-color-accent-8, var(--t-accent-8, #5299e0))}.bar.color-accent-9{--comp-bar-color:var(--tct-card-bar-color-accent-9, var(--t-accent-9, #5252e0))}.bar.color-accent-10{--comp-bar-color:var(--tct-card-bar-color-accent-10, var(--t-accent-10, #9952e0))}.bar.color-accent-11{--comp-bar-color:var(--tct-card-bar-color-accent-11, var(--t-accent-11, #e052e0))}.bar.color-accent-12{--comp-bar-color:var(--tct-card-bar-color-accent-12, var(--t-accent-12, #e05299))}.touch-indicator{align-self:center;--tct-icon-size:var(--comp-chevron-size)}";
|
|
6
|
+
|
|
7
|
+
const d = n;
|
|
8
|
+
|
|
9
|
+
const l = [ "primary", "secondary", "tertiary", "info", "success", "warning", "alert", "accent-1", "accent-2", "accent-3", "accent-4", "accent-5", "accent-6", "accent-7", "accent-8", "accent-9", "accent-10", "accent-11", "accent-12" ];
|
|
10
|
+
|
|
11
|
+
const h = class {
|
|
12
|
+
constructor(r) {
|
|
13
|
+
t(this, r);
|
|
14
|
+
this.click = a(this, "click", 7);
|
|
15
|
+
this.handleClick = t => {
|
|
16
|
+
if (this.url) return true;
|
|
17
|
+
t.preventDefault();
|
|
18
|
+
t.stopPropagation();
|
|
19
|
+
this.click.emit();
|
|
20
|
+
};
|
|
21
|
+
this.isAutoSmall = false;
|
|
22
|
+
this.isAutoTouch = false;
|
|
23
|
+
this.avatarIcon = undefined;
|
|
24
|
+
this.avatarInitials = undefined;
|
|
25
|
+
this.avatarName = undefined;
|
|
26
|
+
this.avatarSrc = undefined;
|
|
27
|
+
this.bar = undefined;
|
|
28
|
+
this.description = undefined;
|
|
29
|
+
this.isSmall = undefined;
|
|
30
|
+
this.isStatic = undefined;
|
|
31
|
+
this.isTouch = e();
|
|
32
|
+
this.target = undefined;
|
|
33
|
+
this.title = undefined;
|
|
34
|
+
this.type = "clickable";
|
|
35
|
+
this.url = undefined;
|
|
36
|
+
}
|
|
37
|
+
// #endregion
|
|
38
|
+
// #region Component Lifecycle Events
|
|
39
|
+
disconnectedCallback() {
|
|
40
|
+
var t;
|
|
41
|
+
(t = this.resizeObserver) === null || t === void 0 ? void 0 : t.disconnect();
|
|
42
|
+
this.resizeObserver = null;
|
|
43
|
+
}
|
|
44
|
+
componentDidLoad() {
|
|
45
|
+
const {hostElement: t, clickableElement: a} = this;
|
|
46
|
+
t.click = () => a.click();
|
|
47
|
+
i(this.hostElement);
|
|
48
|
+
this.resizeObserver = new ResizeObserver((() => this.determineAutoSmall()));
|
|
49
|
+
this.resizeObserver.observe(this.hostElement);
|
|
50
|
+
}
|
|
51
|
+
// #endregion
|
|
52
|
+
// #region Listeners
|
|
53
|
+
onHostElementFocus(t) {
|
|
54
|
+
if (!s(t, this.hostElement)) return;
|
|
55
|
+
this.clickableElement.focus();
|
|
56
|
+
}
|
|
57
|
+
// #endregion
|
|
58
|
+
// #region Local Methods
|
|
59
|
+
determineAutoSmall() {
|
|
60
|
+
var t, a;
|
|
61
|
+
if (this.isStatic) return;
|
|
62
|
+
if (this.hostElement.hasAttribute("is-small")) return;
|
|
63
|
+
const {containerElement: r, avatarElement: c} = this;
|
|
64
|
+
const o = (t = c === null || c === void 0 ? void 0 : c.offsetWidth) !== null && t !== void 0 ? t : 0;
|
|
65
|
+
const e = (a = r === null || r === void 0 ? void 0 : r.offsetWidth) !== null && a !== void 0 ? a : 0;
|
|
66
|
+
const i = o + e;
|
|
67
|
+
this.isAutoSmall = i < 350;
|
|
68
|
+
}
|
|
69
|
+
determineAutoTouch() {
|
|
70
|
+
if (this.hostElement.hasAttribute("is-touch")) return;
|
|
71
|
+
this.isAutoTouch = e();
|
|
72
|
+
}
|
|
73
|
+
generateAvatar() {
|
|
74
|
+
const {avatarName: t, avatarInitials: a, avatarSrc: c, avatarIcon: o} = this;
|
|
75
|
+
if (o) {
|
|
76
|
+
return r("q2-icon", {
|
|
77
|
+
type: o,
|
|
78
|
+
ref: t => this.avatarElement = t,
|
|
79
|
+
"test-id": "avatar"
|
|
80
|
+
});
|
|
81
|
+
} else if (t || a || c) {
|
|
82
|
+
return r("q2-avatar", {
|
|
83
|
+
name: t,
|
|
84
|
+
initials: a,
|
|
85
|
+
src: c,
|
|
86
|
+
ref: t => this.avatarElement = t,
|
|
87
|
+
"test-id": "avatar"
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
generateContainerClasses() {
|
|
92
|
+
const {isSmall: t, isAutoSmall: a, avatarName: r, avatarInitials: c, avatarSrc: o, avatarIcon: e, isTouch: i, isAutoTouch: s, isStatic: n, type: d} = this;
|
|
93
|
+
const l = [ "container", d ];
|
|
94
|
+
const h = t || a;
|
|
95
|
+
const v = i || s;
|
|
96
|
+
const p = r || c || o || e;
|
|
97
|
+
if (h) l.push("is-small");
|
|
98
|
+
if (v && !n) l.push("is-touch");
|
|
99
|
+
if (p) l.push("has-avatar");
|
|
100
|
+
if (n) l.push("is-static");
|
|
101
|
+
return l.join(" ");
|
|
102
|
+
}
|
|
103
|
+
generateContent() {
|
|
104
|
+
return r(c, null, this.bar && r("div", {
|
|
105
|
+
class: this.getBarClasses(),
|
|
106
|
+
"test-id": "bar",
|
|
107
|
+
style: this.getBarStyles()
|
|
108
|
+
}), this.generateAvatar(), r("div", {
|
|
109
|
+
class: "content",
|
|
110
|
+
"test-id": "contentContainer",
|
|
111
|
+
ref: t => this.containerElement = t
|
|
112
|
+
}, this.title && r("h3", {
|
|
113
|
+
"test-id": "title"
|
|
114
|
+
}, this.title), this.description && r("p", {
|
|
115
|
+
"test-id": "description"
|
|
116
|
+
}, this.description), r("slot", null)), this.isTouch && !this.isStatic && r("q2-icon", {
|
|
117
|
+
"test-id": "touchIndicator",
|
|
118
|
+
type: "chevron-right",
|
|
119
|
+
class: "touch-indicator"
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
getBarClasses() {
|
|
123
|
+
const {bar: t} = this;
|
|
124
|
+
return {
|
|
125
|
+
bar: true,
|
|
126
|
+
[`color-${t}`]: this.isBarColorPredefined()
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
getBarStyles() {
|
|
130
|
+
const {bar: t} = this;
|
|
131
|
+
return this.isBarColorPredefined() ? {} : {
|
|
132
|
+
"--comp-bar-color": t
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
isBarColorPredefined() {
|
|
136
|
+
return l.includes(this.bar);
|
|
137
|
+
}
|
|
138
|
+
// #endregion
|
|
139
|
+
// #region Render Methods
|
|
140
|
+
render() {
|
|
141
|
+
const {url: t, isStatic: a, type: c} = this;
|
|
142
|
+
if (a || c === "non-clickable") return r("div", {
|
|
143
|
+
ref: t => this.clickableElement = t,
|
|
144
|
+
class: this.generateContainerClasses(),
|
|
145
|
+
"test-id": "clickableElement"
|
|
146
|
+
}, this.generateContent()); else if (!!t) return r("a", {
|
|
147
|
+
ref: t => this.clickableElement = t,
|
|
148
|
+
href: this.url,
|
|
149
|
+
class: this.generateContainerClasses(),
|
|
150
|
+
target: this.target,
|
|
151
|
+
rel: "noopener noreferrer",
|
|
152
|
+
"test-id": "clickableElement",
|
|
153
|
+
onClick: this.handleClick
|
|
154
|
+
}, this.generateContent()); else return r("button", {
|
|
155
|
+
ref: t => this.clickableElement = t,
|
|
156
|
+
class: this.generateContainerClasses(),
|
|
157
|
+
"test-id": "clickableElement",
|
|
158
|
+
type: "button",
|
|
159
|
+
onClick: this.handleClick
|
|
160
|
+
}, this.generateContent());
|
|
161
|
+
}
|
|
162
|
+
get hostElement() {
|
|
163
|
+
return o(this);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
h.style = d;
|
|
168
|
+
|
|
169
|
+
export { h as q2_card };
|
|
170
|
+
//# sourceMappingURL=q2-card.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["q2CardCss","Q2CardStyle0","PREDEFINED_COLORS","Q2Card","this","handleClick","event","url","preventDefault","stopPropagation","click","emit","isTouchDevice","disconnectedCallback","_a","resizeObserver","disconnect","componentDidLoad","hostElement","clickableElement","overrideFocus","ResizeObserver","determineAutoSmall","observe","onHostElementFocus","isEventFromElement","focus","isStatic","hasAttribute","containerElement","avatarElement","avatarWidth","offsetWidth","containerWidth","_b","totalWidth","isAutoSmall","determineAutoTouch","isAutoTouch","generateAvatar","avatarName","avatarInitials","avatarSrc","avatarIcon","h","type","ref","e","name","initials","src","generateContainerClasses","isSmall","isTouch","result","showSmall","showTouch","hasAvatar","push","join","generateContent","Fragment","bar","class","getBarClasses","style","getBarStyles","title","description","isBarColorPredefined","includes","render","href","target","rel","onClick"],"sources":["src/components/q2-card/q2-card.scss?tag=q2-card&encapsulation=shadow","src/components/q2-card/q2-card.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n.container {\n position: relative;\n width: 100%;\n text-align: start;\n height: 100%;\n display: grid;\n gap: var-list(var-prefixer(card-gap), --app-scale-3x, 15px);\n margin: 0;\n color: var-list(var-prefixer(card-color), --t-text, #4d4d4d);\n\n --comp-avatar-size: #{var-list(var-prefixer(card-avatar-size), 44px)};\n --comp-chevron-size: 0;\n --comp-bar-width: #{var-list(var-prefixer(card-bar-width), --app-scale-2x, 10px)};\n --comp-card-padding: #{var-list(var-prefixer(card-padding), --app-scale-4x, 20px)};\n\n &.is-small {\n --comp-avatar-size: #{var-list(var-prefixer(card-avatar-size), 26px)};\n }\n &.has-avatar {\n grid-template-columns: var(--comp-avatar-size) 1fr;\n --tct-avatar-width: var(--comp-avatar-size);\n --tct-avatar-height: var(--comp-avatar-size);\n --tct-icon-size: var(--comp-avatar-size);\n }\n\n :host([bar][is-static]) & {\n padding-left: var(--comp-card-padding);\n }\n\n :host(:not([is-static])) & {\n --comp-border-radius: #{var-list(var-prefixer(card-border-radius), --app-border-radius-1, 4px)};\n --comp-border-width: #{var-list(var-prefixer(card-border-width), 0px)};\n border: none;\n background: var-list(var-prefixer(card-background), --t-base, #ffffff);\n padding: var(--comp-card-padding);\n text-decoration: none;\n border-width: var(--comp-border-width);\n border-color: var-list(var-prefixer(card-border-color), transparent);\n border-style: var-list(--tct-card-border-style, solid);\n border-radius: var(--comp-border-radius);\n transition: box-shadow var-list(--tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n box-shadow: var-list(var-prefixer(card-box-shadow), --app-shadow-2, unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\"));\n\n &.clickable {\n cursor: pointer;\n @media (hover: hover) {\n --comp-card-hover-box-shadow: #{var-list(\n var-prefixer(card-hover-box-shadow),\n --app-shadow-3,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 8px 16px rgba(0, 0, 0, 0.14)\")\n )};\n\n &:hover,\n &:active,\n &:focus {\n color: var-list(var-prefixer(card-color), --t-text, #4d4d4d);\n box-shadow: var(--const-double-focus-ring);\n }\n\n &:hover {\n box-shadow: var(--comp-card-hover-box-shadow);\n }\n\n &:focus:hover {\n box-shadow: var(--const-double-focus-ring), var(--comp-card-hover-box-shadow);\n }\n\n &:active {\n box-shadow: var-list(\n var-prefixer(card-active-box-shadow),\n --app-shadow-1,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)\")\n );\n }\n }\n }\n\n &.is-touch {\n --comp-chevron-size: #{var-list(var-prefixer(card-chevron-size), 26px)};\n grid-template-columns: 1fr var(--comp-chevron-size);\n }\n\n &.has-avatar.is-touch {\n grid-template-columns: var(--comp-avatar-size) 1fr var(--comp-chevron-size);\n }\n }\n}\n\n.content {\n overflow: hidden;\n display: grid;\n gap: var-list(var-prefixer(card-content-gap), --app-scale-1x, 5px);\n align-content: start;\n}\n\nh3,\np {\n margin: 0;\n padding: 0;\n line-height: var-list(var-prefixer(card-font-height), 20px);\n}\n\nh3 {\n font-weight: var-list(var-prefixer(card-font-weight), 600);\n font-size: var-list(var-prefixer(card-font-size), 17px);\n @include line-clamp(1);\n}\n\np {\n @include line-clamp(2);\n}\n\n.bar {\n --comp-bar-border-radius: calc(var(--comp-border-radius) - var(--comp-border-width));\n border-radius: var(--comp-bar-border-radius) 0 0 var(--comp-bar-border-radius);\n position: absolute;\n inset: 0 auto auto 0;\n width: var(--comp-bar-width);\n background: var(--comp-bar-color);\n height: 100%;\n\n &.color-primary {\n --comp-bar-color: #{var-list(--tct-card-bar-color-primary, --t-primary, #5446a4)};\n }\n\n &.color-secondary {\n --comp-bar-color: #{var-list(--tct-card-bar-color-secondary, --t-secondary, #b6b3cc)};\n }\n\n &.color-tertiary {\n --comp-bar-color: #{var-list(--tct-card-bar-color-tertiary, --t-tertiary, #ebe8fc)};\n }\n\n &.color-info {\n --comp-bar-color: #{var-list(--tct-card-bar-color-info, --const-stoplight-info, #0079c1)};\n }\n\n &.color-success {\n --comp-bar-color: #{var-list(--tct-card-bar-color-success, --const-stoplight-success, #0e8a00)};\n }\n\n &.color-warning {\n --comp-bar-color: #{var-list(--tct-card-bar-color-warning, --const-stoplight-warning, #c35500)};\n }\n\n &.color-alert {\n --comp-bar-color: #{var-list(--tct-card-bar-color-alert, --const-stoplight-alert, #c35500)};\n }\n\n &.color-accent-1 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-1, --t-accent-1, #e05252)};\n }\n\n &.color-accent-2 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-2, --t-accent-2, #e09952)};\n }\n\n &.color-accent-3 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-3, --t-accent-3, #e0e052)};\n }\n\n &.color-accent-4 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-4, --t-accent-4, #99e052)};\n }\n\n &.color-accent-5 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-5, --t-accent-5, #52e052)};\n }\n\n &.color-accent-6 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-6, --t-accent-6, #52e099)};\n }\n\n &.color-accent-7 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-7, --t-accent-7, #52e0e0)};\n }\n\n &.color-accent-8 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-8, --t-accent-8, #5299e0)};\n }\n\n &.color-accent-9 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-9, --t-accent-9, #5252e0)};\n }\n\n &.color-accent-10 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-10, --t-accent-10, #9952e0)};\n }\n\n &.color-accent-11 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-11, --t-accent-11, #e052e0)};\n }\n\n &.color-accent-12 {\n --comp-bar-color: #{var-list(--tct-card-bar-color-accent-12, --t-accent-12, #e05299)};\n }\n}\n\n.touch-indicator {\n align-self: center;\n --tct-icon-size: var(--comp-chevron-size);\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Event,\n h,\n Fragment,\n Listen,\n Element,\n EventEmitter,\n State,\n} from '@stencil/core';\nimport { isTouchDevice, overrideFocus, isEventFromElement } from 'src/utils';\nconst PREDEFINED_COLORS = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'info',\n 'success',\n 'warning',\n 'alert',\n 'accent-1',\n 'accent-2',\n 'accent-3',\n 'accent-4',\n 'accent-5',\n 'accent-6',\n 'accent-7',\n 'accent-8',\n 'accent-9',\n 'accent-10',\n 'accent-11',\n 'accent-12',\n];\n\n@Component({ tag: 'q2-card', shadow: true, styleUrl: 'q2-card.scss' })\nexport class Q2Card implements ComponentInterface {\n // #region Own Properties\n\n avatarElement: HTMLElement;\n clickableElement: HTMLElement;\n containerElement: HTMLElement;\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 isAutoSmall: boolean = false;\n\n @State()\n isAutoTouch: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** The [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) to be displayed in the avatar location. */\n @Prop({ reflect: true })\n avatarIcon: string;\n\n /** The initials to be placed in the avatar of the card. */\n @Prop({ reflect: true })\n avatarInitials: string;\n\n /** The name to be used for the avatar of the card which will be converted to initials. */\n @Prop({ reflect: true })\n avatarName: string;\n\n /** The source of the image to be displayed in the avatar location. */\n @Prop({ reflect: true })\n avatarSrc: string;\n\n /**\n * Indicates that a bar should be displayed and which color to use. Predefined colors that may be used as values are:\n *\n * - primary\n * - secondary\n * - tertiary\n * - info\n * - success\n * - warning\n * - alert\n * - accent-1\n * - accent-2\n * - accent-3\n * - accent-4\n * - accent-5\n * - accent-6\n * - accent-7\n * - accent-8\n * - accent-9\n * - accent-10\n * - accent-11\n * - accent-12\n *\n * Any other value (e.g. `\"#990000\"`, `\"purple\"`) will be treated as a custom color.\n */\n @Prop({ reflect: true })\n bar: string;\n\n /** The description of the card (truncated after two lines). */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Display the card with a view optimized for smaller displays.\n *\n * @info\n * This will be determined automatically if the attribute is not manually provided.\n */\n @Prop({ reflect: true })\n isSmall: boolean;\n\n /** Display the card with no borders, padding, drop-shadows, or clickable behavior. */\n @Prop({ reflect: true })\n isStatic: boolean;\n\n /**\n * Display the card with a view optimized for touch displays.\n *\n * @info\n * This will be determined automatically if the attribute is not manually provided.\n */\n @Prop({ reflect: true })\n isTouch: boolean = isTouchDevice();\n\n /** Target to be applied to the link when a URL is provided. */\n @Prop({ reflect: true })\n target: '_self' | '_blank' | '_parent' | '_top';\n\n /** The title of the card. */\n @Prop({ reflect: true })\n title: string;\n\n /** Alters the interactive behavior of the card while maintaining visual appearance. */\n @Prop({ reflect: true })\n type: 'clickable' | 'non-clickable' = 'clickable';\n\n /** URL to navigate the user to when the card is clicked. */\n @Prop({ reflect: true })\n url: string;\n\n // #endregion\n // #region Events\n\n /** Emitted when the card is clicked and the `url` property is not provided. */\n @Event()\n click: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n componentDidLoad() {\n const { hostElement, clickableElement } = this;\n hostElement.click = () => clickableElement.click();\n overrideFocus(this.hostElement);\n\n this.resizeObserver = new ResizeObserver(() => this.determineAutoSmall());\n this.resizeObserver.observe(this.hostElement);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('focus')\n onHostElementFocus(event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.clickableElement.focus();\n }\n\n // #endregion\n // #region Local Methods\n\n determineAutoSmall() {\n if (this.isStatic) return;\n if (this.hostElement.hasAttribute('is-small')) return;\n const { containerElement, avatarElement } = this;\n const avatarWidth = avatarElement?.offsetWidth ?? 0;\n const containerWidth = containerElement?.offsetWidth ?? 0;\n const totalWidth = avatarWidth + containerWidth;\n this.isAutoSmall = totalWidth < 350;\n }\n\n determineAutoTouch() {\n if (this.hostElement.hasAttribute('is-touch')) return;\n this.isAutoTouch = isTouchDevice();\n }\n\n generateAvatar() {\n const { avatarName, avatarInitials, avatarSrc, avatarIcon } = this;\n\n if (avatarIcon) {\n return (\n <q2-icon\n type={avatarIcon}\n ref={e => (this.avatarElement = e)}\n test-id=\"avatar\"\n ></q2-icon>\n );\n } else if (avatarName || avatarInitials || avatarSrc) {\n return (\n <q2-avatar\n name={avatarName}\n initials={avatarInitials}\n src={avatarSrc}\n ref={e => (this.avatarElement = e)}\n test-id=\"avatar\"\n ></q2-avatar>\n );\n }\n }\n\n generateContainerClasses() {\n const {\n isSmall,\n isAutoSmall,\n avatarName,\n avatarInitials,\n avatarSrc,\n avatarIcon,\n isTouch,\n isAutoTouch,\n isStatic,\n type,\n } = this;\n const result = ['container', type];\n const showSmall = isSmall || isAutoSmall;\n const showTouch = isTouch || isAutoTouch;\n const hasAvatar = avatarName || avatarInitials || avatarSrc || avatarIcon;\n if (showSmall) result.push('is-small');\n if (showTouch && !isStatic) result.push('is-touch');\n if (hasAvatar) result.push('has-avatar');\n if (isStatic) result.push('is-static');\n\n return result.join(' ');\n }\n\n generateContent() {\n return (\n <Fragment>\n {this.bar && (\n <div\n class={this.getBarClasses()}\n test-id=\"bar\"\n style={this.getBarStyles()}\n ></div>\n )}\n {this.generateAvatar()}\n <div\n class=\"content\"\n test-id=\"contentContainer\"\n ref={e => (this.containerElement = e)}\n >\n {this.title && <h3 test-id=\"title\">{this.title}</h3>}\n {this.description && <p test-id=\"description\">{this.description}</p>}\n <slot />\n </div>\n {this.isTouch && !this.isStatic && (\n <q2-icon\n test-id=\"touchIndicator\"\n type=\"chevron-right\"\n class=\"touch-indicator\"\n ></q2-icon>\n )}\n </Fragment>\n );\n }\n\n getBarClasses() {\n const { bar } = this;\n\n return {\n bar: true,\n [`color-${bar}`]: this.isBarColorPredefined(),\n };\n }\n\n getBarStyles() {\n const { bar } = this;\n\n return this.isBarColorPredefined() ? {} : { '--comp-bar-color': bar };\n }\n\n handleClick = (event: MouseEvent) => {\n if (this.url) return true;\n event.preventDefault();\n event.stopPropagation();\n this.click.emit();\n };\n\n isBarColorPredefined() {\n return PREDEFINED_COLORS.includes(this.bar);\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { url, isStatic, type } = this;\n if (isStatic || type === 'non-clickable')\n return (\n <div\n ref={e => (this.clickableElement = e)}\n class={this.generateContainerClasses()}\n test-id=\"clickableElement\"\n >\n {this.generateContent()}\n </div>\n );\n else if (!!url)\n return (\n <a\n ref={e => (this.clickableElement = e)}\n href={this.url}\n class={this.generateContainerClasses()}\n target={this.target}\n rel=\"noopener noreferrer\"\n test-id=\"clickableElement\"\n onClick={this.handleClick}\n >\n {this.generateContent()}\n </a>\n );\n else\n return (\n <button\n ref={e => (this.clickableElement = e)}\n class={this.generateContainerClasses()}\n test-id=\"clickableElement\"\n type=\"button\"\n onClick={this.handleClick}\n >\n {this.generateContent()}\n </button>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { r as e, c as t, h as a, H as r, g as o } from "./index-7a5365e2.js";
|
|
2
|
+
|
|
3
|
+
import { l as n } from "./index-d18e2a20.js";
|
|
4
|
+
|
|
5
|
+
const s = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}q2-carousel .swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;transition:all 0.2s}q2-carousel-pane.q2-carousel-pane{--comp-carousel-pane-tween:var(--tct-tween-1, var(--app-tween-1, 0.2s ease));--comp-carousel-shadow:var(--app-shadow-2, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14));cursor:grab}q2-carousel-pane.q2-carousel-pane:not([is-active-pane]) *{cursor:pointer}q2-carousel-pane.q2-carousel-pane:focus{box-shadow:none}q2-carousel-pane.q2-carousel-pane:focus .q2-carousel-pane-main-content{outline:none;box-shadow:var(--const-double-focus-ring)}q2-carousel-pane.q2-carousel-pane button{border:0;background:transparent;transition:all 0.2s;opacity:0.3;cursor:pointer}q2-carousel-pane.q2-carousel-pane button:hover{opacity:0.7}q2-carousel-pane.q2-carousel-pane .q2-carousel-pane-main-content{box-shadow:var(--comp-carousel-shadow);transition:var(--comp-carousel-pane-tween);background:var(--tct-carousel-background, var(--tct-carousel-background-color, var(--t-carousel-background-color, var(--tct-white, var(--app-white, #ffffff)))));border:var(--tct-carousel-pane-border-width, var(--t-carousel-pane-border-width, 0px)) solid var(--tct-carousel-pane-border-color, var(--t-carousel-pane-border-color, var(--tct-gray-11, var(--t-gray-11, var(--tct-gray-l1, var(--app-gray-l1, #cccccc))))));border-radius:var(--tct-carousel-pane-border-radius, var(--t-carousel-pane-border-radius, 8px));padding:var(--tct-carousel-pane-padding, var(--t-carousel-pane-padding, 7px));height:var(--tct-carousel-pane-height, var(--t-carousel-pane-height, 10em))}q2-carousel-pane.q2-carousel-pane .q2-carousel-pane-main-content:hover{box-shadow:var(--const-double-focus-ring), var(--comp-carousel-shadow)}q2-carousel-pane.q2-carousel-pane[slot-frameless]:not([slot-frameless=false]) .q2-carousel-pane-main-content{box-shadow:none;border:0;border-radius:0;padding:0}";
|
|
6
|
+
|
|
7
|
+
const i = s;
|
|
8
|
+
|
|
9
|
+
const c = class {
|
|
10
|
+
constructor(a) {
|
|
11
|
+
e(this, a);
|
|
12
|
+
this.clickCarouselPane = t(this, "clickCarouselPane", 7);
|
|
13
|
+
// #region Own Properties
|
|
14
|
+
this.disabledElements = [];
|
|
15
|
+
this.generatePaneClass = e => `q2-carousel-pane swiper-slide q2-carousel-pane-${e}`;
|
|
16
|
+
this.onMutationObserved = () => {
|
|
17
|
+
this.removePointerMoveListeners();
|
|
18
|
+
this.addPointerMoveListeners();
|
|
19
|
+
};
|
|
20
|
+
this.paneClicked = e => {
|
|
21
|
+
if (this.isActivePane) return;
|
|
22
|
+
e.preventDefault();
|
|
23
|
+
this.clickCarouselPane.emit({
|
|
24
|
+
paneIndex: this.index,
|
|
25
|
+
pane: this.hostElement
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
this.pointerMoveHandler = e => {
|
|
29
|
+
e.stopPropagation();
|
|
30
|
+
};
|
|
31
|
+
this.index = undefined;
|
|
32
|
+
this.isActivePane = undefined;
|
|
33
|
+
this.label = undefined;
|
|
34
|
+
this.siblingCount = undefined;
|
|
35
|
+
this.slotFrameless = undefined;
|
|
36
|
+
}
|
|
37
|
+
// #endregion
|
|
38
|
+
// #region Component Lifecycle Events
|
|
39
|
+
disconnectedCallback() {
|
|
40
|
+
if (this.mutationObserver) {
|
|
41
|
+
this.mutationObserver.disconnect();
|
|
42
|
+
this.mutationObserver = null;
|
|
43
|
+
}
|
|
44
|
+
this.removePointerMoveListeners();
|
|
45
|
+
}
|
|
46
|
+
componentDidLoad() {
|
|
47
|
+
this.determineDisabledContent();
|
|
48
|
+
this.addPointerMoveListeners();
|
|
49
|
+
if (typeof MutationObserver !== "undefined") {
|
|
50
|
+
const e = new MutationObserver(this.onMutationObserved);
|
|
51
|
+
e.observe(this.hostElement, {
|
|
52
|
+
childList: true,
|
|
53
|
+
subtree: true
|
|
54
|
+
});
|
|
55
|
+
this.mutationObserver = e;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// #endregion
|
|
59
|
+
// #region Watchers
|
|
60
|
+
determineDisabledContent() {
|
|
61
|
+
const {isActivePane: e} = this;
|
|
62
|
+
const t = this.hostElement.querySelectorAll('q2-btn, q2-dropdown, q2-item, q2-chart-donut, a[href], button, [tabindex]:not([tabindex="-1"])');
|
|
63
|
+
t.forEach((t => {
|
|
64
|
+
const a = t.hasAttribute("tabindex") && parseInt(t.getAttribute("tabindex")) >= 0;
|
|
65
|
+
if (a) {
|
|
66
|
+
t.setAttribute("data-q2-tabindex", `${t.tabIndex}`);
|
|
67
|
+
}
|
|
68
|
+
if (e) {
|
|
69
|
+
if (t.hasAttribute("data-q2-tabindex")) {
|
|
70
|
+
t.tabIndex = parseInt(t.getAttribute("data-q2-tabindex"));
|
|
71
|
+
t.removeAttribute("data-q2-tabindex");
|
|
72
|
+
} else {
|
|
73
|
+
t.removeAttribute("tabindex");
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
t.tabIndex = -1;
|
|
77
|
+
}
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
// #endregion
|
|
81
|
+
// #region Local Methods
|
|
82
|
+
get currentPaneIndex() {
|
|
83
|
+
return Array.prototype.indexOf.call(this.hostElement.parentElement.children, this.hostElement);
|
|
84
|
+
}
|
|
85
|
+
addPointerMoveListeners() {
|
|
86
|
+
const e = [ "q2-dropdown", "q2-dropdown-item" ];
|
|
87
|
+
this.disabledElements = Array.from(this.hostElement.querySelectorAll(e.join(",")));
|
|
88
|
+
this.disabledElements.forEach((e => {
|
|
89
|
+
e.addEventListener("pointermove", this.pointerMoveHandler);
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
removePointerMoveListeners() {
|
|
93
|
+
this.disabledElements.forEach((e => {
|
|
94
|
+
e.removeEventListener("pointermove", this.pointerMoveHandler);
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
// #endregion
|
|
98
|
+
// #region Render Methods
|
|
99
|
+
render() {
|
|
100
|
+
const {label: e} = this;
|
|
101
|
+
return a(r, {
|
|
102
|
+
key: "d71b36dcf424483f8d72024513a2ef41af68cfbe",
|
|
103
|
+
class: this.generatePaneClass(this.currentPaneIndex),
|
|
104
|
+
tabIndex: this.isActivePane ? 0 : -1,
|
|
105
|
+
role: "group",
|
|
106
|
+
"aria-roledescription": "slide",
|
|
107
|
+
"aria-hidden": this.isActivePane ? undefined : "true",
|
|
108
|
+
"aria-label": e ? n(e) : n("tecton.element.carousel.itemDescription", [ (this.currentPaneIndex + 1).toString(), (this.siblingCount || 0).toString() ]),
|
|
109
|
+
onClick: this.paneClicked
|
|
110
|
+
}, a("article", {
|
|
111
|
+
key: "fb6543bd551d8d4ece1df1f8dd77940465bdc03a",
|
|
112
|
+
class: "q2-carousel-pane-main-content"
|
|
113
|
+
}, a("slot", {
|
|
114
|
+
key: "b0abb74467220e13dcca406cdf3beffeef0cdf5b"
|
|
115
|
+
})));
|
|
116
|
+
}
|
|
117
|
+
get hostElement() {
|
|
118
|
+
return o(this);
|
|
119
|
+
}
|
|
120
|
+
static get watchers() {
|
|
121
|
+
return {
|
|
122
|
+
isActivePane: [ "determineDisabledContent" ]
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
c.style = i;
|
|
128
|
+
|
|
129
|
+
export { c as q2_carousel_pane };
|
|
130
|
+
//# sourceMappingURL=q2-carousel-pane.entry.js.map
|