@ui5/webcomponents-base 0.0.0-e818f286e → 0.0.0-ee3bbe46b
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/.eslintignore +1 -0
- package/CHANGELOG.md +75 -0
- package/bundle.esm.js +5 -1
- package/dist/AssetRegistry.d.ts +5 -0
- package/dist/AssetRegistry.js +2 -7
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/Boot.d.ts +8 -0
- package/dist/Boot.js +29 -44
- package/dist/Boot.js.map +1 -0
- package/dist/CSP.d.ts +30 -0
- package/dist/CSP.js +16 -24
- package/dist/CSP.js.map +1 -0
- package/dist/CustomElementsRegistry.d.ts +5 -0
- package/dist/CustomElementsRegistry.js +66 -83
- package/dist/CustomElementsRegistry.js.map +1 -0
- package/dist/CustomElementsScope.d.ts +7 -0
- package/dist/CustomElementsScope.js +10 -29
- package/dist/CustomElementsScope.js.map +1 -0
- package/dist/CustomElementsScopeUtils.d.ts +55 -0
- package/dist/CustomElementsScopeUtils.js +34 -52
- package/dist/CustomElementsScopeUtils.js.map +1 -0
- package/dist/DOMObserver.d.ts +11 -0
- package/dist/DOMObserver.js +12 -54
- package/dist/DOMObserver.js.map +1 -0
- package/dist/Device.d.ts +12 -0
- package/dist/Device.js +53 -83
- package/dist/Device.js.map +1 -0
- package/dist/EventProvider.d.ts +25 -0
- package/dist/EventProvider.js +67 -82
- package/dist/EventProvider.js.map +1 -0
- package/dist/FeaturesRegistry.d.ts +3 -0
- package/dist/FeaturesRegistry.js +5 -10
- package/dist/FeaturesRegistry.js.map +1 -0
- package/dist/FontFace.d.ts +2 -0
- package/dist/FontFace.js +14 -19
- package/dist/FontFace.js.map +1 -0
- package/dist/InitialConfiguration.d.ts +22 -0
- package/dist/InitialConfiguration.js +112 -131
- package/dist/InitialConfiguration.js.map +1 -0
- package/dist/Keys.d.ts +57 -0
- package/dist/Keys.js +174 -291
- package/dist/Keys.js.map +1 -0
- package/dist/ManagedStyles.d.ts +8 -0
- package/dist/ManagedStyles.js +62 -68
- package/dist/ManagedStyles.js.map +1 -0
- package/dist/MarkedEvents.d.ts +9 -0
- package/dist/MarkedEvents.js +15 -0
- package/dist/MarkedEvents.js.map +1 -0
- package/dist/MediaRange.d.ts +37 -0
- package/dist/MediaRange.js +54 -65
- package/dist/MediaRange.js.map +1 -0
- package/dist/PropertiesFileFormat.d.ts +8 -0
- package/dist/PropertiesFileFormat.js +72 -82
- package/dist/PropertiesFileFormat.js.map +1 -0
- package/dist/Render.d.ts +47 -0
- package/dist/Render.js +81 -113
- package/dist/Render.js.map +1 -0
- package/dist/RenderQueue.d.ts +19 -0
- package/dist/RenderQueue.js +52 -62
- package/dist/RenderQueue.js.map +1 -0
- package/dist/Runtimes.d.ts +27 -0
- package/dist/Runtimes.js +49 -70
- package/dist/Runtimes.js.map +1 -0
- package/dist/StaticArea.d.ts +0 -0
- package/dist/StaticArea.js +4 -1
- package/dist/StaticArea.js.map +1 -0
- package/dist/StaticAreaItem.d.ts +36 -0
- package/dist/StaticAreaItem.js +84 -86
- package/dist/StaticAreaItem.js.map +1 -0
- package/dist/SystemCSSVars.d.ts +2 -0
- package/dist/SystemCSSVars.js +4 -5
- package/dist/SystemCSSVars.js.map +1 -0
- package/dist/Theming.d.ts +3 -0
- package/dist/Theming.js +1 -1
- package/dist/Theming.js.map +1 -0
- package/dist/UI5Element.d.ts +373 -0
- package/dist/UI5Element.js +928 -994
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +277 -313
- package/dist/UI5ElementMetadata.js.map +1 -0
- package/dist/animations/AnimationQueue.d.ts +8 -0
- package/dist/animations/AnimationQueue.js +31 -38
- package/dist/animations/AnimationQueue.js.map +1 -0
- package/dist/animations/animate.d.ts +14 -0
- package/dist/animations/animate.js +46 -51
- package/dist/animations/animate.js.map +1 -0
- package/dist/animations/scroll.d.ts +5 -0
- package/dist/animations/scroll.js +18 -27
- package/dist/animations/scroll.js.map +1 -0
- package/dist/animations/slideDown.d.ts +5 -0
- package/dist/animations/slideDown.js +53 -78
- package/dist/animations/slideDown.js.map +1 -0
- package/dist/animations/slideUp.d.ts +5 -0
- package/dist/animations/slideUp.js +49 -70
- package/dist/animations/slideUp.js.map +1 -0
- package/dist/api.json +1 -0
- package/dist/asset-registries/Icons.d.ts +30 -0
- package/dist/asset-registries/Icons.js +85 -116
- package/dist/asset-registries/Icons.js.map +1 -0
- package/dist/asset-registries/Illustrations.d.ts +17 -0
- package/dist/asset-registries/Illustrations.js +41 -25
- package/dist/asset-registries/Illustrations.js.map +1 -0
- package/dist/asset-registries/LocaleData.d.ts +7 -0
- package/dist/asset-registries/LocaleData.js +104 -132
- package/dist/asset-registries/LocaleData.js.map +1 -0
- package/dist/asset-registries/Themes.d.ts +10 -0
- package/dist/asset-registries/Themes.js +36 -68
- package/dist/asset-registries/Themes.js.map +1 -0
- package/dist/asset-registries/i18n.d.ts +23 -0
- package/dist/asset-registries/i18n.js +52 -80
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/bundle.esm.97ee5164.js +56 -0
- package/dist/assets-meta/IconCollectionsAlias.d.ts +17 -0
- package/dist/assets-meta/IconCollectionsAlias.js +4 -4
- package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
- package/dist/config/AnimationMode.d.ts +14 -0
- package/dist/config/AnimationMode.js +21 -18
- package/dist/config/AnimationMode.js.map +1 -0
- package/dist/config/CalendarType.d.ts +8 -0
- package/dist/config/CalendarType.js +13 -12
- package/dist/config/CalendarType.js.map +1 -0
- package/dist/config/FormatSettings.d.ts +11 -0
- package/dist/config/FormatSettings.js +10 -8
- package/dist/config/FormatSettings.js.map +1 -0
- package/dist/config/Icons.d.ts +30 -0
- package/dist/config/Icons.js +28 -32
- package/dist/config/Icons.js.map +1 -0
- package/dist/config/Language.d.ts +31 -0
- package/dist/config/Language.js +31 -43
- package/dist/config/Language.js.map +1 -0
- package/dist/config/NoConflict.d.ts +20 -0
- package/dist/config/NoConflict.js +40 -41
- package/dist/config/NoConflict.js.map +1 -0
- package/dist/config/RTL.d.ts +7 -0
- package/dist/config/RTL.js +23 -20
- package/dist/config/RTL.js.map +1 -0
- package/dist/config/Theme.d.ts +28 -0
- package/dist/config/Theme.js +34 -36
- package/dist/config/Theme.js.map +1 -0
- package/dist/config/ThemeRoots.d.ts +4 -0
- package/dist/config/ThemeRoots.js +28 -0
- package/dist/config/ThemeRoots.js.map +1 -0
- package/dist/css/FontFace.css +9 -18
- package/dist/decorators/customElement.d.ts +8 -0
- package/dist/decorators/customElement.js +16 -0
- package/dist/decorators/customElement.js.map +1 -0
- package/dist/decorators/event.d.ts +10 -0
- package/dist/decorators/event.js +24 -0
- package/dist/decorators/event.js.map +1 -0
- package/dist/decorators/fastNavigation.d.ts +7 -0
- package/dist/decorators/fastNavigation.js +13 -0
- package/dist/decorators/fastNavigation.js.map +1 -0
- package/dist/decorators/languageAware.d.ts +7 -0
- package/dist/decorators/languageAware.js +13 -0
- package/dist/decorators/languageAware.js.map +1 -0
- package/dist/decorators/property.d.ts +9 -0
- package/dist/decorators/property.js +24 -0
- package/dist/decorators/property.js.map +1 -0
- package/dist/decorators/slot.d.ts +9 -0
- package/dist/decorators/slot.js +37 -0
- package/dist/decorators/slot.js.map +1 -0
- package/dist/decorators/themeAware.d.ts +7 -0
- package/dist/decorators/themeAware.js +13 -0
- package/dist/decorators/themeAware.js.map +1 -0
- package/dist/delegate/ItemNavigation.d.ts +113 -0
- package/dist/delegate/ItemNavigation.js +277 -317
- package/dist/delegate/ItemNavigation.js.map +1 -0
- package/dist/delegate/ResizeHandler.d.ts +24 -0
- package/dist/delegate/ResizeHandler.js +68 -91
- package/dist/delegate/ResizeHandler.js.map +1 -0
- package/dist/delegate/ScrollEnablement.d.ts +48 -0
- package/dist/delegate/ScrollEnablement.js +157 -180
- package/dist/delegate/ScrollEnablement.js.map +1 -0
- package/dist/features/F6Navigation.d.ts +16 -0
- package/dist/features/F6Navigation.js +106 -104
- package/dist/features/F6Navigation.js.map +1 -0
- package/dist/features/OpenUI5Element.d.ts +9 -0
- package/dist/features/OpenUI5Element.js +5 -0
- package/dist/features/OpenUI5Element.js.map +1 -0
- package/dist/features/OpenUI5Enablement.d.ts +11 -0
- package/dist/features/OpenUI5Enablement.js +89 -112
- package/dist/features/OpenUI5Enablement.js.map +1 -0
- package/dist/features/OpenUI5Support.d.ts +23 -0
- package/dist/features/OpenUI5Support.js +91 -119
- package/dist/features/OpenUI5Support.js.map +1 -0
- package/dist/generated/VersionInfo.js +3 -3
- package/dist/generated/css/FontFace.css.js +1 -1
- package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
- package/dist/getSharedResource.d.ts +11 -0
- package/dist/getSharedResource.js +12 -16
- package/dist/getSharedResource.js.map +1 -0
- package/dist/i18nBundle.d.ts +43 -0
- package/dist/i18nBundle.js +56 -64
- package/dist/i18nBundle.js.map +1 -0
- package/dist/locale/Locale.d.ts +22 -0
- package/dist/locale/Locale.js +75 -87
- package/dist/locale/Locale.js.map +1 -0
- package/dist/locale/RTLAwareRegistry.d.ts +4 -0
- package/dist/locale/RTLAwareRegistry.js +6 -11
- package/dist/locale/RTLAwareRegistry.js.map +1 -0
- package/dist/locale/applyDirection.d.ts +10 -0
- package/dist/locale/applyDirection.js +7 -7
- package/dist/locale/applyDirection.js.map +1 -0
- package/dist/locale/directionChange.d.ts +15 -0
- package/dist/locale/directionChange.js +7 -15
- package/dist/locale/directionChange.js.map +1 -0
- package/dist/locale/getEffectiveDir.d.ts +2 -0
- package/dist/locale/getEffectiveDir.js +20 -24
- package/dist/locale/getEffectiveDir.js.map +1 -0
- package/dist/locale/getLocale.d.ts +7 -0
- package/dist/locale/getLocale.js +26 -29
- package/dist/locale/getLocale.js.map +1 -0
- package/dist/locale/languageChange.d.ts +5 -0
- package/dist/locale/languageChange.js +8 -16
- package/dist/locale/languageChange.js.map +1 -0
- package/dist/locale/nextFallbackLocale.d.ts +8 -0
- package/dist/locale/nextFallbackLocale.js +15 -19
- package/dist/locale/nextFallbackLocale.js.map +1 -0
- package/dist/locale/normalizeLocale.d.ts +7 -0
- package/dist/locale/normalizeLocale.js +34 -41
- package/dist/locale/normalizeLocale.js.map +1 -0
- package/dist/renderer/LitRenderer.d.ts +14 -0
- package/dist/renderer/LitRenderer.js +28 -39
- package/dist/renderer/LitRenderer.js.map +1 -0
- package/dist/renderer/executeTemplate.d.ts +13 -0
- package/dist/renderer/executeTemplate.js +12 -16
- package/dist/renderer/executeTemplate.js.map +1 -0
- package/dist/sap/base/Log.js +28 -29
- package/dist/sap/base/assert.js +5 -6
- package/dist/sap/base/security/URLListValidator.js +13 -2
- package/dist/theming/CustomStyle.d.ts +6 -0
- package/dist/theming/CustomStyle.js +29 -43
- package/dist/theming/CustomStyle.js.map +1 -0
- package/dist/theming/ThemeLoaded.d.ts +5 -0
- package/dist/theming/ThemeLoaded.js +8 -16
- package/dist/theming/ThemeLoaded.js.map +1 -0
- package/dist/theming/applyTheme.d.ts +2 -0
- package/dist/theming/applyTheme.js +60 -64
- package/dist/theming/applyTheme.js.map +1 -0
- package/dist/theming/getConstructableStyle.d.ts +9 -0
- package/dist/theming/getConstructableStyle.js +12 -17
- package/dist/theming/getConstructableStyle.js.map +1 -0
- package/dist/theming/getEffectiveLinksHrefs.d.ts +3 -0
- package/dist/theming/getEffectiveLinksHrefs.js +12 -22
- package/dist/theming/getEffectiveLinksHrefs.js.map +1 -0
- package/dist/theming/getEffectiveStyle.d.ts +3 -0
- package/dist/theming/getEffectiveStyle.js +24 -31
- package/dist/theming/getEffectiveStyle.js.map +1 -0
- package/dist/theming/getStylesString.d.ts +3 -0
- package/dist/theming/getStylesString.js +9 -13
- package/dist/theming/getStylesString.js.map +1 -0
- package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
- package/dist/theming/getThemeDesignerTheme.js +72 -79
- package/dist/theming/getThemeDesignerTheme.js.map +1 -0
- package/dist/theming/preloadLinks.d.ts +3 -0
- package/dist/theming/preloadLinks.js +13 -17
- package/dist/theming/preloadLinks.js.map +1 -0
- package/dist/thirdparty/_merge.d.ts +2 -0
- package/dist/thirdparty/_merge.js +7 -4
- package/dist/thirdparty/_merge.js.map +1 -0
- package/dist/thirdparty/isPlainObject.d.ts +2 -0
- package/dist/thirdparty/isPlainObject.js +11 -10
- package/dist/thirdparty/isPlainObject.js.map +1 -0
- package/dist/thirdparty/merge.d.ts +2 -0
- package/dist/thirdparty/merge.js +4 -8
- package/dist/thirdparty/merge.js.map +1 -0
- package/dist/types/AnimationMode.d.ts +32 -0
- package/dist/types/AnimationMode.js +33 -6
- package/dist/types/AnimationMode.js.map +1 -0
- package/dist/types/CSSColor.d.ts +16 -0
- package/dist/types/CSSColor.js +15 -5
- package/dist/types/CSSColor.js.map +1 -0
- package/dist/types/CalendarType.d.ts +37 -0
- package/dist/types/CalendarType.js +35 -18
- package/dist/types/CalendarType.js.map +1 -0
- package/dist/types/DOMReference.d.ts +17 -0
- package/dist/types/DOMReference.js +25 -0
- package/dist/types/DOMReference.js.map +1 -0
- package/dist/types/DataType.d.ts +25 -0
- package/dist/types/DataType.js +33 -26
- package/dist/types/DataType.js.map +1 -0
- package/dist/types/Float.d.ts +18 -0
- package/dist/types/Float.js +18 -10
- package/dist/types/Float.js.map +1 -0
- package/dist/types/Integer.d.ts +18 -0
- package/dist/types/Integer.js +18 -9
- package/dist/types/Integer.js.map +1 -0
- package/dist/types/InvisibleMessageMode.d.ts +25 -0
- package/dist/types/InvisibleMessageMode.js +20 -23
- package/dist/types/InvisibleMessageMode.js.map +1 -0
- package/dist/types/ItemNavigationBehavior.d.ts +24 -0
- package/dist/types/ItemNavigationBehavior.js +22 -12
- package/dist/types/ItemNavigationBehavior.js.map +1 -0
- package/dist/types/NavigationMode.d.ts +32 -0
- package/dist/types/NavigationMode.js +33 -6
- package/dist/types/NavigationMode.js.map +1 -0
- package/dist/types/ValueState.d.ts +42 -0
- package/dist/types/ValueState.js +41 -19
- package/dist/types/ValueState.js.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/updateShadowRoot.d.ts +8 -0
- package/dist/updateShadowRoot.js +21 -16
- package/dist/updateShadowRoot.js.map +1 -0
- package/dist/util/AriaLabelHelper.d.ts +6 -0
- package/dist/util/AriaLabelHelper.js +37 -32
- package/dist/util/AriaLabelHelper.js.map +1 -0
- package/dist/util/Caret.d.ts +7 -0
- package/dist/util/Caret.js +16 -25
- package/dist/util/Caret.js.map +1 -0
- package/dist/util/ColorConversion.d.ts +30 -0
- package/dist/util/ColorConversion.js +311 -372
- package/dist/util/ColorConversion.js.map +1 -0
- package/dist/util/FetchHelper.d.ts +3 -0
- package/dist/util/FetchHelper.js +19 -25
- package/dist/util/FetchHelper.js.map +1 -0
- package/dist/util/FocusableElements.d.ts +4 -0
- package/dist/util/FocusableElements.js +54 -71
- package/dist/util/FocusableElements.js.map +1 -0
- package/dist/util/HTMLSanitizer.d.ts +3 -0
- package/dist/util/HTMLSanitizer.js +4 -5
- package/dist/util/HTMLSanitizer.js.map +1 -0
- package/dist/util/InvisibleMessage.d.ts +10 -0
- package/dist/util/InvisibleMessage.js +40 -53
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +57 -76
- package/dist/util/PopupUtils.js.map +1 -0
- package/dist/util/SlotsHelper.d.ts +9 -0
- package/dist/util/SlotsHelper.js +22 -35
- package/dist/util/SlotsHelper.js.map +1 -0
- package/dist/util/StringHelper.d.ts +3 -0
- package/dist/util/StringHelper.js +17 -20
- package/dist/util/StringHelper.js.map +1 -0
- package/dist/util/TabbableElements.d.ts +17 -0
- package/dist/util/TabbableElements.js +53 -47
- package/dist/util/TabbableElements.js.map +1 -0
- package/dist/util/arraysAreEqual.d.ts +2 -0
- package/dist/util/arraysAreEqual.js +10 -12
- package/dist/util/arraysAreEqual.js.map +1 -0
- package/dist/util/clamp.d.ts +9 -0
- package/dist/util/clamp.js +2 -2
- package/dist/util/clamp.js.map +1 -0
- package/dist/util/createLinkInHead.d.ts +7 -0
- package/dist/util/createLinkInHead.js +14 -12
- package/dist/util/createLinkInHead.js.map +1 -0
- package/dist/util/createStyleInHead.d.ts +8 -0
- package/dist/util/createStyleInHead.js +10 -10
- package/dist/util/createStyleInHead.js.map +1 -0
- package/dist/util/debounce.d.ts +2 -0
- package/dist/util/debounce.js +6 -8
- package/dist/util/debounce.js.map +1 -0
- package/dist/util/detectNavigatorLanguage.d.ts +2 -0
- package/dist/util/detectNavigatorLanguage.js +7 -10
- package/dist/util/detectNavigatorLanguage.js.map +1 -0
- package/dist/util/escapeRegex.d.ts +8 -0
- package/dist/util/escapeRegex.js +8 -7
- package/dist/util/escapeRegex.js.map +1 -0
- package/dist/util/formatMessage.d.ts +2 -0
- package/dist/util/formatMessage.js +15 -19
- package/dist/util/formatMessage.js.map +1 -0
- package/dist/util/generateHighlightedMarkup.d.ts +9 -0
- package/dist/util/generateHighlightedMarkup.js +26 -27
- package/dist/util/generateHighlightedMarkup.js.map +1 -0
- package/dist/util/getActiveElement.d.ts +2 -0
- package/dist/util/getActiveElement.js +6 -8
- package/dist/util/getActiveElement.js.map +1 -0
- package/dist/util/getClassCopy.d.ts +400 -0
- package/dist/util/getClassCopy.js +7 -7
- package/dist/util/getClassCopy.js.map +1 -0
- package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
- package/dist/util/getDesigntimePropertyAsArray.js +4 -3
- package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
- package/dist/util/getEffectiveContentDensity.d.ts +2 -0
- package/dist/util/getEffectiveContentDensity.js +2 -3
- package/dist/util/getEffectiveContentDensity.js.map +1 -0
- package/dist/util/getEffectiveScrollbarStyle.d.ts +2 -0
- package/dist/util/getEffectiveScrollbarStyle.js +4 -0
- package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
- package/dist/util/getFastNavigationGroups.d.ts +2 -0
- package/dist/util/getFastNavigationGroups.js +51 -0
- package/dist/util/getFastNavigationGroups.js.map +1 -0
- package/dist/util/getFileExtension.d.ts +12 -0
- package/dist/util/getFileExtension.js +9 -11
- package/dist/util/getFileExtension.js.map +1 -0
- package/dist/util/getNormalizedTarget.d.ts +7 -0
- package/dist/util/getNormalizedTarget.js +7 -9
- package/dist/util/getNormalizedTarget.js.map +1 -0
- package/dist/util/getSingletonElementInstance.d.ts +2 -0
- package/dist/util/getSingletonElementInstance.js +7 -10
- package/dist/util/getSingletonElementInstance.js.map +1 -0
- package/dist/util/isElementClickable.d.ts +2 -0
- package/dist/util/isElementClickable.js +16 -0
- package/dist/util/isElementClickable.js.map +1 -0
- package/dist/util/isElementHidden.d.ts +2 -0
- package/dist/util/isElementHidden.js +8 -0
- package/dist/util/isElementHidden.js.map +1 -0
- package/dist/util/isElementInView.d.ts +6 -0
- package/dist/util/isElementInView.js +6 -9
- package/dist/util/isElementInView.js.map +1 -0
- package/dist/util/isElementTabbable.d.ts +9 -0
- package/dist/util/isElementTabbable.js +30 -0
- package/dist/util/isElementTabbable.js.map +1 -0
- package/dist/util/isValidPropertyName.d.ts +8 -0
- package/dist/util/isValidPropertyName.js +16 -17
- package/dist/util/isValidPropertyName.js.map +1 -0
- package/dist/util/whenDOMReady.d.ts +2 -0
- package/dist/util/whenDOMReady.js +11 -10
- package/dist/util/whenDOMReady.js.map +1 -0
- package/dist/util/willShowContent.d.ts +2 -0
- package/dist/util/willShowContent.js +7 -0
- package/dist/util/willShowContent.js.map +1 -0
- package/dist/validateThemeRoot.d.ts +2 -0
- package/dist/validateThemeRoot.js +47 -0
- package/dist/validateThemeRoot.js.map +1 -0
- package/global.d.ts +44 -0
- package/lib/generate-styles/index.js +1 -1
- package/package-scripts.js +15 -4
- package/package.json +4 -4
- package/src/{AssetRegistry.js → AssetRegistry.ts} +0 -0
- package/src/Boot.ts +61 -0
- package/src/{CSP.js → CSP.ts} +14 -7
- package/src/{CustomElementsRegistry.js → CustomElementsRegistry.ts} +19 -16
- package/src/{CustomElementsScope.js → CustomElementsScope.ts} +8 -5
- package/src/{CustomElementsScopeUtils.js → CustomElementsScopeUtils.ts} +14 -7
- package/src/DOMObserver.ts +28 -0
- package/src/{Device.js → Device.ts} +17 -14
- package/src/{EventProvider.js → EventProvider.ts} +9 -7
- package/src/FeaturesRegistry.ts +14 -0
- package/src/{FontFace.js → FontFace.ts} +3 -2
- package/src/{InitialConfiguration.js → InitialConfiguration.ts} +53 -12
- package/src/Keys.ts +295 -0
- package/src/ManagedStyles.ts +92 -0
- package/src/MarkedEvents.ts +20 -0
- package/src/{MediaRange.js → MediaRange.ts} +54 -53
- package/src/{PropertiesFileFormat.js → PropertiesFileFormat.ts} +8 -8
- package/src/{Render.js → Render.ts} +25 -20
- package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
- package/src/{Runtimes.js → Runtimes.ts} +15 -8
- package/src/{StaticArea.js → StaticArea.ts} +0 -0
- package/src/{StaticAreaItem.js → StaticAreaItem.ts} +30 -18
- package/src/{SystemCSSVars.js → SystemCSSVars.ts} +0 -0
- package/src/{Theming.js → Theming.ts} +0 -0
- package/src/{UI5Element.js → UI5Element.ts} +270 -148
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +120 -58
- package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
- package/src/animations/animate.ts +64 -0
- package/src/animations/scroll.ts +21 -0
- package/src/animations/{slideDown.js → slideDown.ts} +27 -34
- package/src/animations/{slideUp.js → slideUp.ts} +28 -32
- package/src/asset-registries/{Icons.js → Icons.ts} +64 -37
- package/src/asset-registries/Illustrations.ts +75 -0
- package/src/asset-registries/{LocaleData.js → LocaleData.ts} +36 -28
- package/src/asset-registries/{Themes.js → Themes.ts} +14 -29
- package/src/asset-registries/{i18n.js → i18n.ts} +18 -23
- package/src/assets-meta/{IconCollectionsAlias.js → IconCollectionsAlias.ts} +0 -0
- package/src/config/AnimationMode.ts +33 -0
- package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
- package/src/config/FormatSettings.ts +21 -0
- package/src/config/{Icons.js → Icons.ts} +19 -12
- package/src/config/{Language.js → Language.ts} +22 -18
- package/src/config/NoConflict.ts +67 -0
- package/src/config/{RTL.js → RTL.ts} +14 -4
- package/src/config/Theme.ts +64 -0
- package/src/config/ThemeRoots.ts +41 -0
- package/src/css/FontFace.css +9 -18
- package/src/decorators/customElement.ts +17 -0
- package/src/decorators/event.ts +28 -0
- package/src/decorators/fastNavigation.ts +14 -0
- package/src/decorators/languageAware.ts +14 -0
- package/src/decorators/property.ts +30 -0
- package/src/decorators/slot.ts +49 -0
- package/src/decorators/themeAware.ts +14 -0
- package/src/delegate/{ItemNavigation.js → ItemNavigation.ts} +56 -19
- package/src/delegate/{ResizeHandler.js → ResizeHandler.ts} +25 -36
- package/src/delegate/ScrollEnablement.ts +221 -0
- package/src/features/F6Navigation.ts +141 -0
- package/src/features/OpenUI5Element.ts +11 -0
- package/src/features/OpenUI5Enablement.ts +117 -0
- package/src/features/OpenUI5Support.ts +148 -0
- package/src/{getSharedResource.js → getSharedResource.ts} +3 -3
- package/src/{i18nBundle.js → i18nBundle.ts} +44 -22
- package/src/locale/{Locale.js → Locale.ts} +15 -5
- package/src/locale/RTLAwareRegistry.ts +16 -0
- package/src/locale/{applyDirection.js → applyDirection.ts} +4 -3
- package/src/locale/{directionChange.js → directionChange.ts} +6 -4
- package/src/locale/{getEffectiveDir.js → getEffectiveDir.ts} +1 -1
- package/src/locale/{getLocale.js → getLocale.ts} +12 -7
- package/src/locale/languageChange.ts +24 -0
- package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
- package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +4 -2
- package/src/renderer/LitRenderer.ts +60 -0
- package/src/renderer/{executeTemplate.js → executeTemplate.ts} +11 -5
- package/src/theming/{CustomStyle.js → CustomStyle.ts} +11 -9
- package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
- package/src/theming/{applyTheme.js → applyTheme.ts} +22 -11
- package/src/theming/{getConstructableStyle.js → getConstructableStyle.ts} +5 -4
- package/src/theming/getEffectiveLinksHrefs.ts +26 -0
- package/src/theming/{getEffectiveStyle.js → getEffectiveStyle.ts} +9 -7
- package/src/theming/getStylesString.ts +15 -0
- package/src/theming/{getThemeDesignerTheme.js → getThemeDesignerTheme.ts} +22 -8
- package/src/theming/{preloadLinks.js → preloadLinks.ts} +3 -2
- package/src/thirdparty/{_merge.js → _merge.ts} +2 -2
- package/src/thirdparty/{isPlainObject.js → isPlainObject.ts} +1 -1
- package/src/thirdparty/merge.ts +5 -0
- package/src/types/AnimationMode.ts +33 -0
- package/src/types/{CSSColor.js → CSSColor.ts} +12 -1
- package/src/types/CalendarType.ts +38 -0
- package/src/types/DOMReference.ts +28 -0
- package/src/types/DataType.ts +51 -0
- package/src/types/Float.ts +25 -0
- package/src/types/Integer.ts +25 -0
- package/src/types/InvisibleMessageMode.ts +27 -0
- package/src/types/ItemNavigationBehavior.ts +26 -0
- package/src/types/NavigationMode.ts +33 -0
- package/src/types/ValueState.ts +47 -0
- package/src/types.ts +28 -0
- package/src/updateShadowRoot.ts +37 -0
- package/src/util/AriaLabelHelper.ts +63 -0
- package/src/util/{Caret.js → Caret.ts} +5 -9
- package/src/util/{ColorConversion.js → ColorConversion.ts} +182 -181
- package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
- package/src/util/FocusableElements.ts +82 -0
- package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
- package/src/util/{InvisibleMessage.js → InvisibleMessage.ts} +6 -6
- package/src/util/PopupUtils.ts +114 -0
- package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/{clamp.js → clamp.ts} +1 -1
- package/src/util/{createLinkInHead.js → createLinkInHead.ts} +10 -4
- package/src/util/{createStyleInHead.js → createStyleInHead.ts} +4 -2
- package/src/util/{debounce.js → debounce.ts} +5 -4
- package/src/util/{detectNavigatorLanguage.js → detectNavigatorLanguage.ts} +1 -1
- package/src/util/escapeRegex.ts +11 -0
- package/src/util/{formatMessage.js → formatMessage.ts} +4 -3
- package/src/util/{generateHighlightedMarkup.js → generateHighlightedMarkup.ts} +7 -6
- package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
- package/src/util/{getClassCopy.js → getClassCopy.ts} +3 -1
- package/src/util/{getDesigntimePropertyAsArray.js → getDesigntimePropertyAsArray.ts} +1 -1
- package/src/util/getEffectiveContentDensity.ts +5 -0
- package/src/util/getEffectiveScrollbarStyle.ts +5 -0
- package/src/util/getFastNavigationGroups.ts +63 -0
- package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
- package/src/util/{getNormalizedTarget.js → getNormalizedTarget.ts} +2 -2
- package/src/util/{getSingletonElementInstance.js → getSingletonElementInstance.ts} +1 -1
- package/src/util/isElementClickable.ts +19 -0
- package/src/util/isElementHidden.ts +9 -0
- package/src/util/{isElementInView.js → isElementInView.ts} +1 -1
- package/src/util/isElementTabbable.ts +37 -0
- package/src/util/{isValidPropertyName.js → isValidPropertyName.ts} +1 -1
- package/src/util/{whenDOMReady.js → whenDOMReady.ts} +1 -1
- package/src/util/willShowContent.ts +7 -0
- package/src/validateThemeRoot.ts +58 -0
- package/tsconfig.json +13 -0
- package/dist/RenderScheduler.js +0 -44
- package/dist/animations/config.js +0 -5
- package/dist/assets/bundle.esm.81ba431e.js +0 -43
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/PopupState.js +0 -37
- package/dist/util/isDefaultSlotProvided.js +0 -11
- package/dist/util/isDescendantOf.js +0 -15
- package/dist/util/isNodeClickable.js +0 -19
- package/dist/util/isNodeHidden.js +0 -9
- package/dist/util/isNodeTabbable.js +0 -28
- package/dist/util/setToArray.js +0 -10
- package/hash.txt +0 -1
- package/src/Boot.js +0 -59
- package/src/DOMObserver.js +0 -65
- package/src/FeaturesRegistry.js +0 -14
- package/src/Keys.js +0 -295
- package/src/ManagedStyles.js +0 -83
- package/src/RenderScheduler.js +0 -44
- package/src/animations/animate.js +0 -53
- package/src/animations/config.js +0 -5
- package/src/animations/scroll.js +0 -28
- package/src/asset-registries/Illustrations.js +0 -30
- package/src/config/AnimationMode.js +0 -23
- package/src/config/FormatSettings.js +0 -13
- package/src/config/NoConflict.js +0 -51
- package/src/config/Theme.js +0 -53
- package/src/delegate/ScrollEnablement.js +0 -188
- package/src/features/F6Navigation.js +0 -110
- package/src/features/OpenUI5Enablement.js +0 -119
- package/src/features/OpenUI5Support.js +0 -125
- package/src/locale/RTLAwareRegistry.js +0 -14
- package/src/locale/languageChange.js +0 -22
- package/src/renderer/LitRenderer.js +0 -52
- package/src/theming/getEffectiveLinksHrefs.js +0 -27
- package/src/theming/getStylesString.js +0 -15
- package/src/thirdparty/merge.js +0 -10
- package/src/types/AnimationMode.js +0 -7
- package/src/types/CSSSize.js +0 -9
- package/src/types/CalendarType.js +0 -22
- package/src/types/DataType.js +0 -37
- package/src/types/Float.js +0 -14
- package/src/types/Integer.js +0 -13
- package/src/types/InvisibleMessageMode.js +0 -30
- package/src/types/ItemNavigationBehavior.js +0 -16
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -37
- package/src/types/ValueState.js +0 -22
- package/src/updateShadowRoot.js +0 -29
- package/src/util/AriaLabelHelper.js +0 -39
- package/src/util/FocusableElements.js +0 -79
- package/src/util/PopupUtils.js +0 -93
- package/src/util/TabbableElements.js +0 -51
- package/src/util/escapeRegex.js +0 -10
- package/src/util/getEffectiveContentDensity.js +0 -5
- package/src/util/isDefaultSlotProvided.js +0 -11
- package/src/util/isDescendantOf.js +0 -15
- package/src/util/isNodeClickable.js +0 -19
- package/src/util/isNodeHidden.js +0 -9
- package/src/util/isNodeTabbable.js +0 -28
- package/src/util/setToArray.js +0 -10
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import merge from "./thirdparty/merge.js";
|
|
2
2
|
import { boot } from "./Boot.js";
|
|
3
|
-
import UI5ElementMetadata
|
|
3
|
+
import UI5ElementMetadata, {
|
|
4
|
+
Slot,
|
|
5
|
+
SlotValue,
|
|
6
|
+
State,
|
|
7
|
+
PropertyValue,
|
|
8
|
+
Metadata,
|
|
9
|
+
} from "./UI5ElementMetadata.js";
|
|
4
10
|
import EventProvider from "./EventProvider.js";
|
|
5
11
|
import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
|
|
6
12
|
import StaticAreaItem from "./StaticAreaItem.js";
|
|
@@ -13,25 +19,40 @@ import getEffectiveDir from "./locale/getEffectiveDir.js";
|
|
|
13
19
|
import DataType from "./types/DataType.js";
|
|
14
20
|
import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
|
|
15
21
|
import isValidPropertyName from "./util/isValidPropertyName.js";
|
|
16
|
-
import
|
|
17
|
-
import { isSlot, getSlotName, getSlottedElementsList } from "./util/SlotsHelper.js";
|
|
22
|
+
import { getSlotName, getSlottedNodesList } from "./util/SlotsHelper.js";
|
|
18
23
|
import arraysAreEqual from "./util/arraysAreEqual.js";
|
|
19
|
-
import getClassCopy from "./util/getClassCopy.js";
|
|
20
24
|
import { markAsRtlAware } from "./locale/RTLAwareRegistry.js";
|
|
21
25
|
import preloadLinks from "./theming/preloadLinks.js";
|
|
26
|
+
import { TemplateFunction, TemplateFunctionResult } from "./renderer/executeTemplate.js";
|
|
27
|
+
import { PromiseResolve, ComponentStylesData, ClassMap } from "./types.js";
|
|
22
28
|
|
|
23
29
|
let autoId = 0;
|
|
24
30
|
|
|
25
|
-
const elementTimeouts = new Map();
|
|
26
|
-
const uniqueDependenciesCache = new Map();
|
|
31
|
+
const elementTimeouts = new Map<string, Promise<void>>();
|
|
32
|
+
const uniqueDependenciesCache = new Map<typeof UI5Element, Array<typeof UI5Element>>();
|
|
33
|
+
|
|
34
|
+
type ChangeInfo = {
|
|
35
|
+
type: "property" | "slot",
|
|
36
|
+
name: string,
|
|
37
|
+
reason?: string,
|
|
38
|
+
child?: SlotValue,
|
|
39
|
+
target?: UI5Element,
|
|
40
|
+
newValue?: PropertyValue,
|
|
41
|
+
oldValue?: PropertyValue,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
type InvalidationInfo = ChangeInfo & { target: UI5Element };
|
|
45
|
+
|
|
46
|
+
type ChildChangeListener = (param: InvalidationInfo) => void;
|
|
47
|
+
|
|
48
|
+
type SlotChangeListener = (this: HTMLSlotElement, ev: Event) => void;
|
|
27
49
|
|
|
28
50
|
/**
|
|
29
51
|
* Triggers re-rendering of a UI5Element instance due to state change.
|
|
30
|
-
*
|
|
31
|
-
* @param changeInfo An object with information about the change that caused invalidation.
|
|
52
|
+
* @param {ChangeInfo} changeInfo An object with information about the change that caused invalidation.
|
|
32
53
|
* @private
|
|
33
54
|
*/
|
|
34
|
-
function _invalidate(changeInfo) {
|
|
55
|
+
function _invalidate(this: UI5Element, changeInfo: ChangeInfo) {
|
|
35
56
|
// Invalidation should be suppressed: 1) before the component is rendered for the first time 2) and during the execution of onBeforeRendering
|
|
36
57
|
// This is necessary not only as an optimization, but also to avoid infinite loops on invalidation between children and parents (when invalidateOnChildChange is used)
|
|
37
58
|
if (this._suppressInvalidation) {
|
|
@@ -46,7 +67,7 @@ function _invalidate(changeInfo) {
|
|
|
46
67
|
this._eventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
|
|
47
68
|
}
|
|
48
69
|
|
|
49
|
-
let metadata = {};
|
|
70
|
+
let metadata = {} as Metadata;
|
|
50
71
|
|
|
51
72
|
/**
|
|
52
73
|
* Base class for all UI5 Web Components
|
|
@@ -54,14 +75,36 @@ let metadata = {};
|
|
|
54
75
|
* @class
|
|
55
76
|
* @constructor
|
|
56
77
|
* @author SAP SE
|
|
57
|
-
* @alias sap.ui.
|
|
78
|
+
* @alias sap.ui.webc.base.UI5Element
|
|
58
79
|
* @extends HTMLElement
|
|
59
80
|
* @public
|
|
60
81
|
*/
|
|
61
|
-
class UI5Element extends HTMLElement {
|
|
82
|
+
abstract class UI5Element extends HTMLElement {
|
|
83
|
+
__id?: string;
|
|
84
|
+
_suppressInvalidation: boolean;
|
|
85
|
+
_changedState: Array<ChangeInfo>;
|
|
86
|
+
_eventProvider: EventProvider<InvalidationInfo, void>;
|
|
87
|
+
_inDOM: boolean;
|
|
88
|
+
_fullyConnected: boolean;
|
|
89
|
+
_childChangeListeners: Map<string, ChildChangeListener>;
|
|
90
|
+
_slotChangeListeners: Map<string, SlotChangeListener>;
|
|
91
|
+
_domRefReadyPromise: Promise<void> & { _deferredResolve?: PromiseResolve };
|
|
92
|
+
_doNotSyncAttributes: Set<string>;
|
|
93
|
+
_state: State;
|
|
94
|
+
_onComponentStateFinalized?: () => void;
|
|
95
|
+
_getRealDomRef?: () => HTMLElement;
|
|
96
|
+
|
|
97
|
+
staticAreaItem?: StaticAreaItem;
|
|
98
|
+
|
|
99
|
+
static template?: TemplateFunction;
|
|
100
|
+
static staticAreaTemplate?: TemplateFunction;
|
|
101
|
+
static _metadata: UI5ElementMetadata;
|
|
102
|
+
static render: (templateFunctionResult: TemplateFunctionResult, container: HTMLElement | DocumentFragment, styleStrOrHrefsArr: string | Array<string> | undefined, forStaticArea: boolean, options: { host: HTMLElement }) => void;
|
|
103
|
+
|
|
62
104
|
constructor() {
|
|
63
105
|
super();
|
|
64
106
|
|
|
107
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
65
108
|
this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
|
|
66
109
|
this._suppressInvalidation = true; // A flag telling whether all invalidations should be ignored. Initialized with "true" because a UI5Element can not be invalidated until it is rendered for the first time
|
|
67
110
|
this._inDOM = false; // A flag telling whether the UI5Element is currently in the DOM tree of the document or not
|
|
@@ -74,11 +117,13 @@ class UI5Element extends HTMLElement {
|
|
|
74
117
|
deferredResolve = resolve;
|
|
75
118
|
});
|
|
76
119
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
120
|
+
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
121
|
+
|
|
122
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
77
123
|
|
|
78
|
-
this._initializeState();
|
|
79
124
|
this._upgradeAllProperties();
|
|
80
125
|
|
|
81
|
-
if (
|
|
126
|
+
if (ctor._needsShadowDOM()) {
|
|
82
127
|
this.attachShadow({ mode: "open" });
|
|
83
128
|
}
|
|
84
129
|
}
|
|
@@ -102,12 +147,14 @@ class UI5Element extends HTMLElement {
|
|
|
102
147
|
* @private
|
|
103
148
|
*/
|
|
104
149
|
async connectedCallback() {
|
|
105
|
-
this.
|
|
106
|
-
|
|
150
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
151
|
+
|
|
152
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
153
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
107
154
|
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
108
155
|
}
|
|
109
156
|
|
|
110
|
-
const slotsAreManaged =
|
|
157
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
111
158
|
|
|
112
159
|
this._inDOM = true;
|
|
113
160
|
|
|
@@ -122,11 +169,9 @@ class UI5Element extends HTMLElement {
|
|
|
122
169
|
}
|
|
123
170
|
|
|
124
171
|
renderImmediately(this);
|
|
125
|
-
this._domRefReadyPromise._deferredResolve();
|
|
172
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
126
173
|
this._fullyConnected = true;
|
|
127
|
-
|
|
128
|
-
this.onEnterDOM();
|
|
129
|
-
}
|
|
174
|
+
this.onEnterDOM();
|
|
130
175
|
}
|
|
131
176
|
|
|
132
177
|
/**
|
|
@@ -134,7 +179,8 @@ class UI5Element extends HTMLElement {
|
|
|
134
179
|
* @private
|
|
135
180
|
*/
|
|
136
181
|
disconnectedCallback() {
|
|
137
|
-
const
|
|
182
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
183
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
138
184
|
|
|
139
185
|
this._inDOM = false;
|
|
140
186
|
|
|
@@ -143,9 +189,7 @@ class UI5Element extends HTMLElement {
|
|
|
143
189
|
}
|
|
144
190
|
|
|
145
191
|
if (this._fullyConnected) {
|
|
146
|
-
|
|
147
|
-
this.onExitDOM();
|
|
148
|
-
}
|
|
192
|
+
this.onExitDOM();
|
|
149
193
|
this._fullyConnected = false;
|
|
150
194
|
}
|
|
151
195
|
|
|
@@ -156,22 +200,47 @@ class UI5Element extends HTMLElement {
|
|
|
156
200
|
cancelRender(this);
|
|
157
201
|
}
|
|
158
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Called every time before the component renders.
|
|
205
|
+
* @public
|
|
206
|
+
*/
|
|
207
|
+
onBeforeRendering() {}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Called every time after the component renders.
|
|
211
|
+
* @public
|
|
212
|
+
*/
|
|
213
|
+
onAfterRendering() {}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Called on connectedCallback - added to the DOM.
|
|
217
|
+
* @public
|
|
218
|
+
*/
|
|
219
|
+
onEnterDOM() {}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Called on disconnectedCallback - removed from the DOM.
|
|
223
|
+
* @public
|
|
224
|
+
*/
|
|
225
|
+
onExitDOM() {}
|
|
226
|
+
|
|
159
227
|
/**
|
|
160
228
|
* @private
|
|
161
229
|
*/
|
|
162
230
|
_startObservingDOMChildren() {
|
|
163
|
-
const
|
|
231
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
232
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
164
233
|
if (!shouldObserveChildren) {
|
|
165
234
|
return;
|
|
166
235
|
}
|
|
167
236
|
|
|
168
|
-
const canSlotText =
|
|
237
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
169
238
|
const mutationObserverOptions = {
|
|
170
239
|
childList: true,
|
|
171
240
|
subtree: canSlotText,
|
|
172
241
|
characterData: canSlotText,
|
|
173
242
|
};
|
|
174
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
243
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
175
244
|
}
|
|
176
245
|
|
|
177
246
|
/**
|
|
@@ -186,7 +255,7 @@ class UI5Element extends HTMLElement {
|
|
|
186
255
|
* @private
|
|
187
256
|
*/
|
|
188
257
|
async _processChildren() {
|
|
189
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
258
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
190
259
|
if (hasSlots) {
|
|
191
260
|
await this._updateSlots();
|
|
192
261
|
}
|
|
@@ -196,23 +265,24 @@ class UI5Element extends HTMLElement {
|
|
|
196
265
|
* @private
|
|
197
266
|
*/
|
|
198
267
|
async _updateSlots() {
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
const
|
|
268
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
269
|
+
const slotsMap = ctor.getMetadata().getSlots();
|
|
270
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
271
|
+
const domChildren = Array.from(canSlotText ? this.childNodes : this.children) as Array<Node>;
|
|
202
272
|
|
|
203
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
204
|
-
const propertyNameToSlotMap = new Map(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
273
|
+
const slotsCachedContentMap = new Map<string, Array<SlotValue>>(); // Store here the content of each slot before the mutation occurred
|
|
274
|
+
const propertyNameToSlotMap = new Map<string, string>(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
205
275
|
|
|
206
276
|
// Init the _state object based on the supported slots and store the previous values
|
|
207
277
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
208
278
|
const propertyName = slotData.propertyName || slotName;
|
|
209
279
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
210
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
280
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
211
281
|
this._clearSlot(slotName, slotData);
|
|
212
282
|
}
|
|
213
283
|
|
|
214
|
-
const autoIncrementMap = new Map();
|
|
215
|
-
const slottedChildrenMap = new Map();
|
|
284
|
+
const autoIncrementMap = new Map<string, number>();
|
|
285
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
216
286
|
|
|
217
287
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
218
288
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -221,8 +291,11 @@ class UI5Element extends HTMLElement {
|
|
|
221
291
|
|
|
222
292
|
// Check if the slotName is supported
|
|
223
293
|
if (slotData === undefined) {
|
|
224
|
-
|
|
225
|
-
|
|
294
|
+
if (slotName !== "default") {
|
|
295
|
+
const validValues = Object.keys(slotsMap).join(", ");
|
|
296
|
+
console.warn(`Unknown slotName: ${slotName}, ignoring`, child, `Valid values are: ${validValues}`); // eslint-disable-line
|
|
297
|
+
}
|
|
298
|
+
|
|
226
299
|
return;
|
|
227
300
|
}
|
|
228
301
|
|
|
@@ -230,7 +303,7 @@ class UI5Element extends HTMLElement {
|
|
|
230
303
|
if (slotData.individualSlots) {
|
|
231
304
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
232
305
|
autoIncrementMap.set(slotName, nextIndex);
|
|
233
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
306
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
234
307
|
}
|
|
235
308
|
|
|
236
309
|
// Await for not-yet-defined custom elements
|
|
@@ -252,23 +325,26 @@ class UI5Element extends HTMLElement {
|
|
|
252
325
|
}
|
|
253
326
|
}
|
|
254
327
|
|
|
255
|
-
child =
|
|
328
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
256
329
|
|
|
257
330
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
258
|
-
if (child
|
|
259
|
-
const
|
|
260
|
-
|
|
331
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
332
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
333
|
+
|
|
334
|
+
if (childChangeListener) {
|
|
335
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
336
|
+
}
|
|
261
337
|
}
|
|
262
338
|
|
|
263
339
|
// Listen for the slotchange event if the child is a slot itself
|
|
264
|
-
if (
|
|
340
|
+
if (child instanceof HTMLSlotElement) {
|
|
265
341
|
this._attachSlotChange(child, slotName);
|
|
266
342
|
}
|
|
267
343
|
|
|
268
344
|
const propertyName = slotData.propertyName || slotName;
|
|
269
345
|
|
|
270
346
|
if (slottedChildrenMap.has(propertyName)) {
|
|
271
|
-
slottedChildrenMap.get(propertyName)
|
|
347
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
272
348
|
} else {
|
|
273
349
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
274
350
|
}
|
|
@@ -286,10 +362,10 @@ class UI5Element extends HTMLElement {
|
|
|
286
362
|
let invalidated = false;
|
|
287
363
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
288
364
|
const propertyName = slotData.propertyName || slotName;
|
|
289
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
365
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
290
366
|
_invalidate.call(this, {
|
|
291
367
|
type: "slot",
|
|
292
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
368
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
293
369
|
reason: "children",
|
|
294
370
|
});
|
|
295
371
|
invalidated = true;
|
|
@@ -311,17 +387,20 @@ class UI5Element extends HTMLElement {
|
|
|
311
387
|
* Removes all children from the slot and detaches listeners, if any
|
|
312
388
|
* @private
|
|
313
389
|
*/
|
|
314
|
-
_clearSlot(slotName, slotData) {
|
|
390
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
315
391
|
const propertyName = slotData.propertyName || slotName;
|
|
316
|
-
const children = this._state[propertyName]
|
|
392
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
317
393
|
|
|
318
394
|
children.forEach(child => {
|
|
319
|
-
if (child
|
|
320
|
-
const
|
|
321
|
-
|
|
395
|
+
if (instanceOfUI5Element(child)) {
|
|
396
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
397
|
+
|
|
398
|
+
if (childChangeListener) {
|
|
399
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
400
|
+
}
|
|
322
401
|
}
|
|
323
402
|
|
|
324
|
-
if (
|
|
403
|
+
if (child instanceof HTMLSlotElement) {
|
|
325
404
|
this._detachSlotChange(child, slotName);
|
|
326
405
|
}
|
|
327
406
|
});
|
|
@@ -332,32 +411,32 @@ class UI5Element extends HTMLElement {
|
|
|
332
411
|
/**
|
|
333
412
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
334
413
|
*
|
|
335
|
-
* @param callback
|
|
414
|
+
* @param {InvalidationInfo} callback
|
|
336
415
|
* @public
|
|
337
416
|
*/
|
|
338
|
-
attachInvalidate(callback) {
|
|
417
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
339
418
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
340
419
|
}
|
|
341
420
|
|
|
342
421
|
/**
|
|
343
422
|
* Detach the callback that is executed whenever the component is invalidated
|
|
344
423
|
*
|
|
345
|
-
* @param callback
|
|
424
|
+
* @param {InvalidationInfo} callback
|
|
346
425
|
* @public
|
|
347
426
|
*/
|
|
348
|
-
detachInvalidate(callback) {
|
|
427
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
349
428
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
350
429
|
}
|
|
351
430
|
|
|
352
431
|
/**
|
|
353
432
|
* Callback that is executed whenever a monitored child changes its state
|
|
354
433
|
*
|
|
355
|
-
* @param slotName the slot in which a child was invalidated
|
|
356
|
-
* @param childChangeInfo the changeInfo object for the child in the given slot
|
|
434
|
+
* @param {sting} slotName the slot in which a child was invalidated
|
|
435
|
+
* @param { ChangeInfo } childChangeInfo the changeInfo object for the child in the given slot
|
|
357
436
|
* @private
|
|
358
437
|
*/
|
|
359
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
360
|
-
if (!this.constructor.getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
|
|
438
|
+
_onChildChange(slotName: string, childChangeInfo: ChangeInfo) {
|
|
439
|
+
if (!(this.constructor as typeof UI5Element).getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
|
|
361
440
|
return;
|
|
362
441
|
}
|
|
363
442
|
|
|
@@ -375,44 +454,74 @@ class UI5Element extends HTMLElement {
|
|
|
375
454
|
* Do not override this method in derivatives of UI5Element
|
|
376
455
|
* @private
|
|
377
456
|
*/
|
|
378
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
379
|
-
|
|
457
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
458
|
+
let newPropertyValue: PropertyValue;
|
|
459
|
+
if (this._doNotSyncAttributes.has(name)) { // This attribute is mutated internally, not by the user
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const properties = (this.constructor as typeof UI5Element).getMetadata().getProperties();
|
|
380
464
|
const realName = name.replace(/^ui5-/, "");
|
|
381
465
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
382
466
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
383
|
-
const
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
467
|
+
const propData = properties[nameInCamelCase];
|
|
468
|
+
const propertyType = propData.type;
|
|
469
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
470
|
+
|
|
471
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
472
|
+
propertyValidator = propertyType as typeof DataType;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (propertyValidator) {
|
|
476
|
+
newPropertyValue = propertyValidator.attributeToProperty(newValue);
|
|
477
|
+
} else if (propertyType === Boolean) {
|
|
478
|
+
newPropertyValue = newValue !== null;
|
|
479
|
+
} else {
|
|
480
|
+
newPropertyValue = newValue as string;
|
|
388
481
|
}
|
|
389
|
-
|
|
482
|
+
|
|
483
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
390
484
|
}
|
|
391
485
|
}
|
|
392
486
|
|
|
393
487
|
/**
|
|
394
488
|
* @private
|
|
395
489
|
*/
|
|
396
|
-
_updateAttribute(name, newValue) {
|
|
397
|
-
|
|
490
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
491
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
492
|
+
|
|
493
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
398
494
|
return;
|
|
399
495
|
}
|
|
400
|
-
const properties =
|
|
401
|
-
const
|
|
496
|
+
const properties = ctor.getMetadata().getProperties();
|
|
497
|
+
const propData = properties[name];
|
|
498
|
+
const propertyType = propData.type;
|
|
499
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
402
500
|
const attrName = camelToKebabCase(name);
|
|
403
501
|
const attrValue = this.getAttribute(attrName);
|
|
404
502
|
|
|
405
|
-
if (
|
|
503
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
504
|
+
propertyValidator = propertyType as typeof DataType;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
if (propertyValidator) {
|
|
508
|
+
const newAttrValue = propertyValidator.propertyToAttribute(newValue);
|
|
509
|
+
if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
|
|
510
|
+
this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
|
|
511
|
+
this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
|
|
512
|
+
this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
|
|
513
|
+
} else {
|
|
514
|
+
this.setAttribute(attrName, newAttrValue);
|
|
515
|
+
}
|
|
516
|
+
} else if (propertyType === Boolean) {
|
|
406
517
|
if (newValue === true && attrValue === null) {
|
|
407
518
|
this.setAttribute(attrName, "");
|
|
408
519
|
} else if (newValue === false && attrValue !== null) {
|
|
409
520
|
this.removeAttribute(attrName);
|
|
410
521
|
}
|
|
411
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
412
|
-
this.setAttribute(attrName, propertyTypeClass.propertyToAttribute(newValue));
|
|
413
522
|
} else if (typeof newValue !== "object") {
|
|
414
523
|
if (attrValue !== newValue) {
|
|
415
|
-
this.setAttribute(attrName, newValue);
|
|
524
|
+
this.setAttribute(attrName, newValue as string);
|
|
416
525
|
}
|
|
417
526
|
} // else { return; } // old object handling
|
|
418
527
|
}
|
|
@@ -420,11 +529,11 @@ class UI5Element extends HTMLElement {
|
|
|
420
529
|
/**
|
|
421
530
|
* @private
|
|
422
531
|
*/
|
|
423
|
-
_upgradeProperty(
|
|
424
|
-
if (this.hasOwnProperty(
|
|
425
|
-
const value = this[
|
|
426
|
-
delete this[
|
|
427
|
-
this[
|
|
532
|
+
_upgradeProperty(this: Record<string, any>, propertyName: string) {
|
|
533
|
+
if (this.hasOwnProperty(propertyName)) { // eslint-disable-line
|
|
534
|
+
const value = this[propertyName];
|
|
535
|
+
delete this[propertyName];
|
|
536
|
+
this[propertyName] = value;
|
|
428
537
|
}
|
|
429
538
|
}
|
|
430
539
|
|
|
@@ -432,25 +541,18 @@ class UI5Element extends HTMLElement {
|
|
|
432
541
|
* @private
|
|
433
542
|
*/
|
|
434
543
|
_upgradeAllProperties() {
|
|
435
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
436
|
-
allProps.forEach(this._upgradeProperty
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
/**
|
|
440
|
-
* @private
|
|
441
|
-
*/
|
|
442
|
-
_initializeState() {
|
|
443
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
544
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
545
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
444
546
|
}
|
|
445
547
|
|
|
446
548
|
/**
|
|
447
549
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
448
550
|
*
|
|
449
551
|
* @param slotName the name of the slot, where the child is
|
|
450
|
-
* @returns {
|
|
552
|
+
* @returns {ChildChangeListener}
|
|
451
553
|
* @private
|
|
452
554
|
*/
|
|
453
|
-
_getChildChangeListener(slotName) {
|
|
555
|
+
_getChildChangeListener(slotName: string) {
|
|
454
556
|
if (!this._childChangeListeners.has(slotName)) {
|
|
455
557
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
456
558
|
}
|
|
@@ -461,27 +563,30 @@ class UI5Element extends HTMLElement {
|
|
|
461
563
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
462
564
|
*
|
|
463
565
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
464
|
-
* @returns {
|
|
566
|
+
* @returns {SlotChangeListener}
|
|
465
567
|
* @private
|
|
466
568
|
*/
|
|
467
|
-
_getSlotChangeListener(slotName) {
|
|
569
|
+
_getSlotChangeListener(slotName: string) {
|
|
468
570
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
469
571
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
470
572
|
}
|
|
471
|
-
return this._slotChangeListeners.get(slotName)
|
|
573
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
472
574
|
}
|
|
473
575
|
|
|
474
576
|
/**
|
|
475
577
|
* @private
|
|
476
578
|
*/
|
|
477
|
-
_attachSlotChange(child, slotName) {
|
|
478
|
-
|
|
579
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
580
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
581
|
+
if (slotChangeListener) {
|
|
582
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
583
|
+
}
|
|
479
584
|
}
|
|
480
585
|
|
|
481
586
|
/**
|
|
482
587
|
* @private
|
|
483
588
|
*/
|
|
484
|
-
_detachSlotChange(child, slotName) {
|
|
589
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
485
590
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
486
591
|
}
|
|
487
592
|
|
|
@@ -491,7 +596,7 @@ class UI5Element extends HTMLElement {
|
|
|
491
596
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
492
597
|
* @private
|
|
493
598
|
*/
|
|
494
|
-
_onSlotChange(slotName) {
|
|
599
|
+
_onSlotChange(slotName: string) {
|
|
495
600
|
_invalidate.call(this, {
|
|
496
601
|
type: "slot",
|
|
497
602
|
name: slotName,
|
|
@@ -526,21 +631,20 @@ class UI5Element extends HTMLElement {
|
|
|
526
631
|
*
|
|
527
632
|
* @public
|
|
528
633
|
*/
|
|
529
|
-
onInvalidation(changeInfo) {}
|
|
634
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
530
635
|
|
|
531
636
|
/**
|
|
532
637
|
* Do not call this method directly, only intended to be called by js
|
|
533
638
|
* @protected
|
|
534
639
|
*/
|
|
535
640
|
_render() {
|
|
536
|
-
const
|
|
641
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
642
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
537
643
|
|
|
538
644
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
539
645
|
this._suppressInvalidation = true;
|
|
540
646
|
|
|
541
|
-
|
|
542
|
-
this.onBeforeRendering();
|
|
543
|
-
}
|
|
647
|
+
this.onBeforeRendering();
|
|
544
648
|
|
|
545
649
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
546
650
|
if (this._onComponentStateFinalized) {
|
|
@@ -574,7 +678,7 @@ class UI5Element extends HTMLElement {
|
|
|
574
678
|
this._changedState = [];
|
|
575
679
|
|
|
576
680
|
// Update shadow root and static area item
|
|
577
|
-
if (
|
|
681
|
+
if (ctor._needsShadowDOM()) {
|
|
578
682
|
updateShadowRoot(this);
|
|
579
683
|
}
|
|
580
684
|
if (this.staticAreaItem) {
|
|
@@ -587,9 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
587
691
|
}
|
|
588
692
|
|
|
589
693
|
// Call the onAfterRendering hook
|
|
590
|
-
|
|
591
|
-
this.onAfterRendering();
|
|
592
|
-
}
|
|
694
|
+
this.onAfterRendering();
|
|
593
695
|
}
|
|
594
696
|
|
|
595
697
|
/**
|
|
@@ -598,7 +700,7 @@ class UI5Element extends HTMLElement {
|
|
|
598
700
|
_assignIndividualSlotsToChildren() {
|
|
599
701
|
const domChildren = Array.from(this.children);
|
|
600
702
|
|
|
601
|
-
domChildren.forEach(child => {
|
|
703
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
602
704
|
if (child._individualSlot) {
|
|
603
705
|
child.setAttribute("slot", child._individualSlot);
|
|
604
706
|
}
|
|
@@ -631,10 +733,10 @@ class UI5Element extends HTMLElement {
|
|
|
631
733
|
|
|
632
734
|
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
633
735
|
if (children.length !== 1) {
|
|
634
|
-
console.warn(`The shadow DOM for ${this.constructor.getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`); // eslint-disable-line
|
|
736
|
+
console.warn(`The shadow DOM for ${(this.constructor as typeof UI5Element).getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`); // eslint-disable-line
|
|
635
737
|
}
|
|
636
738
|
|
|
637
|
-
return children[0];
|
|
739
|
+
return children[0] as HTMLElement;
|
|
638
740
|
}
|
|
639
741
|
|
|
640
742
|
/**
|
|
@@ -645,7 +747,7 @@ class UI5Element extends HTMLElement {
|
|
|
645
747
|
getFocusDomRef() {
|
|
646
748
|
const domRef = this.getDomRef();
|
|
647
749
|
if (domRef) {
|
|
648
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
750
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
649
751
|
return focusRef || domRef;
|
|
650
752
|
}
|
|
651
753
|
}
|
|
@@ -683,7 +785,7 @@ class UI5Element extends HTMLElement {
|
|
|
683
785
|
* @param bubbles - true, if the event bubbles
|
|
684
786
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
685
787
|
*/
|
|
686
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
788
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
687
789
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
688
790
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
689
791
|
|
|
@@ -694,8 +796,8 @@ class UI5Element extends HTMLElement {
|
|
|
694
796
|
return eventResult;
|
|
695
797
|
}
|
|
696
798
|
|
|
697
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
698
|
-
const noConflictEvent = new CustomEvent(`ui5-${name}`, {
|
|
799
|
+
_fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
800
|
+
const noConflictEvent = new CustomEvent<T>(`ui5-${name}`, {
|
|
699
801
|
detail: data,
|
|
700
802
|
composed: false,
|
|
701
803
|
bubbles,
|
|
@@ -709,7 +811,7 @@ class UI5Element extends HTMLElement {
|
|
|
709
811
|
return noConflictEventResult;
|
|
710
812
|
}
|
|
711
813
|
|
|
712
|
-
const normalEvent = new CustomEvent(name, {
|
|
814
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
713
815
|
detail: data,
|
|
714
816
|
composed: false,
|
|
715
817
|
bubbles,
|
|
@@ -728,8 +830,8 @@ class UI5Element extends HTMLElement {
|
|
|
728
830
|
* Useful when there are transitive slots in nested component scenarios and you don't want to get a list of the slots, but rather of their content.
|
|
729
831
|
* @public
|
|
730
832
|
*/
|
|
731
|
-
getSlottedNodes(slotName) {
|
|
732
|
-
return
|
|
833
|
+
getSlottedNodes(slotName: string) {
|
|
834
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]);
|
|
733
835
|
}
|
|
734
836
|
|
|
735
837
|
/**
|
|
@@ -740,7 +842,7 @@ class UI5Element extends HTMLElement {
|
|
|
740
842
|
* @returns {String|undefined}
|
|
741
843
|
*/
|
|
742
844
|
get effectiveDir() {
|
|
743
|
-
markAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
845
|
+
markAsRtlAware(this.constructor as typeof UI5Element); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
744
846
|
return getEffectiveDir(this);
|
|
745
847
|
}
|
|
746
848
|
|
|
@@ -753,6 +855,10 @@ class UI5Element extends HTMLElement {
|
|
|
753
855
|
return true;
|
|
754
856
|
}
|
|
755
857
|
|
|
858
|
+
get classes(): ClassMap {
|
|
859
|
+
return {};
|
|
860
|
+
}
|
|
861
|
+
|
|
756
862
|
/**
|
|
757
863
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
758
864
|
* @private
|
|
@@ -779,7 +885,7 @@ class UI5Element extends HTMLElement {
|
|
|
779
885
|
* @public
|
|
780
886
|
*/
|
|
781
887
|
getStaticAreaItemDomRef() {
|
|
782
|
-
if (!this.constructor._needsStaticArea()) {
|
|
888
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
783
889
|
throw new Error("This component does not use the static area");
|
|
784
890
|
}
|
|
785
891
|
|
|
@@ -825,7 +931,7 @@ class UI5Element extends HTMLElement {
|
|
|
825
931
|
}
|
|
826
932
|
|
|
827
933
|
Object.defineProperty(proto, prop, {
|
|
828
|
-
get() {
|
|
934
|
+
get(this: UI5Element) {
|
|
829
935
|
if (this._state[prop] !== undefined) {
|
|
830
936
|
return this._state[prop];
|
|
831
937
|
}
|
|
@@ -842,15 +948,25 @@ class UI5Element extends HTMLElement {
|
|
|
842
948
|
return propDefaultValue;
|
|
843
949
|
}
|
|
844
950
|
},
|
|
845
|
-
|
|
951
|
+
|
|
952
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
846
953
|
let isDifferent;
|
|
847
|
-
|
|
954
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
955
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
848
956
|
|
|
957
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
958
|
+
const propertyType = propData.type;
|
|
959
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
849
960
|
const oldState = this._state[prop];
|
|
850
|
-
|
|
961
|
+
|
|
962
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
963
|
+
propertyValidator = propertyType as typeof DataType;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
if (propertyValidator) {
|
|
967
|
+
isDifferent = !propertyValidator.valuesAreEqual(oldState, value);
|
|
968
|
+
} else if (Array.isArray(oldState) && Array.isArray(value) && propData.multiple && propData.compareValues) { // compareValues is added for IE, test if needed now
|
|
851
969
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
852
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
853
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
854
970
|
} else {
|
|
855
971
|
isDifferent = oldState !== value;
|
|
856
972
|
}
|
|
@@ -879,7 +995,7 @@ class UI5Element extends HTMLElement {
|
|
|
879
995
|
|
|
880
996
|
const propertyName = slotData.propertyName || slotName;
|
|
881
997
|
Object.defineProperty(proto, propertyName, {
|
|
882
|
-
get() {
|
|
998
|
+
get(this: UI5Element) {
|
|
883
999
|
if (this._state[propertyName] !== undefined) {
|
|
884
1000
|
return this._state[propertyName];
|
|
885
1001
|
}
|
|
@@ -913,7 +1029,7 @@ class UI5Element extends HTMLElement {
|
|
|
913
1029
|
* Returns the CSS for this UI5 Web Component Class
|
|
914
1030
|
* @protected
|
|
915
1031
|
*/
|
|
916
|
-
static get styles() {
|
|
1032
|
+
static get styles(): ComponentStylesData {
|
|
917
1033
|
return "";
|
|
918
1034
|
}
|
|
919
1035
|
|
|
@@ -921,7 +1037,7 @@ class UI5Element extends HTMLElement {
|
|
|
921
1037
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
922
1038
|
* @protected
|
|
923
1039
|
*/
|
|
924
|
-
static get staticAreaStyles() {
|
|
1040
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
925
1041
|
return "";
|
|
926
1042
|
}
|
|
927
1043
|
|
|
@@ -932,7 +1048,7 @@ class UI5Element extends HTMLElement {
|
|
|
932
1048
|
*
|
|
933
1049
|
* @protected
|
|
934
1050
|
*/
|
|
935
|
-
static get dependencies() {
|
|
1051
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
936
1052
|
return [];
|
|
937
1053
|
}
|
|
938
1054
|
|
|
@@ -941,21 +1057,21 @@ class UI5Element extends HTMLElement {
|
|
|
941
1057
|
*
|
|
942
1058
|
* @public
|
|
943
1059
|
*/
|
|
944
|
-
static getUniqueDependencies() {
|
|
1060
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
945
1061
|
if (!uniqueDependenciesCache.has(this)) {
|
|
946
1062
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
947
1063
|
uniqueDependenciesCache.set(this, filtered);
|
|
948
1064
|
}
|
|
949
1065
|
|
|
950
|
-
return uniqueDependenciesCache.get(this);
|
|
1066
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
951
1067
|
}
|
|
952
1068
|
|
|
953
1069
|
/**
|
|
954
1070
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
955
1071
|
*
|
|
956
|
-
* @returns {Promise
|
|
1072
|
+
* @returns {Promise}
|
|
957
1073
|
*/
|
|
958
|
-
static whenDependenciesDefined() {
|
|
1074
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
959
1075
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
960
1076
|
}
|
|
961
1077
|
|
|
@@ -983,7 +1099,6 @@ class UI5Element extends HTMLElement {
|
|
|
983
1099
|
]);
|
|
984
1100
|
|
|
985
1101
|
const tag = this.getMetadata().getTag();
|
|
986
|
-
const altTag = this.getMetadata().getAltTag();
|
|
987
1102
|
|
|
988
1103
|
const definedLocally = isTagRegistered(tag);
|
|
989
1104
|
const definedGlobally = customElements.get(tag);
|
|
@@ -993,15 +1108,8 @@ class UI5Element extends HTMLElement {
|
|
|
993
1108
|
} else if (!definedGlobally) {
|
|
994
1109
|
this._generateAccessors();
|
|
995
1110
|
registerTag(tag);
|
|
996
|
-
window.customElements.define(tag, this);
|
|
1111
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
997
1112
|
preloadLinks(this);
|
|
998
|
-
|
|
999
|
-
if (altTag && !customElements.get(altTag)) {
|
|
1000
|
-
registerTag(altTag);
|
|
1001
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
1002
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
1003
|
-
}));
|
|
1004
|
-
}
|
|
1005
1113
|
}
|
|
1006
1114
|
return this;
|
|
1007
1115
|
}
|
|
@@ -1017,17 +1125,31 @@ class UI5Element extends HTMLElement {
|
|
|
1017
1125
|
return this._metadata;
|
|
1018
1126
|
}
|
|
1019
1127
|
|
|
1020
|
-
const
|
|
1128
|
+
const effectiveMetadata = Object.keys(this.metadata).length ? this.metadata : this.decoratorMetadata;
|
|
1129
|
+
const metadataObjects = [effectiveMetadata];
|
|
1021
1130
|
let klass = this; // eslint-disable-line
|
|
1022
1131
|
while (klass !== UI5Element) {
|
|
1023
1132
|
klass = Object.getPrototypeOf(klass);
|
|
1024
|
-
|
|
1133
|
+
const effectiveKlassMetadata = Object.keys(klass.metadata).length ? klass.metadata : klass.decoratorMetadata;
|
|
1134
|
+
metadataObjects.unshift(effectiveKlassMetadata);
|
|
1025
1135
|
}
|
|
1026
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1136
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1027
1137
|
|
|
1028
1138
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1029
1139
|
return this._metadata;
|
|
1030
1140
|
}
|
|
1141
|
+
|
|
1142
|
+
static decoratorMetadata: Metadata = {};
|
|
1031
1143
|
}
|
|
1032
1144
|
|
|
1145
|
+
/**
|
|
1146
|
+
* Always use duck-typing to cover all runtimes on the page.
|
|
1147
|
+
* @returns {boolean}
|
|
1148
|
+
*/
|
|
1149
|
+
const instanceOfUI5Element = (object: any): object is UI5Element => {
|
|
1150
|
+
return "isUI5Element" in object;
|
|
1151
|
+
};
|
|
1152
|
+
|
|
1033
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type { ChangeInfo };
|