wj-elements 0.2.0-alpha.8 → 0.3.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/dark.css +15 -1
- package/dist/{form-associated-element-o0UjvdUp.js → form-associated-element-DEQ4y-jn.js} +1 -2
- package/dist/form-associated-element-DEQ4y-jn.js.map +1 -0
- package/dist/{icon-DY5AZ6xM.js → icon-DVyMc4Wv.js} +36 -2
- package/dist/{icon-DY5AZ6xM.js.map → icon-DVyMc4Wv.js.map} +1 -1
- package/dist/{packages/internals → internals}/form-associated-element.d.ts +0 -1
- package/dist/light.css +7 -2
- package/dist/localize.js +8 -5
- package/dist/localize.js.map +1 -1
- package/dist/{popup.element-DeajFyOQ.js → popup.element-Cl6QeG8M.js} +2 -2
- package/dist/{popup.element-DeajFyOQ.js.map → popup.element-Cl6QeG8M.js.map} +1 -1
- package/dist/skeleton.css +197 -0
- package/dist/utils/utils.d.ts +17 -0
- package/dist/utils.js +18 -1
- package/dist/utils.js.map +1 -1
- package/dist/{packages/wje-accordion-item → wje-accordion-item}/accordion-item.element.d.ts +3 -0
- package/dist/wje-accordion-item.js +26 -4
- package/dist/wje-accordion-item.js.map +1 -1
- package/dist/wje-accordion.js +1 -0
- package/dist/wje-accordion.js.map +1 -1
- package/dist/wje-animation.js +1 -0
- package/dist/wje-animation.js.map +1 -1
- package/dist/{packages/wje-avatar → wje-avatar}/avatar.element.d.ts +5 -0
- package/dist/wje-avatar.js +18 -0
- package/dist/wje-avatar.js.map +1 -1
- package/dist/wje-badge.js +1 -0
- package/dist/wje-badge.js.map +1 -1
- package/dist/{packages/wje-breadcrumb → wje-breadcrumb}/breadcrumb.element.d.ts +1 -0
- package/dist/wje-breadcrumb.js +13 -1
- package/dist/wje-breadcrumb.js.map +1 -1
- package/dist/wje-breadcrumbs.js +1 -0
- package/dist/wje-breadcrumbs.js.map +1 -1
- package/dist/{packages/wje-button → wje-button}/button.element.d.ts +5 -1
- package/dist/{packages/wje-button-group → wje-button-group}/button-group.element.d.ts +4 -0
- package/dist/wje-button-group.js +10 -0
- package/dist/wje-button-group.js.map +1 -1
- package/dist/wje-button.js +29 -5
- package/dist/wje-button.js.map +1 -1
- package/dist/{packages/wje-card → wje-card}/card.element.d.ts +15 -6
- package/dist/wje-card.js +37 -0
- package/dist/wje-card.js.map +1 -1
- package/dist/{packages/wje-carousel → wje-carousel}/carousel.element.d.ts +4 -0
- package/dist/wje-carousel.js +38 -4
- package/dist/wje-carousel.js.map +1 -1
- package/dist/{packages/wje-checkbox → wje-checkbox}/checkbox.element.d.ts +14 -0
- package/dist/wje-checkbox.js +48 -3
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/{packages/wje-chip → wje-chip}/chip.element.d.ts +6 -0
- package/dist/wje-chip.js +22 -0
- package/dist/wje-chip.js.map +1 -1
- package/dist/{packages/wje-color-picker → wje-color-picker}/color-picker.element.d.ts +43 -1
- package/dist/wje-color-picker.js +143 -29
- package/dist/wje-color-picker.js.map +1 -1
- package/dist/{packages/wje-copy-button → wje-copy-button}/copy-button.element.d.ts +4 -0
- package/dist/wje-copy-button.js +21 -0
- package/dist/wje-copy-button.js.map +1 -1
- package/dist/{packages/wje-dialog → wje-dialog}/dialog.element.d.ts +2 -0
- package/dist/wje-dialog.js +35 -2
- package/dist/wje-dialog.js.map +1 -1
- package/dist/{packages/wje-dropdown → wje-dropdown}/dropdown.element.d.ts +7 -0
- package/dist/wje-dropdown.js +27 -3
- package/dist/wje-dropdown.js.map +1 -1
- package/dist/{packages/wje-element → wje-element}/element.d.ts +55 -24
- package/dist/wje-element.js +87 -242
- package/dist/wje-element.js.map +1 -1
- package/dist/{packages/wje-file-upload → wje-file-upload}/file-upload.element.d.ts +17 -6
- package/dist/{packages/wje-file-upload → wje-file-upload}/service/service.d.ts +0 -23
- package/dist/{packages/wje-file-upload-item → wje-file-upload-item}/file-upload-item.element.d.ts +6 -0
- package/dist/wje-file-upload-item.js +24 -2
- package/dist/wje-file-upload-item.js.map +1 -1
- package/dist/wje-file-upload.js +100 -77
- package/dist/wje-file-upload.js.map +1 -1
- package/dist/{packages/wje-format-digital → wje-format-digital}/format-digital.element.d.ts +2 -0
- package/dist/wje-format-digital.js +9 -0
- package/dist/wje-format-digital.js.map +1 -1
- package/dist/{packages/wje-icon → wje-icon}/icon.element.d.ts +11 -0
- package/dist/{packages/wje-icon-picker → wje-icon-picker}/icon-picker.element.d.ts +4 -0
- package/dist/wje-icon-picker.js +15 -0
- package/dist/wje-icon-picker.js.map +1 -1
- package/dist/wje-icon.js +1 -1
- package/dist/{packages/wje-img → wje-img}/img.element.d.ts +1 -0
- package/dist/wje-img-comparer.js +5 -1
- package/dist/wje-img-comparer.js.map +1 -1
- package/dist/wje-img.js +16 -1
- package/dist/wje-img.js.map +1 -1
- package/dist/{packages/wje-infinite-scroll → wje-infinite-scroll}/infinite-scroll.element.d.ts +4 -0
- package/dist/wje-infinite-scroll.js +10 -0
- package/dist/wje-infinite-scroll.js.map +1 -1
- package/dist/{packages/wje-input → wje-input}/input.element.d.ts +9 -1
- package/dist/wje-input-file.js +2 -0
- package/dist/wje-input-file.js.map +1 -1
- package/dist/wje-input.js +59 -4
- package/dist/wje-input.js.map +1 -1
- package/dist/{packages/wje-item → wje-item}/item.element.d.ts +8 -0
- package/dist/wje-item.js +14 -0
- package/dist/wje-item.js.map +1 -1
- package/dist/{packages/wje-kanban → wje-kanban}/kanban.element.d.ts +4 -0
- package/dist/wje-kanban.js +14 -0
- package/dist/wje-kanban.js.map +1 -1
- package/dist/{packages/wje-level-indicator → wje-level-indicator}/level-indicator.element.d.ts +17 -0
- package/dist/wje-level-indicator.js +36 -0
- package/dist/wje-level-indicator.js.map +1 -1
- package/dist/{packages/wje-list → wje-list}/list.element.d.ts +4 -0
- package/dist/wje-list.js +10 -0
- package/dist/wje-list.js.map +1 -1
- package/dist/wje-master.js +11 -2
- package/dist/wje-master.js.map +1 -1
- package/dist/wje-menu-button.js +1 -0
- package/dist/wje-menu-button.js.map +1 -1
- package/dist/{packages/wje-menu-item → wje-menu-item}/menu-item.element.d.ts +4 -0
- package/dist/wje-menu-item.js +24 -0
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-menu.js +4 -1
- package/dist/wje-menu.js.map +1 -1
- package/dist/{packages/wje-option → wje-option}/option.element.d.ts +4 -0
- package/dist/wje-option.js +14 -1
- package/dist/wje-option.js.map +1 -1
- package/dist/{packages/wje-options → wje-options}/options.element.d.ts +4 -0
- package/dist/wje-options.js +13 -0
- package/dist/wje-options.js.map +1 -1
- package/dist/{packages/wje-orgchart → wje-orgchart}/orgchart.element.d.ts +4 -0
- package/dist/wje-orgchart.js +9 -0
- package/dist/wje-orgchart.js.map +1 -1
- package/dist/wje-pagination.js +18 -9
- package/dist/wje-pagination.js.map +1 -1
- package/dist/wje-popup.js +1 -1
- package/dist/{packages/wje-progress-bar → wje-progress-bar}/progress-bar.element.d.ts +11 -0
- package/dist/wje-progress-bar.js +26 -0
- package/dist/wje-progress-bar.js.map +1 -1
- package/dist/wje-qr-code/qr-code.element.d.ts +96 -0
- package/dist/wje-qr-code.js +159 -17
- package/dist/wje-qr-code.js.map +1 -1
- package/dist/{packages/wje-radio → wje-radio}/radio.element.d.ts +5 -0
- package/dist/{packages/wje-radio-group → wje-radio-group}/radio-group.element.d.ts +16 -1
- package/dist/wje-radio-group.js +49 -2
- package/dist/wje-radio-group.js.map +1 -1
- package/dist/wje-radio.js +27 -1
- package/dist/wje-radio.js.map +1 -1
- package/dist/{packages/wje-rate → wje-rate}/rate.element.d.ts +4 -0
- package/dist/wje-rate.js +23 -1
- package/dist/wje-rate.js.map +1 -1
- package/dist/{packages/wje-relative-time → wje-relative-time}/relative-time.element.d.ts +2 -0
- package/dist/wje-relative-time.js +14 -1
- package/dist/wje-relative-time.js.map +1 -1
- package/dist/{packages/wje-reorder → wje-reorder}/reorder.element.d.ts +4 -0
- package/dist/{packages/wje-reorder-handle → wje-reorder-handle}/reorder-handle.element.d.ts +4 -0
- package/dist/wje-reorder-handle.js +21 -0
- package/dist/wje-reorder-handle.js.map +1 -1
- package/dist/wje-reorder.js +10 -0
- package/dist/wje-reorder.js.map +1 -1
- package/dist/{packages/wje-select → wje-select}/select.element.d.ts +7 -0
- package/dist/wje-select.js +35 -5
- package/dist/wje-select.js.map +1 -1
- package/dist/{packages/wje-slider → wje-slider}/slider.element.d.ts +5 -0
- package/dist/wje-slider.js +51 -1
- package/dist/wje-slider.js.map +1 -1
- package/dist/{packages/wje-sliding-container → wje-sliding-container}/sliding-container.element.d.ts +4 -0
- package/dist/wje-sliding-container.js +18 -0
- package/dist/wje-sliding-container.js.map +1 -1
- package/dist/{packages/wje-split-view → wje-split-view}/split-view.element.d.ts +1 -0
- package/dist/wje-split-view.js +9 -0
- package/dist/wje-split-view.js.map +1 -1
- package/dist/wje-status.js +1 -0
- package/dist/wje-status.js.map +1 -1
- package/dist/{packages/wje-stepper → wje-stepper}/stepper.element.d.ts +1 -0
- package/dist/wje-stepper.js +24 -1
- package/dist/wje-stepper.js.map +1 -1
- package/dist/{packages/wje-tab → wje-tab}/tab.element.d.ts +10 -0
- package/dist/{packages/wje-tab-group → wje-tab-group}/tab-group.element.d.ts +11 -0
- package/dist/wje-tab-group.js +59 -2
- package/dist/wje-tab-group.js.map +1 -1
- package/dist/wje-tab.js +30 -0
- package/dist/wje-tab.js.map +1 -1
- package/dist/{packages/wje-textarea → wje-textarea}/textarea.element.d.ts +20 -1
- package/dist/wje-textarea.js +96 -14
- package/dist/wje-textarea.js.map +1 -1
- package/dist/{packages/wje-thumbnail → wje-thumbnail}/thumbnail.element.d.ts +4 -0
- package/dist/wje-thumbnail.js +19 -0
- package/dist/wje-thumbnail.js.map +1 -1
- package/dist/{packages/wje-timeline → wje-timeline}/timeline.element.d.ts +4 -0
- package/dist/wje-toast.js +4 -0
- package/dist/wje-toast.js.map +1 -1
- package/dist/{packages/wje-toggle → wje-toggle}/toggle.element.d.ts +4 -0
- package/dist/wje-toggle.js +17 -1
- package/dist/wje-toggle.js.map +1 -1
- package/dist/{packages/wje-toolbar → wje-toolbar}/toolbar.element.d.ts +4 -0
- package/dist/wje-toolbar.js +14 -0
- package/dist/wje-toolbar.js.map +1 -1
- package/dist/{packages/wje-tooltip → wje-tooltip}/tooltip.element.d.ts +3 -0
- package/dist/wje-tooltip.js +31 -7
- package/dist/wje-tooltip.js.map +1 -1
- package/dist/{packages/wje-tree → wje-tree}/tree.element.d.ts +4 -0
- package/dist/{packages/wje-tree-item → wje-tree-item}/tree-item.element.d.ts +5 -0
- package/dist/wje-tree-item.js +41 -5
- package/dist/wje-tree-item.js.map +1 -1
- package/dist/wje-tree.js +12 -1
- package/dist/wje-tree.js.map +1 -1
- package/package.json +21 -2
- package/dist/form-associated-element-o0UjvdUp.js.map +0 -1
- package/dist/packages/utils/utils.d.ts +0 -1
- package/dist/packages/wje-accordion/accordion.test.d.ts +0 -0
- package/dist/packages/wje-animation/animation.test.d.ts +0 -1
- package/dist/packages/wje-avatar/avatar.test.d.ts +0 -1
- package/dist/packages/wje-badge/badge.test.d.ts +0 -1
- package/dist/packages/wje-breadcrumbs/breadcrumbs.test.d.ts +0 -1
- package/dist/packages/wje-button/button.test.d.ts +0 -1
- package/dist/packages/wje-chip/chip.test.d.ts +0 -1
- package/dist/packages/wje-color-picker/color-picker.test.d.ts +0 -1
- package/dist/packages/wje-file-upload/file-upload.test.d.ts +0 -1
- package/dist/packages/wje-format-digital/format-digital.test.d.ts +0 -1
- package/dist/packages/wje-pagination/pagination.test.d.ts +0 -1
- package/dist/packages/wje-qr-code/qr-code.element.d.ts +0 -33
- package/dist/packages/wje-relative-time/relative-time.test.d.ts +0 -1
- package/dist/packages/wje-select/select.test.d.ts +0 -1
- package/dist/packages/wje-tab-group/tab-group.test.d.ts +0 -1
- package/dist/packages/wje-toast/toast.test.d.ts +0 -1
- package/dist/packages/wje-toggle/toggle.test.d.ts +0 -1
- package/dist/packages/wje-tree/tree.test.d.ts +0 -1
- package/dist/packages/wje-tree-item/tree-item.test.d.ts +0 -1
- /package/dist/{packages/index.d.ts → index.d.ts} +0 -0
- /package/dist/{packages/localize → localize}/localize.d.ts +0 -0
- /package/dist/{packages/translations → translations}/en-gb.d.ts +0 -0
- /package/dist/{packages/translations → translations}/sk-sk.d.ts +0 -0
- /package/dist/{packages/utils → utils}/animations.d.ts +0 -0
- /package/dist/{packages/utils → utils}/base-path.d.ts +0 -0
- /package/dist/{packages/utils → utils}/date.d.ts +0 -0
- /package/dist/{packages/utils → utils}/element-utils.d.ts +0 -0
- /package/dist/{packages/utils → utils}/event.d.ts +0 -0
- /package/dist/{packages/utils → utils}/icon-library.d.ts +0 -0
- /package/dist/{packages/utils → utils}/localize.d.ts +0 -0
- /package/dist/{packages/utils → utils}/permissions.d.ts +0 -0
- /package/dist/{packages/utils → utils}/universal-service.d.ts +0 -0
- /package/dist/{packages/wje-accordion → wje-accordion}/accordion.d.ts +0 -0
- /package/dist/{packages/wje-accordion → wje-accordion}/accordion.element.d.ts +0 -0
- /package/dist/{packages/wje-accordion-item → wje-accordion-item}/accordion-item.d.ts +0 -0
- /package/dist/{packages/wje-animation → wje-animation}/animation.d.ts +0 -0
- /package/dist/{packages/wje-animation → wje-animation}/animation.element.d.ts +0 -0
- /package/dist/{packages/wje-aside → wje-aside}/aside.d.ts +0 -0
- /package/dist/{packages/wje-aside → wje-aside}/aside.element.d.ts +0 -0
- /package/dist/{packages/wje-avatar → wje-avatar}/avatar.d.ts +0 -0
- /package/dist/{packages/wje-avatar → wje-avatar}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-badge → wje-badge}/badge.d.ts +0 -0
- /package/dist/{packages/wje-badge → wje-badge}/badge.element.d.ts +0 -0
- /package/dist/{packages/wje-breadcrumb → wje-breadcrumb}/breadcrumb.d.ts +0 -0
- /package/dist/{packages/wje-breadcrumbs → wje-breadcrumbs}/breadcrumbs.d.ts +0 -0
- /package/dist/{packages/wje-breadcrumbs → wje-breadcrumbs}/breadcrumbs.element.d.ts +0 -0
- /package/dist/{packages/wje-button → wje-button}/button.d.ts +0 -0
- /package/dist/{packages/wje-button-group → wje-button-group}/button-group.d.ts +0 -0
- /package/dist/{packages/wje-card → wje-card}/card.d.ts +0 -0
- /package/dist/{packages/wje-card-content → wje-card-content}/card-content.d.ts +0 -0
- /package/dist/{packages/wje-card-content → wje-card-content}/card-content.element.d.ts +0 -0
- /package/dist/{packages/wje-card-controls → wje-card-controls}/card-controls.d.ts +0 -0
- /package/dist/{packages/wje-card-controls → wje-card-controls}/card-controls.element.d.ts +0 -0
- /package/dist/{packages/wje-card-header → wje-card-header}/card-header.d.ts +0 -0
- /package/dist/{packages/wje-card-header → wje-card-header}/card-header.element.d.ts +0 -0
- /package/dist/{packages/wje-card-subtitle → wje-card-subtitle}/card-subtitle.d.ts +0 -0
- /package/dist/{packages/wje-card-subtitle → wje-card-subtitle}/card-subtitle.element.d.ts +0 -0
- /package/dist/{packages/wje-card-title → wje-card-title}/card-title.d.ts +0 -0
- /package/dist/{packages/wje-card-title → wje-card-title}/card-title.element.d.ts +0 -0
- /package/dist/{packages/wje-carousel → wje-carousel}/carousel.d.ts +0 -0
- /package/dist/{packages/wje-carousel-item → wje-carousel-item}/carousel-item.d.ts +0 -0
- /package/dist/{packages/wje-carousel-item → wje-carousel-item}/carousel-item.element.d.ts +0 -0
- /package/dist/{packages/wje-checkbox → wje-checkbox}/checkbox.d.ts +0 -0
- /package/dist/{packages/wje-chip → wje-chip}/chip.d.ts +0 -0
- /package/dist/{packages/wje-col → wje-col}/col.d.ts +0 -0
- /package/dist/{packages/wje-col → wje-col}/col.element.d.ts +0 -0
- /package/dist/{packages/wje-color-picker → wje-color-picker}/color-picker.d.ts +0 -0
- /package/dist/{packages/wje-container → wje-container}/container.d.ts +0 -0
- /package/dist/{packages/wje-container → wje-container}/container.element.d.ts +0 -0
- /package/dist/{packages/wje-copy-button → wje-copy-button}/copy-button.d.ts +0 -0
- /package/dist/{packages/wje-copy-button → wje-copy-button}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-dialog → wje-dialog}/dialog.d.ts +0 -0
- /package/dist/{packages/wje-divider → wje-divider}/divider.d.ts +0 -0
- /package/dist/{packages/wje-divider → wje-divider}/divider.element.d.ts +0 -0
- /package/dist/{packages/wje-dropdown → wje-dropdown}/dropdown.d.ts +0 -0
- /package/dist/{packages/wje-file-upload → wje-file-upload}/file-upload.d.ts +0 -0
- /package/dist/{packages/wje-file-upload-item → wje-file-upload-item}/file-upload-item.d.ts +0 -0
- /package/dist/{packages/wje-footer → wje-footer}/footer.d.ts +0 -0
- /package/dist/{packages/wje-footer → wje-footer}/footer.element.d.ts +0 -0
- /package/dist/{packages/wje-form → wje-form}/form.d.ts +0 -0
- /package/dist/{packages/wje-form → wje-form}/form.element.d.ts +0 -0
- /package/dist/{packages/wje-format-digital → wje-format-digital}/format-digital.d.ts +0 -0
- /package/dist/{packages/wje-grid → wje-grid}/grid.d.ts +0 -0
- /package/dist/{packages/wje-grid → wje-grid}/grid.element.d.ts +0 -0
- /package/dist/{packages/wje-header → wje-header}/header.d.ts +0 -0
- /package/dist/{packages/wje-header → wje-header}/header.element.d.ts +0 -0
- /package/dist/{packages/wje-icon → wje-icon}/icon.d.ts +0 -0
- /package/dist/{packages/wje-icon → wje-icon}/service/library.d.ts +0 -0
- /package/dist/{packages/wje-icon → wje-icon}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-icon-picker → wje-icon-picker}/icon-picker.d.ts +0 -0
- /package/dist/{packages/wje-img → wje-img}/img.d.ts +0 -0
- /package/dist/{packages/wje-img-comparer → wje-img-comparer}/img-comparer.d.ts +0 -0
- /package/dist/{packages/wje-img-comparer → wje-img-comparer}/img-comparer.element.d.ts +0 -0
- /package/dist/{packages/wje-img-comparer → wje-img-comparer}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-infinite-scroll → wje-infinite-scroll}/infinite-scroll.d.ts +0 -0
- /package/dist/{packages/wje-input → wje-input}/input.d.ts +0 -0
- /package/dist/{packages/wje-input-file → wje-input-file}/input-file.d.ts +0 -0
- /package/dist/{packages/wje-input-file → wje-input-file}/input-file.element.d.ts +0 -0
- /package/dist/{packages/wje-item → wje-item}/item.d.ts +0 -0
- /package/dist/{packages/wje-kanban → wje-kanban}/kanban.d.ts +0 -0
- /package/dist/{packages/wje-label → wje-label}/label.d.ts +0 -0
- /package/dist/{packages/wje-label → wje-label}/label.element.d.ts +0 -0
- /package/dist/{packages/wje-level-indicator → wje-level-indicator}/level-indicator.d.ts +0 -0
- /package/dist/{packages/wje-list → wje-list}/list.d.ts +0 -0
- /package/dist/{packages/wje-main → wje-main}/main.d.ts +0 -0
- /package/dist/{packages/wje-main → wje-main}/main.element.d.ts +0 -0
- /package/dist/{packages/wje-masonry → wje-masonry}/masonry.d.ts +0 -0
- /package/dist/{packages/wje-masonry → wje-masonry}/masonry.element.d.ts +0 -0
- /package/dist/{packages/wje-masonry → wje-masonry}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-menu → wje-menu}/menu.d.ts +0 -0
- /package/dist/{packages/wje-menu → wje-menu}/menu.element.d.ts +0 -0
- /package/dist/{packages/wje-menu-button → wje-menu-button}/menu-button.d.ts +0 -0
- /package/dist/{packages/wje-menu-button → wje-menu-button}/menu-button.element.d.ts +0 -0
- /package/dist/{packages/wje-menu-item → wje-menu-item}/menu-item.d.ts +0 -0
- /package/dist/{packages/wje-menu-label → wje-menu-label}/menu-label.d.ts +0 -0
- /package/dist/{packages/wje-menu-label → wje-menu-label}/menu-label.element.d.ts +0 -0
- /package/dist/{packages/wje-option → wje-option}/option.d.ts +0 -0
- /package/dist/{packages/wje-options → wje-options}/options.d.ts +0 -0
- /package/dist/{packages/wje-orgchart → wje-orgchart}/orgchart.d.ts +0 -0
- /package/dist/{packages/wje-orgchart-group → wje-orgchart-group}/orgchart-group.d.ts +0 -0
- /package/dist/{packages/wje-orgchart-group → wje-orgchart-group}/orgchart-group.element.d.ts +0 -0
- /package/dist/{packages/wje-orgchart-item → wje-orgchart-item}/orgchart-item.d.ts +0 -0
- /package/dist/{packages/wje-orgchart-item → wje-orgchart-item}/orgchart-item.element.d.ts +0 -0
- /package/dist/{packages/wje-pagination → wje-pagination}/pagination.d.ts +0 -0
- /package/dist/{packages/wje-pagination → wje-pagination}/pagination.element.d.ts +0 -0
- /package/dist/{packages/wje-pagination → wje-pagination}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-panel → wje-panel}/panel.d.ts +0 -0
- /package/dist/{packages/wje-panel → wje-panel}/panel.element.d.ts +0 -0
- /package/dist/{packages/wje-popup → wje-popup}/popup.d.ts +0 -0
- /package/dist/{packages/wje-popup → wje-popup}/popup.element.d.ts +0 -0
- /package/dist/{packages/wje-progress-bar → wje-progress-bar}/progress-bar.d.ts +0 -0
- /package/dist/{packages/wje-qr-code → wje-qr-code}/qr-code.d.ts +0 -0
- /package/dist/{packages/wje-radio → wje-radio}/radio.d.ts +0 -0
- /package/dist/{packages/wje-radio-group → wje-radio-group}/radio-group.d.ts +0 -0
- /package/dist/{packages/wje-rate → wje-rate}/rate.d.ts +0 -0
- /package/dist/{packages/wje-relative-time → wje-relative-time}/relative-time.d.ts +0 -0
- /package/dist/{packages/wje-reorder → wje-reorder}/reorder.d.ts +0 -0
- /package/dist/{packages/wje-reorder-dropzone → wje-reorder-dropzone}/reorder-dropzone.d.ts +0 -0
- /package/dist/{packages/wje-reorder-dropzone → wje-reorder-dropzone}/reorder-dropzone.element.d.ts +0 -0
- /package/dist/{packages/wje-reorder-handle → wje-reorder-handle}/reorder-handle.d.ts +0 -0
- /package/dist/{packages/wje-reorder-item → wje-reorder-item}/reorder-item.d.ts +0 -0
- /package/dist/{packages/wje-reorder-item → wje-reorder-item}/reorder-item.element.d.ts +0 -0
- /package/dist/{packages/wje-route → wje-route}/route.d.ts +0 -0
- /package/dist/{packages/wje-route → wje-route}/route.element.d.ts +0 -0
- /package/dist/{packages/wje-router → wje-router}/router.d.ts +0 -0
- /package/dist/{packages/wje-router → wje-router}/router.element.d.ts +0 -0
- /package/dist/{packages/wje-router-link → wje-router-link}/router-link.d.ts +0 -0
- /package/dist/{packages/wje-router-link → wje-router-link}/router-link.element.d.ts +0 -0
- /package/dist/{packages/wje-router-outlet → wje-router-outlet}/router-outlet.d.ts +0 -0
- /package/dist/{packages/wje-router-outlet → wje-router-outlet}/router-outlet.element.d.ts +0 -0
- /package/dist/{packages/wje-row → wje-row}/row.d.ts +0 -0
- /package/dist/{packages/wje-row → wje-row}/row.element.d.ts +0 -0
- /package/dist/{packages/wje-select → wje-select}/select.d.ts +0 -0
- /package/dist/{packages/wje-slider → wje-slider}/slider.d.ts +0 -0
- /package/dist/{packages/wje-sliding-container → wje-sliding-container}/sliding-container.d.ts +0 -0
- /package/dist/{packages/wje-split-view → wje-split-view}/service/service.d.ts +0 -0
- /package/dist/{packages/wje-split-view → wje-split-view}/split-view.d.ts +0 -0
- /package/dist/{packages/wje-status → wje-status}/status.d.ts +0 -0
- /package/dist/{packages/wje-status → wje-status}/status.element.d.ts +0 -0
- /package/dist/{packages/wje-step → wje-step}/step.d.ts +0 -0
- /package/dist/{packages/wje-step → wje-step}/step.element.d.ts +0 -0
- /package/dist/{packages/wje-stepper → wje-stepper}/stepper.d.ts +0 -0
- /package/dist/{packages/wje-store → wje-store}/default-store-actions.d.ts +0 -0
- /package/dist/{packages/wje-store → wje-store}/pubsub.d.ts +0 -0
- /package/dist/{packages/wje-store → wje-store}/store.d.ts +0 -0
- /package/dist/{packages/wje-tab → wje-tab}/tab.d.ts +0 -0
- /package/dist/{packages/wje-tab-group → wje-tab-group}/tab-group.d.ts +0 -0
- /package/dist/{packages/wje-tab-panel → wje-tab-panel}/tab-panel.d.ts +0 -0
- /package/dist/{packages/wje-tab-panel → wje-tab-panel}/tab-panel.element.d.ts +0 -0
- /package/dist/{packages/wje-textarea → wje-textarea}/textarea.d.ts +0 -0
- /package/dist/{packages/wje-thumbnail → wje-thumbnail}/thumbnail.d.ts +0 -0
- /package/dist/{packages/wje-timeline → wje-timeline}/timeline.d.ts +0 -0
- /package/dist/{packages/wje-timeline-item → wje-timeline-item}/timeline-item.d.ts +0 -0
- /package/dist/{packages/wje-timeline-item → wje-timeline-item}/timeline-item.element.d.ts +0 -0
- /package/dist/{packages/wje-toast → wje-toast}/toast.d.ts +0 -0
- /package/dist/{packages/wje-toast → wje-toast}/toast.element.d.ts +0 -0
- /package/dist/{packages/wje-toggle → wje-toggle}/toggle.d.ts +0 -0
- /package/dist/{packages/wje-toolbar → wje-toolbar}/toolbar.d.ts +0 -0
- /package/dist/{packages/wje-toolbar-action → wje-toolbar-action}/toolbar-action.d.ts +0 -0
- /package/dist/{packages/wje-toolbar-action → wje-toolbar-action}/toolbar-action.element.d.ts +0 -0
- /package/dist/{packages/wje-tooltip → wje-tooltip}/tooltip.d.ts +0 -0
- /package/dist/{packages/wje-tree → wje-tree}/tree.d.ts +0 -0
- /package/dist/{packages/wje-tree-item → wje-tree-item}/tree-item.d.ts +0 -0
- /package/dist/{packages/wje-visually-hidden → wje-visually-hidden}/visually-hidden.d.ts +0 -0
- /package/dist/{packages/wje-visually-hidden → wje-visually-hidden}/visually-hidden.element.d.ts +0 -0
package/dist/wje-tab-group.js
CHANGED
|
@@ -3,7 +3,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
4
|
import WJElement from "./wje-element.js";
|
|
5
5
|
const styles = "/*\n[ WJ Tab Group ]\n*/\n\n:host {\n --wje-tab-top: 0;\n --wje-tab-start: 0;\n --wje-tab-end: 0;\n --wje-tab-bottom: 0;\n width: 100%;\n}\n.native-tab-group {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n position: relative;\n}\n\n.native-tab-group > header {\n display: flex;\n flex-direction: column;\n\n & > nav {\n display: flex;\n align-items: center;\n }\n}\n\n.native-tab-group > section {\n width: 100%;\n\n & > article {\n scroll-snap-align: start;\n overflow-y: auto;\n overscroll-behavior-y: contain;\n }\n}\n\n/*TOP*/\n:host([variant='top']) {\n --wje-tab-top: auto !important;\n --wje-tab-writing-mode: horizontal-tb;\n .native-tab-group {\n flex-direction: column;\n }\n nav {\n border-bottom: var(--wje-tab-group-nav-border);\n }\n}\n\n/*START*/\n:host([variant='start']) {\n --wje-tab-start: auto !important;\n --wje-tab-writing-mode: vertical-rl;\n .native-tab-group {\n flex-direction: row;\n }\n nav {\n flex-direction: column;\n border-right: var(--wje-tab-group-nav-border);\n }\n}\n\n/*END*/\n:host([variant='end']) {\n --wje-tab-writing-mode: vertical-rl;\n .native-tab-group {\n flex-direction: row-reverse;\n }\n nav {\n flex-direction: column;\n border-left: var(--wje-tab-group-nav-border);\n }\n}\n\n/*BOTTOM*/\n:host([variant='bottom']) {\n --wje-tab-bottom: auto !important;\n --wje-tab-writing-mode: horizontal-tb;\n .native-tab-group {\n flex-direction: column-reverse;\n }\n nav {\n border-top: var(--wje-tab-group-nav-border);\n }\n}\n\n.dropdown-active {\n wje-button{\n &::part(native) {\n color: var(--wje-color-primary-8);\n }\n }\n}";
|
|
6
|
-
class
|
|
6
|
+
const _TabGroup = class _TabGroup extends WJElement {
|
|
7
7
|
/**
|
|
8
8
|
* Creates an instance of TabGroup.
|
|
9
9
|
* @class
|
|
@@ -11,6 +11,7 @@ class TabGroup extends WJElement {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
super();
|
|
13
13
|
__publicField(this, "className", "TabGroup");
|
|
14
|
+
this._instanceId = ++_TabGroup._instanceId;
|
|
14
15
|
this._lastNavWidth = null;
|
|
15
16
|
this._initialized = false;
|
|
16
17
|
}
|
|
@@ -20,6 +21,9 @@ class TabGroup extends WJElement {
|
|
|
20
21
|
*/
|
|
21
22
|
set variant(value) {
|
|
22
23
|
this.setAttribute("variant", value);
|
|
24
|
+
this.setAriaState({
|
|
25
|
+
orientation: value === "start" || value === "end" ? "vertical" : "horizontal"
|
|
26
|
+
});
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
29
|
* Gets the value of the 'variant' attribute.
|
|
@@ -57,6 +61,10 @@ class TabGroup extends WJElement {
|
|
|
57
61
|
*/
|
|
58
62
|
setupAttributes() {
|
|
59
63
|
this.isShadowRoot = "open";
|
|
64
|
+
this.setAriaState({
|
|
65
|
+
role: "tablist",
|
|
66
|
+
orientation: this.variant === "start" || this.variant === "end" ? "vertical" : "horizontal"
|
|
67
|
+
});
|
|
60
68
|
}
|
|
61
69
|
/**
|
|
62
70
|
* Sets up the event listeners before the component is drawn.
|
|
@@ -178,6 +186,7 @@ class TabGroup extends WJElement {
|
|
|
178
186
|
(_a = this.querySelector(`[name="${tab}"]`)) == null ? void 0 : _a.classList.add("active");
|
|
179
187
|
if (el)
|
|
180
188
|
this.dropdownActive(el);
|
|
189
|
+
this.syncAria();
|
|
181
190
|
}
|
|
182
191
|
/**
|
|
183
192
|
* Returns the currently active tab.
|
|
@@ -194,6 +203,13 @@ class TabGroup extends WJElement {
|
|
|
194
203
|
getTabAll() {
|
|
195
204
|
return this.context.querySelector('[name="nav"]').assignedElements();
|
|
196
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Returns all tabs, including those moved to "more".
|
|
208
|
+
* @returns {Array<Element>} An array of all tabs.
|
|
209
|
+
*/
|
|
210
|
+
getAllTabs() {
|
|
211
|
+
return Array.from(this.querySelectorAll("wje-tab"));
|
|
212
|
+
}
|
|
197
213
|
/**
|
|
198
214
|
* Returns all panels.
|
|
199
215
|
* @returns {Array<Element>} An array of all panels.
|
|
@@ -270,12 +286,53 @@ class TabGroup extends WJElement {
|
|
|
270
286
|
this.moreDropdown.classList.remove("dropdown-active");
|
|
271
287
|
}
|
|
272
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Syncs ARIA attributes on tabs and panels.
|
|
291
|
+
*/
|
|
292
|
+
syncAria() {
|
|
293
|
+
const tabs = this.getAllTabs();
|
|
294
|
+
const panels = this.getPanelAll();
|
|
295
|
+
const panelByName = new Map(panels.map((p) => [p.getAttribute("name"), p]));
|
|
296
|
+
this.id || `wje-tab-group-${this._instanceId}`;
|
|
297
|
+
this.setAriaState({
|
|
298
|
+
orientation: this.variant === "start" || this.variant === "end" ? "vertical" : "horizontal"
|
|
299
|
+
});
|
|
300
|
+
tabs.forEach((tab, index) => {
|
|
301
|
+
const tabName = tab.getAttribute(this.type) || tab.panel || tab.route || String(index);
|
|
302
|
+
const isActive = tab.classList.contains("active");
|
|
303
|
+
const isDisabled = tab.hasAttribute("disabled");
|
|
304
|
+
if (!tab.id) tab.id = `wje-tab-${tabName}`;
|
|
305
|
+
let controlsId = "";
|
|
306
|
+
if (this.type === "panel") {
|
|
307
|
+
const panel = panelByName.get(tabName);
|
|
308
|
+
if (panel) {
|
|
309
|
+
if (!panel.id) panel.id = `wje-tab-panel-${tabName}`;
|
|
310
|
+
controlsId = panel.id;
|
|
311
|
+
panel.setAriaState({
|
|
312
|
+
role: "tabpanel",
|
|
313
|
+
labelledBy: tab.id
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
tab.setAriaState({
|
|
318
|
+
role: "tab",
|
|
319
|
+
selected: isActive,
|
|
320
|
+
disabled: isDisabled,
|
|
321
|
+
controls: controlsId || ""
|
|
322
|
+
});
|
|
323
|
+
if (typeof tab.setRovingTabIndex === "function") {
|
|
324
|
+
tab.setRovingTabIndex(isActive ? 0 : -1);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}
|
|
273
328
|
disconnectedCallback() {
|
|
274
329
|
var _a, _b;
|
|
275
330
|
(_a = super.disconnectedCallback) == null ? void 0 : _a.call(this);
|
|
276
331
|
(_b = this._resizeObserver) == null ? void 0 : _b.disconnect();
|
|
277
332
|
}
|
|
278
|
-
}
|
|
333
|
+
};
|
|
334
|
+
__publicField(_TabGroup, "_instanceId", 0);
|
|
335
|
+
let TabGroup = _TabGroup;
|
|
279
336
|
TabGroup.define("wje-tab-group", TabGroup);
|
|
280
337
|
export {
|
|
281
338
|
TabGroup as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-tab-group.js","sources":["../packages/wje-tab-group/tab-group.element.js","../packages/wje-tab-group/tab-group.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `TabGroup` is a custom web component that represents a group of tabs.\n * @summary This element represents a group of tabs.\n * @documentation https://elements.webjet.sk/components/tab-group\n * @status stable\n * @augments WJElement\n * @param {string} type The type of the tab group. Can be either 'panel' or 'route'.\n * @slot - The default slot for the tab group.\n * @slot nav - Slot for the navigation of the tab group.\n * @cssproperty [--wje-tab-group-padding=1rem] - Specifies the padding inside the tab group. This property defines the space between the content of the tab group and its outer boundary. Accepts any valid CSS length unit (e.g., `px`, `rem`, `em`, `%`).\n * @tag wje-tab-group\n */\n\nexport default class TabGroup extends WJElement {\n /**\n * Creates an instance of TabGroup.\n * @class\n */\n constructor() {\n super();\n\n this._lastNavWidth = null;\n this._initialized = false;\n }\n\n /**\n * Sets the value for the 'variant' attribute of the element.\n * @param {string} value The value to set for the 'variant' attribute.\n */\n set variant(value) {\n this.setAttribute('variant', value);\n }\n\n /**\n * Gets the value of the 'variant' attribute.\n * If the attribute is not set, it defaults to 'top'.\n * @returns {string} The value of the 'variant' attribute or the default value 'top' if not set.\n */\n get variant() {\n return this.getAttribute('variant') || 'top';\n }\n\n /**\n * Sets the 'type' attribute of the element to the specified value.\n * @param {string} value The value to set for the 'type' attribute.\n */\n set type(value) {\n this.setAttribute('type', value);\n }\n\n /**\n * Retrieves the `type` attribute of the element.\n * If the `type` attribute is not set, it defaults to `'panel'`.\n * @returns {string} The value of the `type` attribute or the default value `'panel'`.\n */\n get type() {\n return this.getAttribute('type') || 'panel';\n }\n\n className = 'TabGroup';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Sets up the event listeners before the component is drawn.\n * This method is called before the component is drawn.\n * It is used to set up event listeners.\n */\n beforeDraw() {\n let activeTabName = location.hash.replace('#', '');\n\n // skontrolujeme ci sa nachadza v paneloch\n if (this.getPanelAllName().includes(activeTabName)) {\n window.addEventListener('load', (e) => {\n this.setActiveTab(activeTabName);\n });\n }\n }\n\n /**\n * Creates and returns a document fragment containing a structured layout for a tab group.\n * The tab group layout includes a `header` section with navigational elements,\n * a `section` element for tab panels, and slots for customization such as additional navigation items,\n * dropdowns, and more.\n * The structure comprises:\n * - A `div` container with relevant styling and part attributes.\n * - A `header` for tabs, including a slot for navigation (`nav`) and additional tabs in a dropdown (`moreDropdown`).\n * - A `section` for tab panels with a customizable `slot`.\n * This function also initializes the `nav` and `moreDropdown` properties for external use.\n * @returns {DocumentFragment} The completed document fragment containing the tab group layout.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-tab-group');\n\n let header = document.createElement('header');\n header.setAttribute('part', 'tabs');\n header.classList.add('scroll-snap-x');\n\n let nav = document.createElement('nav');\n nav.setAttribute('part', 'nav');\n\n let section = document.createElement('section');\n section.setAttribute('part', 'panels');\n\n let slot = document.createElement('slot');\n\n let slotNav = document.createElement('slot');\n slotNav.setAttribute('name', 'nav');\n\n // More dropdown\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', 'dots');\n\n let button = document.createElement('wje-button');\n button.setAttribute('slot', 'trigger');\n button.setAttribute('fill', 'link');\n\n let menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n\n let slotMore = document.createElement('slot');\n slotMore.setAttribute('name', 'more');\n\n let moreDropdown = document.createElement('wje-dropdown');\n moreDropdown.setAttribute('placement', 'bottom-end');\n moreDropdown.setAttribute('collapsible', '');\n moreDropdown.classList.add('more-tabs');\n\n // APPEND\n button.append(icon);\n\n menu.append(slotMore);\n\n moreDropdown.append(button);\n moreDropdown.append(menu);\n\n header.append(nav);\n\n nav.append(slotNav);\n\n if(this.variant === 'top' || this.variant === 'bottom') {\n nav.append(moreDropdown);\n }\n\n section.append(slot);\n\n native.append(header);\n native.append(section);\n\n fragment.append(native);\n\n this.nav = nav;\n this.moreDropdown = moreDropdown;\n\n return fragment;\n }\n\n /**\n * Executes necessary initializations and attaches event listeners after a drawing operation.\n * Handles active tab selection, 'wje-tab:change' event binding, and window resize event for overflow checking.\n * @returns {void} Does not return a value.\n */\n afterDraw() {\n let activeTab = this.getActiveTab();\n let activeTabName = activeTab ? activeTab[0][this.type] : this.getTabAll()[0][this.type];\n\n this.setActiveTab(activeTabName);\n\n this.addEventListener('wje-tab:change', (e) => {\n if (e.detail.context.hasAttribute('disabled')) return;\n this.setActiveTab(e.detail.context.panel);\n });\n\n if (this.variant === 'top' || this.variant === 'bottom') {\n this.initTabMetrics();\n\n this._resizeObserver = new ResizeObserver(entries => {\n const width = entries[0].contentRect.width;\n\n if (width !== this._lastNavWidth) {\n this._lastNavWidth = width;\n this.checkOverflow();\n }\n });\n\n this._resizeObserver.observe(this);\n }\n }\n\n /**\n * Removes the 'active' class from all panel and tab elements.\n * @returns {void} This method does not return a value.\n */\n removeActiveTab() {\n this.getPanelAll().forEach((el) => {\n el.classList.remove('active');\n });\n\n this.getTabAll().forEach((el) => {\n el.classList.remove('active');\n });\n }\n\n /**\n * Sets the active tab and panel.\n * @param {string} tab The name of the tab to set as active.\n */\n setActiveTab(tab) {\n this.removeActiveTab();\n\n const el = this.querySelector(`[${this.type}=\"${tab}\"]`)\n el?.classList.add('active');\n\n if(this.type === 'panel')\n this.querySelector(`[name=\"${tab}\"]`)?.classList.add('active');\n\n if(el)\n this.dropdownActive(el);\n }\n\n /**\n * Returns the currently active tab.\n * @returns {Element|null} The active tab, or null if no tab is active.\n */\n getActiveTab() {\n let activeTabs = Array.from(this.querySelectorAll('wje-tab.active'));\n return activeTabs.length > 0 ? activeTabs : null;\n }\n\n /**\n * Returns all tabs.\n * @returns {Array<Element>} An array of all tabs.\n */\n getTabAll() {\n return this.context.querySelector('[name=\"nav\"]').assignedElements();\n }\n\n /**\n * Returns all panels.\n * @returns {Array<Element>} An array of all panels.\n */\n getPanelAll() {\n return Array.from(this.querySelectorAll('wje-tab-panel'));\n }\n\n /**\n * Returns the names of all tabs.\n * @returns {Array<string>} An array of all tab names.\n */\n getPanelAllName() {\n return this.getPanelAll().map((el) => el.getAttribute('name'));\n }\n\n /**\n * Toggles the visibility of the \"more\" dropdown based on the presence of tabs in the \"more\" slot.\n * @returns {void} Does not return a value.\n */\n toggleMoreVisibility() {\n const hasTabsInMore = !!this.querySelector('wje-tab[slot=\"more\"]');\n const nextHidden = !hasTabsInMore;\n\n if (this.moreDropdown.hidden !== nextHidden) {\n this.moreDropdown.hidden = nextHidden;\n }\n }\n\n /**\n * Initializes metrics for tabs within the component. Assigns each tab to the navigation slot\n * and calculates their dimensions for further operations.\n * @returns {void} Does not return any value.\n */\n initTabMetrics() {\n const tabs = Array.from(this.querySelectorAll('wje-tab'));\n\n // všetko do nav – LEN RAZ\n tabs.forEach(tab => tab.setAttribute('slot', 'nav'));\n\n requestAnimationFrame(() => {\n this._tabMetrics = tabs.map(tab => ({\n el: tab,\n width: tab.getBoundingClientRect().width\n }));\n\n this._initialized = true;\n this.checkOverflow(); // prvý výpočet\n this._lastNavWidth = this.nav.getBoundingClientRect().width;\n });\n }\n\n /**\n * Checks if the tabs within a navigation bar overflow the available space.\n * Moves overflowing tabs into a dropdown menu and updates their state accordingly.\n * @returns {void} This method does not return a value.\n */\n checkOverflow() {\n if (!this._initialized) return;\n\n const navWidth = this.nav.getBoundingClientRect().width;\n const moreWidth = this.moreDropdown.offsetWidth || 48;\n\n let used = 0;\n let overflowStarted = false;\n\n for (const { el, width } of this._tabMetrics) {\n used += width;\n\n const shouldOverflow = used + moreWidth > navWidth;\n\n el.setAttribute('slot', shouldOverflow || overflowStarted ? 'more' : 'nav');\n overflowStarted ||= shouldOverflow;\n }\n\n this.toggleMoreVisibility();\n }\n\n /**\n * Toggles the \"dropdown-active\" class on the element based on its \"active\" status\n * and the value of its \"slot\" attribute.\n * @param {HTMLElement} el The HTML element to evaluate and apply the toggle logic.\n * @returns {void} This method does not return any value.\n */\n dropdownActive(el) {\n if(el.classList.contains('active')) {\n if(el.getAttribute('slot') === 'more')\n this.moreDropdown.classList.add('dropdown-active');\n else\n this.moreDropdown.classList.remove('dropdown-active');\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this._resizeObserver?.disconnect();\n }\n}\n","import TabGroup from './tab-group.element.js';\n\nexport default TabGroup;\n\nTabGroup.define('wje-tab-group', TabGroup);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-tab-group.js","sources":["../packages/wje-tab-group/tab-group.element.js","../packages/wje-tab-group/tab-group.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `TabGroup` is a custom web component that represents a group of tabs.\n * @summary This element represents a group of tabs.\n * @documentation https://elements.webjet.sk/components/tab-group\n * @status stable\n * @augments WJElement\n * @param {string} type The type of the tab group. Can be either 'panel' or 'route'.\n * @slot - The default slot for the tab group.\n * @slot nav - Slot for the navigation of the tab group.\n * @cssproperty [--wje-tab-group-padding=1rem] - Specifies the padding inside the tab group. This property defines the space between the content of the tab group and its outer boundary. Accepts any valid CSS length unit (e.g., `px`, `rem`, `em`, `%`).\n * @tag wje-tab-group\n */\n\nexport default class TabGroup extends WJElement {\n static _instanceId = 0;\n\n /**\n * Creates an instance of TabGroup.\n * @class\n */\n constructor() {\n super();\n\n this._instanceId = ++TabGroup._instanceId;\n this._lastNavWidth = null;\n this._initialized = false;\n }\n\n /**\n * Sets the value for the 'variant' attribute of the element.\n * @param {string} value The value to set for the 'variant' attribute.\n */\n set variant(value) {\n this.setAttribute('variant', value);\n this.setAriaState({\n orientation: (value === 'start' || value === 'end') ? 'vertical' : 'horizontal',\n });\n }\n\n /**\n * Gets the value of the 'variant' attribute.\n * If the attribute is not set, it defaults to 'top'.\n * @returns {string} The value of the 'variant' attribute or the default value 'top' if not set.\n */\n get variant() {\n return this.getAttribute('variant') || 'top';\n }\n\n /**\n * Sets the 'type' attribute of the element to the specified value.\n * @param {string} value The value to set for the 'type' attribute.\n */\n set type(value) {\n this.setAttribute('type', value);\n }\n\n /**\n * Retrieves the `type` attribute of the element.\n * If the `type` attribute is not set, it defaults to `'panel'`.\n * @returns {string} The value of the `type` attribute or the default value `'panel'`.\n */\n get type() {\n return this.getAttribute('type') || 'panel';\n }\n\n className = 'TabGroup';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n\n this.setAriaState({\n role: 'tablist',\n orientation: (this.variant === 'start' || this.variant === 'end') ? 'vertical' : 'horizontal',\n });\n }\n\n /**\n * Sets up the event listeners before the component is drawn.\n * This method is called before the component is drawn.\n * It is used to set up event listeners.\n */\n beforeDraw() {\n let activeTabName = location.hash.replace('#', '');\n\n // skontrolujeme ci sa nachadza v paneloch\n if (this.getPanelAllName().includes(activeTabName)) {\n window.addEventListener('load', (e) => {\n this.setActiveTab(activeTabName);\n });\n }\n }\n\n /**\n * Creates and returns a document fragment containing a structured layout for a tab group.\n * The tab group layout includes a `header` section with navigational elements,\n * a `section` element for tab panels, and slots for customization such as additional navigation items,\n * dropdowns, and more.\n * The structure comprises:\n * - A `div` container with relevant styling and part attributes.\n * - A `header` for tabs, including a slot for navigation (`nav`) and additional tabs in a dropdown (`moreDropdown`).\n * - A `section` for tab panels with a customizable `slot`.\n * This function also initializes the `nav` and `moreDropdown` properties for external use.\n * @returns {DocumentFragment} The completed document fragment containing the tab group layout.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-tab-group');\n\n let header = document.createElement('header');\n header.setAttribute('part', 'tabs');\n header.classList.add('scroll-snap-x');\n\n let nav = document.createElement('nav');\n nav.setAttribute('part', 'nav');\n\n let section = document.createElement('section');\n section.setAttribute('part', 'panels');\n\n let slot = document.createElement('slot');\n\n let slotNav = document.createElement('slot');\n slotNav.setAttribute('name', 'nav');\n\n // More dropdown\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', 'dots');\n\n let button = document.createElement('wje-button');\n button.setAttribute('slot', 'trigger');\n button.setAttribute('fill', 'link');\n\n let menu = document.createElement('wje-menu');\n menu.setAttribute('variant', 'context');\n\n let slotMore = document.createElement('slot');\n slotMore.setAttribute('name', 'more');\n\n let moreDropdown = document.createElement('wje-dropdown');\n moreDropdown.setAttribute('placement', 'bottom-end');\n moreDropdown.setAttribute('collapsible', '');\n moreDropdown.classList.add('more-tabs');\n\n // APPEND\n button.append(icon);\n\n menu.append(slotMore);\n\n moreDropdown.append(button);\n moreDropdown.append(menu);\n\n header.append(nav);\n\n nav.append(slotNav);\n\n if(this.variant === 'top' || this.variant === 'bottom') {\n nav.append(moreDropdown);\n }\n\n section.append(slot);\n\n native.append(header);\n native.append(section);\n\n fragment.append(native);\n\n this.nav = nav;\n this.moreDropdown = moreDropdown;\n\n return fragment;\n }\n\n /**\n * Executes necessary initializations and attaches event listeners after a drawing operation.\n * Handles active tab selection, 'wje-tab:change' event binding, and window resize event for overflow checking.\n * @returns {void} Does not return a value.\n */\n afterDraw() {\n let activeTab = this.getActiveTab();\n let activeTabName = activeTab ? activeTab[0][this.type] : this.getTabAll()[0][this.type];\n\n this.setActiveTab(activeTabName);\n\n this.addEventListener('wje-tab:change', (e) => {\n if (e.detail.context.hasAttribute('disabled')) return;\n this.setActiveTab(e.detail.context.panel);\n });\n\n if (this.variant === 'top' || this.variant === 'bottom') {\n this.initTabMetrics();\n\n this._resizeObserver = new ResizeObserver(entries => {\n const width = entries[0].contentRect.width;\n\n if (width !== this._lastNavWidth) {\n this._lastNavWidth = width;\n this.checkOverflow();\n }\n });\n\n this._resizeObserver.observe(this);\n }\n }\n\n /**\n * Removes the 'active' class from all panel and tab elements.\n * @returns {void} This method does not return a value.\n */\n removeActiveTab() {\n this.getPanelAll().forEach((el) => {\n el.classList.remove('active');\n });\n\n this.getTabAll().forEach((el) => {\n el.classList.remove('active');\n });\n }\n\n /**\n * Sets the active tab and panel.\n * @param {string} tab The name of the tab to set as active.\n */\n setActiveTab(tab) {\n this.removeActiveTab();\n\n const el = this.querySelector(`[${this.type}=\"${tab}\"]`)\n el?.classList.add('active');\n\n if(this.type === 'panel')\n this.querySelector(`[name=\"${tab}\"]`)?.classList.add('active');\n\n if(el)\n this.dropdownActive(el);\n\n this.syncAria();\n }\n\n /**\n * Returns the currently active tab.\n * @returns {Element|null} The active tab, or null if no tab is active.\n */\n getActiveTab() {\n let activeTabs = Array.from(this.querySelectorAll('wje-tab.active'));\n return activeTabs.length > 0 ? activeTabs : null;\n }\n\n /**\n * Returns all tabs.\n * @returns {Array<Element>} An array of all tabs.\n */\n getTabAll() {\n return this.context.querySelector('[name=\"nav\"]').assignedElements();\n }\n\n /**\n * Returns all tabs, including those moved to \"more\".\n * @returns {Array<Element>} An array of all tabs.\n */\n getAllTabs() {\n return Array.from(this.querySelectorAll('wje-tab'));\n }\n\n /**\n * Returns all panels.\n * @returns {Array<Element>} An array of all panels.\n */\n getPanelAll() {\n return Array.from(this.querySelectorAll('wje-tab-panel'));\n }\n\n /**\n * Returns the names of all tabs.\n * @returns {Array<string>} An array of all tab names.\n */\n getPanelAllName() {\n return this.getPanelAll().map((el) => el.getAttribute('name'));\n }\n\n /**\n * Toggles the visibility of the \"more\" dropdown based on the presence of tabs in the \"more\" slot.\n * @returns {void} Does not return a value.\n */\n toggleMoreVisibility() {\n const hasTabsInMore = !!this.querySelector('wje-tab[slot=\"more\"]');\n const nextHidden = !hasTabsInMore;\n\n if (this.moreDropdown.hidden !== nextHidden) {\n this.moreDropdown.hidden = nextHidden;\n }\n }\n\n /**\n * Initializes metrics for tabs within the component. Assigns each tab to the navigation slot\n * and calculates their dimensions for further operations.\n * @returns {void} Does not return any value.\n */\n initTabMetrics() {\n const tabs = Array.from(this.querySelectorAll('wje-tab'));\n\n // všetko do nav – LEN RAZ\n tabs.forEach(tab => tab.setAttribute('slot', 'nav'));\n\n requestAnimationFrame(() => {\n this._tabMetrics = tabs.map(tab => ({\n el: tab,\n width: tab.getBoundingClientRect().width\n }));\n\n this._initialized = true;\n this.checkOverflow(); // prvý výpočet\n this._lastNavWidth = this.nav.getBoundingClientRect().width;\n });\n }\n\n /**\n * Checks if the tabs within a navigation bar overflow the available space.\n * Moves overflowing tabs into a dropdown menu and updates their state accordingly.\n * @returns {void} This method does not return a value.\n */\n checkOverflow() {\n if (!this._initialized) return;\n\n const navWidth = this.nav.getBoundingClientRect().width;\n const moreWidth = this.moreDropdown.offsetWidth || 48;\n\n let used = 0;\n let overflowStarted = false;\n\n for (const { el, width } of this._tabMetrics) {\n used += width;\n\n const shouldOverflow = used + moreWidth > navWidth;\n\n el.setAttribute('slot', shouldOverflow || overflowStarted ? 'more' : 'nav');\n overflowStarted ||= shouldOverflow;\n }\n\n this.toggleMoreVisibility();\n }\n\n /**\n * Toggles the \"dropdown-active\" class on the element based on its \"active\" status\n * and the value of its \"slot\" attribute.\n * @param {HTMLElement} el The HTML element to evaluate and apply the toggle logic.\n * @returns {void} This method does not return any value.\n */\n dropdownActive(el) {\n if(el.classList.contains('active')) {\n if(el.getAttribute('slot') === 'more')\n this.moreDropdown.classList.add('dropdown-active');\n else\n this.moreDropdown.classList.remove('dropdown-active');\n }\n }\n\n /**\n * Syncs ARIA attributes on tabs and panels.\n */\n syncAria() {\n const tabs = this.getAllTabs();\n const panels = this.getPanelAll();\n const panelByName = new Map(panels.map((p) => [p.getAttribute('name'), p]));\n const groupId = this.id || `wje-tab-group-${this._instanceId}`;\n\n this.setAriaState({\n orientation: (this.variant === 'start' || this.variant === 'end') ? 'vertical' : 'horizontal',\n });\n\n tabs.forEach((tab, index) => {\n const tabName = tab.getAttribute(this.type) || tab.panel || tab.route || String(index);\n const isActive = tab.classList.contains('active');\n const isDisabled = tab.hasAttribute('disabled');\n\n if (!tab.id) tab.id = `wje-tab-${tabName}`;\n\n let controlsId = '';\n if (this.type === 'panel') {\n const panel = panelByName.get(tabName);\n if (panel) {\n if (!panel.id) panel.id = `wje-tab-panel-${tabName}`;\n controlsId = panel.id;\n panel.setAriaState({\n role: 'tabpanel',\n labelledBy: tab.id,\n });\n }\n }\n\n tab.setAriaState({\n role: 'tab',\n selected: isActive,\n disabled: isDisabled,\n controls: controlsId || '',\n });\n\n if (typeof tab.setRovingTabIndex === 'function') {\n tab.setRovingTabIndex(isActive ? 0 : -1);\n }\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n this._resizeObserver?.disconnect();\n }\n}\n","import TabGroup from './tab-group.element.js';\n\nexport default TabGroup;\n\nTabGroup.define('wje-tab-group', TabGroup);\n"],"names":[],"mappings":"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"}
|
package/dist/wje-tab.js
CHANGED
|
@@ -166,6 +166,11 @@ class Tab extends WJElement {
|
|
|
166
166
|
setupAttributes() {
|
|
167
167
|
this.isShadowRoot = "open";
|
|
168
168
|
this.setAttribute("active-class", "active");
|
|
169
|
+
this.setAriaState({
|
|
170
|
+
role: "tab",
|
|
171
|
+
selected: false,
|
|
172
|
+
disabled: this.hasAttribute("disabled")
|
|
173
|
+
});
|
|
169
174
|
}
|
|
170
175
|
/**
|
|
171
176
|
* Draws the component for the tab.
|
|
@@ -181,6 +186,7 @@ class Tab extends WJElement {
|
|
|
181
186
|
a.classList.add("native-tab");
|
|
182
187
|
a.appendChild(slot);
|
|
183
188
|
fragment.appendChild(a);
|
|
189
|
+
this.slotEl = slot;
|
|
184
190
|
return fragment;
|
|
185
191
|
}
|
|
186
192
|
/**
|
|
@@ -188,8 +194,32 @@ class Tab extends WJElement {
|
|
|
188
194
|
* // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.
|
|
189
195
|
*/
|
|
190
196
|
afterDraw() {
|
|
197
|
+
var _a;
|
|
191
198
|
this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });
|
|
192
199
|
event.addListener(this, "click", "wje-tab:change");
|
|
200
|
+
this.syncAriaLabel();
|
|
201
|
+
(_a = this.slotEl) == null ? void 0 : _a.addEventListener("slotchange", () => this.syncAriaLabel());
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Sync aria-label on host based on slotted text when not provided.
|
|
205
|
+
*/
|
|
206
|
+
syncAriaLabel() {
|
|
207
|
+
var _a;
|
|
208
|
+
if (this.hasAttribute("aria-label") || this.hasAttribute("aria-labelledby")) return;
|
|
209
|
+
const text = (((_a = this.slotEl) == null ? void 0 : _a.assignedNodes({ flatten: true })) || []).map((node) => node.textContent || "").join("").trim();
|
|
210
|
+
if (text) {
|
|
211
|
+
this.setAttribute("aria-label", text);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Sets the roving tabindex on the internal focusable anchor.
|
|
216
|
+
* @param {number} value
|
|
217
|
+
*/
|
|
218
|
+
setRovingTabIndex(value) {
|
|
219
|
+
var _a;
|
|
220
|
+
const anchor = (_a = this.context) == null ? void 0 : _a.querySelector("a");
|
|
221
|
+
if (!anchor) return;
|
|
222
|
+
anchor.setAttribute("tabindex", String(value));
|
|
193
223
|
}
|
|
194
224
|
/**
|
|
195
225
|
* Cleans up before the component is disconnected.
|
package/dist/wje-tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-tab.js","sources":["../packages/wje-tab/tab.element.js","../packages/wje-tab/tab.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tab` is a custom web component that represents a tab.\n * @summary This element represents a tab.\n * @documentation https://elements.webjet.sk/components/tab\n * @status stable\n * @augments {WJElement}\n * @param {string} panel The name of the tab panel. This is used to identify the corresponding tab panel.\n * @param {string} route The route to navigate to when the tab is clicked.\n * @cssproperty [--wje-tab-text-transform=uppercase] - The text transformation for the tab (e.g., uppercase, lowercase).\n * @cssproperty [--wje-tab-font-weight=500] - The font weight of the tab text.\n * @cssproperty [--wje-tab-letter-spacing=0.06em] - The letter spacing of the tab text.\n * @cssproperty [--wje-tab-padding-inline=1rem] - The horizontal padding of the tab.\n * @cssproperty [--wje-tab-padding-top=.75rem] - The top padding of the tab text.\n * @cssproperty [--wje-tab-padding-bottom=.75rem] - The bottom padding of the tab text.\n * @cssproperty [--wje-tab-color-active=var(--wje-color-primary-11)] - The text color of the active tab.\n * @cssproperty [--wje-tab-color-hover=var(--wje-color-primary-1)] - The text color of the tab when hovered.\n * //@fires wje-tab:change - Dispatched when the tab is changed.\n * @tag wje-tab\n */\nexport default class Tab extends WJElement {\n /**\n * Creates an instance of Tab.\n */\n constructor() {\n super();\n\n /**\n * Indicates whether this is the last tab.\n * @type {boolean}\n */\n this.last = false;\n this._hasPanel = false;\n }\n\n /**\n * Sets the panel attribute to the specified value.\n * @param {string} value The value to set for the panel attribute.\n */\n set panel(value) {\n this.setAttribute('panel', value);\n }\n\n /**\n * Retrieves the value of the 'panel' attribute of the element.\n * @returns {string|null} Returns the 'panel' attribute value if it exists; otherwise, returns null.\n */\n get panel() {\n return this.getAttribute('panel') || null;\n }\n\n /**\n * Sets the value of the 'route' attribute for the current object.\n * @param {string} value The new value to set for the 'route' attribute.\n */\n set route(value) {\n this.setAttribute('route', value);\n }\n\n /**\n * Retrieves the value of the 'route' attribute.\n * If the 'route' attribute is not set, it returns null.\n * @returns {string|null} The value of the 'route' attribute or null if not set.\n */\n get route() {\n return this.getAttribute('route') || null;\n }\n\n /**\n * The class name for the component.\n */\n className = 'Tab';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n }\n\n /**\n * Draws the component for the tab.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let href = this.panel || this.route || \"#\";\n\n let a = document.createElement('a');\n a.setAttribute('href', (this.panel ? \"#\" : \"\") + href);\n a.setAttribute('part', 'native');\n a.classList.add('native-tab');\n a.appendChild(slot);\n\n fragment.appendChild(a);\n\n return fragment;\n }\n\n /**\n * Sets up event listeners after the component is rendered.\n * // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n event.addListener(this, 'click', 'wje-tab:change');\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import Tab from './tab.element.js';\n\nexport default Tab;\n\nTab.define('wje-tab', Tab);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBe,MAAM,YAAY,UAAU;AAAA;AAAA;AAAA;AAAA,EAIvC,cAAc;AACV,UAAO;AA8CX;AAAA;AAAA;AAAA,qCAAY;AAxCR,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOI,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYI,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,QAAQ;AAAA,
|
|
1
|
+
{"version":3,"file":"wje-tab.js","sources":["../packages/wje-tab/tab.element.js","../packages/wje-tab/tab.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tab` is a custom web component that represents a tab.\n * @summary This element represents a tab.\n * @documentation https://elements.webjet.sk/components/tab\n * @status stable\n * @augments {WJElement}\n * @param {string} panel The name of the tab panel. This is used to identify the corresponding tab panel.\n * @param {string} route The route to navigate to when the tab is clicked.\n * @cssproperty [--wje-tab-text-transform=uppercase] - The text transformation for the tab (e.g., uppercase, lowercase).\n * @cssproperty [--wje-tab-font-weight=500] - The font weight of the tab text.\n * @cssproperty [--wje-tab-letter-spacing=0.06em] - The letter spacing of the tab text.\n * @cssproperty [--wje-tab-padding-inline=1rem] - The horizontal padding of the tab.\n * @cssproperty [--wje-tab-padding-top=.75rem] - The top padding of the tab text.\n * @cssproperty [--wje-tab-padding-bottom=.75rem] - The bottom padding of the tab text.\n * @cssproperty [--wje-tab-color-active=var(--wje-color-primary-11)] - The text color of the active tab.\n * @cssproperty [--wje-tab-color-hover=var(--wje-color-primary-1)] - The text color of the tab when hovered.\n * //@fires wje-tab:change - Dispatched when the tab is changed.\n * @tag wje-tab\n */\nexport default class Tab extends WJElement {\n /**\n * Creates an instance of Tab.\n */\n constructor() {\n super();\n\n /**\n * Indicates whether this is the last tab.\n * @type {boolean}\n */\n this.last = false;\n this._hasPanel = false;\n }\n\n /**\n * Sets the panel attribute to the specified value.\n * @param {string} value The value to set for the panel attribute.\n */\n set panel(value) {\n this.setAttribute('panel', value);\n }\n\n /**\n * Retrieves the value of the 'panel' attribute of the element.\n * @returns {string|null} Returns the 'panel' attribute value if it exists; otherwise, returns null.\n */\n get panel() {\n return this.getAttribute('panel') || null;\n }\n\n /**\n * Sets the value of the 'route' attribute for the current object.\n * @param {string} value The new value to set for the 'route' attribute.\n */\n set route(value) {\n this.setAttribute('route', value);\n }\n\n /**\n * Retrieves the value of the 'route' attribute.\n * If the 'route' attribute is not set, it returns null.\n * @returns {string|null} The value of the 'route' attribute or null if not set.\n */\n get route() {\n return this.getAttribute('route') || null;\n }\n\n /**\n * The class name for the component.\n */\n className = 'Tab';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n\n this.setAriaState({\n role: 'tab',\n selected: false,\n disabled: this.hasAttribute('disabled'),\n });\n }\n\n\n /**\n * Draws the component for the tab.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let href = this.panel || this.route || \"#\";\n\n let a = document.createElement('a');\n a.setAttribute('href', (this.panel ? \"#\" : \"\") + href);\n a.setAttribute('part', 'native');\n a.classList.add('native-tab');\n a.appendChild(slot);\n\n fragment.appendChild(a);\n\n this.slotEl = slot;\n\n return fragment;\n }\n\n /**\n * Sets up event listeners after the component is rendered.\n * // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n event.addListener(this, 'click', 'wje-tab:change');\n this.syncAriaLabel();\n this.slotEl?.addEventListener('slotchange', () => this.syncAriaLabel());\n }\n\n /**\n * Sync aria-label on host based on slotted text when not provided.\n */\n syncAriaLabel() {\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) return;\n const text = (this.slotEl?.assignedNodes({ flatten: true }) || [])\n .map((node) => node.textContent || '')\n .join('')\n .trim();\n if (text) {\n this.setAttribute('aria-label', text);\n }\n }\n\n /**\n * Sets the roving tabindex on the internal focusable anchor.\n * @param {number} value\n */\n setRovingTabIndex(value) {\n const anchor = this.context?.querySelector('a');\n if (!anchor) return;\n anchor.setAttribute('tabindex', String(value));\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import Tab from './tab.element.js';\n\nexport default Tab;\n\nTab.define('wje-tab', Tab);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBe,MAAM,YAAY,UAAU;AAAA;AAAA;AAAA;AAAA,EAIvC,cAAc;AACV,UAAO;AA8CX;AAAA;AAAA;AAAA,qCAAY;AAxCR,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOI,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYI,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,QAAQ;AAE1C,SAAK,aAAa;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU,KAAK,aAAa,UAAU;AAAA,IAClD,CAAS;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOI,OAAO;AACH,QAAI,WAAW,SAAS,uBAAwB;AAEhD,QAAI,OAAO,SAAS,cAAc,MAAM;AAExC,QAAI,OAAO,KAAK,SAAS,KAAK,SAAS;AAEvC,QAAI,IAAI,SAAS,cAAc,GAAG;AAClC,MAAE,aAAa,SAAS,KAAK,QAAQ,MAAM,MAAM,IAAI;AACrD,MAAE,aAAa,QAAQ,QAAQ;AAC/B,MAAE,UAAU,IAAI,YAAY;AAC5B,MAAE,YAAY,IAAI;AAElB,aAAS,YAAY,CAAC;AAEtB,SAAK,SAAS;AAEd,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,YAAY;;AACR,SAAK,oBAAoB,gBAAgB,KAAK,eAAe,EAAE,UAAU,OAAO;AAChF,UAAM,YAAY,MAAM,SAAS,gBAAgB;AACjD,SAAK,cAAe;AACpB,eAAK,WAAL,mBAAa,iBAAiB,cAAc,MAAM,KAAK;EAC/D;AAAA;AAAA;AAAA;AAAA,EAKI,gBAAgB;;AACZ,QAAI,KAAK,aAAa,YAAY,KAAK,KAAK,aAAa,iBAAiB,EAAG;AAC7E,UAAM,UAAQ,UAAK,WAAL,mBAAa,cAAc,EAAE,SAAS,KAAM,OAAK,CAAE,GAC5D,IAAI,CAAC,SAAS,KAAK,eAAe,EAAE,EACpC,KAAK,EAAE,EACP,KAAM;AACX,QAAI,MAAM;AACN,WAAK,aAAa,cAAc,IAAI;AAAA,IAChD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,kBAAkB,OAAO;;AACrB,UAAM,UAAS,UAAK,YAAL,mBAAc,cAAc;AAC3C,QAAI,CAAC,OAAQ;AACb,WAAO,aAAa,YAAY,OAAO,KAAK,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKI,mBAAmB;;AACf,eAAK,sBAAL;AAAA,EACR;AACA;ACjKA,IAAI,OAAO,WAAW,GAAG;"}
|
|
@@ -23,6 +23,7 @@ import { FormAssociatedElement } from '../internals/form-associated-element.js';
|
|
|
23
23
|
* @tag wje-textarea
|
|
24
24
|
*/
|
|
25
25
|
export default class Textarea extends FormAssociatedElement {
|
|
26
|
+
static _instanceId: number;
|
|
26
27
|
/**
|
|
27
28
|
* Returns the CSS styles for the component.
|
|
28
29
|
* @static
|
|
@@ -36,6 +37,7 @@ export default class Textarea extends FormAssociatedElement {
|
|
|
36
37
|
*/
|
|
37
38
|
static get observedAttributes(): Array<string>;
|
|
38
39
|
pristine: boolean;
|
|
40
|
+
_instanceId: number;
|
|
39
41
|
/**
|
|
40
42
|
* Setter for the value attribute.
|
|
41
43
|
* @param {string} value The value to set.
|
|
@@ -46,7 +48,18 @@ export default class Textarea extends FormAssociatedElement {
|
|
|
46
48
|
* @returns {string} The value of the attribute.
|
|
47
49
|
*/
|
|
48
50
|
get value(): string;
|
|
49
|
-
_value:
|
|
51
|
+
_value: any;
|
|
52
|
+
/**
|
|
53
|
+
* Sets the label attribute of the element.
|
|
54
|
+
* @param {string} value The value to set as the label attribute.
|
|
55
|
+
*/
|
|
56
|
+
set label(value: string);
|
|
57
|
+
/**
|
|
58
|
+
* Retrieves the value of the 'label' attribute if it exists.
|
|
59
|
+
* If the 'label' attribute is not set, it returns false.
|
|
60
|
+
* @returns {string|boolean} The value of the 'label' attribute as a string, or false if the attribute is not set.
|
|
61
|
+
*/
|
|
62
|
+
get label(): string | boolean;
|
|
50
63
|
/**
|
|
51
64
|
* Sets the `validateOnChange` property. If set to a truthy value, it adds the
|
|
52
65
|
* `validate-on-change` attribute to the element. If set to a falsy value, it
|
|
@@ -63,11 +76,13 @@ export default class Textarea extends FormAssociatedElement {
|
|
|
63
76
|
get validateOnChange(): boolean;
|
|
64
77
|
set placeholder(value: string);
|
|
65
78
|
get placeholder(): string;
|
|
79
|
+
attributeChangedCallback(name: any, oldValue: any, newValue: any): void;
|
|
66
80
|
/**
|
|
67
81
|
* Draws the component for the textarea.
|
|
68
82
|
* @returns {DocumentFragment}
|
|
69
83
|
*/
|
|
70
84
|
draw(): DocumentFragment;
|
|
85
|
+
_ariaErrorId: string;
|
|
71
86
|
counterElement: HTMLDivElement;
|
|
72
87
|
native: HTMLDivElement;
|
|
73
88
|
labelElement: HTMLLabelElement;
|
|
@@ -77,6 +92,10 @@ export default class Textarea extends FormAssociatedElement {
|
|
|
77
92
|
*/
|
|
78
93
|
afterDraw(): void;
|
|
79
94
|
resizeObserver: ResizeObserver;
|
|
95
|
+
/**
|
|
96
|
+
* Syncs ARIA attributes on the host element.
|
|
97
|
+
*/
|
|
98
|
+
syncAria(): void;
|
|
80
99
|
/**
|
|
81
100
|
* Sets the height of the textarea.
|
|
82
101
|
*/
|
package/dist/wje-textarea.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { F as FormAssociatedElement } from "./form-associated-element-
|
|
4
|
+
import { F as FormAssociatedElement } from "./form-associated-element-DEQ4y-jn.js";
|
|
5
5
|
import { event } from "./event.js";
|
|
6
6
|
const styles = "/*\n[ WJ Textarea ]\n*/\n\n:host {\n width: 100%;\n margin-bottom: var(--wje-textarea-margin-bottom);\n display: block;\n\n label {\n margin: var(--wje-textarea-label-margin);\n padding: var(--wje-textarea-label-padding);\n display: var(--wje-textarea-label-display);\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease;\n line-height: var(--wje-textarea-label-line-height);\n font-size: var(--wje-textarea-label-font-size);\n }\n\n .wrapper {\n display: flex;\n width: 100%;\n border-width: var(--wje-textarea-border-width);\n border-style: var(--wje-textarea-border-style);\n border-color: var(--wje-textarea-border-color);\n border-radius: var(--wje-textarea-border-radius);\n box-sizing: border-box;\n }\n textarea {\n font-family: var(--wje-textarea-font-family);\n color: var(--wje-textarea-color);\n font-size: 14px;\n border: 0 none;\n padding: var(--wje-textarea-padding);\n &:focus {\n outline: none;\n }\n }\n}\n\n:host([invalid]) {\n .error-message {\n display: block;\n }\n .default {\n label {\n opacity: 1 !important;\n color: var(--wje-input-color-invalid) !important;\n animation-name: shake;\n animation-duration: 0.4s;\n animation-iteration-count: 1;\n }\n }\n}\n\n:host([required]) .wrapper::after {\n color: var(--wje-input-color-invalid);\n content: var(--wje-input-required-symbol);\n font-size: 24px;\n position: absolute;\n right: 12px;\n top: 0;\n}\n\n:host([required]) .standard .input-wrapper::after {\n right: 13px;\n top: -20px;\n}\n\n:host([resize='auto']) textarea,\n:host([resize='none']) textarea {\n resize: none;\n}\n\n.native-textarea {\n .input-wrapper {\n width: 100%;\n line-height: normal;\n }\n &.default {\n background-color: var(--wje-textarea-background-color);\n font-family: var(--wje-textarea-font-family);\n position: relative;\n padding-inline: 0;\n padding-top: 0;\n transition: background-color 0.2s ease;\n cursor: text;\n &.focused {\n .wrapper {\n border-color: var(--wje-textarea-border-color-focus) !important;\n }\n label {\n opacity: 0.67;\n font-size: 12px;\n letter-spacing: normal;\n }\n }\n textarea {\n border: none;\n padding-top: 0;\n background: none;\n box-shadow: none;\n width: calc(100% - var(--wje-textarea-padding) * 2);\n max-width: calc(100% - var(--wje-textarea-padding) * 2);\n min-width: calc(100% - var(--wje-textarea-padding) * 2);\n padding: 0 var(--wje-textarea-padding);\n }\n label {\n margin: var(--wje-textarea-label-margin);\n padding: var(--wje-textarea-label-padding);\n display: var(--wje-textarea-label-display);\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease;\n line-height: var(--wje-textarea-label-line-height);\n font-size: var(--wje-textarea-label-font-size);\n }\n /*label {*/\n /* padding: 0 var(--wje-textarea-padding);*/\n /* display: block;*/\n /* line-height: var(--wje-textarea-line-height);*/\n /* padding-top: 0.25rem;*/\n /* &.fade {*/\n /* opacity: 0.5;*/\n /* font-size: 12px;*/\n /* letter-spacing: normal;*/\n /* }*/\n /*}*/\n ::slotted([slot='start']) {\n border-left: none;\n border-top: none;\n border-bottom: none;\n }\n\n ::slotted([slot='end']) {\n border-right: none;\n border-top: none;\n border-bottom: none;\n }\n }\n &.standard {\n position: relative;\n border-radius: var(--wje-textarea-border-radius);\n padding: 0;\n transition: background-color 0.2s ease;\n cursor: text;\n &.focused {\n .wrapper {\n border-color: var(--wje-textarea-border-color-focus) !important;\n }\n }\n textarea {\n background-color: var(--wje-textarea-background-color);\n display: block;\n min-height: 32px;\n box-shadow: none;\n width: 100%;\n box-sizing: border-box;\n border-radius: var(--wje-textarea-border-radius);\n }\n /*label {*/\n /* margin: var(--wje-textarea-label-margin);*/\n /* display: inline-block;*/\n /* line-height: var(--wje-textarea-line-height);*/\n /*}*/\n ::slotted([slot='start']) {\n border-right: none;\n border-radius: var(--wje-textarea-border-radius) 0 0 var(--wje-textarea-border-radius);\n }\n\n ::slotted([slot='end']) {\n border-left: none;\n border-radius: 0 var(--wje-textarea-border-radius) var(--wje-textarea-border-radius) 0;\n }\n\n &.has-start textarea {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.has-end textarea {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n slot[name='error'] {\n position: static;\n background: transparent;\n padding: 0.25rem 0;\n left: auto;\n transform: none;\n color: var(--wje-textarea-color-invalid);\n font-size: 12px;\n line-height: normal;\n }\n }\n}\n\n.counter {\n float: right;\n}\n\nslot[name='error'] {\n display: none;\n}\n\n:host([invalid]) slot[name='error'] {\n display: block;\n}\n\nslot[name='error'] {\n display: none;\n position: absolute;\n max-width: 100%;\n min-width: auto;\n border-radius: 50px;\n background: black;\n padding: 0.25rem 0.5rem;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n font-size: var(--wje-font-size-small);\n width: max-content;\n line-height: normal;\n}\n\n@keyframes shake {\n 8%,\n 41% {\n transform: translateX(-4px);\n }\n 25%,\n 58% {\n transform: translateX(4px);\n }\n 75% {\n transform: translateX(-2px);\n }\n 92% {\n transform: translateX(2px);\n }\n 0%,\n 100% {\n transform: translateX(0);\n }\n}\n";
|
|
7
|
-
class
|
|
7
|
+
const _Textarea = class _Textarea extends FormAssociatedElement {
|
|
8
8
|
/**
|
|
9
9
|
* Creates an instance of Textarea.
|
|
10
10
|
* @class
|
|
@@ -30,6 +30,7 @@ class Textarea extends FormAssociatedElement {
|
|
|
30
30
|
});
|
|
31
31
|
this.invalid = false;
|
|
32
32
|
this.pristine = true;
|
|
33
|
+
this._instanceId = ++_Textarea._instanceId;
|
|
33
34
|
}
|
|
34
35
|
/**
|
|
35
36
|
* Setter for the value attribute.
|
|
@@ -40,6 +41,7 @@ class Textarea extends FormAssociatedElement {
|
|
|
40
41
|
if (this.input) this.input.value = value;
|
|
41
42
|
this.pristine = false;
|
|
42
43
|
this._value = value;
|
|
44
|
+
this.syncAria();
|
|
43
45
|
}
|
|
44
46
|
/**
|
|
45
47
|
* Getter for the value attribute.
|
|
@@ -49,6 +51,25 @@ class Textarea extends FormAssociatedElement {
|
|
|
49
51
|
var _a;
|
|
50
52
|
return ((_a = this.input) == null ? void 0 : _a.value) ?? this._value ?? "";
|
|
51
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Sets the label attribute of the element.
|
|
56
|
+
* @param {string} value The value to set as the label attribute.
|
|
57
|
+
*/
|
|
58
|
+
set label(value) {
|
|
59
|
+
if (value === null || value === void 0) {
|
|
60
|
+
this.removeAttribute("label");
|
|
61
|
+
} else {
|
|
62
|
+
this.setAttribute("label", value);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Retrieves the value of the 'label' attribute if it exists.
|
|
67
|
+
* If the 'label' attribute is not set, it returns false.
|
|
68
|
+
* @returns {string|boolean} The value of the 'label' attribute as a string, or false if the attribute is not set.
|
|
69
|
+
*/
|
|
70
|
+
get label() {
|
|
71
|
+
return this.getAttribute("label") || false;
|
|
72
|
+
}
|
|
52
73
|
/**
|
|
53
74
|
* Sets the `validateOnChange` property. If set to a truthy value, it adds the
|
|
54
75
|
* `validate-on-change` attribute to the element. If set to a falsy value, it
|
|
@@ -91,7 +112,7 @@ class Textarea extends FormAssociatedElement {
|
|
|
91
112
|
* @returns {Array<string>}
|
|
92
113
|
*/
|
|
93
114
|
static get observedAttributes() {
|
|
94
|
-
return [];
|
|
115
|
+
return ["value", "name", "disabled", "placeholder", "label", "required", "readonly", "invalid", "rows"];
|
|
95
116
|
}
|
|
96
117
|
/**
|
|
97
118
|
* Sets up the attributes for the component.
|
|
@@ -99,9 +120,40 @@ class Textarea extends FormAssociatedElement {
|
|
|
99
120
|
setupAttributes() {
|
|
100
121
|
this.isShadowRoot = "open";
|
|
101
122
|
if (this.pristine) {
|
|
102
|
-
|
|
123
|
+
const attrValue = this.getAttribute("value");
|
|
124
|
+
this.value = attrValue !== null ? attrValue : this.innerHTML;
|
|
103
125
|
this.pristine = false;
|
|
104
126
|
}
|
|
127
|
+
this.syncAria();
|
|
128
|
+
}
|
|
129
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
130
|
+
if (oldValue === newValue) return;
|
|
131
|
+
if (name === "label") {
|
|
132
|
+
this.refresh();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!this.input) {
|
|
136
|
+
this.syncAria();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (name === "value") {
|
|
140
|
+
this._value = newValue ?? "";
|
|
141
|
+
this.input.value = this.value;
|
|
142
|
+
this.internals.setFormValue(this.value);
|
|
143
|
+
} else if (name === "name") {
|
|
144
|
+
this.input.name = this.name;
|
|
145
|
+
} else if (name === "disabled") {
|
|
146
|
+
this.input.disabled = this.hasAttribute("disabled");
|
|
147
|
+
} else if (name === "required") {
|
|
148
|
+
this.input.required = this.required;
|
|
149
|
+
} else if (name === "readonly") {
|
|
150
|
+
this.input.readOnly = this.hasAttribute("readonly");
|
|
151
|
+
} else if (name === "placeholder") {
|
|
152
|
+
this.input.placeholder = this.placeholder || "";
|
|
153
|
+
} else if (name === "rows") {
|
|
154
|
+
this.input.rows = Number(newValue || 3);
|
|
155
|
+
}
|
|
156
|
+
this.syncAria();
|
|
105
157
|
}
|
|
106
158
|
/**
|
|
107
159
|
* Draws the component for the textarea.
|
|
@@ -130,7 +182,7 @@ class Textarea extends FormAssociatedElement {
|
|
|
130
182
|
input.placeholder = this.placeholder || "";
|
|
131
183
|
input.classList.add("form-control");
|
|
132
184
|
input.setAttribute("part", "input");
|
|
133
|
-
input.
|
|
185
|
+
input.rows = Number(this.getAttribute("rows") || 3);
|
|
134
186
|
input.setAttribute("spellcheck", false);
|
|
135
187
|
const attributes = Array.from(this.attributes).map((attr) => attr.name);
|
|
136
188
|
attributes.forEach((attr) => {
|
|
@@ -142,11 +194,15 @@ class Textarea extends FormAssociatedElement {
|
|
|
142
194
|
error.setAttribute("slot", "error");
|
|
143
195
|
let errorSlot = document.createElement("slot");
|
|
144
196
|
errorSlot.setAttribute("name", "error");
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
197
|
+
this._ariaErrorId = this.id ? `${this.id}-error` : `wje-textarea-${this._instanceId}-error`;
|
|
198
|
+
errorSlot.id = this._ariaErrorId;
|
|
199
|
+
if (this.getAttribute("resize") === "auto") input.addEventListener("input", this.setTextareaHeight);
|
|
200
|
+
if (this.label) {
|
|
201
|
+
if (this.variant === "standard") {
|
|
202
|
+
native.appendChild(label);
|
|
203
|
+
} else {
|
|
204
|
+
inputWrapper.appendChild(label);
|
|
205
|
+
}
|
|
150
206
|
}
|
|
151
207
|
inputWrapper.appendChild(input);
|
|
152
208
|
wrapper.appendChild(inputWrapper);
|
|
@@ -166,13 +222,17 @@ class Textarea extends FormAssociatedElement {
|
|
|
166
222
|
this.native = native;
|
|
167
223
|
this.labelElement = label;
|
|
168
224
|
this.input = input;
|
|
225
|
+
this.syncAria();
|
|
169
226
|
return fragment;
|
|
170
227
|
}
|
|
171
228
|
/**
|
|
172
229
|
* Sets up the event listeners after the component is drawn.
|
|
173
230
|
*/
|
|
174
231
|
afterDraw() {
|
|
175
|
-
this.
|
|
232
|
+
if (this.getAttribute("resize") === "auto" && typeof ResizeObserver === "function") {
|
|
233
|
+
this.resizeObserver = new ResizeObserver(() => this.setTextareaHeight());
|
|
234
|
+
this.resizeObserver.observe(this.input);
|
|
235
|
+
}
|
|
176
236
|
if (!this.hasAttribute("disabled")) {
|
|
177
237
|
event.addListener(this, "click", "wje-textarea:change");
|
|
178
238
|
event.addListener(this, "click", "wje-textarea:input");
|
|
@@ -213,19 +273,41 @@ class Textarea extends FormAssociatedElement {
|
|
|
213
273
|
}
|
|
214
274
|
});
|
|
215
275
|
this.validate();
|
|
276
|
+
this.syncAria();
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Syncs ARIA attributes on the host element.
|
|
280
|
+
*/
|
|
281
|
+
syncAria() {
|
|
282
|
+
const requiredInvalid = this.required && !this.value;
|
|
283
|
+
const invalid = this.invalid || requiredInvalid;
|
|
284
|
+
const label = this.label && this.label !== false ? this.label.trim() : "";
|
|
285
|
+
this.setAriaState({
|
|
286
|
+
role: "textbox",
|
|
287
|
+
disabled: this.disabled,
|
|
288
|
+
required: this.required,
|
|
289
|
+
readonly: this.hasAttribute("readonly"),
|
|
290
|
+
invalid,
|
|
291
|
+
describedBy: this._ariaErrorId,
|
|
292
|
+
...label ? { label } : {}
|
|
293
|
+
});
|
|
216
294
|
}
|
|
217
295
|
componentCleanup() {
|
|
218
|
-
var _a;
|
|
296
|
+
var _a, _b;
|
|
219
297
|
(_a = this.resizeObserver) == null ? void 0 : _a.unobserve(this.input);
|
|
298
|
+
(_b = this.resizeObserver) == null ? void 0 : _b.disconnect();
|
|
220
299
|
}
|
|
221
300
|
/**
|
|
222
301
|
* Disconnects the component.
|
|
223
302
|
*/
|
|
224
303
|
beforeDisconnect() {
|
|
225
|
-
var _a;
|
|
304
|
+
var _a, _b;
|
|
226
305
|
(_a = this.resizeObserver) == null ? void 0 : _a.unobserve(this.input);
|
|
306
|
+
(_b = this.resizeObserver) == null ? void 0 : _b.disconnect();
|
|
227
307
|
}
|
|
228
|
-
}
|
|
308
|
+
};
|
|
309
|
+
__publicField(_Textarea, "_instanceId", 0);
|
|
310
|
+
let Textarea = _Textarea;
|
|
229
311
|
Textarea.define("wje-textarea", Textarea);
|
|
230
312
|
export {
|
|
231
313
|
Textarea as default
|