q2-tecton-elements 1.53.0 → 1.54.0
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 +43422 -0
- package/dist/cjs/{action-sheet-d32c41ae.js → action-sheet-8254c0fd.js} +6 -3
- package/dist/cjs/action-sheet-8254c0fd.js.map +1 -0
- package/dist/cjs/click-elsewhere.cjs.entry.js +96 -0
- package/dist/cjs/click-elsewhere.cjs.entry.js.map +1 -0
- package/dist/cjs/{index-07285783.js → index-76f63767.js} +1 -21
- package/dist/cjs/index-76f63767.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group.cjs.entry.js +38 -17
- package/dist/cjs/q2-action-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
- package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-badge_7.cjs.entry.js +52 -18
- package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
- package/dist/cjs/q2-detail.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +17 -16
- package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +48 -99
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js +3 -3
- package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-item_3.cjs.entry.js +3 -2
- package/dist/cjs/q2-item_3.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-loc.cjs.entry.js +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +1 -1
- package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
- package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
- package/dist/cjs/{q2-option-list.cjs.entry.js → q2-option-list_2.cjs.entry.js} +355 -21
- package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -0
- package/dist/cjs/q2-option.cjs.entry.js +18 -4
- package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
- package/dist/cjs/q2-pill.cjs.entry.js +8 -7
- package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +1 -1
- package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
- package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-section.cjs.entry.js +3 -3
- package/dist/cjs/q2-select.cjs.entry.js +7 -5
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
- package/dist/cjs/q2-tag.cjs.entry.js +7 -4
- package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/components/q2-action-group/q2-action-group.css +25 -8
- package/dist/collection/components/q2-action-group/q2-action-group.js +55 -33
- package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
- package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js +142 -6
- package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
- package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js +126 -62
- package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js +1 -1
- package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.css +5 -0
- package/dist/collection/components/q2-btn/q2-btn.css +74 -0
- package/dist/collection/components/q2-btn/q2-btn.js +50 -16
- package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
- package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js +29 -0
- package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +83 -103
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +188 -24
- 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 +1 -1
- package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +54 -16
- package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.css +29 -10
- package/dist/collection/components/q2-file-picker/q2-file-picker.js +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
- package/dist/collection/components/q2-link/q2-link.js +26 -7
- package/dist/collection/components/q2-link/q2-link.js.map +1 -1
- package/dist/collection/components/q2-link/test/q2-link-test.e2e.js +20 -118
- package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-link/test/q2-link-test.spec.js +193 -0
- package/dist/collection/components/q2-link/test/q2-link-test.spec.js.map +1 -0
- package/dist/collection/components/q2-loading/q2-loading.js +1 -1
- package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
- package/dist/collection/components/q2-option/q2-option.css +9 -3
- package/dist/collection/components/q2-option/q2-option.js +37 -4
- package/dist/collection/components/q2-option/q2-option.js.map +1 -1
- package/dist/collection/components/q2-option/test/q2-option-test.spec.js +22 -0
- package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js +56 -29
- package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
- package/dist/collection/components/q2-option-list/test/q2-option-list.spec.js +489 -0
- package/dist/collection/components/q2-option-list/test/q2-option-list.spec.js.map +1 -0
- package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
- package/dist/collection/components/q2-pill/q2-pill.js +6 -5
- package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-popover/q2-popover.js +1 -1
- package/dist/collection/components/q2-popover/q2-popover.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 +2 -2
- package/dist/collection/components/q2-select/q2-select.js +6 -4
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -14
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +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 +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/utils/action-sheet.js +5 -2
- package/dist/collection/utils/action-sheet.js.map +1 -1
- package/dist/collection/utils/helpers.js +29 -3
- package/dist/collection/utils/helpers.js.map +1 -1
- package/dist/collection/utils/test/action-sheet-test.e2e.js +34 -6
- package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
- package/dist/components/action-sheet.js +6 -3
- package/dist/components/action-sheet.js.map +1 -1
- package/dist/components/index2.js +1 -20
- package/dist/components/index2.js.map +1 -1
- package/dist/components/q2-action-group.js +41 -19
- package/dist/components/q2-action-group.js.map +1 -1
- package/dist/components/q2-avatar2.js +1 -1
- package/dist/components/q2-avatar2.js.map +1 -1
- package/dist/components/q2-btn2.js +50 -16
- package/dist/components/q2-btn2.js.map +1 -1
- package/dist/components/q2-dropdown-item2.js +19 -17
- package/dist/components/q2-dropdown-item2.js.map +1 -1
- package/dist/components/q2-dropdown.js +67 -110
- package/dist/components/q2-dropdown.js.map +1 -1
- package/dist/components/q2-file-picker.js +2 -2
- package/dist/components/q2-file-picker.js.map +1 -1
- package/dist/components/q2-link2.js +3 -1
- package/dist/components/q2-link2.js.map +1 -1
- package/dist/components/q2-loading2.js.map +1 -1
- package/dist/components/q2-option-list2.js +44 -19
- package/dist/components/q2-option-list2.js.map +1 -1
- package/dist/components/q2-option2.js +20 -4
- package/dist/components/q2-option2.js.map +1 -1
- package/dist/components/q2-pagination.js +3 -3
- package/dist/components/q2-pill.js +7 -6
- package/dist/components/q2-pill.js.map +1 -1
- package/dist/components/q2-popover2.js +1 -1
- package/dist/components/q2-popover2.js.map +1 -1
- package/dist/components/q2-relative-time.js +1 -1
- package/dist/components/q2-resize-observer2.js +1 -1
- package/dist/components/q2-section.js +2 -2
- package/dist/components/q2-select2.js +7 -5
- package/dist/components/q2-select2.js.map +1 -1
- package/dist/components/q2-stepper-vertical.js +1 -1
- package/dist/components/q2-stepper.js +1 -1
- package/dist/components/q2-tab-container.js +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tag.js +6 -3
- package/dist/components/q2-tag.js.map +1 -1
- package/dist/components/tecton-tab-pane.js +2 -2
- package/dist/esm/{action-sheet-e64cb6f7.js → action-sheet-1e24cb38.js} +7 -4
- package/dist/esm/action-sheet-1e24cb38.js.map +1 -0
- package/dist/esm/click-elsewhere.entry.js +92 -0
- package/dist/esm/click-elsewhere.entry.js.map +1 -0
- package/dist/esm/{index-d18e2a20.js → index-504f1a9e.js} +2 -21
- package/dist/esm/index-504f1a9e.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group.entry.js +39 -18
- package/dist/esm/q2-action-group.entry.js.map +1 -1
- package/dist/esm/q2-action-sheet.entry.js +1 -1
- package/dist/esm/q2-avatar.entry.js +1 -1
- package/dist/esm/q2-avatar.entry.js.map +1 -1
- package/dist/esm/q2-badge_7.entry.js +52 -18
- package/dist/esm/q2-badge_7.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +1 -1
- package/dist/esm/q2-card.entry.js +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +1 -1
- package/dist/esm/q2-carousel.entry.js +1 -1
- package/dist/esm/q2-chart-area.entry.js +1 -1
- package/dist/esm/q2-chart-bar.entry.js +1 -1
- package/dist/esm/q2-chart-donut.entry.js +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +1 -1
- package/dist/esm/q2-checkbox.entry.js +1 -1
- package/dist/esm/q2-data-table.entry.js +1 -1
- package/dist/esm/q2-detail.entry.js +1 -1
- package/dist/esm/q2-dropdown-item.entry.js +18 -17
- package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
- package/dist/esm/q2-dropdown.entry.js +48 -99
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js +3 -3
- package/dist/esm/q2-file-picker.entry.js.map +1 -1
- package/dist/esm/q2-item_3.entry.js +3 -2
- package/dist/esm/q2-item_3.entry.js.map +1 -1
- package/dist/esm/q2-loc.entry.js +1 -1
- package/dist/esm/q2-message.entry.js +1 -1
- package/dist/esm/q2-month-picker.entry.js +1 -1
- package/dist/esm/q2-optgroup.entry.js +1 -1
- package/dist/esm/{q2-option-list.entry.js → q2-option-list_2.entry.js} +355 -22
- package/dist/esm/q2-option-list_2.entry.js.map +1 -0
- package/dist/esm/q2-option.entry.js +18 -4
- package/dist/esm/q2-option.entry.js.map +1 -1
- package/dist/esm/q2-pagination.entry.js +4 -4
- package/dist/esm/q2-pill.entry.js +8 -7
- package/dist/esm/q2-pill.entry.js.map +1 -1
- package/dist/esm/q2-radio-group.entry.js +1 -1
- package/dist/esm/q2-radio.entry.js +1 -1
- package/dist/esm/q2-relative-time.entry.js +2 -2
- package/dist/esm/q2-resize-observer.entry.js +1 -1
- package/dist/esm/q2-section.entry.js +3 -3
- package/dist/esm/q2-select.entry.js +7 -5
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +2 -2
- package/dist/esm/q2-stepper.entry.js +2 -2
- package/dist/esm/q2-tag.entry.js +7 -4
- package/dist/esm/q2-tag.entry.js.map +1 -1
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +1 -1
- package/dist/esm/q2-tooltip.entry.js +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/action-sheet-1e24cb38.js +80 -0
- package/dist/q2-tecton-elements/action-sheet-1e24cb38.js.map +1 -0
- package/dist/q2-tecton-elements/click-elsewhere.entry.js +90 -0
- package/dist/q2-tecton-elements/click-elsewhere.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{index-d18e2a20.js → index-504f1a9e.js} +51 -69
- package/dist/q2-tecton-elements/index-504f1a9e.js.map +1 -0
- package/dist/q2-tecton-elements/q2-action-group.entry.js +57 -33
- package/dist/q2-tecton-elements/q2-action-group.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +222 -181
- package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +34 -34
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +86 -137
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +137 -136
- package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-item_3.entry.js +3 -2
- package/dist/q2-tecton-elements/q2-item_3.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-message.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js +902 -0
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-option.entry.js +31 -21
- package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-pagination.entry.js +34 -34
- package/dist/q2-tecton-elements/q2-pill.entry.js +15 -15
- package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +19 -19
- package/dist/q2-tecton-elements/q2-select.entry.js +20 -18
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +37 -37
- package/dist/q2-tecton-elements/q2-stepper.entry.js +29 -29
- package/dist/q2-tecton-elements/q2-tag.entry.js +36 -34
- package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
- package/dist/types/components/q2-action-group/q2-action-group.d.ts +19 -11
- package/dist/types/components/q2-btn/q2-btn.d.ts +8 -3
- package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +18 -9
- package/dist/types/components/q2-dropdown-item/q2-dropdown-item.d.ts +14 -1
- package/dist/types/components/q2-link/q2-link.d.ts +8 -6
- package/dist/types/components/q2-loading/q2-loading.d.ts +2 -2
- package/dist/types/components/q2-option/q2-option.d.ts +10 -1
- package/dist/types/components/q2-option-list/q2-option-list.d.ts +9 -8
- package/dist/types/components/q2-pill/q2-pill.d.ts +1 -1
- package/dist/types/components.d.ts +91 -28
- package/dist/types/util.d.ts +1 -0
- package/dist/types/utils/helpers.d.ts +1 -1
- package/package.json +4 -3
- package/dist/cjs/action-sheet-d32c41ae.js.map +0 -1
- package/dist/cjs/click-elsewhere_2.cjs.entry.js +0 -406
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +0 -1
- package/dist/cjs/index-07285783.js.map +0 -1
- package/dist/cjs/q2-option-list.cjs.entry.js.map +0 -1
- package/dist/esm/action-sheet-e64cb6f7.js.map +0 -1
- package/dist/esm/click-elsewhere_2.entry.js +0 -401
- package/dist/esm/click-elsewhere_2.entry.js.map +0 -1
- package/dist/esm/index-d18e2a20.js.map +0 -1
- package/dist/esm/q2-option-list.entry.js.map +0 -1
- package/dist/q2-tecton-elements/action-sheet-e64cb6f7.js +0 -77
- package/dist/q2-tecton-elements/action-sheet-e64cb6f7.js.map +0 -1
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +0 -398
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +0 -1
- package/dist/q2-tecton-elements/index-d18e2a20.js.map +0 -1
- package/dist/q2-tecton-elements/q2-option-list.entry.js +0 -585
- package/dist/q2-tecton-elements/q2-option-list.entry.js.map +0 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
import { Q2Link } from "../q2-link";
|
|
3
|
+
function createNewSpecPage(props) {
|
|
4
|
+
let htmlProps = '';
|
|
5
|
+
if (!!props.label) {
|
|
6
|
+
htmlProps += ` label="${props.label}"`;
|
|
7
|
+
}
|
|
8
|
+
if (!!props.iconType) {
|
|
9
|
+
htmlProps += ` icon-type="${props.iconType}"`;
|
|
10
|
+
}
|
|
11
|
+
if (!!props.href) {
|
|
12
|
+
htmlProps += ` href="${props.href}"`;
|
|
13
|
+
}
|
|
14
|
+
if (!!props.target) {
|
|
15
|
+
htmlProps += ` target="${props.target}"`;
|
|
16
|
+
}
|
|
17
|
+
if (!!props.variant) {
|
|
18
|
+
htmlProps += ` variant="${props.variant || 'inline'}"`;
|
|
19
|
+
}
|
|
20
|
+
if (!!props.referrerpolicy) {
|
|
21
|
+
htmlProps += ` referrerpolicy="${props.referrerpolicy}"`;
|
|
22
|
+
}
|
|
23
|
+
if (!!props.disabled) {
|
|
24
|
+
htmlProps += ` disabled=""`;
|
|
25
|
+
}
|
|
26
|
+
return newSpecPage({
|
|
27
|
+
components: [Q2Link],
|
|
28
|
+
html: `<q2-link ${htmlProps}></q2-link>`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
describe('q2-link', () => {
|
|
32
|
+
let specPage;
|
|
33
|
+
let linkClass;
|
|
34
|
+
let linkElement;
|
|
35
|
+
it('renders', async () => {
|
|
36
|
+
specPage = await createNewSpecPage({
|
|
37
|
+
label: 'Click me',
|
|
38
|
+
href: 'https://q2.com',
|
|
39
|
+
variant: 'standalone',
|
|
40
|
+
});
|
|
41
|
+
expect(specPage.root).toEqualHtml(`
|
|
42
|
+
<q2-link label="Click me" icon-type="chevron-right" href="https://q2.com" variant="standalone" >
|
|
43
|
+
<mock:shadow-root>
|
|
44
|
+
<div aria-label="Click me" class="link-container standalone">
|
|
45
|
+
<a class="link" href="https://q2.com" target="_self" test-id="linkAnchor">
|
|
46
|
+
<span class="label">Click me</span>
|
|
47
|
+
<q2-icon type="chevron-right"></q2-icon>
|
|
48
|
+
</a>
|
|
49
|
+
</div>
|
|
50
|
+
</mock:shadow-root>
|
|
51
|
+
</q2-link>
|
|
52
|
+
`);
|
|
53
|
+
});
|
|
54
|
+
describe('Props', () => {
|
|
55
|
+
it('should render with properties', async () => {
|
|
56
|
+
specPage = await createNewSpecPage({
|
|
57
|
+
label: 'Click me',
|
|
58
|
+
iconType: 'external-link',
|
|
59
|
+
href: 'https://q2.com',
|
|
60
|
+
target: '_blank',
|
|
61
|
+
referrerpolicy: 'no-referrer',
|
|
62
|
+
variant: 'standalone',
|
|
63
|
+
});
|
|
64
|
+
linkElement = specPage.root;
|
|
65
|
+
expect(linkElement.getAttribute('label')).toBe('Click me');
|
|
66
|
+
expect(linkElement.getAttribute('icon-type')).toBe('external-link');
|
|
67
|
+
expect(linkElement.getAttribute('href')).toBe('https://q2.com');
|
|
68
|
+
expect(linkElement.getAttribute('target')).toBe('_blank');
|
|
69
|
+
expect(linkElement.getAttribute('variant')).toBe('standalone');
|
|
70
|
+
expect(linkElement.getAttribute('referrerpolicy')).toBe('no-referrer');
|
|
71
|
+
});
|
|
72
|
+
it('should render with standalone variant', async () => {
|
|
73
|
+
specPage = await createNewSpecPage({
|
|
74
|
+
label: 'Click me',
|
|
75
|
+
href: 'https://q2.com',
|
|
76
|
+
target: '_blank',
|
|
77
|
+
referrerpolicy: 'no-referrer',
|
|
78
|
+
variant: 'standalone',
|
|
79
|
+
});
|
|
80
|
+
linkElement = specPage.root;
|
|
81
|
+
const icon = linkElement.shadowRoot.querySelector('q2-icon');
|
|
82
|
+
expect(linkElement.getAttribute('variant')).toBe('standalone');
|
|
83
|
+
expect(icon).not.toBeNull();
|
|
84
|
+
});
|
|
85
|
+
it('should render with inline variant', async () => {
|
|
86
|
+
specPage = await createNewSpecPage({
|
|
87
|
+
label: 'Click me',
|
|
88
|
+
href: 'https://q2.com',
|
|
89
|
+
target: '_blank',
|
|
90
|
+
referrerpolicy: 'no-referrer',
|
|
91
|
+
});
|
|
92
|
+
linkElement = specPage.root;
|
|
93
|
+
const container = linkElement.shadowRoot.querySelector('.link-container');
|
|
94
|
+
expect(linkElement.getAttribute('variant')).toBe('inline');
|
|
95
|
+
expect(container.className).toContain('inline');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('Events', () => {
|
|
99
|
+
describe('tctClick', () => {
|
|
100
|
+
it('emits with proper data', async () => {
|
|
101
|
+
specPage = await createNewSpecPage({
|
|
102
|
+
label: 'Click me',
|
|
103
|
+
href: 'https://q2.com',
|
|
104
|
+
target: '_blank',
|
|
105
|
+
referrerpolicy: 'no-referrer',
|
|
106
|
+
});
|
|
107
|
+
linkClass = specPage.rootInstance;
|
|
108
|
+
const event = new CustomEvent('tctClick');
|
|
109
|
+
const tctClickSpy = jest.spyOn(linkClass.tctClick, 'emit');
|
|
110
|
+
linkClass.handleClick(event);
|
|
111
|
+
expect(tctClickSpy).toHaveBeenCalled();
|
|
112
|
+
expect(tctClickSpy).toHaveBeenCalledWith({
|
|
113
|
+
target: '_blank',
|
|
114
|
+
referrerpolicy: 'no-referrer',
|
|
115
|
+
href: 'https://q2.com',
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('Local Methods', () => {
|
|
121
|
+
describe('Getters', () => {
|
|
122
|
+
describe('classes', () => {
|
|
123
|
+
it('returns the variant and "link-container"', async () => {
|
|
124
|
+
specPage = await createNewSpecPage({
|
|
125
|
+
label: 'Click me',
|
|
126
|
+
href: 'https://q2.com',
|
|
127
|
+
target: '_blank',
|
|
128
|
+
referrerpolicy: 'no-referrer',
|
|
129
|
+
});
|
|
130
|
+
linkClass = specPage.rootInstance;
|
|
131
|
+
expect(linkClass.classes).toContain('link-container');
|
|
132
|
+
expect(linkClass.classes).toContain('inline');
|
|
133
|
+
});
|
|
134
|
+
it('returns the variant when explicitly set to standalone', async () => {
|
|
135
|
+
specPage = await createNewSpecPage({
|
|
136
|
+
label: 'Click me',
|
|
137
|
+
href: 'https://q2.com',
|
|
138
|
+
target: '_blank',
|
|
139
|
+
referrerpolicy: 'no-referrer',
|
|
140
|
+
variant: 'standalone',
|
|
141
|
+
});
|
|
142
|
+
linkClass = specPage.rootInstance;
|
|
143
|
+
expect(linkClass.classes).toContain('standalone');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
describe('Methods', () => {
|
|
148
|
+
describe('handleClick()', () => {
|
|
149
|
+
it('calls stopPropogation', async () => {
|
|
150
|
+
specPage = await createNewSpecPage({
|
|
151
|
+
label: 'Click me',
|
|
152
|
+
href: 'https://q2.com',
|
|
153
|
+
target: '_blank',
|
|
154
|
+
referrerpolicy: 'no-referrer',
|
|
155
|
+
});
|
|
156
|
+
linkClass = specPage.rootInstance;
|
|
157
|
+
const event = new CustomEvent('tctClick');
|
|
158
|
+
const stopPropagationSpy = jest.spyOn(event, 'stopPropagation');
|
|
159
|
+
linkClass.handleClick(event);
|
|
160
|
+
expect(stopPropagationSpy).toHaveBeenCalled();
|
|
161
|
+
});
|
|
162
|
+
it('does not emit tctClick event if disabled is true', async () => {
|
|
163
|
+
specPage = await createNewSpecPage({
|
|
164
|
+
label: 'Click me',
|
|
165
|
+
href: 'https://q2.com',
|
|
166
|
+
target: '_blank',
|
|
167
|
+
referrerpolicy: 'no-referrer',
|
|
168
|
+
});
|
|
169
|
+
linkClass = specPage.rootInstance;
|
|
170
|
+
linkClass.disabled = true;
|
|
171
|
+
const event = new CustomEvent('tctClick');
|
|
172
|
+
const tctClickSpy = jest.spyOn(linkClass.tctClick, 'emit');
|
|
173
|
+
linkClass.handleClick(event);
|
|
174
|
+
expect(tctClickSpy).not.toHaveBeenCalled();
|
|
175
|
+
});
|
|
176
|
+
it('emits the tctClick event when disabled is false', async () => {
|
|
177
|
+
specPage = await createNewSpecPage({
|
|
178
|
+
label: 'Click me',
|
|
179
|
+
href: 'https://q2.com',
|
|
180
|
+
target: '_blank',
|
|
181
|
+
referrerpolicy: 'no-referrer',
|
|
182
|
+
});
|
|
183
|
+
linkClass = specPage.rootInstance;
|
|
184
|
+
const event = new CustomEvent('tctClick');
|
|
185
|
+
const tctClickSpy = jest.spyOn(linkClass.tctClick, 'emit');
|
|
186
|
+
linkClass.handleClick(event);
|
|
187
|
+
expect(tctClickSpy).toHaveBeenCalled();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=q2-link-test.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"q2-link-test.spec.js","sourceRoot":"","sources":["../../../../src/components/q2-link/test/q2-link-test.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { Q2Link } from '../q2-link';\n\nfunction createNewSpecPage(props: {\n label?: string;\n iconType?: string;\n href?: string;\n target?: string;\n variant?: string;\n referrerpolicy?: string;\n disabled?: boolean;\n}) {\n let htmlProps: string = '';\n if (!!props.label) {\n htmlProps += ` label=\"${props.label}\"`;\n }\n if (!!props.iconType) {\n htmlProps += ` icon-type=\"${props.iconType}\"`;\n }\n if (!!props.href) {\n htmlProps += ` href=\"${props.href}\"`;\n }\n if (!!props.target) {\n htmlProps += ` target=\"${props.target}\"`;\n }\n if (!!props.variant) {\n htmlProps += ` variant=\"${props.variant || 'inline'}\"`;\n }\n if (!!props.referrerpolicy) {\n htmlProps += ` referrerpolicy=\"${props.referrerpolicy}\"`;\n }\n if (!!props.disabled) {\n htmlProps += ` disabled=\"\"`;\n }\n\n return newSpecPage({\n components: [Q2Link],\n html: `<q2-link ${htmlProps}></q2-link>`,\n });\n}\n\ndescribe('q2-link', () => {\n let specPage;\n let linkClass;\n let linkElement;\n\n it('renders', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n variant: 'standalone',\n });\n\n expect(specPage.root).toEqualHtml(`\n <q2-link label=\"Click me\" icon-type=\"chevron-right\" href=\"https://q2.com\" variant=\"standalone\" >\n <mock:shadow-root>\n <div aria-label=\"Click me\" class=\"link-container standalone\">\n <a class=\"link\" href=\"https://q2.com\" target=\"_self\" test-id=\"linkAnchor\">\n <span class=\"label\">Click me</span>\n <q2-icon type=\"chevron-right\"></q2-icon>\n </a>\n </div>\n </mock:shadow-root>\n </q2-link>\n `);\n });\n\n describe('Props', () => {\n it('should render with properties', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n iconType: 'external-link',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n variant: 'standalone',\n });\n linkElement = specPage.root;\n expect(linkElement.getAttribute('label')).toBe('Click me');\n expect(linkElement.getAttribute('icon-type')).toBe('external-link');\n expect(linkElement.getAttribute('href')).toBe('https://q2.com');\n expect(linkElement.getAttribute('target')).toBe('_blank');\n expect(linkElement.getAttribute('variant')).toBe('standalone');\n expect(linkElement.getAttribute('referrerpolicy')).toBe('no-referrer');\n });\n\n it('should render with standalone variant', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n variant: 'standalone',\n });\n linkElement = specPage.root;\n const icon = linkElement.shadowRoot.querySelector('q2-icon');\n expect(linkElement.getAttribute('variant')).toBe('standalone');\n expect(icon).not.toBeNull();\n });\n\n it('should render with inline variant', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n });\n linkElement = specPage.root;\n const container = linkElement.shadowRoot.querySelector('.link-container');\n expect(linkElement.getAttribute('variant')).toBe('inline');\n expect(container.className).toContain('inline');\n });\n });\n\n describe('Events', () => {\n describe('tctClick', () => {\n it('emits with proper data', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n });\n linkClass = specPage.rootInstance;\n const event = new CustomEvent('tctClick');\n const tctClickSpy = jest.spyOn(linkClass.tctClick, 'emit');\n linkClass.handleClick(event);\n expect(tctClickSpy).toHaveBeenCalled();\n expect(tctClickSpy).toHaveBeenCalledWith({\n target: '_blank',\n referrerpolicy: 'no-referrer',\n href: 'https://q2.com',\n });\n });\n });\n });\n\n describe('Local Methods', () => {\n describe('Getters', () => {\n describe('classes', () => {\n it('returns the variant and \"link-container\"', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n });\n linkClass = specPage.rootInstance;\n expect(linkClass.classes).toContain('link-container');\n expect(linkClass.classes).toContain('inline');\n });\n\n it('returns the variant when explicitly set to standalone', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n variant: 'standalone',\n });\n linkClass = specPage.rootInstance;\n expect(linkClass.classes).toContain('standalone');\n });\n });\n });\n\n describe('Methods', () => {\n describe('handleClick()', () => {\n it('calls stopPropogation', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n });\n linkClass = specPage.rootInstance;\n const event = new CustomEvent('tctClick');\n const stopPropagationSpy = jest.spyOn(event, 'stopPropagation');\n linkClass.handleClick(event);\n expect(stopPropagationSpy).toHaveBeenCalled();\n });\n\n it('does not emit tctClick event if disabled is true', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n });\n linkClass = specPage.rootInstance;\n linkClass.disabled = true;\n const event = new CustomEvent('tctClick');\n const tctClickSpy = jest.spyOn(linkClass.tctClick, 'emit');\n linkClass.handleClick(event);\n expect(tctClickSpy).not.toHaveBeenCalled();\n });\n\n it('emits the tctClick event when disabled is false', async () => {\n specPage = await createNewSpecPage({\n label: 'Click me',\n href: 'https://q2.com',\n target: '_blank',\n referrerpolicy: 'no-referrer',\n });\n linkClass = specPage.rootInstance;\n const event = new CustomEvent('tctClick');\n const tctClickSpy = jest.spyOn(linkClass.tctClick, 'emit');\n linkClass.handleClick(event);\n expect(tctClickSpy).toHaveBeenCalled();\n });\n });\n });\n });\n});\n"]}
|
|
@@ -117,7 +117,7 @@ export class Q2Loading {
|
|
|
117
117
|
"optional": false,
|
|
118
118
|
"docs": {
|
|
119
119
|
"tags": [],
|
|
120
|
-
"text": "Numeric adjustments are available for specific `type` and `shape` combinations.\nThese may impact the number of items, columns, and/or rows that display.\n\nWhen `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n\nWhen `shape=\"table\"`, the `counts` attribute can be used in two ways:\n\n1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n\nWhen `shape=\"form\"`, the `counts` attribute can be used in two ways:\n\n1. `
|
|
120
|
+
"text": "Numeric adjustments are available for specific `type` and `shape` combinations.\nThese may impact the number of items, columns, and/or rows that display.\n\nWhen `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n\nWhen `shape=\"table\"`, the `counts` attribute can be used in two ways:\n\n1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n\nWhen `shape=\"form\"`, the `counts` attribute can be used in two ways:\n\n1. `counts=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n2. `counts=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns."
|
|
121
121
|
},
|
|
122
122
|
"attribute": "counts",
|
|
123
123
|
"reflect": true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-loading.js","sourceRoot":"","sources":["../../../src/components/q2-loading/q2-loading.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, ComponentInterface, Element, Watch } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `
|
|
1
|
+
{"version":3,"file":"q2-loading.js","sourceRoot":"","sources":["../../../src/components/q2-loading/q2-loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAsB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAG/C,MAAM,OAAO,SAAS;;QA+HlB,sBAAiB,GAAG,GAAG,EAAE;YACrB,OAAO,CACH,WACI,KAAK,EAAC,0CAA0C,gBACpC,IAAI,CAAC,cAAc,EAC/B,IAAI,EAAC,QAAQ,eACH,QAAQ;gBAElB,WAAK,KAAK,EAAC,iBAAiB,GAAO;gBACnC,WAAK,KAAK,EAAC,iBAAiB,GAAO,CACjC,CACT,CAAC;QACN,CAAC,CAAC;QAEF,mBAAc,GAAG,GAAG,EAAE;YAClB,OAAO,CACH,WACI,KAAK,EAAC,qBAAqB,gBACf,IAAI,CAAC,cAAc,EAC/B,IAAI,EAAC,QAAQ,eACH,QAAQ;gBAEjB,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa;gBACxD,WAAK,KAAK,EAAC,6BAA6B,GAAO,CAC7C,CACT,CAAC;QACN,CAAC,CAAC;QAEF,YAAO,GAAG,GAAG,EAAE;YACX,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpC,CAAC,CAAC;;;;;;;;;IA3FF,aAAa;IACb,qCAAqC;IAErC,iBAAiB;QACb,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,aAAa;IACb,mBAAmB;IAGnB,iBAAiB;QACb,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,aAAa;IACb,wBAAwB;IAExB,IAAI,WAAW;QACX,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3C,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM;QACN,MAAM,SAAS,GAAG;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,cAAc;SAChC,CAAC;QAEF,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC;IACrD,CAAC;IAED,IAAI,cAAc;QACd,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,kCAAkC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,YAAY;QACZ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,aAAa;;QACb,OAAO,MAAA,MAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,+DAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,mCAAI,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,YAAY;QACZ,MAAM,UAAU,GAAG;YACf,OAAO,EAAE,IAAI,CAAC,iBAAiB;YAC/B,aAAa,EAAE,IAAI,CAAC,iBAAiB;SACxC,CAAC;QAEF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC;IACvD,CAAC;IAkCD,aAAa;IACb,yBAAyB;IAEzB,MAAM;QACF,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ","sourcesContent":["import { Component, Prop, h, ComponentInterface, Element, Watch } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n * 2. `counts=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns.\n */\n @Prop({ reflect: true })\n counts: string;\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /**\n * The label that is associated with the component. This is not displayed visually but is presented by screen readers.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Visual adjustments available to specific type and shape combinations, written as a hyphen (`-`) separated string.\n *\n * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.\n */\n @Prop({ reflect: true })\n modifiers: string;\n\n /**\n * The specific visual presentation of a loading element `type`.\n * @snippet\n * // when type=\"spinner\"\n * type ShapeValues = \"half-circle\";\n * // when type=\"skeleton\"\n * type ShapeValues = \"circle | \"rectangle\" | \"text\" | \"table\" | \"field\" | \"form\" | \"detailed-item\" | \"label-value\";\n */\n @Prop({ reflect: true })\n shape: string;\n\n /** The type of loading element to display. */\n @Prop({ reflect: true })\n type: 'spinner' | 'skeleton';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n // #endregion\n // #region Local Methods\n\n get countsArray(): number[] {\n if (this.type !== 'skeleton' || !this.counts) {\n return undefined;\n }\n\n return this.counts.split('x').map(Number);\n }\n\n get loader() {\n const loaderMap = {\n default: this.spinner,\n spinner: this.spinner,\n skeleton: this.skeletonLoader,\n };\n\n return loaderMap[this.type] || loaderMap.default;\n }\n\n get localizedLabel() {\n return loc(this.label || 'tecton.element.loading.ariaLabel');\n }\n\n get modifiersSet(): Set<string> {\n if (this.type !== 'skeleton' || !this.modifiers) {\n return undefined;\n }\n\n return new Set(this.modifiers.split('-'));\n }\n\n get skeletonShape() {\n return skeletonShapes[this.shape]?.(this.countsArray, this.modifiersSet) ?? '';\n }\n\n get spinnerShape() {\n const spinnerMap = {\n default: this.halfCircleSpinner,\n 'half-circle': this.halfCircleSpinner,\n };\n\n return spinnerMap[this.type] || spinnerMap.default;\n }\n\n halfCircleSpinner = () => {\n return (\n <div\n class=\"q2-loading-animation half-circle-spinner\"\n aria-label={this.localizedLabel}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"circle circle-1\"></div>\n <div class=\"circle circle-2\"></div>\n </div>\n );\n };\n\n skeletonLoader = () => {\n return (\n <div\n class=\"q2-loading-skeleton\"\n aria-label={this.localizedLabel}\n role=\"status\"\n aria-live=\"polite\"\n >\n {this.shape === 'custom' ? <slot /> : this.skeletonShape}\n <div class=\"q2-loading-skeleton-shimmer\"></div>\n </div>\n );\n };\n\n spinner = () => {\n return this.halfCircleSpinner();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return this.loader();\n }\n\n // #endregion\n}\n"]}
|
|
@@ -65,7 +65,7 @@ button {
|
|
|
65
65
|
visibility: hidden;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
:host {
|
|
68
|
+
:host(:not([separator]):not([separator=false])) {
|
|
69
69
|
--comp-padding: 0 var(--app-scale-2x, 10px);
|
|
70
70
|
--comp-selected-icon-size: var(--tct-option-selected-icon-size, var(--t-option-selected-icon-size, var(--tct-scale-3, var(--app-scale-3x, 15px))));
|
|
71
71
|
padding: var(--tct-option-padding, var(--t-option-padding, var(--comp-padding)));
|
|
@@ -79,7 +79,7 @@ button {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
:host(:focus),
|
|
82
|
-
:host(:hover),
|
|
82
|
+
:host(:not([separator]):not([separator=false]):hover),
|
|
83
83
|
:host([active]) {
|
|
84
84
|
position: relative;
|
|
85
85
|
z-index: 1;
|
|
@@ -109,7 +109,7 @@ button {
|
|
|
109
109
|
display: grid;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
:host(:not([aria-disabled]):hover),
|
|
112
|
+
:host(:not([aria-disabled]):not([separator]):not([separator=false]):hover),
|
|
113
113
|
:host([active]),
|
|
114
114
|
:host(:focus) {
|
|
115
115
|
background: var(--tct-option-active-background, var(--tct-option-active-bg, var(--tct-gray-14, var(--t-gray-14, var(--tct-gray-l3, var(--app-gray-l3, #f2f2f2))))));
|
|
@@ -133,4 +133,10 @@ q2-icon {
|
|
|
133
133
|
white-space: nowrap;
|
|
134
134
|
overflow: hidden;
|
|
135
135
|
text-overflow: ellipsis;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.separator {
|
|
139
|
+
--comp-default-separator-margin: 0 var(--tct-scale-1, var(--app-scale-3x, 15px));
|
|
140
|
+
margin: var(--tct-dropdown-separator-margin, var(--t-dropdown-separator-margin, var(--comp-default-separator-margin)));
|
|
141
|
+
border-bottom: 1px solid var(--tct-dropdown-item-separator-color, var(--t-gray-11, #cccccc));
|
|
136
142
|
}
|
|
@@ -42,6 +42,7 @@ export class Q2Option {
|
|
|
42
42
|
this.multiline = undefined;
|
|
43
43
|
this.role = 'option';
|
|
44
44
|
this.selected = undefined;
|
|
45
|
+
this.separator = undefined;
|
|
45
46
|
this.value = undefined;
|
|
46
47
|
}
|
|
47
48
|
// #endregion
|
|
@@ -52,6 +53,7 @@ export class Q2Option {
|
|
|
52
53
|
this.mutationObserver = null;
|
|
53
54
|
}
|
|
54
55
|
componentWillLoad() {
|
|
56
|
+
this.separatorChangedHandler(this.separator);
|
|
55
57
|
this.initDisplay();
|
|
56
58
|
}
|
|
57
59
|
componentDidLoad() {
|
|
@@ -60,6 +62,11 @@ export class Q2Option {
|
|
|
60
62
|
}
|
|
61
63
|
// #endregion
|
|
62
64
|
// #region Watchers
|
|
65
|
+
async separatorChangedHandler(separator) {
|
|
66
|
+
if (!separator)
|
|
67
|
+
return;
|
|
68
|
+
this.role = 'separator';
|
|
69
|
+
}
|
|
63
70
|
async displayChangedHandler() {
|
|
64
71
|
this.display = loc(this.display);
|
|
65
72
|
await this.handleTextContent();
|
|
@@ -67,10 +74,16 @@ export class Q2Option {
|
|
|
67
74
|
}
|
|
68
75
|
// #endregion
|
|
69
76
|
// #region Render Methods
|
|
70
|
-
|
|
77
|
+
renderSeparator() {
|
|
78
|
+
return h("div", { class: "separator" });
|
|
79
|
+
}
|
|
80
|
+
renderOption() {
|
|
71
81
|
const { display, disabled, disabledGroup, selected, _multiSelectHidden } = this;
|
|
72
82
|
const isDisabled = disabled || disabledGroup;
|
|
73
|
-
return (h(Host, {
|
|
83
|
+
return (h(Host, { tabindex: "-1", "aria-disabled": isDisabled ? 'true' : undefined, "aria-selected": `${!!selected}`, "aria-hidden": _multiSelectHidden ? 'true' : undefined, display: loc(display) }, this.selected && h("q2-icon", { type: "checkmark" }), h("div", { class: "content" }, h("slot", null))));
|
|
84
|
+
}
|
|
85
|
+
render() {
|
|
86
|
+
return this.separator ? this.renderSeparator() : this.renderOption();
|
|
74
87
|
}
|
|
75
88
|
static get is() { return "q2-option"; }
|
|
76
89
|
static get encapsulation() { return "shadow"; }
|
|
@@ -203,7 +216,7 @@ export class Q2Option {
|
|
|
203
216
|
},
|
|
204
217
|
"role": {
|
|
205
218
|
"type": "string",
|
|
206
|
-
"mutable":
|
|
219
|
+
"mutable": true,
|
|
207
220
|
"complexType": {
|
|
208
221
|
"original": "string",
|
|
209
222
|
"resolved": "string",
|
|
@@ -214,7 +227,7 @@ export class Q2Option {
|
|
|
214
227
|
"docs": {
|
|
215
228
|
"tags": [{
|
|
216
229
|
"name": "type",
|
|
217
|
-
"text": "{('option' | 'menuitem')}"
|
|
230
|
+
"text": "{('option' | 'menuitem' | 'separator')}"
|
|
218
231
|
}, {
|
|
219
232
|
"name": "private",
|
|
220
233
|
"text": undefined
|
|
@@ -245,6 +258,23 @@ export class Q2Option {
|
|
|
245
258
|
"attribute": "selected",
|
|
246
259
|
"reflect": true
|
|
247
260
|
},
|
|
261
|
+
"separator": {
|
|
262
|
+
"type": "boolean",
|
|
263
|
+
"mutable": false,
|
|
264
|
+
"complexType": {
|
|
265
|
+
"original": "boolean",
|
|
266
|
+
"resolved": "boolean",
|
|
267
|
+
"references": {}
|
|
268
|
+
},
|
|
269
|
+
"required": false,
|
|
270
|
+
"optional": false,
|
|
271
|
+
"docs": {
|
|
272
|
+
"tags": [],
|
|
273
|
+
"text": "Renders a line in the item instead of text.\nClick events from these items will not have details provided.\nA `separator` allows for quick visual grouping of items, so interactions should not be bound to these options."
|
|
274
|
+
},
|
|
275
|
+
"attribute": "separator",
|
|
276
|
+
"reflect": true
|
|
277
|
+
},
|
|
248
278
|
"value": {
|
|
249
279
|
"type": "string",
|
|
250
280
|
"mutable": false,
|
|
@@ -288,6 +318,9 @@ export class Q2Option {
|
|
|
288
318
|
static get elementRef() { return "hostElement"; }
|
|
289
319
|
static get watchers() {
|
|
290
320
|
return [{
|
|
321
|
+
"propName": "separator",
|
|
322
|
+
"methodName": "separatorChangedHandler"
|
|
323
|
+
}, {
|
|
291
324
|
"propName": "display",
|
|
292
325
|
"methodName": "displayChangedHandler"
|
|
293
326
|
}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-option.js","sourceRoot":"","sources":["../../../src/components/q2-option/q2-option.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAsB,IAAI,EAAE,KAAK,EAAgB,KAAK,EAAE,MAAM,eAAe,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG1C,MAAM,OAAO,QAAQ;;
|
|
1
|
+
{"version":3,"file":"q2-option.js","sourceRoot":"","sources":["../../../src/components/q2-option/q2-option.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, Element, ComponentInterface, Host, Event, EventEmitter, Watch } from '@stencil/core';\nimport { getAllText, loc } from '@/utils';\n\n@Component({ tag: 'q2-option', shadow: true, styleUrl: 'q2-option.scss' })\nexport class Q2Option implements ComponentInterface {\n // #region Own Properties\n\n displayProvidedAtInit: boolean;\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true, attribute: '_multiSelectHidden' })\n _multiSelectHidden: boolean = false;\n\n /**\n * Used by q2-option-list to indicate the option is active\n * @private\n */\n @Prop({ reflect: true })\n active: boolean;\n\n /** Disables the option. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Used by consuming elements to disable all options in the group\n * @private\n */\n @Prop({ reflect: true })\n disabledGroup: boolean;\n\n /**\n * The text that is displayed in the field when selected. If not provided, any text inside the element will be used.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n display: string;\n\n /**\n * Used by consuming elements to enable multiline content support\n * @private\n */\n @Prop({ reflect: true })\n multiline: boolean;\n\n /**\n * Used by q2-option-list to set a role on the option\n * @type {('option' | 'menuitem' | 'separator')}\n * @private\n */\n @Prop({ reflect: true, mutable: true })\n role: string = 'option';\n\n /**\n * Used by q2-option-list to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /**\n * Renders a line in the item instead of text.\n * Click events from these items will not have details provided.\n * A `separator` allows for quick visual grouping of items, so interactions should not be bound to these options.\n */\n @Prop({ reflect: true })\n separator: boolean;\n\n /** Serves as the option's value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Used by consuming elements to indicate the display value of the option has changed.\n * @private\n */\n @Event()\n displayChanged: EventEmitter<{ value: string; display: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n this.separatorChangedHandler(this.separator);\n this.initDisplay();\n }\n\n componentDidLoad() {\n if ('MutationObserver' in window) this.initMutationObserver();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('separator')\n async separatorChangedHandler(separator: boolean) {\n if (!separator) return;\n this.role = 'separator';\n }\n\n @Watch('display')\n async displayChangedHandler() {\n this.display = loc(this.display);\n await this.handleTextContent();\n this.displayChanged.emit({ display: this.display, value: this.value });\n }\n\n // #endregion\n // #region Local Methods\n\n handleTextContent = async () => {\n if (this.multiline) return;\n const textContent = await getAllText(this.hostElement);\n if (this.display === textContent) return;\n if (this.display && !textContent) this.hostElement.textContent = loc(this.display);\n };\n\n initDisplay = async () => {\n if (this.multiline) return;\n const textContent = await getAllText(this.hostElement);\n if (this.display) this.displayProvidedAtInit = true;\n this.display = !!this.display ? loc(this.display) : textContent;\n await this.handleTextContent();\n };\n\n initMutationObserver = () => {\n const observer = new MutationObserver(this.mutationHandler);\n observer.observe(this.hostElement, { childList: true, subtree: true, characterData: true });\n this.mutationObserver = observer;\n };\n\n mutationHandler = async () => {\n const allTextContent = await getAllText(this.hostElement);\n if (this.display === allTextContent || this.multiline) return;\n if (!this.displayProvidedAtInit) this.display = allTextContent;\n };\n\n // #endregion\n // #region Render Methods\n\n renderSeparator() {\n return <div class=\"separator\"></div>;\n }\n\n renderOption() {\n const { display, disabled, disabledGroup, selected, _multiSelectHidden } = this;\n const isDisabled = disabled || disabledGroup;\n return (\n <Host\n tabindex=\"-1\"\n aria-disabled={isDisabled ? 'true' : undefined}\n aria-selected={`${!!selected}`}\n aria-hidden={_multiSelectHidden ? 'true' : undefined}\n display={loc(display)}\n >\n {this.selected && <q2-icon type=\"checkmark\" />}\n <div class=\"content\">\n <slot />\n </div>\n </Host>\n );\n }\n\n render() {\n return this.separator ? this.renderSeparator() : this.renderOption();\n }\n\n // #endregion\n}\n"]}
|
|
@@ -295,6 +295,28 @@ describe('q2-option', () => {
|
|
|
295
295
|
});
|
|
296
296
|
});
|
|
297
297
|
});
|
|
298
|
+
describe('separator', () => {
|
|
299
|
+
describe('when provided', () => {
|
|
300
|
+
it('renders an element with a class of separator', async () => {
|
|
301
|
+
specPage = await setupSpecPageWithLoc({
|
|
302
|
+
components: [Q2Option],
|
|
303
|
+
html: '<q2-option separator></q2-option>',
|
|
304
|
+
});
|
|
305
|
+
expect(specPage.root.shadowRoot.querySelector('.separator')).toBeTruthy();
|
|
306
|
+
expect(specPage.root.role).toBe('separator');
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
describe('when not provided', () => {
|
|
310
|
+
it('does not render an element with a class of separator', async () => {
|
|
311
|
+
specPage = await setupSpecPageWithLoc({
|
|
312
|
+
components: [Q2Option],
|
|
313
|
+
html: '<q2-option></q2-option>',
|
|
314
|
+
});
|
|
315
|
+
expect(specPage.root.shadowRoot.querySelector('.separator')).toBeNull();
|
|
316
|
+
expect(specPage.root.role).toBe('option');
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
});
|
|
298
320
|
describe('value', () => {
|
|
299
321
|
describe('when provided', () => {
|
|
300
322
|
it('sets the value property to the provided value', async () => {
|