@umbraco-ui/uui 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +103 -1
- package/dist/_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js +9 -0
- package/dist/components/action-bar/action-bar.d.ts +0 -1
- package/dist/components/action-bar/action-bar.element.js +15 -12
- package/dist/components/action-bar/action-bar.element.js.map +1 -1
- package/dist/components/action-bar/action-bar.js +5 -5
- package/dist/components/action-bar/action-bar.js.map +1 -1
- package/dist/components/avatar/avatar.d.ts +0 -1
- package/dist/components/avatar/avatar.element.js +72 -86
- package/dist/components/avatar/avatar.element.js.map +1 -1
- package/dist/components/avatar/avatar.js +5 -5
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/avatar-group/avatar-group.d.ts +0 -1
- package/dist/components/avatar-group/avatar-group.element.js +58 -68
- package/dist/components/avatar-group/avatar-group.element.js.map +1 -1
- package/dist/components/avatar-group/avatar-group.js +5 -5
- package/dist/components/avatar-group/avatar-group.js.map +1 -1
- package/dist/components/badge/badge.d.ts +0 -1
- package/dist/components/badge/badge.element.js +32 -38
- package/dist/components/badge/badge.element.js.map +1 -1
- package/dist/components/badge/badge.js +5 -5
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/boolean-input/UUIBooleanInputEvent.js +15 -13
- package/dist/components/boolean-input/UUIBooleanInputEvent.js.map +1 -1
- package/dist/components/boolean-input/boolean-input.d.ts +0 -1
- package/dist/components/boolean-input/boolean-input.element.js +114 -134
- package/dist/components/boolean-input/boolean-input.element.js.map +1 -1
- package/dist/components/boolean-input/boolean-input.js +3 -0
- package/dist/components/box/box.d.ts +0 -1
- package/dist/components/box/box.element.js +74 -77
- package/dist/components/box/box.element.js.map +1 -1
- package/dist/components/box/box.js +5 -5
- package/dist/components/box/box.js.map +1 -1
- package/dist/components/breadcrumbs/breadcrumb-item.element.js +45 -50
- package/dist/components/breadcrumbs/breadcrumb-item.element.js.map +1 -1
- package/dist/components/breadcrumbs/breadcrumbs.d.ts +0 -1
- package/dist/components/breadcrumbs/breadcrumbs.element.js +40 -47
- package/dist/components/breadcrumbs/breadcrumbs.element.js.map +1 -1
- package/dist/components/breadcrumbs/breadcrumbs.js +5 -6
- package/dist/components/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/components/button/button.d.ts +0 -1
- package/dist/components/button/button.element.js +147 -199
- package/dist/components/button/button.element.js.map +1 -1
- package/dist/components/button/button.js +5 -5
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button-copy-text/UUICopyTextEvent.js +16 -12
- package/dist/components/button-copy-text/UUICopyTextEvent.js.map +1 -1
- package/dist/components/button-copy-text/button-copy-text.d.ts +0 -1
- package/dist/components/button-copy-text/button-copy-text.element.js +78 -93
- package/dist/components/button-copy-text/button-copy-text.element.js.map +1 -1
- package/dist/components/button-copy-text/button-copy-text.js +6 -7
- package/dist/components/button-copy-text/button-copy-text.js.map +1 -1
- package/dist/components/button-group/button-group.d.ts +0 -1
- package/dist/components/button-group/button-group.element.js +19 -14
- package/dist/components/button-group/button-group.element.js.map +1 -1
- package/dist/components/button-group/button-group.js +5 -5
- package/dist/components/button-group/button-group.js.map +1 -1
- package/dist/components/button-inline-create/UUIButtonInlineCreateEvent.js +16 -14
- package/dist/components/button-inline-create/UUIButtonInlineCreateEvent.js.map +1 -1
- package/dist/components/button-inline-create/button-inline-create.d.ts +0 -1
- package/dist/components/button-inline-create/button-inline-create.element.js +63 -88
- package/dist/components/button-inline-create/button-inline-create.element.js.map +1 -1
- package/dist/components/button-inline-create/button-inline-create.js +6 -7
- package/dist/components/button-inline-create/button-inline-create.js.map +1 -1
- package/dist/components/card/UUICardEvent.js +9 -7
- package/dist/components/card/UUICardEvent.js.map +1 -1
- package/dist/components/card/card.d.ts +0 -1
- package/dist/components/card/card.element.d.ts +7 -0
- package/dist/components/card/card.element.js +72 -69
- package/dist/components/card/card.element.js.map +1 -1
- package/dist/components/card/card.js +6 -7
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/card-block-type/card-block-type.d.ts +0 -1
- package/dist/components/card-block-type/card-block-type.element.js +55 -74
- package/dist/components/card-block-type/card-block-type.element.js.map +1 -1
- package/dist/components/card-block-type/card-block-type.js +5 -5
- package/dist/components/card-block-type/card-block-type.js.map +1 -1
- package/dist/components/card-content-node/card-content-node.d.ts +0 -1
- package/dist/components/card-content-node/card-content-node.element.d.ts +1 -0
- package/dist/components/card-content-node/card-content-node.element.js +82 -83
- package/dist/components/card-content-node/card-content-node.element.js.map +1 -1
- package/dist/components/card-content-node/card-content-node.js +5 -5
- package/dist/components/card-content-node/card-content-node.js.map +1 -1
- package/dist/components/card-media/card-media.d.ts +0 -1
- package/dist/components/card-media/card-media.element.d.ts +4 -0
- package/dist/components/card-media/card-media.element.js +103 -89
- package/dist/components/card-media/card-media.element.js.map +1 -1
- package/dist/components/card-media/card-media.js +5 -5
- package/dist/components/card-media/card-media.js.map +1 -1
- package/dist/components/card-user/card-user.d.ts +0 -1
- package/dist/components/card-user/card-user.element.js +57 -72
- package/dist/components/card-user/card-user.element.js.map +1 -1
- package/dist/components/card-user/card-user.js +5 -5
- package/dist/components/card-user/card-user.js.map +1 -1
- package/dist/components/checkbox/checkbox.d.ts +0 -1
- package/dist/components/checkbox/checkbox.element.js +41 -22
- package/dist/components/checkbox/checkbox.element.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +5 -5
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/color-area/UUIColorAreaEvent.js +15 -13
- package/dist/components/color-area/UUIColorAreaEvent.js.map +1 -1
- package/dist/components/color-area/color-area.d.ts +0 -1
- package/dist/components/color-area/color-area.element.js +137 -174
- package/dist/components/color-area/color-area.element.js.map +1 -1
- package/dist/components/color-area/color-area.js +6 -7
- package/dist/components/color-area/color-area.js.map +1 -1
- package/dist/components/color-picker/UUIColorPickerEvent.js +15 -13
- package/dist/components/color-picker/UUIColorPickerEvent.js.map +1 -1
- package/dist/components/color-picker/color-picker.d.ts +0 -1
- package/dist/components/color-picker/color-picker.element.js +293 -334
- package/dist/components/color-picker/color-picker.element.js.map +1 -1
- package/dist/components/color-picker/color-picker.js +6 -7
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/color-slider/UUIColorSliderEvent.js +15 -13
- package/dist/components/color-slider/UUIColorSliderEvent.js.map +1 -1
- package/dist/components/color-slider/color-slider.d.ts +0 -1
- package/dist/components/color-slider/color-slider.element.js +169 -219
- package/dist/components/color-slider/color-slider.element.js.map +1 -1
- package/dist/components/color-slider/color-slider.js +6 -7
- package/dist/components/color-slider/color-slider.js.map +1 -1
- package/dist/components/color-swatch/color-swatch.d.ts +0 -1
- package/dist/components/color-swatch/color-swatch.element.d.ts +1 -1
- package/dist/components/color-swatch/color-swatch.element.js +215 -201
- package/dist/components/color-swatch/color-swatch.element.js.map +1 -1
- package/dist/components/color-swatch/color-swatch.js +5 -5
- package/dist/components/color-swatch/color-swatch.js.map +1 -1
- package/dist/components/color-swatches/UUIColorSwatchesEvent.js +15 -13
- package/dist/components/color-swatches/UUIColorSwatchesEvent.js.map +1 -1
- package/dist/components/color-swatches/color-swatches.d.ts +0 -1
- package/dist/components/color-swatches/color-swatches.element.js +115 -132
- package/dist/components/color-swatches/color-swatches.element.js.map +1 -1
- package/dist/components/color-swatches/color-swatches.js +6 -7
- package/dist/components/color-swatches/color-swatches.js.map +1 -1
- package/dist/components/combobox/UUIComboboxEvent.js +18 -14
- package/dist/components/combobox/UUIComboboxEvent.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +0 -1
- package/dist/components/combobox/combobox.element.js +321 -425
- package/dist/components/combobox/combobox.element.js.map +1 -1
- package/dist/components/combobox/combobox.js +6 -7
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/combobox-list/UUIComboboxListEvent.js +18 -14
- package/dist/components/combobox-list/UUIComboboxListEvent.js.map +1 -1
- package/dist/components/combobox-list/combobox-list-option.element.js +88 -80
- package/dist/components/combobox-list/combobox-list-option.element.js.map +1 -1
- package/dist/components/combobox-list/combobox-list.d.ts +0 -1
- package/dist/components/combobox-list/combobox-list.element.js +218 -275
- package/dist/components/combobox-list/combobox-list.element.js.map +1 -1
- package/dist/components/combobox-list/combobox-list.js +6 -8
- package/dist/components/combobox-list/combobox-list.js.map +1 -1
- package/dist/components/dialog/dialog.d.ts +0 -1
- package/dist/components/dialog/dialog.element.js +19 -14
- package/dist/components/dialog/dialog.element.js.map +1 -1
- package/dist/components/dialog/dialog.js +5 -5
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/dialog-layout/dialog-layout.d.ts +0 -1
- package/dist/components/dialog-layout/dialog-layout.element.js +59 -64
- package/dist/components/dialog-layout/dialog-layout.element.js.map +1 -1
- package/dist/components/dialog-layout/dialog-layout.js +5 -5
- package/dist/components/dialog-layout/dialog-layout.js.map +1 -1
- package/dist/components/file-dropzone/UUIFileDropzoneEvent.js +18 -14
- package/dist/components/file-dropzone/UUIFileDropzoneEvent.js.map +1 -1
- package/dist/components/file-dropzone/file-dropzone.d.ts +0 -1
- package/dist/components/file-dropzone/file-dropzone.element.js +214 -257
- package/dist/components/file-dropzone/file-dropzone.element.js.map +1 -1
- package/dist/components/file-dropzone/file-dropzone.js +6 -7
- package/dist/components/file-dropzone/file-dropzone.js.map +1 -1
- package/dist/components/file-preview/UUIFileSize.js +46 -19
- package/dist/components/file-preview/UUIFileSize.js.map +1 -1
- package/dist/components/file-preview/file-preview.d.ts +0 -1
- package/dist/components/file-preview/file-preview.element.js +78 -103
- package/dist/components/file-preview/file-preview.element.js.map +1 -1
- package/dist/components/file-preview/file-preview.js +6 -5
- package/dist/components/file-preview/file-preview.js.map +1 -1
- package/dist/components/form/form.d.ts +0 -1
- package/dist/components/form/form.element.js +46 -46
- package/dist/components/form/form.element.js.map +1 -1
- package/dist/components/form/form.js +5 -5
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form-layout-item/form-layout-item.d.ts +0 -1
- package/dist/components/form-layout-item/form-layout-item.element.js +39 -45
- package/dist/components/form-layout-item/form-layout-item.element.js.map +1 -1
- package/dist/components/form-layout-item/form-layout-item.js +5 -5
- package/dist/components/form-layout-item/form-layout-item.js.map +1 -1
- package/dist/components/form-validation-message/form-validation-message.d.ts +0 -1
- package/dist/components/form-validation-message/form-validation-message.element.js +71 -89
- package/dist/components/form-validation-message/form-validation-message.element.js.map +1 -1
- package/dist/components/form-validation-message/form-validation-message.js +5 -5
- package/dist/components/form-validation-message/form-validation-message.js.map +1 -1
- package/dist/components/icon/UUIIconRequestEvent.js +21 -19
- package/dist/components/icon/UUIIconRequestEvent.js.map +1 -1
- package/dist/components/icon/icon.d.ts +0 -1
- package/dist/components/icon/icon.element.js +93 -117
- package/dist/components/icon/icon.element.js.map +1 -1
- package/dist/components/icon/icon.js +6 -7
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/icon-registry/UUIIconHost.js +16 -17
- package/dist/components/icon-registry/UUIIconHost.js.map +1 -1
- package/dist/components/icon-registry/UUIIconRegistry.js +67 -77
- package/dist/components/icon-registry/UUIIconRegistry.js.map +1 -1
- package/dist/components/icon-registry/icon-registry.d.ts +0 -1
- package/dist/components/icon-registry/icon-registry.element.js +39 -48
- package/dist/components/icon-registry/icon-registry.element.js.map +1 -1
- package/dist/components/icon-registry/icon-registry.js +7 -6
- package/dist/components/icon-registry/icon-registry.js.map +1 -1
- package/dist/components/icon-registry-essential/UUIIconRegistryEssential.js +44 -42
- package/dist/components/icon-registry-essential/UUIIconRegistryEssential.js.map +1 -1
- package/dist/components/icon-registry-essential/icon-registry-essential.d.ts +0 -1
- package/dist/components/icon-registry-essential/icon-registry-essential.element.js +15 -9
- package/dist/components/icon-registry-essential/icon-registry-essential.element.js.map +1 -1
- package/dist/components/icon-registry-essential/icon-registry-essential.js +6 -39
- package/dist/components/icon-registry-essential/icon-registry-essential.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconAdd.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconAdd.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconAlert.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconAlert.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconAttachment.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconAttachment.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconCalendar.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconCalendar.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconCheck.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconCheck.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconClipboard.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconClipboard.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconCode.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconCode.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconColorPicker.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconColorPicker.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconCopy.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconCopy.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconDelete.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconDelete.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconDocument.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconDocument.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconDownload.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconDownload.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconDrag.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconDrag.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconEdit.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconEdit.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconFavorite.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconFavorite.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconFolder.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconFolder.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconForbidden.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconForbidden.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconInfo.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconInfo.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconLink.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconLink.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconLock.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconLock.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconPause.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconPause.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconPicture.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconPicture.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconPlay.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconPlay.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconRemove.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconRemove.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconSearch.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconSearch.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconSee.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconSee.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconSettings.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconSettings.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconSubtract.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconSubtract.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconSync.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconSync.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconUnlock.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconUnlock.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconUnsee.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconUnsee.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconWand.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconWand.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/iconWrong.js +6 -5
- package/dist/components/icon-registry-essential/svgs/iconWrong.js.map +1 -1
- package/dist/components/icon-registry-essential/svgs/index.js +34 -0
- package/dist/components/index.js +206 -0
- package/dist/components/input/UUIInputEvent.js +18 -14
- package/dist/components/input/UUIInputEvent.js.map +1 -1
- package/dist/components/input/input.d.ts +0 -1
- package/dist/components/input/input.element.js +176 -201
- package/dist/components/input/input.element.js.map +1 -1
- package/dist/components/input/input.js +6 -7
- package/dist/components/input/input.js.map +1 -1
- package/dist/components/input-file/input-file.d.ts +0 -1
- package/dist/components/input-file/input-file.element.js +137 -211
- package/dist/components/input-file/input-file.element.js.map +1 -1
- package/dist/components/input-file/input-file.js +5 -5
- package/dist/components/input-file/input-file.js.map +1 -1
- package/dist/components/input-lock/UUIInputLockEvent.js +15 -13
- package/dist/components/input-lock/UUIInputLockEvent.js.map +1 -1
- package/dist/components/input-lock/input-lock.d.ts +0 -1
- package/dist/components/input-lock/input-lock.element.js +69 -105
- package/dist/components/input-lock/input-lock.element.js.map +1 -1
- package/dist/components/input-lock/input-lock.js +6 -7
- package/dist/components/input-lock/input-lock.js.map +1 -1
- package/dist/components/input-password/input-password.d.ts +0 -1
- package/dist/components/input-password/input-password.element.js +45 -90
- package/dist/components/input-password/input-password.element.js.map +1 -1
- package/dist/components/input-password/input-password.js +5 -5
- package/dist/components/input-password/input-password.js.map +1 -1
- package/dist/components/keyboard-shortcut/key.element.js +19 -14
- package/dist/components/keyboard-shortcut/key.element.js.map +1 -1
- package/dist/components/keyboard-shortcut/keyboard-shortcut.d.ts +0 -1
- package/dist/components/keyboard-shortcut/keyboard-shortcut.element.js +19 -14
- package/dist/components/keyboard-shortcut/keyboard-shortcut.element.js.map +1 -1
- package/dist/components/keyboard-shortcut/keyboard-shortcut.js +5 -6
- package/dist/components/keyboard-shortcut/keyboard-shortcut.js.map +1 -1
- package/dist/components/label/label.d.ts +0 -1
- package/dist/components/label/label.element.js +52 -54
- package/dist/components/label/label.element.js.map +1 -1
- package/dist/components/label/label.js +5 -5
- package/dist/components/label/label.js.map +1 -1
- package/dist/components/loader/loader.d.ts +0 -1
- package/dist/components/loader/loader.element.js +18 -14
- package/dist/components/loader/loader.element.js.map +1 -1
- package/dist/components/loader/loader.js +5 -5
- package/dist/components/loader/loader.js.map +1 -1
- package/dist/components/loader-bar/loader-bar.d.ts +0 -1
- package/dist/components/loader-bar/loader-bar.element.js +55 -52
- package/dist/components/loader-bar/loader-bar.element.js.map +1 -1
- package/dist/components/loader-bar/loader-bar.js +5 -5
- package/dist/components/loader-bar/loader-bar.js.map +1 -1
- package/dist/components/loader-circle/loader-circle.d.ts +0 -1
- package/dist/components/loader-circle/loader-circle.element.js +52 -59
- package/dist/components/loader-circle/loader-circle.element.js.map +1 -1
- package/dist/components/loader-circle/loader-circle.js +5 -5
- package/dist/components/loader-circle/loader-circle.js.map +1 -1
- package/dist/components/menu-item/UUIMenuItemEvent.js +15 -9
- package/dist/components/menu-item/UUIMenuItemEvent.js.map +1 -1
- package/dist/components/menu-item/menu-item.d.ts +0 -1
- package/dist/components/menu-item/menu-item.element.js +136 -139
- package/dist/components/menu-item/menu-item.element.js.map +1 -1
- package/dist/components/menu-item/menu-item.js +6 -7
- package/dist/components/menu-item/menu-item.js.map +1 -1
- package/dist/components/modal/modal-container.js +86 -141
- package/dist/components/modal/modal-container.js.map +1 -1
- package/dist/components/modal/modal-dialog.element.js +14 -15
- package/dist/components/modal/modal-dialog.element.js.map +1 -1
- package/dist/components/modal/modal-sidebar.element.js +41 -64
- package/dist/components/modal/modal-sidebar.element.js.map +1 -1
- package/dist/components/modal/modal.d.ts +0 -1
- package/dist/components/modal/modal.element.js +89 -106
- package/dist/components/modal/modal.element.js.map +1 -1
- package/dist/components/modal/modal.js +6 -12
- package/dist/components/modal/modal.js.map +1 -1
- package/dist/components/pagination/UUIPaginationEvent.js +15 -13
- package/dist/components/pagination/UUIPaginationEvent.js.map +1 -1
- package/dist/components/pagination/pagination.d.ts +0 -1
- package/dist/components/pagination/pagination.element.js +188 -228
- package/dist/components/pagination/pagination.element.js.map +1 -1
- package/dist/components/pagination/pagination.js +6 -7
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/popover-container/popover-container.d.ts +0 -1
- package/dist/components/popover-container/popover-container.element.d.ts +1 -0
- package/dist/components/popover-container/popover-container.element.js +290 -335
- package/dist/components/popover-container/popover-container.element.js.map +1 -1
- package/dist/components/popover-container/popover-container.js +5 -5
- package/dist/components/popover-container/popover-container.js.map +1 -1
- package/dist/components/progress-bar/progress-bar.d.ts +0 -1
- package/dist/components/progress-bar/progress-bar.element.js +41 -43
- package/dist/components/progress-bar/progress-bar.element.js.map +1 -1
- package/dist/components/progress-bar/progress-bar.js +5 -5
- package/dist/components/progress-bar/progress-bar.js.map +1 -1
- package/dist/components/radio/UUIRadioEvent.js +15 -13
- package/dist/components/radio/UUIRadioEvent.js.map +1 -1
- package/dist/components/radio/UUIRadioGroupEvent.js +15 -13
- package/dist/components/radio/UUIRadioGroupEvent.js.map +1 -1
- package/dist/components/radio/radio-group.element.js +224 -279
- package/dist/components/radio/radio-group.element.js.map +1 -1
- package/dist/components/radio/radio.d.ts +0 -1
- package/dist/components/radio/radio.element.js +100 -123
- package/dist/components/radio/radio.element.js.map +1 -1
- package/dist/components/radio/radio.js +7 -10
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/range-slider/UUIRangeSliderEvent.js +18 -14
- package/dist/components/range-slider/UUIRangeSliderEvent.js.map +1 -1
- package/dist/components/range-slider/range-slider.d.ts +0 -1
- package/dist/components/range-slider/range-slider.element.js +439 -504
- package/dist/components/range-slider/range-slider.element.js.map +1 -1
- package/dist/components/range-slider/range-slider.js +6 -7
- package/dist/components/range-slider/range-slider.js.map +1 -1
- package/dist/components/ref/UUIRefEvent.js +9 -7
- package/dist/components/ref/UUIRefEvent.js.map +1 -1
- package/dist/components/ref/ref.d.ts +0 -1
- package/dist/components/ref/ref.element.js +55 -50
- package/dist/components/ref/ref.element.js.map +1 -1
- package/dist/components/ref/ref.js +6 -7
- package/dist/components/ref/ref.js.map +1 -1
- package/dist/components/ref-list/ref-list.d.ts +0 -1
- package/dist/components/ref-list/ref-list.element.js +17 -14
- package/dist/components/ref-list/ref-list.element.js.map +1 -1
- package/dist/components/ref-list/ref-list.js +5 -5
- package/dist/components/ref-list/ref-list.js.map +1 -1
- package/dist/components/ref-node/ref-node.d.ts +0 -1
- package/dist/components/ref-node/ref-node.element.js +91 -109
- package/dist/components/ref-node/ref-node.element.js.map +1 -1
- package/dist/components/ref-node/ref-node.js +5 -5
- package/dist/components/ref-node/ref-node.js.map +1 -1
- package/dist/components/ref-node-data-type/ref-node-data-type.d.ts +0 -1
- package/dist/components/ref-node-data-type/ref-node-data-type.element.js +30 -35
- package/dist/components/ref-node-data-type/ref-node-data-type.element.js.map +1 -1
- package/dist/components/ref-node-data-type/ref-node-data-type.js +5 -5
- package/dist/components/ref-node-data-type/ref-node-data-type.js.map +1 -1
- package/dist/components/ref-node-document-type/ref-node-document-type.d.ts +0 -1
- package/dist/components/ref-node-document-type/ref-node-document-type.element.js +30 -35
- package/dist/components/ref-node-document-type/ref-node-document-type.element.js.map +1 -1
- package/dist/components/ref-node-document-type/ref-node-document-type.js +5 -5
- package/dist/components/ref-node-document-type/ref-node-document-type.js.map +1 -1
- package/dist/components/ref-node-form/ref-node-form.d.ts +0 -1
- package/dist/components/ref-node-form/ref-node-form.element.js +21 -12
- package/dist/components/ref-node-form/ref-node-form.element.js.map +1 -1
- package/dist/components/ref-node-form/ref-node-form.js +5 -5
- package/dist/components/ref-node-form/ref-node-form.js.map +1 -1
- package/dist/components/ref-node-member/ref-node-member.d.ts +0 -1
- package/dist/components/ref-node-member/ref-node-member.element.js +33 -35
- package/dist/components/ref-node-member/ref-node-member.element.js.map +1 -1
- package/dist/components/ref-node-member/ref-node-member.js +5 -5
- package/dist/components/ref-node-member/ref-node-member.js.map +1 -1
- package/dist/components/ref-node-package/ref-node-package.d.ts +0 -1
- package/dist/components/ref-node-package/ref-node-package.element.js +33 -42
- package/dist/components/ref-node-package/ref-node-package.element.js.map +1 -1
- package/dist/components/ref-node-package/ref-node-package.js +5 -5
- package/dist/components/ref-node-package/ref-node-package.js.map +1 -1
- package/dist/components/ref-node-user/ref-node-user.d.ts +0 -1
- package/dist/components/ref-node-user/ref-node-user.element.js +33 -35
- package/dist/components/ref-node-user/ref-node-user.element.js.map +1 -1
- package/dist/components/ref-node-user/ref-node-user.js +5 -5
- package/dist/components/ref-node-user/ref-node-user.js.map +1 -1
- package/dist/components/responsive-container/responsive-container.d.ts +0 -1
- package/dist/components/responsive-container/responsive-container.element.js +186 -244
- package/dist/components/responsive-container/responsive-container.element.js.map +1 -1
- package/dist/components/responsive-container/responsive-container.js +5 -5
- package/dist/components/responsive-container/responsive-container.js.map +1 -1
- package/dist/components/scroll-container/scroll-container.d.ts +0 -1
- package/dist/components/scroll-container/scroll-container.element.js +35 -36
- package/dist/components/scroll-container/scroll-container.element.js.map +1 -1
- package/dist/components/scroll-container/scroll-container.js +5 -5
- package/dist/components/scroll-container/scroll-container.js.map +1 -1
- package/dist/components/select/UUISelectEvent.js +15 -13
- package/dist/components/select/UUISelectEvent.js.map +1 -1
- package/dist/components/select/select.d.ts +0 -1
- package/dist/components/select/select.element.js +134 -163
- package/dist/components/select/select.element.js.map +1 -1
- package/dist/components/select/select.js +6 -7
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/slider/UUISliderEvent.js +18 -14
- package/dist/components/slider/UUISliderEvent.js.map +1 -1
- package/dist/components/slider/native-input.styles.js +6 -5
- package/dist/components/slider/native-input.styles.js.map +1 -1
- package/dist/components/slider/slider.d.ts +0 -1
- package/dist/components/slider/slider.element.d.ts +7 -0
- package/dist/components/slider/slider.element.js +197 -227
- package/dist/components/slider/slider.element.js.map +1 -1
- package/dist/components/slider/slider.js +6 -7
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/symbol-drag-handle/symbol-drag-handle.d.ts +0 -1
- package/dist/components/symbol-drag-handle/symbol-drag-handle.element.js +19 -16
- package/dist/components/symbol-drag-handle/symbol-drag-handle.element.js.map +1 -1
- package/dist/components/symbol-drag-handle/symbol-drag-handle.js +5 -5
- package/dist/components/symbol-drag-handle/symbol-drag-handle.js.map +1 -1
- package/dist/components/symbol-expand/symbol-expand.d.ts +0 -1
- package/dist/components/symbol-expand/symbol-expand.element.js +27 -30
- package/dist/components/symbol-expand/symbol-expand.element.js.map +1 -1
- package/dist/components/symbol-expand/symbol-expand.js +5 -5
- package/dist/components/symbol-expand/symbol-expand.js.map +1 -1
- package/dist/components/symbol-file/symbol-file.d.ts +0 -1
- package/dist/components/symbol-file/symbol-file.element.js +24 -32
- package/dist/components/symbol-file/symbol-file.element.js.map +1 -1
- package/dist/components/symbol-file/symbol-file.js +5 -5
- package/dist/components/symbol-file/symbol-file.js.map +1 -1
- package/dist/components/symbol-file-dropzone/symbol-file-dropzone.d.ts +0 -1
- package/dist/components/symbol-file-dropzone/symbol-file-dropzone.element.js +26 -30
- package/dist/components/symbol-file-dropzone/symbol-file-dropzone.element.js.map +1 -1
- package/dist/components/symbol-file-dropzone/symbol-file-dropzone.js +5 -5
- package/dist/components/symbol-file-dropzone/symbol-file-dropzone.js.map +1 -1
- package/dist/components/symbol-file-thumbnail/symbol-file-thumbnail.d.ts +0 -1
- package/dist/components/symbol-file-thumbnail/symbol-file-thumbnail.element.js +39 -95
- package/dist/components/symbol-file-thumbnail/symbol-file-thumbnail.element.js.map +1 -1
- package/dist/components/symbol-file-thumbnail/symbol-file-thumbnail.js +5 -5
- package/dist/components/symbol-file-thumbnail/symbol-file-thumbnail.js.map +1 -1
- package/dist/components/symbol-folder/symbol-folder.d.ts +0 -1
- package/dist/components/symbol-folder/symbol-folder.element.js +17 -14
- package/dist/components/symbol-folder/symbol-folder.element.js.map +1 -1
- package/dist/components/symbol-folder/symbol-folder.js +5 -5
- package/dist/components/symbol-folder/symbol-folder.js.map +1 -1
- package/dist/components/symbol-lock/symbol-lock.d.ts +0 -1
- package/dist/components/symbol-lock/symbol-lock.element.js +26 -30
- package/dist/components/symbol-lock/symbol-lock.element.js.map +1 -1
- package/dist/components/symbol-lock/symbol-lock.js +5 -5
- package/dist/components/symbol-lock/symbol-lock.js.map +1 -1
- package/dist/components/symbol-more/symbol-more.d.ts +0 -1
- package/dist/components/symbol-more/symbol-more.element.js +17 -14
- package/dist/components/symbol-more/symbol-more.element.js.map +1 -1
- package/dist/components/symbol-more/symbol-more.js +5 -5
- package/dist/components/symbol-more/symbol-more.js.map +1 -1
- package/dist/components/symbol-sort/symbol-sort.d.ts +0 -1
- package/dist/components/symbol-sort/symbol-sort.element.js +29 -31
- package/dist/components/symbol-sort/symbol-sort.element.js.map +1 -1
- package/dist/components/symbol-sort/symbol-sort.js +5 -5
- package/dist/components/symbol-sort/symbol-sort.js.map +1 -1
- package/dist/components/table/table-cell.element.js +65 -71
- package/dist/components/table/table-cell.element.js.map +1 -1
- package/dist/components/table/table-column.element.js +14 -10
- package/dist/components/table/table-column.element.js.map +1 -1
- package/dist/components/table/table-head-cell.element.js +19 -16
- package/dist/components/table/table-head-cell.element.js.map +1 -1
- package/dist/components/table/table-head.element.js +23 -18
- package/dist/components/table/table-head.element.js.map +1 -1
- package/dist/components/table/table-row.element.js +41 -52
- package/dist/components/table/table-row.element.js.map +1 -1
- package/dist/components/table/table.d.ts +0 -1
- package/dist/components/table/table.element.js +23 -19
- package/dist/components/table/table.element.js.map +1 -1
- package/dist/components/table/table.js +5 -10
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/tabs/UUITabEvent.js +6 -6
- package/dist/components/tabs/UUITabEvent.js.map +1 -1
- package/dist/components/tabs/UUITabGroupEvent.js +6 -6
- package/dist/components/tabs/UUITabGroupEvent.js.map +1 -1
- package/dist/components/tabs/tab-group.element.js +188 -251
- package/dist/components/tabs/tab-group.element.js.map +1 -1
- package/dist/components/tabs/tab.element.js +66 -56
- package/dist/components/tabs/tab.element.js.map +1 -1
- package/dist/components/tabs/tabs.d.ts +0 -1
- package/dist/components/tabs/tabs.js +7 -6
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tag/tag.d.ts +0 -1
- package/dist/components/tag/tag.element.js +32 -34
- package/dist/components/tag/tag.element.js.map +1 -1
- package/dist/components/tag/tag.js +5 -5
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/textarea/UUITextareaEvent.js +18 -14
- package/dist/components/textarea/UUITextareaEvent.js.map +1 -1
- package/dist/components/textarea/textarea.d.ts +0 -1
- package/dist/components/textarea/textarea.element.d.ts +2 -0
- package/dist/components/textarea/textarea.element.js +153 -180
- package/dist/components/textarea/textarea.element.js.map +1 -1
- package/dist/components/textarea/textarea.js +6 -7
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/toast-notification/UUIToastNotificationEvent.js +18 -10
- package/dist/components/toast-notification/UUIToastNotificationEvent.js.map +1 -1
- package/dist/components/toast-notification/toast-notification.d.ts +0 -1
- package/dist/components/toast-notification/toast-notification.element.js +155 -224
- package/dist/components/toast-notification/toast-notification.element.js.map +1 -1
- package/dist/components/toast-notification/toast-notification.js +6 -7
- package/dist/components/toast-notification/toast-notification.js.map +1 -1
- package/dist/components/toast-notification-container/toast-notification-container.d.ts +0 -1
- package/dist/components/toast-notification-container/toast-notification-container.element.js +98 -122
- package/dist/components/toast-notification-container/toast-notification-container.element.js.map +1 -1
- package/dist/components/toast-notification-container/toast-notification-container.js +6 -9
- package/dist/components/toast-notification-container/toast-notification-container.js.map +1 -1
- package/dist/components/toast-notification-layout/toast-notification-layout.d.ts +0 -1
- package/dist/components/toast-notification-layout/toast-notification-layout.element.js +33 -39
- package/dist/components/toast-notification-layout/toast-notification-layout.element.js.map +1 -1
- package/dist/components/toast-notification-layout/toast-notification-layout.js +6 -9
- package/dist/components/toast-notification-layout/toast-notification-layout.js.map +1 -1
- package/dist/components/toggle/toggle.d.ts +0 -1
- package/dist/components/toggle/toggle.element.js +43 -54
- package/dist/components/toggle/toggle.element.js.map +1 -1
- package/dist/components/toggle/toggle.js +5 -5
- package/dist/components/toggle/toggle.js.map +1 -1
- package/dist/components/visually-hidden/visually-hidden.d.ts +0 -1
- package/dist/components/visually-hidden/visually-hidden.element.js +17 -14
- package/dist/components/visually-hidden/visually-hidden.element.js.map +1 -1
- package/dist/components/visually-hidden/visually-hidden.js +5 -5
- package/dist/components/visually-hidden/visually-hidden.js.map +1 -1
- package/dist/index.js +115 -359
- package/dist/internal/animations/uui-blink.js +7 -7
- package/dist/internal/animations/uui-blink.js.map +1 -1
- package/dist/internal/animations/uui-pulse.js +7 -9
- package/dist/internal/animations/uui-pulse.js.map +1 -1
- package/dist/internal/animations/uui-shake.js +7 -9
- package/dist/internal/animations/uui-shake.js.map +1 -1
- package/dist/internal/events/UUIEvent.js +13 -9
- package/dist/internal/events/UUIEvent.js.map +1 -1
- package/dist/internal/events/UUIFormControlEvent.d.ts +2 -2
- package/dist/internal/events/UUIFormControlEvent.js +18 -14
- package/dist/internal/events/UUIFormControlEvent.js.map +1 -1
- package/dist/internal/events/UUISelectableEvent.js +19 -15
- package/dist/internal/events/UUISelectableEvent.js.map +1 -1
- package/dist/internal/mixins/ActiveMixin.js +24 -24
- package/dist/internal/mixins/ActiveMixin.js.map +1 -1
- package/dist/internal/mixins/FormControlMixin.d.ts +3 -3
- package/dist/internal/mixins/FormControlMixin.js +276 -339
- package/dist/internal/mixins/FormControlMixin.js.map +1 -1
- package/dist/internal/mixins/FormControlWithBasicsMixin.d.ts +19 -3
- package/dist/internal/mixins/FormControlWithBasicsMixin.js +54 -60
- package/dist/internal/mixins/FormControlWithBasicsMixin.js.map +1 -1
- package/dist/internal/mixins/LabelMixin.js +54 -57
- package/dist/internal/mixins/LabelMixin.js.map +1 -1
- package/dist/internal/mixins/PopoverTargetMixin.js +43 -47
- package/dist/internal/mixins/PopoverTargetMixin.js.map +1 -1
- package/dist/internal/mixins/SelectOnlyMixin.js +39 -33
- package/dist/internal/mixins/SelectOnlyMixin.js.map +1 -1
- package/dist/internal/mixins/SelectableMixin.js +109 -121
- package/dist/internal/mixins/SelectableMixin.js.map +1 -1
- package/dist/internal/registration/index.js +17 -20
- package/dist/internal/registration/index.js.map +1 -1
- package/dist/internal/types/InterfaceColor.js +11 -10
- package/dist/internal/types/InterfaceColor.js.map +1 -1
- package/dist/internal/types/InterfaceHeading.js +12 -11
- package/dist/internal/types/InterfaceHeading.js.map +1 -1
- package/dist/internal/types/InterfaceLook.js +11 -10
- package/dist/internal/types/InterfaceLook.js.map +1 -1
- package/dist/internal/utils/Timer.js +56 -61
- package/dist/internal/utils/Timer.js.map +1 -1
- package/dist/internal/utils/color.js +105 -74
- package/dist/internal/utils/color.js.map +1 -1
- package/dist/internal/utils/drag.js +27 -36
- package/dist/internal/utils/drag.js.map +1 -1
- package/dist/internal/utils/findAncestorByAttributeValue.js +22 -19
- package/dist/internal/utils/findAncestorByAttributeValue.js.map +1 -1
- package/dist/internal/utils/math.js +23 -13
- package/dist/internal/utils/math.js.map +1 -1
- package/dist/internal/utils/slotHasContent.js +6 -5
- package/dist/internal/utils/slotHasContent.js.map +1 -1
- package/dist/internal/version.js +10 -16
- package/dist/internal/version.js.map +1 -1
- package/dist/package.json.js +6 -5
- package/dist/package.json.js.map +1 -1
- package/dist/styles/uui-font.css +1 -1
- package/dist/styles/uui-text.css +1 -1
- package/dist/styles/uui-text.css.js +6 -5
- package/dist/styles/uui-text.css.js.map +1 -1
- package/dist/styles/uui-text.styles.js +7 -6
- package/dist/styles/uui-text.styles.js.map +1 -1
- package/dist/themes/dark.css +1 -1
- package/dist/themes/high-contrast.css +1 -1
- package/dist/themes/light.css +1 -1
- package/package.json +19 -18
- package/vscode.html-custom-data.json +36 -7
- package/dist/index.js.map +0 -1
|
@@ -1,104 +1,173 @@
|
|
|
1
|
-
|
|
2
|
-
throw TypeError(msg);
|
|
3
|
-
};
|
|
4
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
-
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
-
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
9
|
-
var _currentGap, _tabElements, _hiddenTabElements, _hiddenTabElementsMap, _visibilityBreakpoints, _resizeObserver, _tabResizeObservers, _breakPointCalculationInProgress, _UUITabGroupElement_instances, initialize_fn, onResize_fn, cleanupTabs_fn, onSlotChange_fn, _onTabClicked, calculateBreakPoints_fn, setTabArray_fn, updateCollapsibleTabs_fn, isElementTabLike_fn, isElementHrefLike_fn;
|
|
10
|
-
import { LitElement, html, css } from "lit";
|
|
11
|
-
import { query, queryAssignedElements, property } from "lit/decorators.js";
|
|
12
|
-
import { repeat } from "lit/directives/repeat.js";
|
|
1
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
|
|
13
2
|
import "../button/button.js";
|
|
14
|
-
import "../symbol-more/symbol-more.js";
|
|
15
3
|
import "../popover-container/popover-container.js";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
4
|
+
import "../symbol-more/symbol-more.js";
|
|
5
|
+
import { LitElement, css, html } from "lit";
|
|
6
|
+
import { property, query, queryAssignedElements } from "lit/decorators.js";
|
|
7
|
+
import { repeat } from "lit/directives/repeat.js";
|
|
8
|
+
//#region src/components/tabs/tab-group.element.ts
|
|
9
|
+
/**
|
|
10
|
+
* @element uui-tab-group
|
|
11
|
+
* @slot - Default slot for the tab group
|
|
12
|
+
* @cssprop --uui-tab-group-dropdown-tab-text - Define the tab text color in the dropdown
|
|
13
|
+
* @cssprop --uui-tab-group-dropdown-tab-text-hover - Define the tab text hover color in the dropdown
|
|
14
|
+
* @cssprop --uui-tab-group-dropdown-tab-text-active - Define the tab text active color in the dropdown
|
|
15
|
+
* @cssprop --uui-tab-group-dropdown-background - Define the background color of the dropdown
|
|
16
|
+
* @cssprop --uui-tab-group-gap - Define the gap between elements dropdown. Only pixel values are valid
|
|
17
|
+
*/
|
|
18
|
+
var UUITabGroupElement = class extends LitElement {
|
|
19
|
+
constructor(..._args) {
|
|
20
|
+
super(..._args);
|
|
21
|
+
this.#currentGap = 0;
|
|
22
|
+
this.dropdownContentDirection = "vertical";
|
|
23
|
+
this.#tabElements = [];
|
|
24
|
+
this.#hiddenTabElements = [];
|
|
25
|
+
this.#hiddenTabElementsMap = /* @__PURE__ */ new Map();
|
|
26
|
+
this.#visibilityBreakpoints = [];
|
|
27
|
+
this.#resizeObserver = new ResizeObserver(this.#onResize.bind(this));
|
|
28
|
+
this.#tabResizeObservers = [];
|
|
29
|
+
this.#breakPointCalculationInProgress = false;
|
|
30
|
+
this.#onTabClicked = (e) => {
|
|
31
|
+
const selectedElement = e.currentTarget;
|
|
32
|
+
const isCtrlClick = e.ctrlKey || e.metaKey;
|
|
33
|
+
if (this.#isElementHrefLike(selectedElement) && isCtrlClick) return;
|
|
34
|
+
if (selectedElement.classList.contains("hidden-tab") && this.#isElementTabLike(selectedElement)) {
|
|
35
|
+
const original = this.#hiddenTabElementsMap.get(selectedElement);
|
|
36
|
+
if (original) {
|
|
37
|
+
original.click();
|
|
38
|
+
this._moreButtonElement.classList.add("active-inside");
|
|
39
|
+
this._popoverContainerElement.hidePopover();
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (this.#isElementTabLike(selectedElement)) {
|
|
44
|
+
selectedElement.active = true;
|
|
45
|
+
const linkedElement = this.#hiddenTabElementsMap.get(selectedElement);
|
|
46
|
+
if (linkedElement) linkedElement.active = true;
|
|
47
|
+
[...this.#tabElements, ...this.#hiddenTabElements].filter((el) => el !== selectedElement && el !== linkedElement).forEach((el) => {
|
|
48
|
+
if (this.#isElementTabLike(el)) el.active = false;
|
|
49
|
+
});
|
|
50
|
+
if (this.#hiddenTabElements.some((el) => el.active && el !== linkedElement)) this._moreButtonElement.classList.add("active-inside");
|
|
51
|
+
else this._moreButtonElement.classList.remove("active-inside");
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** Stores the current gap used in the breakpoints */
|
|
56
|
+
#currentGap;
|
|
57
|
+
#tabElements;
|
|
58
|
+
#hiddenTabElements;
|
|
59
|
+
#hiddenTabElementsMap;
|
|
60
|
+
#visibilityBreakpoints;
|
|
61
|
+
#resizeObserver;
|
|
62
|
+
#tabResizeObservers;
|
|
63
|
+
#breakPointCalculationInProgress;
|
|
64
|
+
connectedCallback() {
|
|
65
|
+
super.connectedCallback();
|
|
66
|
+
this.#initialize();
|
|
67
|
+
}
|
|
68
|
+
disconnectedCallback() {
|
|
69
|
+
super.disconnectedCallback();
|
|
70
|
+
this.#resizeObserver.unobserve(this);
|
|
71
|
+
this.#cleanupTabs();
|
|
72
|
+
}
|
|
73
|
+
async #initialize() {
|
|
74
|
+
await this.updateComplete;
|
|
75
|
+
this.#resizeObserver.observe(this._mainElement);
|
|
76
|
+
}
|
|
77
|
+
#onResize(entries) {
|
|
78
|
+
const gapCSSVar = Number.parseFloat(this.style.getPropertyValue("--uui-tab-group-gap"));
|
|
79
|
+
if ((Number.isNaN(gapCSSVar) ? 0 : gapCSSVar) === this.#currentGap) this.#updateCollapsibleTabs(entries[0].contentBoxSize[0].inlineSize);
|
|
80
|
+
else this.#calculateBreakPoints();
|
|
81
|
+
}
|
|
82
|
+
#cleanupTabs() {
|
|
83
|
+
this.#tabElements.forEach((el) => {
|
|
84
|
+
el.removeEventListener("click", this.#onTabClicked);
|
|
85
|
+
this.#tabResizeObservers.forEach((observer) => observer.disconnect());
|
|
86
|
+
});
|
|
87
|
+
this.#tabResizeObservers.length = 0;
|
|
88
|
+
this.#visibilityBreakpoints.length = 0;
|
|
89
|
+
}
|
|
90
|
+
#onSlotChange() {
|
|
91
|
+
this.#cleanupTabs();
|
|
92
|
+
this.#setTabArray();
|
|
93
|
+
this.#tabElements.forEach((el) => {
|
|
94
|
+
el.addEventListener("click", this.#onTabClicked);
|
|
95
|
+
const observer = new ResizeObserver(this.#calculateBreakPoints.bind(this));
|
|
96
|
+
observer.observe(el);
|
|
97
|
+
this.#tabResizeObservers.push(observer);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
#onTabClicked;
|
|
101
|
+
async #calculateBreakPoints() {
|
|
102
|
+
if (this.#breakPointCalculationInProgress) return;
|
|
103
|
+
this.#breakPointCalculationInProgress = true;
|
|
104
|
+
requestAnimationFrame(() => {
|
|
105
|
+
this.#breakPointCalculationInProgress = false;
|
|
106
|
+
});
|
|
107
|
+
await this.updateComplete;
|
|
108
|
+
const gapCSSVar = Number.parseFloat(this.style.getPropertyValue("--uui-tab-group-gap"));
|
|
109
|
+
const gap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;
|
|
110
|
+
this.#currentGap = gap;
|
|
111
|
+
let childrenWidth = 0;
|
|
112
|
+
for (let i = 0; i < this.#tabElements.length; i++) {
|
|
113
|
+
this.#tabElements[i].style.display = "";
|
|
114
|
+
childrenWidth += this.#tabElements[i].offsetWidth;
|
|
115
|
+
this.#visibilityBreakpoints[i] = childrenWidth;
|
|
116
|
+
childrenWidth += gap;
|
|
117
|
+
}
|
|
118
|
+
const tolerance = 2;
|
|
119
|
+
this._mainElement.style.width = childrenWidth - gap + tolerance + "px";
|
|
120
|
+
this.#updateCollapsibleTabs(this._mainElement.offsetWidth);
|
|
121
|
+
}
|
|
122
|
+
#setTabArray() {
|
|
123
|
+
this.#tabElements = this._slottedNodes ?? [];
|
|
124
|
+
this.#calculateBreakPoints();
|
|
125
|
+
}
|
|
126
|
+
#updateCollapsibleTabs(containerWidth) {
|
|
127
|
+
const containerWithoutButtonWidth = containerWidth - (this._moreButtonElement.offsetWidth || 0);
|
|
128
|
+
this.#hiddenTabElements.forEach((el) => {
|
|
129
|
+
el.removeEventListener("click", this.#onTabClicked);
|
|
130
|
+
});
|
|
131
|
+
this.#hiddenTabElements = [];
|
|
132
|
+
this.#hiddenTabElementsMap.clear();
|
|
133
|
+
let hasActiveTabInDropdown = false;
|
|
134
|
+
const len = this.#visibilityBreakpoints.length;
|
|
135
|
+
for (let i = 0; i < len; i++) {
|
|
136
|
+
const breakpoint = this.#visibilityBreakpoints[i];
|
|
137
|
+
const tab = this.#tabElements[i];
|
|
138
|
+
if (breakpoint <= (i === len - 1 ? containerWidth : containerWithoutButtonWidth)) tab.style.display = "";
|
|
139
|
+
else {
|
|
140
|
+
const proxyTab = tab.cloneNode(true);
|
|
141
|
+
proxyTab.addEventListener("click", this.#onTabClicked);
|
|
142
|
+
proxyTab.classList.add("hidden-tab");
|
|
143
|
+
proxyTab.style.display = "";
|
|
144
|
+
proxyTab.orientation = this.dropdownContentDirection;
|
|
145
|
+
this.#hiddenTabElementsMap.set(proxyTab, tab);
|
|
146
|
+
this.#hiddenTabElementsMap.set(tab, proxyTab);
|
|
147
|
+
this.#hiddenTabElements.push(proxyTab);
|
|
148
|
+
tab.style.display = "none";
|
|
149
|
+
if (tab.active) hasActiveTabInDropdown = true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (this.#hiddenTabElements.length === 0) {
|
|
153
|
+
this._moreButtonElement.style.display = "none";
|
|
154
|
+
this._popoverContainerElement.hidePopover();
|
|
155
|
+
} else this._moreButtonElement.style.display = "";
|
|
156
|
+
if (hasActiveTabInDropdown) this._moreButtonElement.classList.add("active-inside");
|
|
157
|
+
else this._moreButtonElement.classList.remove("active-inside");
|
|
158
|
+
this.requestUpdate();
|
|
159
|
+
}
|
|
160
|
+
#isElementTabLike(el) {
|
|
161
|
+
return typeof el === "object" && "active" in el && typeof el.active === "boolean";
|
|
162
|
+
}
|
|
163
|
+
#isElementHrefLike(el) {
|
|
164
|
+
return typeof el === "object" && "href" in el && typeof el.href === "string" && el.href;
|
|
165
|
+
}
|
|
166
|
+
render() {
|
|
167
|
+
return html`
|
|
99
168
|
<div id="main">
|
|
100
169
|
<div id="grid" role="tablist">
|
|
101
|
-
<slot @slotchange=${
|
|
170
|
+
<slot @slotchange=${this.#onSlotChange}></slot>
|
|
102
171
|
</div>
|
|
103
172
|
<uui-button
|
|
104
173
|
popovertarget="popover-container"
|
|
@@ -114,135 +183,13 @@ const _UUITabGroupElement = class _UUITabGroupElement extends LitElement {
|
|
|
114
183
|
popover
|
|
115
184
|
placement="bottom-end">
|
|
116
185
|
<div id="hidden-tabs-container" role="tablist">
|
|
117
|
-
${repeat(
|
|
186
|
+
${repeat(this.#hiddenTabElements, (el) => html`${el}`)}
|
|
118
187
|
</div>
|
|
119
188
|
</uui-popover-container>
|
|
120
189
|
`;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
_tabElements = new WeakMap();
|
|
125
|
-
_hiddenTabElements = new WeakMap();
|
|
126
|
-
_hiddenTabElementsMap = new WeakMap();
|
|
127
|
-
_visibilityBreakpoints = new WeakMap();
|
|
128
|
-
_resizeObserver = new WeakMap();
|
|
129
|
-
_tabResizeObservers = new WeakMap();
|
|
130
|
-
_breakPointCalculationInProgress = new WeakMap();
|
|
131
|
-
_UUITabGroupElement_instances = new WeakSet();
|
|
132
|
-
initialize_fn = async function() {
|
|
133
|
-
await this.updateComplete;
|
|
134
|
-
__privateGet(this, _resizeObserver).observe(this._mainElement);
|
|
135
|
-
};
|
|
136
|
-
onResize_fn = function(entries) {
|
|
137
|
-
const gapCSSVar = Number.parseFloat(
|
|
138
|
-
this.style.getPropertyValue("--uui-tab-group-gap")
|
|
139
|
-
);
|
|
140
|
-
const newGap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;
|
|
141
|
-
if (newGap === __privateGet(this, _currentGap)) {
|
|
142
|
-
__privateMethod(this, _UUITabGroupElement_instances, updateCollapsibleTabs_fn).call(this, entries[0].contentBoxSize[0].inlineSize);
|
|
143
|
-
} else {
|
|
144
|
-
__privateMethod(this, _UUITabGroupElement_instances, calculateBreakPoints_fn).call(this);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
cleanupTabs_fn = function() {
|
|
148
|
-
__privateGet(this, _tabElements).forEach((el) => {
|
|
149
|
-
el.removeEventListener("click", __privateGet(this, _onTabClicked));
|
|
150
|
-
__privateGet(this, _tabResizeObservers).forEach((observer) => observer.disconnect());
|
|
151
|
-
});
|
|
152
|
-
__privateGet(this, _tabResizeObservers).length = 0;
|
|
153
|
-
__privateGet(this, _visibilityBreakpoints).length = 0;
|
|
154
|
-
};
|
|
155
|
-
onSlotChange_fn = function() {
|
|
156
|
-
__privateMethod(this, _UUITabGroupElement_instances, cleanupTabs_fn).call(this);
|
|
157
|
-
__privateMethod(this, _UUITabGroupElement_instances, setTabArray_fn).call(this);
|
|
158
|
-
__privateGet(this, _tabElements).forEach((el) => {
|
|
159
|
-
el.addEventListener("click", __privateGet(this, _onTabClicked));
|
|
160
|
-
const observer = new ResizeObserver(
|
|
161
|
-
__privateMethod(this, _UUITabGroupElement_instances, calculateBreakPoints_fn).bind(this)
|
|
162
|
-
);
|
|
163
|
-
observer.observe(el);
|
|
164
|
-
__privateGet(this, _tabResizeObservers).push(observer);
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
|
-
_onTabClicked = new WeakMap();
|
|
168
|
-
calculateBreakPoints_fn = async function() {
|
|
169
|
-
if (__privateGet(this, _breakPointCalculationInProgress)) return;
|
|
170
|
-
__privateSet(this, _breakPointCalculationInProgress, true);
|
|
171
|
-
requestAnimationFrame(() => {
|
|
172
|
-
__privateSet(this, _breakPointCalculationInProgress, false);
|
|
173
|
-
});
|
|
174
|
-
await this.updateComplete;
|
|
175
|
-
const gapCSSVar = Number.parseFloat(
|
|
176
|
-
this.style.getPropertyValue("--uui-tab-group-gap")
|
|
177
|
-
);
|
|
178
|
-
const gap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;
|
|
179
|
-
__privateSet(this, _currentGap, gap);
|
|
180
|
-
let childrenWidth = 0;
|
|
181
|
-
for (let i = 0; i < __privateGet(this, _tabElements).length; i++) {
|
|
182
|
-
__privateGet(this, _tabElements)[i].style.display = "";
|
|
183
|
-
childrenWidth += __privateGet(this, _tabElements)[i].offsetWidth;
|
|
184
|
-
__privateGet(this, _visibilityBreakpoints)[i] = childrenWidth;
|
|
185
|
-
childrenWidth += gap;
|
|
186
|
-
}
|
|
187
|
-
const tolerance = 2;
|
|
188
|
-
this._mainElement.style.width = childrenWidth - gap + tolerance + "px";
|
|
189
|
-
__privateMethod(this, _UUITabGroupElement_instances, updateCollapsibleTabs_fn).call(this, this._mainElement.offsetWidth);
|
|
190
|
-
};
|
|
191
|
-
setTabArray_fn = function() {
|
|
192
|
-
__privateSet(this, _tabElements, this._slottedNodes ?? []);
|
|
193
|
-
__privateMethod(this, _UUITabGroupElement_instances, calculateBreakPoints_fn).call(this);
|
|
194
|
-
};
|
|
195
|
-
updateCollapsibleTabs_fn = function(containerWidth) {
|
|
196
|
-
const moreButtonWidth = this._moreButtonElement.offsetWidth;
|
|
197
|
-
const containerWithoutButtonWidth = containerWidth - (moreButtonWidth || 0);
|
|
198
|
-
__privateGet(this, _hiddenTabElements).forEach((el) => {
|
|
199
|
-
el.removeEventListener("click", __privateGet(this, _onTabClicked));
|
|
200
|
-
});
|
|
201
|
-
__privateSet(this, _hiddenTabElements, []);
|
|
202
|
-
__privateGet(this, _hiddenTabElementsMap).clear();
|
|
203
|
-
let hasActiveTabInDropdown = false;
|
|
204
|
-
const len = __privateGet(this, _visibilityBreakpoints).length;
|
|
205
|
-
for (let i = 0; i < len; i++) {
|
|
206
|
-
const breakpoint = __privateGet(this, _visibilityBreakpoints)[i];
|
|
207
|
-
const tab = __privateGet(this, _tabElements)[i];
|
|
208
|
-
if (breakpoint <= (i === len - 1 ? containerWidth : containerWithoutButtonWidth)) {
|
|
209
|
-
tab.style.display = "";
|
|
210
|
-
} else {
|
|
211
|
-
const proxyTab = tab.cloneNode(true);
|
|
212
|
-
proxyTab.addEventListener("click", __privateGet(this, _onTabClicked));
|
|
213
|
-
proxyTab.classList.add("hidden-tab");
|
|
214
|
-
proxyTab.style.display = "";
|
|
215
|
-
proxyTab.orientation = this.dropdownContentDirection;
|
|
216
|
-
__privateGet(this, _hiddenTabElementsMap).set(proxyTab, tab);
|
|
217
|
-
__privateGet(this, _hiddenTabElementsMap).set(tab, proxyTab);
|
|
218
|
-
__privateGet(this, _hiddenTabElements).push(proxyTab);
|
|
219
|
-
tab.style.display = "none";
|
|
220
|
-
if (tab.active) {
|
|
221
|
-
hasActiveTabInDropdown = true;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (__privateGet(this, _hiddenTabElements).length === 0) {
|
|
226
|
-
this._moreButtonElement.style.display = "none";
|
|
227
|
-
this._popoverContainerElement.hidePopover();
|
|
228
|
-
} else {
|
|
229
|
-
this._moreButtonElement.style.display = "";
|
|
230
|
-
}
|
|
231
|
-
if (hasActiveTabInDropdown) {
|
|
232
|
-
this._moreButtonElement.classList.add("active-inside");
|
|
233
|
-
} else {
|
|
234
|
-
this._moreButtonElement.classList.remove("active-inside");
|
|
235
|
-
}
|
|
236
|
-
this.requestUpdate();
|
|
237
|
-
};
|
|
238
|
-
isElementTabLike_fn = function(el) {
|
|
239
|
-
return typeof el === "object" && "active" in el && typeof el.active === "boolean";
|
|
240
|
-
};
|
|
241
|
-
isElementHrefLike_fn = function(el) {
|
|
242
|
-
return typeof el === "object" && "href" in el && typeof el.href === "string" && el.href;
|
|
243
|
-
};
|
|
244
|
-
_UUITabGroupElement.styles = [
|
|
245
|
-
css`
|
|
190
|
+
}
|
|
191
|
+
static {
|
|
192
|
+
this.styles = [css`
|
|
246
193
|
:host {
|
|
247
194
|
min-width: 0;
|
|
248
195
|
display: flex;
|
|
@@ -330,32 +277,22 @@ _UUITabGroupElement.styles = [
|
|
|
330
277
|
opacity 120ms,
|
|
331
278
|
height ease-out 120ms;
|
|
332
279
|
}
|
|
333
|
-
`
|
|
334
|
-
|
|
335
|
-
let UUITabGroupElement = _UUITabGroupElement;
|
|
336
|
-
__decorateClass([
|
|
337
|
-
query("#more-button")
|
|
338
|
-
], UUITabGroupElement.prototype, "_moreButtonElement");
|
|
339
|
-
__decorateClass([
|
|
340
|
-
query("#popover-container")
|
|
341
|
-
], UUITabGroupElement.prototype, "_popoverContainerElement");
|
|
342
|
-
__decorateClass([
|
|
343
|
-
query("#main")
|
|
344
|
-
], UUITabGroupElement.prototype, "_mainElement");
|
|
345
|
-
__decorateClass([
|
|
346
|
-
queryAssignedElements({
|
|
347
|
-
flatten: true,
|
|
348
|
-
selector: "uui-tab, [uui-tab], [role=tab]"
|
|
349
|
-
})
|
|
350
|
-
], UUITabGroupElement.prototype, "_slottedNodes");
|
|
351
|
-
__decorateClass([
|
|
352
|
-
property({
|
|
353
|
-
type: String,
|
|
354
|
-
reflect: true,
|
|
355
|
-
attribute: "dropdown-content-direction"
|
|
356
|
-
})
|
|
357
|
-
], UUITabGroupElement.prototype, "dropdownContentDirection");
|
|
358
|
-
export {
|
|
359
|
-
UUITabGroupElement
|
|
280
|
+
`];
|
|
281
|
+
}
|
|
360
282
|
};
|
|
361
|
-
|
|
283
|
+
__decorate([query("#more-button")], UUITabGroupElement.prototype, "_moreButtonElement", void 0);
|
|
284
|
+
__decorate([query("#popover-container")], UUITabGroupElement.prototype, "_popoverContainerElement", void 0);
|
|
285
|
+
__decorate([query("#main")], UUITabGroupElement.prototype, "_mainElement", void 0);
|
|
286
|
+
__decorate([queryAssignedElements({
|
|
287
|
+
flatten: true,
|
|
288
|
+
selector: "uui-tab, [uui-tab], [role=tab]"
|
|
289
|
+
})], UUITabGroupElement.prototype, "_slottedNodes", void 0);
|
|
290
|
+
__decorate([property({
|
|
291
|
+
type: String,
|
|
292
|
+
reflect: true,
|
|
293
|
+
attribute: "dropdown-content-direction"
|
|
294
|
+
})], UUITabGroupElement.prototype, "dropdownContentDirection", void 0);
|
|
295
|
+
//#endregion
|
|
296
|
+
export { UUITabGroupElement };
|
|
297
|
+
|
|
298
|
+
//# sourceMappingURL=tab-group.element.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab-group.element.js","sources":["../../../src/components/tabs/tab-group.element.ts"],"sourcesContent":["import type { UUIButtonElement } from '../button/button.js';\nimport type { UUIPopoverContainerElement } from '../popover-container/popover-container.js';\nimport { css, html, LitElement } from 'lit';\nimport { property, query, queryAssignedElements } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\n\nimport type { UUITabElement } from './tab.element.js';\n\nimport '../button/button.js';\nimport '../symbol-more/symbol-more.js';\nimport '../popover-container/popover-container.js';\n\n/**\n * @element uui-tab-group\n * @slot - Default slot for the tab group\n * @cssprop --uui-tab-group-dropdown-tab-text - Define the tab text color in the dropdown\n * @cssprop --uui-tab-group-dropdown-tab-text-hover - Define the tab text hover color in the dropdown\n * @cssprop --uui-tab-group-dropdown-tab-text-active - Define the tab text active color in the dropdown\n * @cssprop --uui-tab-group-dropdown-background - Define the background color of the dropdown\n * @cssprop --uui-tab-group-gap - Define the gap between elements dropdown. Only pixel values are valid\n */\nexport class UUITabGroupElement extends LitElement {\n @query('#more-button')\n private readonly _moreButtonElement!: UUIButtonElement;\n\n @query('#popover-container')\n private readonly _popoverContainerElement!: UUIPopoverContainerElement;\n\n @query('#main') private readonly _mainElement!: HTMLElement;\n\n @queryAssignedElements({\n flatten: true,\n selector: 'uui-tab, [uui-tab], [role=tab]',\n })\n private readonly _slottedNodes?: HTMLElement[];\n\n /** Stores the current gap used in the breakpoints */\n #currentGap = 0;\n\n /**\n * Set the flex direction of the content of the dropdown.\n * @type {string}\n * @attr\n * @default vertical\n */\n @property({\n type: String,\n reflect: true,\n attribute: 'dropdown-content-direction',\n })\n dropdownContentDirection: 'vertical' | 'horizontal' = 'vertical';\n\n #tabElements: HTMLElement[] = [];\n\n #hiddenTabElements: UUITabElement[] = [];\n readonly #hiddenTabElementsMap: Map<UUITabElement, UUITabElement> = new Map();\n\n #visibilityBreakpoints: number[] = [];\n\n readonly #resizeObserver = new ResizeObserver(this.#onResize.bind(this));\n readonly #tabResizeObservers: ResizeObserver[] = [];\n\n #breakPointCalculationInProgress = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.#initialize();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#resizeObserver.unobserve(this);\n this.#cleanupTabs();\n }\n\n async #initialize() {\n await this.updateComplete;\n this.#resizeObserver.observe(this._mainElement);\n }\n\n #onResize(entries: ResizeObserverEntry[]) {\n // Check if the gap css custom property has changed.\n const gapCSSVar = Number.parseFloat(\n this.style.getPropertyValue('--uui-tab-group-gap'),\n );\n const newGap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;\n if (newGap === this.#currentGap) {\n this.#updateCollapsibleTabs(entries[0].contentBoxSize[0].inlineSize);\n } else {\n this.#calculateBreakPoints();\n }\n }\n\n #cleanupTabs() {\n this.#tabElements.forEach(el => {\n el.removeEventListener('click', this.#onTabClicked);\n this.#tabResizeObservers.forEach(observer => observer.disconnect());\n });\n this.#tabResizeObservers.length = 0;\n this.#visibilityBreakpoints.length = 0;\n }\n\n #onSlotChange() {\n this.#cleanupTabs();\n\n this.#setTabArray();\n\n this.#tabElements.forEach(el => {\n el.addEventListener('click', this.#onTabClicked);\n const observer = new ResizeObserver(\n this.#calculateBreakPoints.bind(this),\n );\n observer.observe(el);\n this.#tabResizeObservers.push(observer);\n });\n }\n\n readonly #onTabClicked = (e: MouseEvent) => {\n const selectedElement = e.currentTarget as HTMLElement;\n\n // Don't switch active tabs when a href is being opened in a new browser tab\n const isCtrlClick = e.ctrlKey || e.metaKey;\n if (this.#isElementHrefLike(selectedElement) && isCtrlClick) {\n return;\n }\n\n // If hidden, forward to the original — external listeners fire there\n if (\n selectedElement.classList.contains('hidden-tab') &&\n this.#isElementTabLike(selectedElement)\n ) {\n const original = this.#hiddenTabElementsMap.get(selectedElement);\n if (original) {\n original.click();\n this._moreButtonElement.classList.add('active-inside');\n this._popoverContainerElement.hidePopover();\n }\n return;\n }\n\n if (this.#isElementTabLike(selectedElement)) {\n selectedElement.active = true;\n const linkedElement = this.#hiddenTabElementsMap.get(selectedElement);\n\n if (linkedElement) {\n linkedElement.active = true;\n }\n\n // Reset all other tabs\n const filtered = [\n ...this.#tabElements,\n ...this.#hiddenTabElements,\n ].filter(el => el !== selectedElement && el !== linkedElement);\n\n filtered.forEach(el => {\n if (this.#isElementTabLike(el)) {\n el.active = false;\n }\n });\n\n // Check if there are any active tabs in the dropdown\n const hasActiveHidden = this.#hiddenTabElements.some(\n el => el.active && el !== linkedElement,\n );\n\n if (hasActiveHidden) {\n this._moreButtonElement.classList.add('active-inside');\n } else {\n this._moreButtonElement.classList.remove('active-inside');\n }\n }\n };\n\n async #calculateBreakPoints() {\n if (this.#breakPointCalculationInProgress) return;\n\n // Prevent multiple calculations from happening in the same frame\n this.#breakPointCalculationInProgress = true;\n requestAnimationFrame(() => {\n this.#breakPointCalculationInProgress = false;\n });\n\n // Whenever a tab is added or removed, we need to recalculate the breakpoints\n\n await this.updateComplete; // Wait for the tabs to be rendered\n\n const gapCSSVar = Number.parseFloat(\n this.style.getPropertyValue('--uui-tab-group-gap'),\n );\n const gap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;\n this.#currentGap = gap;\n let childrenWidth = 0;\n\n for (let i = 0; i < this.#tabElements.length; i++) {\n this.#tabElements[i].style.display = '';\n childrenWidth += this.#tabElements[i].offsetWidth;\n this.#visibilityBreakpoints[i] = childrenWidth;\n // Add the gap, which will then be included in the next breakpoint:\n childrenWidth += gap;\n }\n\n const tolerance = 2;\n this._mainElement.style.width = childrenWidth - gap + tolerance + 'px';\n\n this.#updateCollapsibleTabs(this._mainElement.offsetWidth);\n }\n\n #setTabArray() {\n this.#tabElements = this._slottedNodes ?? [];\n this.#calculateBreakPoints();\n }\n\n #updateCollapsibleTabs(containerWidth: number) {\n const moreButtonWidth = this._moreButtonElement.offsetWidth;\n\n const containerWithoutButtonWidth = containerWidth - (moreButtonWidth || 0);\n\n // Do the update\n // Reset the hidden tabs\n this.#hiddenTabElements.forEach(el => {\n el.removeEventListener('click', this.#onTabClicked);\n });\n this.#hiddenTabElements = [];\n this.#hiddenTabElementsMap.clear();\n\n let hasActiveTabInDropdown = false;\n\n const len = this.#visibilityBreakpoints.length;\n for (let i = 0; i < len; i++) {\n const breakpoint = this.#visibilityBreakpoints[i];\n const tab = this.#tabElements[i] as UUITabElement;\n\n // If breakpoint is smaller than the container width, then show the tab.\n // If last breakpoint, then we will use the containerWidth, as we do not want to include the more-button in that calculation.\n if (\n breakpoint <=\n (i === len - 1 ? containerWidth : containerWithoutButtonWidth)\n ) {\n // Show this tab:\n tab.style.display = '';\n } else {\n // Make a proxy tab to put in the hidden tabs container and link it to the original tab\n const proxyTab = tab.cloneNode(true) as UUITabElement;\n proxyTab.addEventListener('click', this.#onTabClicked);\n proxyTab.classList.add('hidden-tab');\n proxyTab.style.display = '';\n proxyTab.orientation = this.dropdownContentDirection;\n\n // Link the proxy tab to the original tab\n this.#hiddenTabElementsMap.set(proxyTab, tab);\n this.#hiddenTabElementsMap.set(tab, proxyTab);\n\n this.#hiddenTabElements.push(proxyTab);\n\n tab.style.display = 'none';\n if (tab.active) {\n hasActiveTabInDropdown = true;\n }\n }\n }\n\n if (this.#hiddenTabElements.length === 0) {\n // Hide more button:\n this._moreButtonElement.style.display = 'none';\n // close the popover\n this._popoverContainerElement.hidePopover();\n } else {\n // Show more button:\n this._moreButtonElement.style.display = '';\n }\n\n if (hasActiveTabInDropdown) {\n this._moreButtonElement.classList.add('active-inside');\n } else {\n this._moreButtonElement.classList.remove('active-inside');\n }\n\n this.requestUpdate();\n }\n\n #isElementTabLike(el: any): el is UUITabElement {\n return (\n typeof el === 'object' && 'active' in el && typeof el.active === 'boolean'\n );\n }\n\n #isElementHrefLike(el: any): el is UUITabElement {\n return (\n typeof el === 'object' &&\n 'href' in el &&\n typeof el.href === 'string' &&\n el.href\n );\n }\n\n render() {\n return html`\n <div id=\"main\">\n <div id=\"grid\" role=\"tablist\">\n <slot @slotchange=${this.#onSlotChange}></slot>\n </div>\n <uui-button\n popovertarget=\"popover-container\"\n style=\"display: none\"\n id=\"more-button\"\n label=\"More\"\n compact>\n <uui-symbol-more></uui-symbol-more>\n </uui-button>\n </div>\n <uui-popover-container\n id=\"popover-container\"\n popover\n placement=\"bottom-end\">\n <div id=\"hidden-tabs-container\" role=\"tablist\">\n ${repeat(this.#hiddenTabElements, el => html`${el}`)}\n </div>\n </uui-popover-container>\n `;\n }\n\n static override readonly styles = [\n css`\n :host {\n min-width: 0;\n display: flex;\n height: 100%;\n }\n\n #main {\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n }\n\n #grid {\n width: 1fr;\n display: flex;\n height: 100%;\n min-height: 48px;\n overflow: hidden;\n text-wrap: nowrap;\n color: var(--uui-tab-text);\n gap: var(--uui-tab-group-gap, 0);\n }\n\n #popover-container {\n --uui-tab-text: var(--uui-tab-group-dropdown-tab-text, unset);\n --uui-tab-text-hover: var(\n --uui-tab-group-dropdown-tab-text-hover,\n unset\n );\n --uui-tab-text-active: var(\n --uui-tab-group-dropdown-tab-text-active,\n unset\n );\n }\n\n ::slotted(*:not(:last-of-type)) {\n border-right: 1px solid var(--uui-tab-divider, none);\n }\n\n .hidden-tab {\n width: 100%;\n }\n\n #hidden-tabs-container {\n width: fit-content;\n display: flex;\n flex-direction: column;\n background-color: var(\n --uui-tab-group-dropdown-background,\n var(--uui-color-surface)\n );\n border-radius: var(--uui-border-radius);\n box-shadow: var(--uui-shadow-depth-3);\n overflow: hidden;\n }\n :host([dropdown-direction='horizontal']) #hidden-tabs-container {\n flex-direction: row;\n }\n\n #more-button {\n position: relative;\n\n --uui-button-contrast: var(--uui-tab-text);\n --uui-button-contrast-hover: var(--uui-tab-text-hover);\n --uui-button-background-color: transparent;\n --uui-button-background-color-hover: transparent;\n }\n #more-button::before {\n content: '';\n position: absolute;\n bottom: 0;\n width: 100%;\n background-color: var(--uui-color-current);\n height: 0px;\n border-radius: var(--uui-border-radius) var(--uui-border-radius) 0 0;\n opacity: 0;\n transition:\n opacity ease-in 120ms,\n height ease-in 120ms;\n }\n #more-button.active-inside::before {\n opacity: 1;\n height: 4px;\n transition:\n opacity 120ms,\n height ease-out 120ms;\n }\n `,\n ];\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tab-group.element.js","names":["#onResize","#isElementHrefLike","#isElementTabLike","#hiddenTabElementsMap","#tabElements","#hiddenTabElements","#resizeObserver","#tabResizeObservers","#initialize","#cleanupTabs","#currentGap","#updateCollapsibleTabs","#calculateBreakPoints","#onTabClicked","#visibilityBreakpoints","#setTabArray","#breakPointCalculationInProgress","#onSlotChange"],"sources":["../../../src/components/tabs/tab-group.element.ts"],"sourcesContent":["import type { UUIButtonElement } from '../button/button.js';\nimport type { UUIPopoverContainerElement } from '../popover-container/popover-container.js';\nimport { css, html, LitElement } from 'lit';\nimport { property, query, queryAssignedElements } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\n\nimport type { UUITabElement } from './tab.element.js';\n\nimport '../button/button.js';\nimport '../symbol-more/symbol-more.js';\nimport '../popover-container/popover-container.js';\n\n/**\n * @element uui-tab-group\n * @slot - Default slot for the tab group\n * @cssprop --uui-tab-group-dropdown-tab-text - Define the tab text color in the dropdown\n * @cssprop --uui-tab-group-dropdown-tab-text-hover - Define the tab text hover color in the dropdown\n * @cssprop --uui-tab-group-dropdown-tab-text-active - Define the tab text active color in the dropdown\n * @cssprop --uui-tab-group-dropdown-background - Define the background color of the dropdown\n * @cssprop --uui-tab-group-gap - Define the gap between elements dropdown. Only pixel values are valid\n */\nexport class UUITabGroupElement extends LitElement {\n @query('#more-button')\n private readonly _moreButtonElement!: UUIButtonElement;\n\n @query('#popover-container')\n private readonly _popoverContainerElement!: UUIPopoverContainerElement;\n\n @query('#main') private readonly _mainElement!: HTMLElement;\n\n @queryAssignedElements({\n flatten: true,\n selector: 'uui-tab, [uui-tab], [role=tab]',\n })\n private readonly _slottedNodes?: HTMLElement[];\n\n /** Stores the current gap used in the breakpoints */\n #currentGap = 0;\n\n /**\n * Set the flex direction of the content of the dropdown.\n * @type {string}\n * @attr\n * @default vertical\n */\n @property({\n type: String,\n reflect: true,\n attribute: 'dropdown-content-direction',\n })\n dropdownContentDirection: 'vertical' | 'horizontal' = 'vertical';\n\n #tabElements: HTMLElement[] = [];\n\n #hiddenTabElements: UUITabElement[] = [];\n readonly #hiddenTabElementsMap: Map<UUITabElement, UUITabElement> = new Map();\n\n #visibilityBreakpoints: number[] = [];\n\n readonly #resizeObserver = new ResizeObserver(this.#onResize.bind(this));\n readonly #tabResizeObservers: ResizeObserver[] = [];\n\n #breakPointCalculationInProgress = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.#initialize();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#resizeObserver.unobserve(this);\n this.#cleanupTabs();\n }\n\n async #initialize() {\n await this.updateComplete;\n this.#resizeObserver.observe(this._mainElement);\n }\n\n #onResize(entries: ResizeObserverEntry[]) {\n // Check if the gap css custom property has changed.\n const gapCSSVar = Number.parseFloat(\n this.style.getPropertyValue('--uui-tab-group-gap'),\n );\n const newGap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;\n if (newGap === this.#currentGap) {\n this.#updateCollapsibleTabs(entries[0].contentBoxSize[0].inlineSize);\n } else {\n this.#calculateBreakPoints();\n }\n }\n\n #cleanupTabs() {\n this.#tabElements.forEach(el => {\n el.removeEventListener('click', this.#onTabClicked);\n this.#tabResizeObservers.forEach(observer => observer.disconnect());\n });\n this.#tabResizeObservers.length = 0;\n this.#visibilityBreakpoints.length = 0;\n }\n\n #onSlotChange() {\n this.#cleanupTabs();\n\n this.#setTabArray();\n\n this.#tabElements.forEach(el => {\n el.addEventListener('click', this.#onTabClicked);\n const observer = new ResizeObserver(\n this.#calculateBreakPoints.bind(this),\n );\n observer.observe(el);\n this.#tabResizeObservers.push(observer);\n });\n }\n\n readonly #onTabClicked = (e: MouseEvent) => {\n const selectedElement = e.currentTarget as HTMLElement;\n\n // Don't switch active tabs when a href is being opened in a new browser tab\n const isCtrlClick = e.ctrlKey || e.metaKey;\n if (this.#isElementHrefLike(selectedElement) && isCtrlClick) {\n return;\n }\n\n // If hidden, forward to the original — external listeners fire there\n if (\n selectedElement.classList.contains('hidden-tab') &&\n this.#isElementTabLike(selectedElement)\n ) {\n const original = this.#hiddenTabElementsMap.get(selectedElement);\n if (original) {\n original.click();\n this._moreButtonElement.classList.add('active-inside');\n this._popoverContainerElement.hidePopover();\n }\n return;\n }\n\n if (this.#isElementTabLike(selectedElement)) {\n selectedElement.active = true;\n const linkedElement = this.#hiddenTabElementsMap.get(selectedElement);\n\n if (linkedElement) {\n linkedElement.active = true;\n }\n\n // Reset all other tabs\n const filtered = [\n ...this.#tabElements,\n ...this.#hiddenTabElements,\n ].filter(el => el !== selectedElement && el !== linkedElement);\n\n filtered.forEach(el => {\n if (this.#isElementTabLike(el)) {\n el.active = false;\n }\n });\n\n // Check if there are any active tabs in the dropdown\n const hasActiveHidden = this.#hiddenTabElements.some(\n el => el.active && el !== linkedElement,\n );\n\n if (hasActiveHidden) {\n this._moreButtonElement.classList.add('active-inside');\n } else {\n this._moreButtonElement.classList.remove('active-inside');\n }\n }\n };\n\n async #calculateBreakPoints() {\n if (this.#breakPointCalculationInProgress) return;\n\n // Prevent multiple calculations from happening in the same frame\n this.#breakPointCalculationInProgress = true;\n requestAnimationFrame(() => {\n this.#breakPointCalculationInProgress = false;\n });\n\n // Whenever a tab is added or removed, we need to recalculate the breakpoints\n\n await this.updateComplete; // Wait for the tabs to be rendered\n\n const gapCSSVar = Number.parseFloat(\n this.style.getPropertyValue('--uui-tab-group-gap'),\n );\n const gap = Number.isNaN(gapCSSVar) ? 0 : gapCSSVar;\n this.#currentGap = gap;\n let childrenWidth = 0;\n\n for (let i = 0; i < this.#tabElements.length; i++) {\n this.#tabElements[i].style.display = '';\n childrenWidth += this.#tabElements[i].offsetWidth;\n this.#visibilityBreakpoints[i] = childrenWidth;\n // Add the gap, which will then be included in the next breakpoint:\n childrenWidth += gap;\n }\n\n const tolerance = 2;\n this._mainElement.style.width = childrenWidth - gap + tolerance + 'px';\n\n this.#updateCollapsibleTabs(this._mainElement.offsetWidth);\n }\n\n #setTabArray() {\n this.#tabElements = this._slottedNodes ?? [];\n this.#calculateBreakPoints();\n }\n\n #updateCollapsibleTabs(containerWidth: number) {\n const moreButtonWidth = this._moreButtonElement.offsetWidth;\n\n const containerWithoutButtonWidth = containerWidth - (moreButtonWidth || 0);\n\n // Do the update\n // Reset the hidden tabs\n this.#hiddenTabElements.forEach(el => {\n el.removeEventListener('click', this.#onTabClicked);\n });\n this.#hiddenTabElements = [];\n this.#hiddenTabElementsMap.clear();\n\n let hasActiveTabInDropdown = false;\n\n const len = this.#visibilityBreakpoints.length;\n for (let i = 0; i < len; i++) {\n const breakpoint = this.#visibilityBreakpoints[i];\n const tab = this.#tabElements[i] as UUITabElement;\n\n // If breakpoint is smaller than the container width, then show the tab.\n // If last breakpoint, then we will use the containerWidth, as we do not want to include the more-button in that calculation.\n if (\n breakpoint <=\n (i === len - 1 ? containerWidth : containerWithoutButtonWidth)\n ) {\n // Show this tab:\n tab.style.display = '';\n } else {\n // Make a proxy tab to put in the hidden tabs container and link it to the original tab\n const proxyTab = tab.cloneNode(true) as UUITabElement;\n proxyTab.addEventListener('click', this.#onTabClicked);\n proxyTab.classList.add('hidden-tab');\n proxyTab.style.display = '';\n proxyTab.orientation = this.dropdownContentDirection;\n\n // Link the proxy tab to the original tab\n this.#hiddenTabElementsMap.set(proxyTab, tab);\n this.#hiddenTabElementsMap.set(tab, proxyTab);\n\n this.#hiddenTabElements.push(proxyTab);\n\n tab.style.display = 'none';\n if (tab.active) {\n hasActiveTabInDropdown = true;\n }\n }\n }\n\n if (this.#hiddenTabElements.length === 0) {\n // Hide more button:\n this._moreButtonElement.style.display = 'none';\n // close the popover\n this._popoverContainerElement.hidePopover();\n } else {\n // Show more button:\n this._moreButtonElement.style.display = '';\n }\n\n if (hasActiveTabInDropdown) {\n this._moreButtonElement.classList.add('active-inside');\n } else {\n this._moreButtonElement.classList.remove('active-inside');\n }\n\n this.requestUpdate();\n }\n\n #isElementTabLike(el: any): el is UUITabElement {\n return (\n typeof el === 'object' && 'active' in el && typeof el.active === 'boolean'\n );\n }\n\n #isElementHrefLike(el: any): el is UUITabElement {\n return (\n typeof el === 'object' &&\n 'href' in el &&\n typeof el.href === 'string' &&\n el.href\n );\n }\n\n render() {\n return html`\n <div id=\"main\">\n <div id=\"grid\" role=\"tablist\">\n <slot @slotchange=${this.#onSlotChange}></slot>\n </div>\n <uui-button\n popovertarget=\"popover-container\"\n style=\"display: none\"\n id=\"more-button\"\n label=\"More\"\n compact>\n <uui-symbol-more></uui-symbol-more>\n </uui-button>\n </div>\n <uui-popover-container\n id=\"popover-container\"\n popover\n placement=\"bottom-end\">\n <div id=\"hidden-tabs-container\" role=\"tablist\">\n ${repeat(this.#hiddenTabElements, el => html`${el}`)}\n </div>\n </uui-popover-container>\n `;\n }\n\n static override readonly styles = [\n css`\n :host {\n min-width: 0;\n display: flex;\n height: 100%;\n }\n\n #main {\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n }\n\n #grid {\n width: 1fr;\n display: flex;\n height: 100%;\n min-height: 48px;\n overflow: hidden;\n text-wrap: nowrap;\n color: var(--uui-tab-text);\n gap: var(--uui-tab-group-gap, 0);\n }\n\n #popover-container {\n --uui-tab-text: var(--uui-tab-group-dropdown-tab-text, unset);\n --uui-tab-text-hover: var(\n --uui-tab-group-dropdown-tab-text-hover,\n unset\n );\n --uui-tab-text-active: var(\n --uui-tab-group-dropdown-tab-text-active,\n unset\n );\n }\n\n ::slotted(*:not(:last-of-type)) {\n border-right: 1px solid var(--uui-tab-divider, none);\n }\n\n .hidden-tab {\n width: 100%;\n }\n\n #hidden-tabs-container {\n width: fit-content;\n display: flex;\n flex-direction: column;\n background-color: var(\n --uui-tab-group-dropdown-background,\n var(--uui-color-surface)\n );\n border-radius: var(--uui-border-radius);\n box-shadow: var(--uui-shadow-depth-3);\n overflow: hidden;\n }\n :host([dropdown-direction='horizontal']) #hidden-tabs-container {\n flex-direction: row;\n }\n\n #more-button {\n position: relative;\n\n --uui-button-contrast: var(--uui-tab-text);\n --uui-button-contrast-hover: var(--uui-tab-text-hover);\n --uui-button-background-color: transparent;\n --uui-button-background-color-hover: transparent;\n }\n #more-button::before {\n content: '';\n position: absolute;\n bottom: 0;\n width: 100%;\n background-color: var(--uui-color-current);\n height: 0px;\n border-radius: var(--uui-border-radius) var(--uui-border-radius) 0 0;\n opacity: 0;\n transition:\n opacity ease-in 120ms,\n height ease-in 120ms;\n }\n #more-button.active-inside::before {\n opacity: 1;\n height: 4px;\n transition:\n opacity 120ms,\n height ease-out 120ms;\n }\n `,\n ];\n}\n"],"mappings":"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"}
|