q2-tecton-elements 1.72.0 → 1.73.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/bundle-report.json +39545 -34361
- package/dist/cjs/{charting-ClN1ldqv.js → charting-CdNTrVBe.js} +80 -0
- package/dist/cjs/click-elsewhere_3.cjs.entry.js +81 -14
- package/dist/cjs/{dataSample-BYR-wrOn.js → dataSample-B4blhlH4.js} +1 -1
- package/dist/cjs/date-picker-helpers-UYvPn98R.js +257 -0
- package/dist/cjs/{index-BY3aao8R.js → index-BqyWHpNu.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js +98 -18
- package/dist/cjs/q2-avatar.cjs.entry.js +34 -1
- package/dist/cjs/q2-badge_2.cjs.entry.js +3 -3
- package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-calendar.cjs.entry.js +9 -4
- package/dist/cjs/q2-card-image.cjs.entry.js +3 -3
- package/dist/cjs/q2-card.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
- package/dist/cjs/q2-carousel.cjs.entry.js +20 -6
- package/dist/cjs/q2-chart-area.cjs.entry.js +38 -7
- package/dist/cjs/q2-chart-bar.cjs.entry.js +39 -8
- package/dist/cjs/q2-chart-donut.cjs.entry.js +31 -13
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-checkbox_2.cjs.entry.js +8 -5
- package/dist/cjs/q2-context.cjs.entry.js +4 -4
- package/dist/cjs/q2-currency.cjs.entry.js +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +7 -7
- package/dist/cjs/q2-date-calendar.cjs.entry.js +452 -0
- package/dist/cjs/q2-date-picker_2.cjs.entry.js +968 -0
- package/dist/cjs/q2-detail.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +3 -3
- package/dist/cjs/q2-editable-field.cjs.entry.js +20 -7
- package/dist/cjs/q2-example.cjs.entry.js +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js +2 -2
- package/dist/cjs/q2-form.cjs.entry.js +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
- package/dist/cjs/q2-icon.cjs.entry.js +1 -1
- package/dist/cjs/q2-item.cjs.entry.js +20 -2
- package/dist/cjs/q2-legend.cjs.entry.js +1 -1
- package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-loc.cjs.entry.js +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +3 -3
- package/dist/cjs/q2-meter.cjs.entry.js +2 -2
- package/dist/cjs/q2-modal.cjs.entry.js +2 -2
- package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
- package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-option.cjs.entry.js +1 -1
- package/dist/cjs/q2-otp.cjs.entry.js +5 -5
- package/dist/cjs/q2-pagination.cjs.entry.js +12 -6
- package/dist/cjs/q2-pill.cjs.entry.js +8 -5
- package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-radio.cjs.entry.js +2 -2
- package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
- package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-search.cjs.entry.js +3 -3
- package/dist/cjs/q2-section.cjs.entry.js +3 -3
- package/dist/cjs/q2-select.cjs.entry.js +8 -4
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
- package/dist/cjs/q2-surface.cjs.entry.js +1 -1
- package/dist/cjs/q2-tab-container.cjs.entry.js +2 -2
- package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
- package/dist/cjs/q2-toast.cjs.entry.js +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/{sectorHelper-9TWL-3dw.js → sectorHelper-CxhDl5ql.js} +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +52 -0
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +98 -18
- package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.vr.js +124 -0
- package/dist/collection/components/q2-avatar/q2-avatar.js +34 -1
- package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +79 -4
- package/dist/collection/components/q2-btn/q2-btn.css +84 -136
- package/dist/collection/components/q2-btn/q2-btn.js +10 -4
- package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +99 -43
- package/dist/collection/components/q2-calendar/q2-calendar.js +16 -5
- package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +3 -13
- package/dist/collection/components/q2-card-image/q2-card-image.js +2 -2
- package/dist/collection/components/q2-carousel/q2-carousel.js +19 -5
- package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +32 -0
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-chart-area/q2-chart-area.css +11 -0
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +53 -7
- package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +14 -0
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.css +11 -0
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +50 -4
- package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +14 -0
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +30 -10
- package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +25 -0
- package/dist/collection/components/q2-checkbox/q2-checkbox.js +6 -3
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +6 -3
- package/dist/collection/components/q2-context/q2-context.js +3 -3
- package/dist/collection/components/q2-context/test/q2-context-test.vr.js +3 -3
- package/dist/collection/components/q2-currency/q2-currency.js +1 -1
- package/dist/collection/components/q2-data-table/q2-data-table.css +3 -0
- package/dist/collection/components/q2-data-table/q2-data-table.js +5 -5
- package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +47 -0
- package/dist/collection/components/q2-date-calendar/q2-date-calendar.css +393 -0
- package/dist/collection/components/q2-date-calendar/q2-date-calendar.js +1022 -0
- package/dist/collection/components/q2-date-calendar/test/q2-date-calendar-test.vr.js +111 -0
- package/dist/collection/components/q2-date-picker/q2-date-picker.css +138 -0
- package/dist/collection/components/q2-date-picker/q2-date-picker.js +2010 -0
- package/dist/collection/components/q2-date-picker/test/q2-date-picker-test.vr.js +179 -0
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -5
- package/dist/collection/components/q2-editable-field/q2-editable-field.js +27 -8
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.js +1 -1
- package/dist/collection/components/q2-form/q2-form.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-input/formatting/phone-number-formats.js +1 -1
- package/dist/collection/components/q2-input/q2-input.js +6 -3
- package/dist/collection/components/q2-item/q2-item.js +19 -1
- package/dist/collection/components/q2-item/test/q2-item-test.vr.js +2 -2
- package/dist/collection/components/q2-legend/q2-legend.js +1 -1
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-message/q2-message.css +1 -1
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-message/test/q2-message-test.vr.js +11 -2
- package/dist/collection/components/q2-meter/q2-meter.js +1 -1
- package/dist/collection/components/q2-modal/q2-modal.js +1 -1
- package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +7 -7
- package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js +36 -4
- package/dist/collection/components/q2-otp/q2-otp.js +4 -4
- package/dist/collection/components/q2-pagination/q2-pagination.css +17 -0
- package/dist/collection/components/q2-pagination/q2-pagination.js +10 -4
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js +39 -0
- package/dist/collection/components/q2-pill/q2-pill.css +14 -10
- package/dist/collection/components/q2-pill/q2-pill.js +6 -3
- package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +25 -0
- package/dist/collection/components/q2-popover/q2-popover.css +1 -0
- package/dist/collection/components/q2-popover/q2-popover.js +43 -8
- package/dist/collection/components/q2-radio/q2-radio.js +5 -2
- package/dist/collection/components/q2-radio-group/q2-radio-group.js +6 -3
- 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-search/q2-search.js +6 -3
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-select/q2-select.js +12 -5
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-surface/q2-surface.js +1 -1
- package/dist/collection/components/q2-surface/test/q2-surface-test.vr.js +2 -2
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +6 -3
- package/dist/collection/components/q2-textarea/q2-textarea.js +6 -3
- package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/utils/chart-keyboard.js +76 -0
- package/dist/collection/utils/date-picker/date-picker-helpers.js +239 -0
- package/dist/collection/utils/date-picker/date-picker-types.js +1 -0
- package/dist/collection/utils/index.js +1 -1
- package/dist/components/charting.js +1603 -1532
- package/dist/components/dataSample.js +7 -7
- package/dist/components/index.js +57 -53
- package/dist/components/index2.js +2 -2
- package/dist/components/q2-action-sheet.js +224 -103
- package/dist/components/q2-avatar2.js +41 -27
- package/dist/components/q2-btn2.js +2 -2
- package/dist/components/q2-calendar.js +6 -3
- package/dist/components/q2-card-image.js +2 -2
- package/dist/components/q2-carousel-pane2.js +3 -3
- package/dist/components/q2-carousel.js +37 -24
- package/dist/components/q2-chart-area.js +415 -369
- package/dist/components/q2-chart-bar.js +193 -148
- package/dist/components/q2-chart-donut.js +185 -158
- package/dist/components/q2-checkbox-group.js +6 -6
- package/dist/components/q2-checkbox2.js +11 -11
- package/dist/components/q2-context.js +20 -20
- package/dist/components/q2-currency.js +9 -9
- package/dist/components/q2-data-table.js +111 -111
- package/dist/components/q2-date-calendar.d.ts +11 -0
- package/dist/components/q2-date-calendar.js +5 -0
- package/dist/components/q2-date-calendar2.js +678 -0
- package/dist/components/q2-date-picker.d.ts +11 -0
- package/dist/components/q2-date-picker.js +5 -0
- package/dist/components/q2-date-picker2.js +875 -0
- package/dist/components/q2-detail.js +3 -3
- package/dist/components/q2-dropdown.js +17 -17
- package/dist/components/q2-editable-field.js +16 -5
- package/dist/components/q2-example.js +11 -11
- package/dist/components/q2-file-picker.js +1 -1
- package/dist/components/q2-form.js +6 -6
- package/dist/components/q2-formatted-text.js +2 -2
- package/dist/components/q2-input2.js +6 -6
- package/dist/components/q2-item2.js +32 -22
- package/dist/components/q2-legend2.js +7 -7
- package/dist/components/q2-list2.js +6 -6
- package/dist/components/q2-message2.js +10 -10
- package/dist/components/q2-meter.js +7 -7
- package/dist/components/q2-modal.js +22 -22
- package/dist/components/q2-month-picker.js +17 -17
- package/dist/components/q2-mutation-observer.js +1 -1
- package/dist/components/q2-optgroup2.js +7 -7
- package/dist/components/q2-option-list2.js +55 -34
- package/dist/components/q2-otp.js +8 -8
- package/dist/components/q2-pagination.js +70 -68
- package/dist/components/q2-pill.js +51 -46
- package/dist/components/q2-popover2.js +70 -49
- package/dist/components/q2-radio-group.js +7 -7
- package/dist/components/q2-radio.js +6 -6
- package/dist/components/q2-relative-time.js +1 -1
- package/dist/components/q2-resize-observer2.js +1 -1
- package/dist/components/q2-search.js +5 -5
- package/dist/components/q2-section.js +17 -17
- package/dist/components/q2-select2.js +2 -2
- package/dist/components/q2-stepper-pane.js +29 -29
- package/dist/components/q2-stepper-vertical.js +4 -4
- package/dist/components/q2-stepper.js +57 -57
- package/dist/components/q2-surface.js +3 -3
- package/dist/components/q2-tab-container.js +21 -21
- package/dist/components/q2-tab-pane.js +6 -6
- package/dist/components/q2-tag2.js +8 -6
- package/dist/components/q2-textarea.js +3 -3
- package/dist/components/sectorHelper.js +78 -78
- package/dist/components/tecton-tab-pane.js +10 -10
- package/dist/esm/{charting-DOZct-UB.js → charting-DFXJklqs.js} +79 -1
- package/dist/esm/click-elsewhere_3.entry.js +81 -14
- package/dist/esm/{dataSample-Dm1zpQNi.js → dataSample-CP_VKNqt.js} +1 -1
- package/dist/esm/date-picker-helpers-D8QnN_AS.js +242 -0
- package/dist/esm/{index-DJw6Feh0.js → index-CP8pXJ-l.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group.entry.js +1 -1
- package/dist/esm/q2-action-sheet.entry.js +99 -19
- package/dist/esm/q2-avatar.entry.js +34 -1
- package/dist/esm/q2-badge_2.entry.js +3 -3
- package/dist/esm/q2-btn_2.entry.js +2 -2
- package/dist/esm/q2-calendar.entry.js +9 -4
- package/dist/esm/q2-card-image.entry.js +3 -3
- package/dist/esm/q2-card.entry.js +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +3 -3
- package/dist/esm/q2-carousel.entry.js +20 -6
- package/dist/esm/q2-chart-area.entry.js +38 -7
- package/dist/esm/q2-chart-bar.entry.js +39 -8
- package/dist/esm/q2-chart-donut.entry.js +31 -13
- package/dist/esm/q2-checkbox-group.entry.js +2 -2
- package/dist/esm/q2-checkbox_2.entry.js +8 -5
- package/dist/esm/q2-context.entry.js +4 -4
- package/dist/esm/q2-currency.entry.js +1 -1
- package/dist/esm/q2-data-table.entry.js +7 -7
- package/dist/esm/q2-date-calendar.entry.js +450 -0
- package/dist/esm/q2-date-picker_2.entry.js +965 -0
- package/dist/esm/q2-detail.entry.js +2 -2
- package/dist/esm/q2-dropdown-item.entry.js +1 -1
- package/dist/esm/q2-dropdown.entry.js +3 -3
- package/dist/esm/q2-editable-field.entry.js +20 -7
- package/dist/esm/q2-example.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js +2 -2
- package/dist/esm/q2-form.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-icon.entry.js +1 -1
- package/dist/esm/q2-item.entry.js +20 -2
- package/dist/esm/q2-legend.entry.js +1 -1
- package/dist/esm/q2-link_2.entry.js +2 -2
- package/dist/esm/q2-loc.entry.js +1 -1
- package/dist/esm/q2-message.entry.js +3 -3
- package/dist/esm/q2-meter.entry.js +2 -2
- package/dist/esm/q2-modal.entry.js +2 -2
- package/dist/esm/q2-month-picker.entry.js +3 -3
- package/dist/esm/q2-mutation-observer.entry.js +1 -1
- package/dist/esm/q2-option.entry.js +1 -1
- package/dist/esm/q2-otp.entry.js +5 -5
- package/dist/esm/q2-pagination.entry.js +12 -6
- package/dist/esm/q2-pill.entry.js +8 -5
- package/dist/esm/q2-radio-group.entry.js +2 -2
- package/dist/esm/q2-radio.entry.js +2 -2
- package/dist/esm/q2-relative-time.entry.js +2 -2
- package/dist/esm/q2-resize-observer.entry.js +1 -1
- package/dist/esm/q2-search.entry.js +3 -3
- package/dist/esm/q2-section.entry.js +3 -3
- package/dist/esm/q2-select.entry.js +8 -4
- package/dist/esm/q2-stepper-pane.entry.js +2 -2
- package/dist/esm/q2-stepper-vertical.entry.js +2 -2
- package/dist/esm/q2-stepper.entry.js +2 -2
- package/dist/esm/q2-surface.entry.js +1 -1
- package/dist/esm/q2-tab-container.entry.js +2 -2
- package/dist/esm/q2-tab-pane.entry.js +1 -1
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +2 -2
- package/dist/esm/q2-toast.entry.js +1 -1
- package/dist/esm/q2-tooltip.entry.js +1 -1
- package/dist/esm/{sectorHelper--RMGWGAy.js → sectorHelper-DBtkWtpl.js} +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/{charting-DOZct-UB.js → charting-DFXJklqs.js} +1625 -1554
- package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +85 -43
- package/dist/q2-tecton-elements/{dataSample-Dm1zpQNi.js → dataSample-CP_VKNqt.js} +33 -33
- package/dist/q2-tecton-elements/date-picker-helpers-D8QnN_AS.js +153 -0
- package/dist/q2-tecton-elements/{index-DJw6Feh0.js → index-CP8pXJ-l.js} +1 -1
- package/dist/q2-tecton-elements/q2-action-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +169 -84
- package/dist/q2-tecton-elements/q2-avatar.entry.js +24 -10
- package/dist/q2-tecton-elements/q2-badge_2.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-btn_2.entry.js +23 -23
- package/dist/q2-tecton-elements/q2-calendar.entry.js +7 -4
- package/dist/q2-tecton-elements/q2-card-image.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-carousel.entry.js +24 -11
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +187 -141
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +377 -333
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +184 -158
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +20 -18
- package/dist/q2-tecton-elements/q2-context.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-currency.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-data-table.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-date-calendar.entry.js +438 -0
- package/dist/q2-tecton-elements/q2-date-picker_2.entry.js +792 -0
- package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +16 -16
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +17 -6
- package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-form.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-icon.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-item.entry.js +26 -16
- package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-link_2.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-message.entry.js +29 -29
- package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-modal.entry.js +18 -18
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-otp.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-pagination.entry.js +51 -49
- package/dist/q2-tecton-elements/q2-pill.entry.js +22 -17
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-radio.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +13 -13
- package/dist/q2-tecton-elements/q2-search.entry.js +31 -31
- package/dist/q2-tecton-elements/q2-section.entry.js +20 -20
- package/dist/q2-tecton-elements/q2-select.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +10 -10
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-stepper.entry.js +45 -45
- package/dist/q2-tecton-elements/q2-surface.entry.js +15 -15
- package/dist/q2-tecton-elements/q2-tab-container.entry.js +20 -20
- package/dist/q2-tecton-elements/q2-tab-pane.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
- package/dist/q2-tecton-elements/{sectorHelper--RMGWGAy.js → sectorHelper-DBtkWtpl.js} +56 -56
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +9 -9
- package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +21 -1
- package/dist/types/components/q2-action-sheet/test/q2-action-sheet-test.vr.d.ts +1 -0
- package/dist/types/components/q2-avatar/q2-avatar.d.ts +5 -0
- package/dist/types/components/q2-btn/q2-btn.d.ts +7 -3
- package/dist/types/components/q2-calendar/q2-calendar.d.ts +10 -2
- package/dist/types/components/q2-carousel/q2-carousel.d.ts +5 -0
- package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +11 -2
- package/dist/types/components/q2-chart-bar/q2-chart-bar.d.ts +9 -0
- package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +1 -0
- package/dist/types/components/q2-checkbox/q2-checkbox.d.ts +4 -3
- package/dist/types/components/q2-checkbox-group/q2-checkbox-group.d.ts +4 -2
- package/dist/types/components/q2-date-calendar/q2-date-calendar.d.ts +122 -0
- package/dist/types/components/q2-date-calendar/test/q2-date-calendar-test.vr.d.ts +1 -0
- package/dist/types/components/q2-date-picker/q2-date-picker.d.ts +304 -0
- package/dist/types/components/q2-date-picker/test/q2-date-picker-test.vr.d.ts +1 -0
- package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +3 -3
- package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +14 -1
- package/dist/types/components/q2-input/q2-input.d.ts +4 -2
- package/dist/types/components/q2-item/q2-item.d.ts +3 -0
- package/dist/types/components/q2-option-list/q2-option-list.d.ts +1 -0
- package/dist/types/components/q2-popover/q2-popover.d.ts +4 -0
- package/dist/types/components/q2-radio/q2-radio.d.ts +3 -2
- package/dist/types/components/q2-radio-group/q2-radio-group.d.ts +4 -2
- package/dist/types/components/q2-search/q2-search.d.ts +3 -1
- package/dist/types/components/q2-select/q2-select.d.ts +4 -2
- package/dist/types/components/q2-textarea/q2-textarea.d.ts +4 -2
- package/dist/types/components.d.ts +858 -49
- package/dist/types/global.d.ts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/utils/chart-keyboard.d.ts +16 -0
- package/dist/types/utils/date-picker/date-picker-helpers.d.ts +47 -0
- package/dist/types/utils/date-picker/date-picker-types.d.ts +42 -0
- package/package.json +3 -3
- package/dist/cjs/q2-optgroup.cjs.entry.js +0 -70
- package/dist/esm/q2-optgroup.entry.js +0 -68
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +0 -88
|
@@ -540,7 +540,10 @@ export class Q2Btn {
|
|
|
540
540
|
"required": false,
|
|
541
541
|
"optional": false,
|
|
542
542
|
"docs": {
|
|
543
|
-
"tags": [
|
|
543
|
+
"tags": [{
|
|
544
|
+
"name": "warning",
|
|
545
|
+
"text": "Hides the label visually. `label` text is still required for screenreader compliance. Use for icon-only buttons."
|
|
546
|
+
}],
|
|
544
547
|
"text": "Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element."
|
|
545
548
|
},
|
|
546
549
|
"getter": false,
|
|
@@ -552,15 +555,15 @@ export class Q2Btn {
|
|
|
552
555
|
"type": "string",
|
|
553
556
|
"mutable": true,
|
|
554
557
|
"complexType": {
|
|
555
|
-
"original": "| 'coin'\n | 'neutral-text'\n | 'neutral'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary'",
|
|
556
|
-
"resolved": "\"coin\" | \"neutral\" | \"neutral-text\" | \"workflow-destroy\" | \"workflow-escape\" | \"workflow-primary\" | \"workflow-secondary\"",
|
|
558
|
+
"original": "| 'coin'\n | 'destroy'\n | 'escape'\n | 'neutral-text'\n | 'neutral'\n | 'primary'\n | 'secondary'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary'",
|
|
559
|
+
"resolved": "\"coin\" | \"destroy\" | \"escape\" | \"neutral\" | \"neutral-text\" | \"primary\" | \"secondary\" | \"workflow-destroy\" | \"workflow-escape\" | \"workflow-primary\" | \"workflow-secondary\"",
|
|
557
560
|
"references": {}
|
|
558
561
|
},
|
|
559
562
|
"required": false,
|
|
560
563
|
"optional": false,
|
|
561
564
|
"docs": {
|
|
562
565
|
"tags": [],
|
|
563
|
-
"text": "Indicates the
|
|
566
|
+
"text": "Indicates the intended action type, which applies the appropriate styling.\nUse unprefixed values by default. The legacy `workflow-` prefix remains supported for backward compatibility."
|
|
564
567
|
},
|
|
565
568
|
"getter": false,
|
|
566
569
|
"setter": false,
|
|
@@ -579,6 +582,9 @@ export class Q2Btn {
|
|
|
579
582
|
"optional": false,
|
|
580
583
|
"docs": {
|
|
581
584
|
"tags": [{
|
|
585
|
+
"name": "warning",
|
|
586
|
+
"text": "Required for screen reader compliance even when `hideLabel` is `true`."
|
|
587
|
+
}, {
|
|
582
588
|
"name": "localizable",
|
|
583
589
|
"text": undefined
|
|
584
590
|
}],
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import { expect } from "@playwright/test";
|
|
2
2
|
import { test } from "@stencil/playwright";
|
|
3
3
|
import { setupPage, THEMES, FONT_SCALE_PX, FONT_SCALE_SUFFIX } from "../../../utils/test/vr-helpers";
|
|
4
|
-
const INTENTS = [
|
|
5
|
-
'workflow-primary',
|
|
6
|
-
'workflow-secondary',
|
|
7
|
-
'workflow-destroy',
|
|
8
|
-
'workflow-escape',
|
|
9
|
-
'neutral',
|
|
10
|
-
'neutral-text',
|
|
11
|
-
'coin',
|
|
12
|
-
];
|
|
4
|
+
const INTENTS = ['primary', 'secondary', 'destroy', 'escape', 'neutral', 'neutral-text', 'coin'];
|
|
13
5
|
const SIZES = ['small', 'medium', 'large', 'none'];
|
|
14
6
|
const coinHtml = () => `<q2-btn intent="coin" label="My Button"><q2-avatar icon="star"></q2-avatar></q2-btn>`;
|
|
15
7
|
const labelAndIconHtml = (intent) => intent === 'coin'
|
|
@@ -22,10 +14,10 @@ const sizeHtml = (intent, size) => {
|
|
|
22
14
|
};
|
|
23
15
|
const plainHtml = () => `<q2-btn><q2-icon type="edit"></q2-icon><span>My Button</span></q2-btn>`;
|
|
24
16
|
const SIZED_INTENTS = [
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
17
|
+
'primary',
|
|
18
|
+
'secondary',
|
|
19
|
+
'destroy',
|
|
20
|
+
'escape',
|
|
29
21
|
'neutral',
|
|
30
22
|
'neutral-text',
|
|
31
23
|
];
|
|
@@ -69,7 +61,7 @@ test.describe('q2-btn label+icon — intents × states × themes', () => {
|
|
|
69
61
|
restingCase(`q2-btn--${intent}--resting`, labelAndIconHtml(intent), theme);
|
|
70
62
|
hoverCase(`q2-btn--${intent}--hover`, labelAndIconHtml(intent), theme);
|
|
71
63
|
focusCase(`q2-btn--${intent}--focus`, labelAndIconHtml(intent), theme);
|
|
72
|
-
const settleAfterMs = intent === '
|
|
64
|
+
const settleAfterMs = intent === 'primary' && theme === 'default-2026' ? 125 : 50;
|
|
73
65
|
activeCase(`q2-btn--${intent}--active`, labelAndIconHtml(intent), theme, settleAfterMs);
|
|
74
66
|
}
|
|
75
67
|
}
|
|
@@ -92,13 +84,13 @@ test.describe('q2-btn intents — sizes × themes (resting)', () => {
|
|
|
92
84
|
}
|
|
93
85
|
}
|
|
94
86
|
});
|
|
95
|
-
test.describe('q2-btn
|
|
87
|
+
test.describe('q2-btn primary — updated states', () => {
|
|
96
88
|
for (const size of SIZES) {
|
|
97
|
-
activeCase(`q2-btn--
|
|
89
|
+
activeCase(`q2-btn--primary--size-${size}--active`, sizeHtml('primary', size), 'default-2026', 125);
|
|
98
90
|
}
|
|
99
|
-
restingCase('q2-btn--
|
|
91
|
+
restingCase('q2-btn--primary--disabled', '<q2-btn intent="primary" disabled><span>My Button</span></q2-btn>', 'default-2026');
|
|
100
92
|
test('uses the proposed-primary pointer and active contract', async ({ page }) => {
|
|
101
|
-
await setupPage(page, labelAndIconHtml('
|
|
93
|
+
await setupPage(page, labelAndIconHtml('primary'), {
|
|
102
94
|
theme: 'default-2026',
|
|
103
95
|
motion: 'normal',
|
|
104
96
|
});
|
|
@@ -121,7 +113,7 @@ test.describe('q2-btn workflow-primary — updated states', () => {
|
|
|
121
113
|
await page.mouse.up();
|
|
122
114
|
});
|
|
123
115
|
test('uses the proposed-primary keyboard focus contract', async ({ page }) => {
|
|
124
|
-
await setupPage(page, labelAndIconHtml('
|
|
116
|
+
await setupPage(page, labelAndIconHtml('primary'), { theme: 'default-2026' });
|
|
125
117
|
const button = page.locator('q2-btn').locator('button');
|
|
126
118
|
await page.keyboard.press('Tab');
|
|
127
119
|
await expect(button).toBeFocused();
|
|
@@ -129,30 +121,16 @@ test.describe('q2-btn workflow-primary — updated states', () => {
|
|
|
129
121
|
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toContain('rgb(106, 74, 158)');
|
|
130
122
|
});
|
|
131
123
|
test('removes the Flat hover ring', async ({ page }) => {
|
|
132
|
-
await setupPage(page, labelAndIconHtml('
|
|
124
|
+
await setupPage(page, labelAndIconHtml('primary'), { theme: 'flat' });
|
|
133
125
|
const host = page.locator('q2-btn');
|
|
134
126
|
const button = host.locator('button');
|
|
135
127
|
await host.hover();
|
|
136
128
|
await page.waitForTimeout(125);
|
|
137
129
|
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toBe('none');
|
|
138
130
|
});
|
|
139
|
-
|
|
140
|
-
test(`does not add a ${theme} pointer focus ring`, async ({ page }) => {
|
|
141
|
-
await setupPage(page, labelAndIconHtml('workflow-primary'), { theme });
|
|
142
|
-
const host = page.locator('q2-btn');
|
|
143
|
-
const button = host.locator('button');
|
|
144
|
-
await page.waitForTimeout(125);
|
|
145
|
-
const restingShadow = await button.evaluate(element => getComputedStyle(element).boxShadow);
|
|
146
|
-
await host.click();
|
|
147
|
-
await page.mouse.move(0, 0);
|
|
148
|
-
await page.waitForTimeout(125);
|
|
149
|
-
await expect(button).toBeFocused();
|
|
150
|
-
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toBe(restingShadow);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
test('removes only the active scale for reduced motion', async ({ page }) => {
|
|
131
|
+
test('removes the active scale from intent buttons for reduced motion', async ({ page }) => {
|
|
154
132
|
await page.emulateMedia({ reducedMotion: 'reduce' });
|
|
155
|
-
await setupPage(page, labelAndIconHtml('
|
|
133
|
+
await setupPage(page, labelAndIconHtml('secondary'), { theme: 'default-2026' });
|
|
156
134
|
const host = page.locator('q2-btn');
|
|
157
135
|
const button = host.locator('button');
|
|
158
136
|
const box = await host.boundingBox();
|
|
@@ -161,11 +139,55 @@ test.describe('q2-btn workflow-primary — updated states', () => {
|
|
|
161
139
|
await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
|
|
162
140
|
await page.mouse.down();
|
|
163
141
|
await page.waitForTimeout(125);
|
|
164
|
-
expect(await button.evaluate(element => getComputedStyle(element).backgroundColor)).toBe('rgb(82, 53, 120)');
|
|
165
142
|
expect(await button.evaluate(element => getComputedStyle(element).transform)).toBe('none');
|
|
166
143
|
await page.mouse.up();
|
|
167
144
|
});
|
|
168
145
|
});
|
|
146
|
+
test.describe('q2-btn intents — active press treatment', () => {
|
|
147
|
+
for (const intent of INTENTS) {
|
|
148
|
+
test(`scales ${intent} while pressed`, async ({ page }) => {
|
|
149
|
+
await setupPage(page, labelAndIconHtml(intent), {
|
|
150
|
+
theme: 'default-2026',
|
|
151
|
+
motion: 'normal',
|
|
152
|
+
});
|
|
153
|
+
const host = page.locator('q2-btn');
|
|
154
|
+
const button = host.locator('button');
|
|
155
|
+
const box = await host.boundingBox();
|
|
156
|
+
if (!box)
|
|
157
|
+
throw new Error('q2-btn bounding box unavailable');
|
|
158
|
+
await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
|
|
159
|
+
await page.mouse.down();
|
|
160
|
+
await page.waitForTimeout(125);
|
|
161
|
+
const scale = await button.evaluate(element => new DOMMatrixReadOnly(getComputedStyle(element).transform).a);
|
|
162
|
+
expect(scale).toBeGreaterThanOrEqual(0.97);
|
|
163
|
+
expect(scale).toBeLessThan(0.99);
|
|
164
|
+
await page.mouse.up();
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
test.describe('q2-btn — no-aesthetic fallbacks', () => {
|
|
169
|
+
test('adds the fallback shadow to primary', async ({ page }) => {
|
|
170
|
+
await setupPage(page, labelAndIconHtml('workflow-primary'));
|
|
171
|
+
const button = page.locator('q2-btn').locator('button');
|
|
172
|
+
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).not.toBe('none');
|
|
173
|
+
});
|
|
174
|
+
for (const intent of ['workflow-secondary', 'workflow-destroy', 'neutral', 'neutral-text']) {
|
|
175
|
+
test(`changes the ${intent} background while pressed`, async ({ page }) => {
|
|
176
|
+
await setupPage(page, labelAndIconHtml(intent), { motion: 'normal' });
|
|
177
|
+
const host = page.locator('q2-btn');
|
|
178
|
+
const button = host.locator('button');
|
|
179
|
+
const restingBackground = await button.evaluate(element => getComputedStyle(element).backgroundColor);
|
|
180
|
+
const box = await host.boundingBox();
|
|
181
|
+
if (!box)
|
|
182
|
+
throw new Error('q2-btn bounding box unavailable');
|
|
183
|
+
await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
|
|
184
|
+
await page.mouse.down();
|
|
185
|
+
await page.waitForTimeout(125);
|
|
186
|
+
expect(await button.evaluate(element => getComputedStyle(element).backgroundColor)).not.toBe(restingBackground);
|
|
187
|
+
await page.mouse.up();
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
});
|
|
169
191
|
test.describe('q2-btn coin — updated hover state', () => {
|
|
170
192
|
for (const theme of [
|
|
171
193
|
'default-2026',
|
|
@@ -210,7 +232,7 @@ test.describe('q2-btn intents — consistent focus ring', () => {
|
|
|
210
232
|
});
|
|
211
233
|
}
|
|
212
234
|
test('prefers the per-intent outer ring color', async ({ page }) => {
|
|
213
|
-
await setupPage(page, '<q2-btn intent="
|
|
235
|
+
await setupPage(page, '<q2-btn intent="destroy" style="--tct-btn-destroy-focus-visible-outer-ring-color: #123456">My Button</q2-btn>', { theme: 'default-2026' });
|
|
214
236
|
const button = page.locator('q2-btn').locator('button');
|
|
215
237
|
await page.keyboard.press('Tab');
|
|
216
238
|
await expect(button).toBeFocused();
|
|
@@ -226,7 +248,7 @@ test.describe('q2-btn intents — consistent focus ring', () => {
|
|
|
226
248
|
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toContain('rgb(106, 74, 158)');
|
|
227
249
|
});
|
|
228
250
|
test('falls back to the constant focus color when the theme token is unavailable', async ({ page }) => {
|
|
229
|
-
await setupPage(page, '<q2-btn intent="
|
|
251
|
+
await setupPage(page, '<q2-btn intent="primary">My Button</q2-btn>', { theme: 'default-2026' });
|
|
230
252
|
await page.locator('html').evaluate(element => element.style.setProperty('--t-focus-color', 'initial'));
|
|
231
253
|
const button = page.locator('q2-btn').locator('button');
|
|
232
254
|
await page.keyboard.press('Tab');
|
|
@@ -244,6 +266,40 @@ test.describe('q2-btn intents — consistent focus ring', () => {
|
|
|
244
266
|
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toContain('rgb(0, 102, 204)');
|
|
245
267
|
});
|
|
246
268
|
});
|
|
269
|
+
test.describe('q2-btn intents — pointer focus', () => {
|
|
270
|
+
for (const intent of INTENTS) {
|
|
271
|
+
for (const theme of THEMES) {
|
|
272
|
+
test(`does not add a focus ring to ${intent} in ${theme}`, async ({ page }) => {
|
|
273
|
+
await setupPage(page, labelAndIconHtml(intent), { theme });
|
|
274
|
+
const host = page.locator('q2-btn');
|
|
275
|
+
const button = host.locator('button');
|
|
276
|
+
await page.waitForTimeout(125);
|
|
277
|
+
const restingShadow = await button.evaluate(element => getComputedStyle(element).boxShadow);
|
|
278
|
+
await host.click();
|
|
279
|
+
await page.mouse.move(0, 0);
|
|
280
|
+
await page.waitForTimeout(125);
|
|
281
|
+
await expect(button).toBeFocused();
|
|
282
|
+
expect(await button.evaluate(element => getComputedStyle(element).boxShadow)).toBe(restingShadow);
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
test.describe('q2-btn icon-only — pointer focus', () => {
|
|
288
|
+
for (const theme of THEMES) {
|
|
289
|
+
test(`does not keep the hover background after a click in ${theme}`, async ({ page }) => {
|
|
290
|
+
await setupPage(page, '<q2-btn><q2-icon type="edit"></q2-icon></q2-btn>', { theme });
|
|
291
|
+
const host = page.locator('q2-btn');
|
|
292
|
+
const button = host.locator('button');
|
|
293
|
+
const restingBackground = await button.evaluate(element => getComputedStyle(element).backgroundColor);
|
|
294
|
+
await host.click();
|
|
295
|
+
await page.mouse.move(0, 0);
|
|
296
|
+
await expect(button).toBeFocused();
|
|
297
|
+
await expect
|
|
298
|
+
.poll(() => button.evaluate(element => getComputedStyle(element).backgroundColor))
|
|
299
|
+
.toBe(restingBackground);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
});
|
|
247
303
|
test.describe('q2-btn plain (no intent) — states × themes', () => {
|
|
248
304
|
for (const theme of THEMES) {
|
|
249
305
|
restingCase('q2-btn--plain--resting', plainHtml(), theme);
|
|
@@ -252,12 +308,12 @@ test.describe('q2-btn plain (no intent) — states × themes', () => {
|
|
|
252
308
|
}
|
|
253
309
|
});
|
|
254
310
|
// coin exercises --tct-btn-coin-label-font-size.
|
|
255
|
-
//
|
|
311
|
+
// primary at each size exercises --tct-btn-font-size-small/medium/large.
|
|
256
312
|
const BTN_FONT_SCALE_CASES = [
|
|
257
313
|
{ name: 'coin', html: coinHtml() },
|
|
258
|
-
{ name: '
|
|
259
|
-
{ name: '
|
|
260
|
-
{ name: '
|
|
314
|
+
{ name: 'primary--size-small', html: sizeHtml('primary', 'small') },
|
|
315
|
+
{ name: 'primary--size-medium', html: sizeHtml('primary', 'medium') },
|
|
316
|
+
{ name: 'primary--size-large', html: sizeHtml('primary', 'large') },
|
|
261
317
|
];
|
|
262
318
|
test.describe(`q2-btn — scaled font size × themes`, () => {
|
|
263
319
|
for (const { name, html } of BTN_FONT_SCALE_CASES) {
|
|
@@ -371,8 +371,13 @@ export class Q2Calendar {
|
|
|
371
371
|
this.controlElement.shadowRoot.querySelector('.input-field').focus();
|
|
372
372
|
}
|
|
373
373
|
popoverStateHandler({ detail: { open } }) {
|
|
374
|
-
if (this.open
|
|
375
|
-
|
|
374
|
+
if (this.open === open)
|
|
375
|
+
return;
|
|
376
|
+
this.open = open;
|
|
377
|
+
if (open)
|
|
378
|
+
return;
|
|
379
|
+
const trigger = this.typeable ? this.btnCalendarToggle : this.innerInputField;
|
|
380
|
+
trigger === null || trigger === void 0 ? void 0 : trigger.focus();
|
|
376
381
|
}
|
|
377
382
|
defaultSuccessHandler(event) {
|
|
378
383
|
if (event.target !== this.hostElement) {
|
|
@@ -808,7 +813,7 @@ export class Q2Calendar {
|
|
|
808
813
|
]), ariaExpanded: `${!!this.open}`, ariaHasPopup: "dialog", "hide-label": true, disabled: !!this.disabled || !!this.readonly }, h("q2-icon", { type: "calendar" })))));
|
|
809
814
|
}
|
|
810
815
|
render() {
|
|
811
|
-
return (h("click-elsewhere", { key: '
|
|
816
|
+
return (h("click-elsewhere", { key: '11162237137dc92ffc61d85ab9facb1e8844ac9f', class: this.open ? 'dropdown-open' : undefined, onChange: this.onClickElsewhere }, this.renderInputField(), h("q2-popover", { key: '00f6dbdec8323951b6e997b544d7581a3d70719c', ref: el => (this.popoverElement = el), id: "calendar-popover", controlElement: this.innerInputContainer, open: this.open, direction: this.popoverDirection, minHeight: this.popoverMinHeight, align: this.popoverAlignment, mode: this.popoverMode || undefined, block: true }, this.renderHintField(), this.renderCalendarPopover())));
|
|
812
817
|
}
|
|
813
818
|
static get is() { return "q2-calendar"; }
|
|
814
819
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1102,7 +1107,10 @@ export class Q2Calendar {
|
|
|
1102
1107
|
"required": false,
|
|
1103
1108
|
"optional": false,
|
|
1104
1109
|
"docs": {
|
|
1105
|
-
"tags": [
|
|
1110
|
+
"tags": [{
|
|
1111
|
+
"name": "warning",
|
|
1112
|
+
"text": "Hides the label visually. `label` text is still required for screenreader compliance."
|
|
1113
|
+
}],
|
|
1106
1114
|
"text": "Hide the input field's ` <label> ` element from view."
|
|
1107
1115
|
},
|
|
1108
1116
|
"getter": false,
|
|
@@ -1183,7 +1191,10 @@ export class Q2Calendar {
|
|
|
1183
1191
|
"required": false,
|
|
1184
1192
|
"optional": false,
|
|
1185
1193
|
"docs": {
|
|
1186
|
-
"tags": [
|
|
1194
|
+
"tags": [{
|
|
1195
|
+
"name": "warning",
|
|
1196
|
+
"text": "Required for screen reader compliance even when `hideLabel` is `true`."
|
|
1197
|
+
}],
|
|
1187
1198
|
"text": "The visible label for the `q2-calendar` input field."
|
|
1188
1199
|
},
|
|
1189
1200
|
"getter": false,
|
|
@@ -134,10 +134,10 @@ export class Q2MonthPicker {
|
|
|
134
134
|
// #endregion
|
|
135
135
|
// #region Render Methods
|
|
136
136
|
render() {
|
|
137
|
-
return (h("div", { key: '
|
|
137
|
+
return (h("div", { key: '6e90b90e7720649681c2e95debe81d823095ccd0', class: "month-container", onKeyDown: this.onMonthKeydown }, h("div", { key: 'd1b83fce67fec3beacb73004a02d566f77a5729f', class: "navigation" }, h("q2-btn", { key: '0772d6553ee3a75ca829755b3abc7d75ac0fa1aa', class: "year-btn", onClick: () => this.viewChange.emit({
|
|
138
138
|
view: 'year',
|
|
139
139
|
selectedYear: this.year,
|
|
140
|
-
}) }, h("span", { key: '
|
|
140
|
+
}) }, h("span", { key: '689e2643923973447a38063260943bfaf98f673c', class: "year" }, this.year), h("q2-icon", { key: '590dcf2cf06e4980d70644b5be9e448cfe72abdc', class: "year-icon off", type: "chevron-down" })), h("div", { key: '3001ad6ece1c302809e27df855c921698b840c56', class: "month-controller" }, h("div", { key: '23397576c55f2f5ad32c248459ce986d38f25e5d', class: "cal-year-prev-next" }, h("q2-btn", { key: '8d38dd1bc2986e6c43b66c5cf3538adea921b259', label: loc('tecton.element.calendar.previousYear'), "hide-label": true, class: "cal-nav-btn prev-year", "test-id": "previousYearButton", onClick: () => this.selectYear(this.year - 1) }, h("q2-icon", { key: '55f8e258f83c0209b76efb3798478409ee246133', type: "arrow-left" })), h("q2-btn", { key: '578e4c4cd87cf3e25a09d55cb2c20ef0967d44bb', label: loc('tecton.element.calendar.nextYear'), "hide-label": true, class: "cal-nav-btn next-year", "test-id": "nextYearButton", onClick: () => this.selectYear(this.year + 1) }, h("q2-icon", { key: 'f2814f78597a04fca5617b3b59271d6c11221a5c', type: "arrow-right" }))))), h("div", { key: '7843d1db40f82116c3f82f544ad045a1f7dabadb', class: "month-list", onClick: this.onMonthSelection }, this.months.map((month, index) => (h("div", { class: "month" }, h("span", { role: "button", class: "month-button", "data-index": index, "aria-label": month.label, tabindex: index === this.focusedIndex ? 0 : -1 }, month.abbr))))), this.today && (h("div", { key: '71675483d7a2d770ad8f76b3540d47c10ebb0325', class: "today-label" }, loc('tecton.element.calendar.today'), ": ", this.today))));
|
|
141
141
|
}
|
|
142
142
|
static get is() { return "q2-month-picker"; }
|
|
143
143
|
static get encapsulation() { return "shadow"; }
|
|
@@ -133,20 +133,10 @@ const dayKeyboardFocusCase = (variant, theme) => {
|
|
|
133
133
|
await freezeClock(page);
|
|
134
134
|
await setupPage(page, variant.html, { theme, setupLoc: true });
|
|
135
135
|
await openPopoverViaKeyboard(page);
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
// no-op for the calendar grid. Programmatically focus today first so the
|
|
139
|
-
// calendarBody's onKeyDown handler is the one that receives ArrowRight.
|
|
140
|
-
await page.evaluate(() => {
|
|
141
|
-
var _a;
|
|
142
|
-
const cal = document.querySelector('q2-calendar');
|
|
143
|
-
const today = (_a = cal === null || cal === void 0 ? void 0 : cal.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('td[data-date="2026-05-17"]');
|
|
144
|
-
today === null || today === void 0 ? void 0 : today.focus();
|
|
145
|
-
});
|
|
136
|
+
// Opening and day navigation transfer focus after rendering and the next paint.
|
|
137
|
+
await expect(page.locator('q2-calendar td[data-date="2026-05-17"]')).toBeFocused();
|
|
146
138
|
await page.keyboard.press('ArrowRight');
|
|
147
|
-
|
|
148
|
-
// particularly in themes with thicker borders (neo-brutalist) and
|
|
149
|
-
// translucent backdrops (glassmorphism).
|
|
139
|
+
await expect(page.locator('q2-calendar td[data-date="2026-05-18"]')).toBeFocused();
|
|
150
140
|
await expect(page).toHaveScreenshot(`q2-calendar--${variant.name}--day-keyboard-focus--${theme}.png`);
|
|
151
141
|
});
|
|
152
142
|
};
|
|
@@ -369,11 +369,11 @@ export class Q2CardImage {
|
|
|
369
369
|
render() {
|
|
370
370
|
const cardContent = this.clickable ? (h("q2-btn", { block: true, disabled: this.disabled, label: this.tctAriaLabel, hideLabel: true, onClick: this.handleCardClick }, this.renderCardContent())) : (this.renderCardContent());
|
|
371
371
|
const showBanner = !!this.cardStatus && this.size === 'large';
|
|
372
|
-
return (h(Host, { key: '
|
|
372
|
+
return (h(Host, { key: '1210673a91d22bac5106d3807ec08179fb6cfd9f', class: {
|
|
373
373
|
[`${this.orientation}`]: true,
|
|
374
374
|
'has-action': this.hasActionSlotContent,
|
|
375
375
|
'has-banner': showBanner,
|
|
376
|
-
} }, this.renderStatusBanner(), h("div", { key: '
|
|
376
|
+
} }, this.renderStatusBanner(), h("div", { key: 'b81dd3c1b02260e9ff1d7e7321d88a3c2d209f83', class: "card-wrapper" }, cardContent, this.renderAction())));
|
|
377
377
|
}
|
|
378
378
|
static get is() { return "q2-card-image"; }
|
|
379
379
|
static get encapsulation() { return "shadow"; }
|
|
@@ -68,13 +68,14 @@ export class Q2Carousel {
|
|
|
68
68
|
const logicalIndex = this.paneCount > 0 ? swiper.realIndex % this.paneCount : swiper.realIndex;
|
|
69
69
|
this.index = logicalIndex + 1;
|
|
70
70
|
this.updateCarouselPaneProps();
|
|
71
|
-
const
|
|
71
|
+
const focusSource = document.activeElement;
|
|
72
|
+
const isPaginationFocused = !!focusSource.closest(`#q2-carousel-${this.guid} .q2-carousel-page-indicator`);
|
|
72
73
|
const isCarouselFocused = !!document.activeElement.closest(`#q2-carousel-${this.guid} q2-carousel-pane`);
|
|
73
74
|
const isFocused = isPaginationFocused || isCarouselFocused;
|
|
74
75
|
this.handleAriaLive(isFocused);
|
|
75
76
|
mirrorEmit(this, ['change', 'tctChange'], { index: logicalIndex + 1 });
|
|
76
77
|
if (isPaginationFocused) {
|
|
77
|
-
this.
|
|
78
|
+
this.pendingPaginationFocus = { index: logicalIndex, source: focusSource };
|
|
78
79
|
}
|
|
79
80
|
else if (isCarouselFocused)
|
|
80
81
|
swiper.slides[swiper.activeIndex].focus({
|
|
@@ -349,7 +350,7 @@ export class Q2Carousel {
|
|
|
349
350
|
};
|
|
350
351
|
this.renderNextNavBtn = () => {
|
|
351
352
|
const disabled = this.loop === false && this.realIndex >= this.paneCount - 1;
|
|
352
|
-
return (h("div", { class: "next-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-next", intent: "
|
|
353
|
+
return (h("div", { class: "next-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-next", intent: "primary", label: loc('tecton.element.carousel.nextItemLabel'), hideLabel: true, disabled: disabled || undefined, onTctClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slideNext(); } }, h("q2-icon", { type: "arrow-right" }))));
|
|
353
354
|
};
|
|
354
355
|
this.renderPaginationArea = () => {
|
|
355
356
|
const { useDynamicPaginationDots, realIndex, paneCount } = this;
|
|
@@ -373,13 +374,14 @@ export class Q2Carousel {
|
|
|
373
374
|
};
|
|
374
375
|
this.renderPrevNavBtn = () => {
|
|
375
376
|
const disabled = this.loop === false && this.realIndex <= 0;
|
|
376
|
-
return (h("div", { class: "prev-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-prev", intent: "
|
|
377
|
+
return (h("div", { class: "prev-btn" }, h("q2-btn", { class: "q2-carousel-navigation-button q2-carousel-navigation-button-prev", intent: "primary", label: loc('tecton.element.carousel.previousItemLabel'), hideLabel: true, disabled: disabled || undefined, onTctClick: () => { var _a; return (_a = this.swiper) === null || _a === void 0 ? void 0 : _a.slidePrev(); } }, h("q2-icon", { type: "arrow-left" }))));
|
|
377
378
|
};
|
|
378
379
|
}
|
|
379
380
|
// #endregion
|
|
380
381
|
// #region Component Lifecycle Events
|
|
381
382
|
disconnectedCallback() {
|
|
382
383
|
var _a;
|
|
384
|
+
this.pendingPaginationFocus = undefined;
|
|
383
385
|
if (this.mutationObserver) {
|
|
384
386
|
this.mutationObserver.disconnect();
|
|
385
387
|
this.mutationObserver = null;
|
|
@@ -412,6 +414,18 @@ export class Q2Carousel {
|
|
|
412
414
|
this.mutationObserver = observer;
|
|
413
415
|
overrideFocus(this.hostElement);
|
|
414
416
|
}
|
|
417
|
+
componentDidRender() {
|
|
418
|
+
var _a;
|
|
419
|
+
const pendingFocus = this.pendingPaginationFocus;
|
|
420
|
+
this.pendingPaginationFocus = undefined;
|
|
421
|
+
if (!pendingFocus)
|
|
422
|
+
return;
|
|
423
|
+
const activeElement = document.activeElement;
|
|
424
|
+
if (activeElement !== pendingFocus.source && activeElement !== document.body)
|
|
425
|
+
return;
|
|
426
|
+
// Dynamic pagination hides distant dots until the new active index renders.
|
|
427
|
+
(_a = this.paginationBtns[pendingFocus.index]) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
|
|
428
|
+
}
|
|
415
429
|
// #endregion
|
|
416
430
|
// #region Listeners
|
|
417
431
|
carouselPaneClicked(event) {
|
|
@@ -561,7 +575,7 @@ export class Q2Carousel {
|
|
|
561
575
|
paginationWrapperClasses.push('evenly-space');
|
|
562
576
|
if (showNavigationArrows && arrowPosition === 'hug')
|
|
563
577
|
paginationWrapperClasses.push('center-space');
|
|
564
|
-
return (h(Host, { key: '
|
|
578
|
+
return (h(Host, { key: 'e0ebc5ae08102ced9a732ca59217cd3c2c501172', id: `q2-carousel-${this.guid}`, class: "q2-carousel-instance" }, insufficientPanes ? (this.renderInsufficientPanesDisplay()) : (h(Fragment, null, paneCount > 1 && (h("div", { class: paginationWrapperClasses.join(' ') }, showNavigationArrows &&
|
|
565
579
|
['bottom', 'hug'].includes(arrowPosition) &&
|
|
566
580
|
this.renderPrevNavBtn(), h("div", { class: "q2-carousel-control-center-tray" }, !hidePagination && this.renderPaginationArea(), autoPlay && this.renderAutoPlayBtn()), showNavigationArrows &&
|
|
567
581
|
['bottom', 'hug'].includes(arrowPosition) &&
|
|
@@ -93,6 +93,11 @@ const focusIndicatorCase = (variant, theme) => {
|
|
|
93
93
|
await setupPage(page, variant.html, { theme, setupLoc: true });
|
|
94
94
|
await page.keyboard.press('Tab');
|
|
95
95
|
await page.keyboard.press('Tab');
|
|
96
|
+
await expect(page.locator('.q2-carousel-page-indicator-0')).toBeFocused();
|
|
97
|
+
await page.keyboard.press('End');
|
|
98
|
+
await expect(page.locator('.q2-carousel-page-indicator-4')).toBeFocused();
|
|
99
|
+
await page.keyboard.press('Home');
|
|
100
|
+
await expect(page.locator('.q2-carousel-page-indicator-0')).toBeFocused();
|
|
96
101
|
await expect(page).toHaveScreenshot(`q2-carousel--${variant.name}--focus-indicator--${theme}.png`);
|
|
97
102
|
});
|
|
98
103
|
};
|
|
@@ -103,6 +108,32 @@ const focusPaneCase = (variant, theme) => {
|
|
|
103
108
|
await expect(page).toHaveScreenshot(`q2-carousel--${variant.name}--focus-pane--${theme}.png`);
|
|
104
109
|
});
|
|
105
110
|
};
|
|
111
|
+
const focusDynamicIndicatorCase = (theme) => {
|
|
112
|
+
test(`q2-carousel--dynamic-pagination--focus-indicator — ${theme}`, async ({ page }) => {
|
|
113
|
+
const panes = Array.from({ length: 6 }, (_, index) => PANE(index + 1, 6)).join('');
|
|
114
|
+
await setupPage(page, `<q2-carousel auto-height>${panes}</q2-carousel>`, { theme, setupLoc: true });
|
|
115
|
+
await page.keyboard.press('Tab');
|
|
116
|
+
await expect(page.locator('.q2-carousel-page-indicator-0')).toBeFocused();
|
|
117
|
+
for (const [key, index] of [
|
|
118
|
+
['End', 5],
|
|
119
|
+
['Home', 0],
|
|
120
|
+
['ArrowLeft', 5],
|
|
121
|
+
['ArrowRight', 0],
|
|
122
|
+
]) {
|
|
123
|
+
await page.keyboard.press(key);
|
|
124
|
+
const indicator = page.locator(`.q2-carousel-page-indicator-${index}`);
|
|
125
|
+
await expect(indicator).toBeFocused();
|
|
126
|
+
await expect(indicator).toHaveAttribute('aria-selected', 'true');
|
|
127
|
+
await expect(indicator).toBeVisible();
|
|
128
|
+
await expect(indicator).not.toHaveCSS('box-shadow', 'none');
|
|
129
|
+
await page.waitForFunction(() => {
|
|
130
|
+
const container = document.querySelector('.swiper');
|
|
131
|
+
return !container.swiper.animating;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
await expect(page).toHaveScreenshot(`q2-carousel--dynamic-pagination--focus-indicator--${theme}.png`);
|
|
135
|
+
});
|
|
136
|
+
};
|
|
106
137
|
test.describe('q2-carousel — variants × themes', () => {
|
|
107
138
|
for (const variant of VARIANTS) {
|
|
108
139
|
for (const theme of THEMES) {
|
|
@@ -113,5 +144,6 @@ test.describe('q2-carousel — variants × themes', () => {
|
|
|
113
144
|
focusArrowCase(FOCUS_VARIANT, theme);
|
|
114
145
|
focusIndicatorCase(FOCUS_VARIANT, theme);
|
|
115
146
|
focusPaneCase(FOCUS_VARIANT, theme);
|
|
147
|
+
focusDynamicIndicatorCase(theme);
|
|
116
148
|
}
|
|
117
149
|
});
|
|
@@ -97,12 +97,12 @@ export class Q2CarouselPane {
|
|
|
97
97
|
// #region Render Methods
|
|
98
98
|
render() {
|
|
99
99
|
const { label } = this;
|
|
100
|
-
return (h(Host, { key: '
|
|
100
|
+
return (h(Host, { key: 'f4a4c10d9e66146fae74ee206bb466563ff70957', class: this.generatePaneClass(this.currentPaneIndex), tabIndex: this.isActivePane ? 0 : -1, role: "group", "aria-roledescription": "slide", "aria-hidden": this.isActivePane ? undefined : 'true', "aria-label": label
|
|
101
101
|
? loc(label)
|
|
102
102
|
: loc('tecton.element.carousel.itemDescription', [
|
|
103
103
|
(this.currentPaneIndex + 1).toString(),
|
|
104
104
|
(this.siblingCount || 0).toString(),
|
|
105
|
-
]), onClick: this.paneClicked }, h("article", { key: '
|
|
105
|
+
]), onClick: this.paneClicked }, h("article", { key: '41030b6a419ccd15485eb0b8a04ba6171777f5e9', class: "q2-carousel-pane-main-content" }, h("slot", { key: '33850b8d35a3c134f014a6eb4638be25f7ab76c0' }))));
|
|
106
106
|
}
|
|
107
107
|
static get is() { return "q2-carousel-pane"; }
|
|
108
108
|
static get originalStyleUrls() {
|
|
@@ -98,10 +98,21 @@ button {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
.container {
|
|
101
|
+
position: relative;
|
|
101
102
|
width: 100%;
|
|
102
103
|
height: 100%;
|
|
103
104
|
}
|
|
104
105
|
|
|
106
|
+
.chart-keyboard-value {
|
|
107
|
+
position: absolute;
|
|
108
|
+
top: 0;
|
|
109
|
+
right: 0;
|
|
110
|
+
padding: var(--app-scale-1x);
|
|
111
|
+
background: var(--t-base);
|
|
112
|
+
color: var(--t-text);
|
|
113
|
+
pointer-events: none;
|
|
114
|
+
}
|
|
115
|
+
|
|
105
116
|
.chart-container {
|
|
106
117
|
width: 100%;
|
|
107
118
|
height: 100%;
|