@ui5/webcomponents-base 1.9.3 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +1 -0
- package/CHANGELOG.md +0 -8
- package/bundle.esm.js +4 -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 -48
- 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 +107 -146
- 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 -94
- 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 -1006
- 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 -1
- package/dist/asset-registries/Icons.d.ts +30 -0
- package/dist/asset-registries/Icons.js +85 -118
- package/dist/asset-registries/Icons.js.map +1 -0
- package/dist/asset-registries/Illustrations.d.ts +17 -0
- package/dist/asset-registries/Illustrations.js +37 -50
- 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 -126
- 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.3d967c4e.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 +18 -29
- package/dist/config/ThemeRoots.js.map +1 -0
- 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 +105 -109
- 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 -120
- package/dist/features/OpenUI5Support.js.map +1 -0
- package/dist/generated/VersionInfo.js +4 -4
- 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 +59 -68
- 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 +6 -7
- package/dist/types/CSSColor.js.map +1 -0
- package/dist/types/CalendarType.d.ts +37 -0
- package/dist/types/CalendarType.js +33 -53
- package/dist/types/CalendarType.js.map +1 -0
- package/dist/types/DOMReference.d.ts +17 -0
- package/dist/types/DOMReference.js +12 -15
- package/dist/types/DOMReference.js.map +1 -0
- package/dist/types/DataType.d.ts +25 -0
- package/dist/types/DataType.js +33 -32
- package/dist/types/DataType.js.map +1 -0
- package/dist/types/Float.d.ts +18 -0
- package/dist/types/Float.js +9 -12
- package/dist/types/Float.js.map +1 -0
- package/dist/types/Integer.d.ts +18 -0
- package/dist/types/Integer.js +9 -11
- package/dist/types/Integer.js.map +1 -0
- package/dist/types/InvisibleMessageMode.d.ts +25 -0
- package/dist/types/InvisibleMessageMode.js +19 -38
- 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 +38 -58
- package/dist/types/ValueState.js.map +1 -0
- package/dist/types.d.ts +18 -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 +34 -46
- 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 +58 -77
- 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 -17
- 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 +1 -2
- package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
- package/dist/util/getFastNavigationGroups.d.ts +2 -0
- package/dist/util/getFastNavigationGroups.js +44 -56
- 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 +41 -52
- package/dist/validateThemeRoot.js.map +1 -0
- package/global.d.ts +44 -0
- package/package-scripts.js +14 -5
- 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} +33 -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} +26 -22
- package/src/{SystemCSSVars.js → SystemCSSVars.ts} +0 -0
- package/src/{Theming.js → Theming.ts} +0 -0
- package/src/{UI5Element.js → UI5Element.ts} +263 -153
- 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} +63 -38
- package/src/asset-registries/Illustrations.ts +75 -0
- package/src/asset-registries/{LocaleData.js → LocaleData.ts} +35 -21
- 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.js → ThemeRoots.ts} +9 -7
- 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.js → F6Navigation.ts} +50 -25
- 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} +45 -23
- 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} +5 -3
- 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} +16 -10
- 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} +3 -3
- package/src/types/CalendarType.ts +38 -0
- package/src/types/{DOMReference.js → DOMReference.ts} +4 -4
- package/src/types/DataType.ts +51 -0
- package/src/types/{Float.js → Float.ts} +5 -5
- package/src/types/{Integer.js → Integer.ts} +5 -4
- 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 +30 -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} +183 -182
- 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 +112 -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} +6 -5
- 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.js → getEffectiveScrollbarStyle.ts} +0 -0
- package/src/util/{getFastNavigationGroups.js → getFastNavigationGroups.ts} +10 -10
- 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.js → validateThemeRoot.ts} +4 -4
- package/tsconfig.json +13 -0
- package/dist/RenderScheduler.js +0 -44
- package/dist/animations/config.js +0 -5
- package/dist/assets/bundle.esm.e2bd78ba.js +0 -55
- package/dist/types/CSSSize.js +0 -20
- package/dist/types/PopupState.js +0 -57
- 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/src/Boot.js +0 -63
- 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 -59
- 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/OpenUI5Enablement.js +0 -119
- package/src/features/OpenUI5Support.js +0 -126
- 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 -20
- package/src/types/CalendarType.js +0 -59
- package/src/types/DataType.js +0 -43
- package/src/types/InvisibleMessageMode.js +0 -46
- package/src/types/ItemNavigationBehavior.js +0 -16
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -57
- package/src/types/ValueState.js +0 -64
- package/src/updateShadowRoot.js +0 -29
- package/src/util/AriaLabelHelper.js +0 -56
- 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
|
|
@@ -76,10 +119,11 @@ class UI5Element extends HTMLElement {
|
|
|
76
119
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
77
120
|
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
78
121
|
|
|
79
|
-
this.
|
|
122
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
123
|
+
|
|
80
124
|
this._upgradeAllProperties();
|
|
81
125
|
|
|
82
|
-
if (
|
|
126
|
+
if (ctor._needsShadowDOM()) {
|
|
83
127
|
this.attachShadow({ mode: "open" });
|
|
84
128
|
}
|
|
85
129
|
}
|
|
@@ -103,12 +147,14 @@ class UI5Element extends HTMLElement {
|
|
|
103
147
|
* @private
|
|
104
148
|
*/
|
|
105
149
|
async connectedCallback() {
|
|
106
|
-
this.
|
|
107
|
-
|
|
150
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
151
|
+
|
|
152
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
153
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
108
154
|
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
109
155
|
}
|
|
110
156
|
|
|
111
|
-
const slotsAreManaged =
|
|
157
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
112
158
|
|
|
113
159
|
this._inDOM = true;
|
|
114
160
|
|
|
@@ -123,11 +169,9 @@ class UI5Element extends HTMLElement {
|
|
|
123
169
|
}
|
|
124
170
|
|
|
125
171
|
renderImmediately(this);
|
|
126
|
-
this._domRefReadyPromise._deferredResolve();
|
|
172
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
127
173
|
this._fullyConnected = true;
|
|
128
|
-
|
|
129
|
-
this.onEnterDOM();
|
|
130
|
-
}
|
|
174
|
+
this.onEnterDOM();
|
|
131
175
|
}
|
|
132
176
|
|
|
133
177
|
/**
|
|
@@ -135,7 +179,8 @@ class UI5Element extends HTMLElement {
|
|
|
135
179
|
* @private
|
|
136
180
|
*/
|
|
137
181
|
disconnectedCallback() {
|
|
138
|
-
const
|
|
182
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
183
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
139
184
|
|
|
140
185
|
this._inDOM = false;
|
|
141
186
|
|
|
@@ -144,9 +189,7 @@ class UI5Element extends HTMLElement {
|
|
|
144
189
|
}
|
|
145
190
|
|
|
146
191
|
if (this._fullyConnected) {
|
|
147
|
-
|
|
148
|
-
this.onExitDOM();
|
|
149
|
-
}
|
|
192
|
+
this.onExitDOM();
|
|
150
193
|
this._fullyConnected = false;
|
|
151
194
|
}
|
|
152
195
|
|
|
@@ -157,22 +200,47 @@ class UI5Element extends HTMLElement {
|
|
|
157
200
|
cancelRender(this);
|
|
158
201
|
}
|
|
159
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
|
+
|
|
160
227
|
/**
|
|
161
228
|
* @private
|
|
162
229
|
*/
|
|
163
230
|
_startObservingDOMChildren() {
|
|
164
|
-
const
|
|
231
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
232
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
165
233
|
if (!shouldObserveChildren) {
|
|
166
234
|
return;
|
|
167
235
|
}
|
|
168
236
|
|
|
169
|
-
const canSlotText =
|
|
237
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
170
238
|
const mutationObserverOptions = {
|
|
171
239
|
childList: true,
|
|
172
240
|
subtree: canSlotText,
|
|
173
241
|
characterData: canSlotText,
|
|
174
242
|
};
|
|
175
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
243
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
176
244
|
}
|
|
177
245
|
|
|
178
246
|
/**
|
|
@@ -187,7 +255,7 @@ class UI5Element extends HTMLElement {
|
|
|
187
255
|
* @private
|
|
188
256
|
*/
|
|
189
257
|
async _processChildren() {
|
|
190
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
258
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
191
259
|
if (hasSlots) {
|
|
192
260
|
await this._updateSlots();
|
|
193
261
|
}
|
|
@@ -197,23 +265,24 @@ class UI5Element extends HTMLElement {
|
|
|
197
265
|
* @private
|
|
198
266
|
*/
|
|
199
267
|
async _updateSlots() {
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
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>;
|
|
203
272
|
|
|
204
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
205
|
-
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
|
|
206
275
|
|
|
207
276
|
// Init the _state object based on the supported slots and store the previous values
|
|
208
277
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
209
278
|
const propertyName = slotData.propertyName || slotName;
|
|
210
279
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
211
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
280
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
212
281
|
this._clearSlot(slotName, slotData);
|
|
213
282
|
}
|
|
214
283
|
|
|
215
|
-
const autoIncrementMap = new Map();
|
|
216
|
-
const slottedChildrenMap = new Map();
|
|
284
|
+
const autoIncrementMap = new Map<string, number>();
|
|
285
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
217
286
|
|
|
218
287
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
219
288
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -222,8 +291,11 @@ class UI5Element extends HTMLElement {
|
|
|
222
291
|
|
|
223
292
|
// Check if the slotName is supported
|
|
224
293
|
if (slotData === undefined) {
|
|
225
|
-
|
|
226
|
-
|
|
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
|
+
|
|
227
299
|
return;
|
|
228
300
|
}
|
|
229
301
|
|
|
@@ -231,7 +303,7 @@ class UI5Element extends HTMLElement {
|
|
|
231
303
|
if (slotData.individualSlots) {
|
|
232
304
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
233
305
|
autoIncrementMap.set(slotName, nextIndex);
|
|
234
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
306
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
235
307
|
}
|
|
236
308
|
|
|
237
309
|
// Await for not-yet-defined custom elements
|
|
@@ -253,23 +325,26 @@ class UI5Element extends HTMLElement {
|
|
|
253
325
|
}
|
|
254
326
|
}
|
|
255
327
|
|
|
256
|
-
child =
|
|
328
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
257
329
|
|
|
258
330
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
259
|
-
if (child
|
|
260
|
-
const
|
|
261
|
-
|
|
331
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
332
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
333
|
+
|
|
334
|
+
if (childChangeListener) {
|
|
335
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
336
|
+
}
|
|
262
337
|
}
|
|
263
338
|
|
|
264
339
|
// Listen for the slotchange event if the child is a slot itself
|
|
265
|
-
if (
|
|
340
|
+
if (child instanceof HTMLSlotElement) {
|
|
266
341
|
this._attachSlotChange(child, slotName);
|
|
267
342
|
}
|
|
268
343
|
|
|
269
344
|
const propertyName = slotData.propertyName || slotName;
|
|
270
345
|
|
|
271
346
|
if (slottedChildrenMap.has(propertyName)) {
|
|
272
|
-
slottedChildrenMap.get(propertyName)
|
|
347
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
273
348
|
} else {
|
|
274
349
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
275
350
|
}
|
|
@@ -287,10 +362,10 @@ class UI5Element extends HTMLElement {
|
|
|
287
362
|
let invalidated = false;
|
|
288
363
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
289
364
|
const propertyName = slotData.propertyName || slotName;
|
|
290
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
365
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
291
366
|
_invalidate.call(this, {
|
|
292
367
|
type: "slot",
|
|
293
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
368
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
294
369
|
reason: "children",
|
|
295
370
|
});
|
|
296
371
|
invalidated = true;
|
|
@@ -312,17 +387,20 @@ class UI5Element extends HTMLElement {
|
|
|
312
387
|
* Removes all children from the slot and detaches listeners, if any
|
|
313
388
|
* @private
|
|
314
389
|
*/
|
|
315
|
-
_clearSlot(slotName, slotData) {
|
|
390
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
316
391
|
const propertyName = slotData.propertyName || slotName;
|
|
317
|
-
const children = this._state[propertyName]
|
|
392
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
318
393
|
|
|
319
394
|
children.forEach(child => {
|
|
320
|
-
if (child
|
|
321
|
-
const
|
|
322
|
-
|
|
395
|
+
if (instanceOfUI5Element(child)) {
|
|
396
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
397
|
+
|
|
398
|
+
if (childChangeListener) {
|
|
399
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
400
|
+
}
|
|
323
401
|
}
|
|
324
402
|
|
|
325
|
-
if (
|
|
403
|
+
if (child instanceof HTMLSlotElement) {
|
|
326
404
|
this._detachSlotChange(child, slotName);
|
|
327
405
|
}
|
|
328
406
|
});
|
|
@@ -333,32 +411,32 @@ class UI5Element extends HTMLElement {
|
|
|
333
411
|
/**
|
|
334
412
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
335
413
|
*
|
|
336
|
-
* @param callback
|
|
414
|
+
* @param {InvalidationInfo} callback
|
|
337
415
|
* @public
|
|
338
416
|
*/
|
|
339
|
-
attachInvalidate(callback) {
|
|
417
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
340
418
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
341
419
|
}
|
|
342
420
|
|
|
343
421
|
/**
|
|
344
422
|
* Detach the callback that is executed whenever the component is invalidated
|
|
345
423
|
*
|
|
346
|
-
* @param callback
|
|
424
|
+
* @param {InvalidationInfo} callback
|
|
347
425
|
* @public
|
|
348
426
|
*/
|
|
349
|
-
detachInvalidate(callback) {
|
|
427
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
350
428
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
351
429
|
}
|
|
352
430
|
|
|
353
431
|
/**
|
|
354
432
|
* Callback that is executed whenever a monitored child changes its state
|
|
355
433
|
*
|
|
356
|
-
* @param slotName the slot in which a child was invalidated
|
|
357
|
-
* @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
|
|
358
436
|
* @private
|
|
359
437
|
*/
|
|
360
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
361
|
-
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)) {
|
|
362
440
|
return;
|
|
363
441
|
}
|
|
364
442
|
|
|
@@ -376,45 +454,58 @@ class UI5Element extends HTMLElement {
|
|
|
376
454
|
* Do not override this method in derivatives of UI5Element
|
|
377
455
|
* @private
|
|
378
456
|
*/
|
|
379
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
457
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
458
|
+
let newPropertyValue: PropertyValue;
|
|
380
459
|
if (this._doNotSyncAttributes.has(name)) { // This attribute is mutated internally, not by the user
|
|
381
460
|
return;
|
|
382
461
|
}
|
|
383
462
|
|
|
384
|
-
const properties = this.constructor.getMetadata().getProperties();
|
|
463
|
+
const properties = (this.constructor as typeof UI5Element).getMetadata().getProperties();
|
|
385
464
|
const realName = name.replace(/^ui5-/, "");
|
|
386
465
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
387
466
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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;
|
|
393
481
|
}
|
|
394
|
-
|
|
482
|
+
|
|
483
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
395
484
|
}
|
|
396
485
|
}
|
|
397
486
|
|
|
398
487
|
/**
|
|
399
488
|
* @private
|
|
400
489
|
*/
|
|
401
|
-
_updateAttribute(name, newValue) {
|
|
402
|
-
|
|
490
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
491
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
492
|
+
|
|
493
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
403
494
|
return;
|
|
404
495
|
}
|
|
405
|
-
const properties =
|
|
406
|
-
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;
|
|
407
500
|
const attrName = camelToKebabCase(name);
|
|
408
501
|
const attrValue = this.getAttribute(attrName);
|
|
409
502
|
|
|
410
|
-
if (
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
417
|
-
const newAttrValue = propertyTypeClass.propertyToAttribute(newValue);
|
|
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);
|
|
418
509
|
if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
|
|
419
510
|
this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
|
|
420
511
|
this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
|
|
@@ -422,9 +513,15 @@ class UI5Element extends HTMLElement {
|
|
|
422
513
|
} else {
|
|
423
514
|
this.setAttribute(attrName, newAttrValue);
|
|
424
515
|
}
|
|
516
|
+
} else if (propertyType === Boolean) {
|
|
517
|
+
if (newValue === true && attrValue === null) {
|
|
518
|
+
this.setAttribute(attrName, "");
|
|
519
|
+
} else if (newValue === false && attrValue !== null) {
|
|
520
|
+
this.removeAttribute(attrName);
|
|
521
|
+
}
|
|
425
522
|
} else if (typeof newValue !== "object") {
|
|
426
523
|
if (attrValue !== newValue) {
|
|
427
|
-
this.setAttribute(attrName, newValue);
|
|
524
|
+
this.setAttribute(attrName, newValue as string);
|
|
428
525
|
}
|
|
429
526
|
} // else { return; } // old object handling
|
|
430
527
|
}
|
|
@@ -432,11 +529,11 @@ class UI5Element extends HTMLElement {
|
|
|
432
529
|
/**
|
|
433
530
|
* @private
|
|
434
531
|
*/
|
|
435
|
-
_upgradeProperty(
|
|
436
|
-
if (this.hasOwnProperty(
|
|
437
|
-
const value = this[
|
|
438
|
-
delete this[
|
|
439
|
-
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;
|
|
440
537
|
}
|
|
441
538
|
}
|
|
442
539
|
|
|
@@ -444,25 +541,18 @@ class UI5Element extends HTMLElement {
|
|
|
444
541
|
* @private
|
|
445
542
|
*/
|
|
446
543
|
_upgradeAllProperties() {
|
|
447
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
448
|
-
allProps.forEach(this._upgradeProperty
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/**
|
|
452
|
-
* @private
|
|
453
|
-
*/
|
|
454
|
-
_initializeState() {
|
|
455
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
544
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
545
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
456
546
|
}
|
|
457
547
|
|
|
458
548
|
/**
|
|
459
549
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
460
550
|
*
|
|
461
551
|
* @param slotName the name of the slot, where the child is
|
|
462
|
-
* @returns {
|
|
552
|
+
* @returns {ChildChangeListener}
|
|
463
553
|
* @private
|
|
464
554
|
*/
|
|
465
|
-
_getChildChangeListener(slotName) {
|
|
555
|
+
_getChildChangeListener(slotName: string) {
|
|
466
556
|
if (!this._childChangeListeners.has(slotName)) {
|
|
467
557
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
468
558
|
}
|
|
@@ -473,27 +563,30 @@ class UI5Element extends HTMLElement {
|
|
|
473
563
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
474
564
|
*
|
|
475
565
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
476
|
-
* @returns {
|
|
566
|
+
* @returns {SlotChangeListener}
|
|
477
567
|
* @private
|
|
478
568
|
*/
|
|
479
|
-
_getSlotChangeListener(slotName) {
|
|
569
|
+
_getSlotChangeListener(slotName: string) {
|
|
480
570
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
481
571
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
482
572
|
}
|
|
483
|
-
return this._slotChangeListeners.get(slotName)
|
|
573
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
484
574
|
}
|
|
485
575
|
|
|
486
576
|
/**
|
|
487
577
|
* @private
|
|
488
578
|
*/
|
|
489
|
-
_attachSlotChange(child, slotName) {
|
|
490
|
-
|
|
579
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
580
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
581
|
+
if (slotChangeListener) {
|
|
582
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
583
|
+
}
|
|
491
584
|
}
|
|
492
585
|
|
|
493
586
|
/**
|
|
494
587
|
* @private
|
|
495
588
|
*/
|
|
496
|
-
_detachSlotChange(child, slotName) {
|
|
589
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
497
590
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
498
591
|
}
|
|
499
592
|
|
|
@@ -503,7 +596,7 @@ class UI5Element extends HTMLElement {
|
|
|
503
596
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
504
597
|
* @private
|
|
505
598
|
*/
|
|
506
|
-
_onSlotChange(slotName) {
|
|
599
|
+
_onSlotChange(slotName: string) {
|
|
507
600
|
_invalidate.call(this, {
|
|
508
601
|
type: "slot",
|
|
509
602
|
name: slotName,
|
|
@@ -538,21 +631,20 @@ class UI5Element extends HTMLElement {
|
|
|
538
631
|
*
|
|
539
632
|
* @public
|
|
540
633
|
*/
|
|
541
|
-
onInvalidation(changeInfo) {}
|
|
634
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
542
635
|
|
|
543
636
|
/**
|
|
544
637
|
* Do not call this method directly, only intended to be called by js
|
|
545
638
|
* @protected
|
|
546
639
|
*/
|
|
547
640
|
_render() {
|
|
548
|
-
const
|
|
641
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
642
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
549
643
|
|
|
550
644
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
551
645
|
this._suppressInvalidation = true;
|
|
552
646
|
|
|
553
|
-
|
|
554
|
-
this.onBeforeRendering();
|
|
555
|
-
}
|
|
647
|
+
this.onBeforeRendering();
|
|
556
648
|
|
|
557
649
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
558
650
|
if (this._onComponentStateFinalized) {
|
|
@@ -586,7 +678,7 @@ class UI5Element extends HTMLElement {
|
|
|
586
678
|
this._changedState = [];
|
|
587
679
|
|
|
588
680
|
// Update shadow root and static area item
|
|
589
|
-
if (
|
|
681
|
+
if (ctor._needsShadowDOM()) {
|
|
590
682
|
updateShadowRoot(this);
|
|
591
683
|
}
|
|
592
684
|
if (this.staticAreaItem) {
|
|
@@ -599,9 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
599
691
|
}
|
|
600
692
|
|
|
601
693
|
// Call the onAfterRendering hook
|
|
602
|
-
|
|
603
|
-
this.onAfterRendering();
|
|
604
|
-
}
|
|
694
|
+
this.onAfterRendering();
|
|
605
695
|
}
|
|
606
696
|
|
|
607
697
|
/**
|
|
@@ -610,7 +700,7 @@ class UI5Element extends HTMLElement {
|
|
|
610
700
|
_assignIndividualSlotsToChildren() {
|
|
611
701
|
const domChildren = Array.from(this.children);
|
|
612
702
|
|
|
613
|
-
domChildren.forEach(child => {
|
|
703
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
614
704
|
if (child._individualSlot) {
|
|
615
705
|
child.setAttribute("slot", child._individualSlot);
|
|
616
706
|
}
|
|
@@ -643,10 +733,10 @@ class UI5Element extends HTMLElement {
|
|
|
643
733
|
|
|
644
734
|
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
645
735
|
if (children.length !== 1) {
|
|
646
|
-
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
|
|
647
737
|
}
|
|
648
738
|
|
|
649
|
-
return children[0];
|
|
739
|
+
return children[0] as HTMLElement;
|
|
650
740
|
}
|
|
651
741
|
|
|
652
742
|
/**
|
|
@@ -657,7 +747,7 @@ class UI5Element extends HTMLElement {
|
|
|
657
747
|
getFocusDomRef() {
|
|
658
748
|
const domRef = this.getDomRef();
|
|
659
749
|
if (domRef) {
|
|
660
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
750
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
661
751
|
return focusRef || domRef;
|
|
662
752
|
}
|
|
663
753
|
}
|
|
@@ -695,7 +785,7 @@ class UI5Element extends HTMLElement {
|
|
|
695
785
|
* @param bubbles - true, if the event bubbles
|
|
696
786
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
697
787
|
*/
|
|
698
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
788
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
699
789
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
700
790
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
701
791
|
|
|
@@ -706,8 +796,8 @@ class UI5Element extends HTMLElement {
|
|
|
706
796
|
return eventResult;
|
|
707
797
|
}
|
|
708
798
|
|
|
709
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
710
|
-
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}`, {
|
|
711
801
|
detail: data,
|
|
712
802
|
composed: false,
|
|
713
803
|
bubbles,
|
|
@@ -721,7 +811,7 @@ class UI5Element extends HTMLElement {
|
|
|
721
811
|
return noConflictEventResult;
|
|
722
812
|
}
|
|
723
813
|
|
|
724
|
-
const normalEvent = new CustomEvent(name, {
|
|
814
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
725
815
|
detail: data,
|
|
726
816
|
composed: false,
|
|
727
817
|
bubbles,
|
|
@@ -740,8 +830,8 @@ class UI5Element extends HTMLElement {
|
|
|
740
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.
|
|
741
831
|
* @public
|
|
742
832
|
*/
|
|
743
|
-
getSlottedNodes(slotName) {
|
|
744
|
-
return
|
|
833
|
+
getSlottedNodes(slotName: string) {
|
|
834
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]);
|
|
745
835
|
}
|
|
746
836
|
|
|
747
837
|
/**
|
|
@@ -752,7 +842,7 @@ class UI5Element extends HTMLElement {
|
|
|
752
842
|
* @returns {String|undefined}
|
|
753
843
|
*/
|
|
754
844
|
get effectiveDir() {
|
|
755
|
-
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
|
|
756
846
|
return getEffectiveDir(this);
|
|
757
847
|
}
|
|
758
848
|
|
|
@@ -765,6 +855,10 @@ class UI5Element extends HTMLElement {
|
|
|
765
855
|
return true;
|
|
766
856
|
}
|
|
767
857
|
|
|
858
|
+
get classes(): ClassMap {
|
|
859
|
+
return {};
|
|
860
|
+
}
|
|
861
|
+
|
|
768
862
|
/**
|
|
769
863
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
770
864
|
* @private
|
|
@@ -791,7 +885,7 @@ class UI5Element extends HTMLElement {
|
|
|
791
885
|
* @public
|
|
792
886
|
*/
|
|
793
887
|
getStaticAreaItemDomRef() {
|
|
794
|
-
if (!this.constructor._needsStaticArea()) {
|
|
888
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
795
889
|
throw new Error("This component does not use the static area");
|
|
796
890
|
}
|
|
797
891
|
|
|
@@ -837,7 +931,7 @@ class UI5Element extends HTMLElement {
|
|
|
837
931
|
}
|
|
838
932
|
|
|
839
933
|
Object.defineProperty(proto, prop, {
|
|
840
|
-
get() {
|
|
934
|
+
get(this: UI5Element) {
|
|
841
935
|
if (this._state[prop] !== undefined) {
|
|
842
936
|
return this._state[prop];
|
|
843
937
|
}
|
|
@@ -854,15 +948,25 @@ class UI5Element extends HTMLElement {
|
|
|
854
948
|
return propDefaultValue;
|
|
855
949
|
}
|
|
856
950
|
},
|
|
857
|
-
|
|
951
|
+
|
|
952
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
858
953
|
let isDifferent;
|
|
859
|
-
|
|
954
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
955
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
860
956
|
|
|
957
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
958
|
+
const propertyType = propData.type;
|
|
959
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
861
960
|
const oldState = this._state[prop];
|
|
862
|
-
|
|
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
|
|
863
969
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
864
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
865
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
866
970
|
} else {
|
|
867
971
|
isDifferent = oldState !== value;
|
|
868
972
|
}
|
|
@@ -891,7 +995,7 @@ class UI5Element extends HTMLElement {
|
|
|
891
995
|
|
|
892
996
|
const propertyName = slotData.propertyName || slotName;
|
|
893
997
|
Object.defineProperty(proto, propertyName, {
|
|
894
|
-
get() {
|
|
998
|
+
get(this: UI5Element) {
|
|
895
999
|
if (this._state[propertyName] !== undefined) {
|
|
896
1000
|
return this._state[propertyName];
|
|
897
1001
|
}
|
|
@@ -925,7 +1029,7 @@ class UI5Element extends HTMLElement {
|
|
|
925
1029
|
* Returns the CSS for this UI5 Web Component Class
|
|
926
1030
|
* @protected
|
|
927
1031
|
*/
|
|
928
|
-
static get styles() {
|
|
1032
|
+
static get styles(): ComponentStylesData {
|
|
929
1033
|
return "";
|
|
930
1034
|
}
|
|
931
1035
|
|
|
@@ -933,7 +1037,7 @@ class UI5Element extends HTMLElement {
|
|
|
933
1037
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
934
1038
|
* @protected
|
|
935
1039
|
*/
|
|
936
|
-
static get staticAreaStyles() {
|
|
1040
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
937
1041
|
return "";
|
|
938
1042
|
}
|
|
939
1043
|
|
|
@@ -944,7 +1048,7 @@ class UI5Element extends HTMLElement {
|
|
|
944
1048
|
*
|
|
945
1049
|
* @protected
|
|
946
1050
|
*/
|
|
947
|
-
static get dependencies() {
|
|
1051
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
948
1052
|
return [];
|
|
949
1053
|
}
|
|
950
1054
|
|
|
@@ -953,21 +1057,21 @@ class UI5Element extends HTMLElement {
|
|
|
953
1057
|
*
|
|
954
1058
|
* @public
|
|
955
1059
|
*/
|
|
956
|
-
static getUniqueDependencies() {
|
|
1060
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
957
1061
|
if (!uniqueDependenciesCache.has(this)) {
|
|
958
1062
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
959
1063
|
uniqueDependenciesCache.set(this, filtered);
|
|
960
1064
|
}
|
|
961
1065
|
|
|
962
|
-
return uniqueDependenciesCache.get(this);
|
|
1066
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
963
1067
|
}
|
|
964
1068
|
|
|
965
1069
|
/**
|
|
966
1070
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
967
1071
|
*
|
|
968
|
-
* @returns {Promise
|
|
1072
|
+
* @returns {Promise}
|
|
969
1073
|
*/
|
|
970
|
-
static whenDependenciesDefined() {
|
|
1074
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
971
1075
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
972
1076
|
}
|
|
973
1077
|
|
|
@@ -995,7 +1099,6 @@ class UI5Element extends HTMLElement {
|
|
|
995
1099
|
]);
|
|
996
1100
|
|
|
997
1101
|
const tag = this.getMetadata().getTag();
|
|
998
|
-
const altTag = this.getMetadata().getAltTag();
|
|
999
1102
|
|
|
1000
1103
|
const definedLocally = isTagRegistered(tag);
|
|
1001
1104
|
const definedGlobally = customElements.get(tag);
|
|
@@ -1005,15 +1108,8 @@ class UI5Element extends HTMLElement {
|
|
|
1005
1108
|
} else if (!definedGlobally) {
|
|
1006
1109
|
this._generateAccessors();
|
|
1007
1110
|
registerTag(tag);
|
|
1008
|
-
window.customElements.define(tag, this);
|
|
1111
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
1009
1112
|
preloadLinks(this);
|
|
1010
|
-
|
|
1011
|
-
if (altTag && !customElements.get(altTag)) {
|
|
1012
|
-
registerTag(altTag);
|
|
1013
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
1014
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
1015
|
-
}));
|
|
1016
|
-
}
|
|
1017
1113
|
}
|
|
1018
1114
|
return this;
|
|
1019
1115
|
}
|
|
@@ -1029,17 +1125,31 @@ class UI5Element extends HTMLElement {
|
|
|
1029
1125
|
return this._metadata;
|
|
1030
1126
|
}
|
|
1031
1127
|
|
|
1032
|
-
const
|
|
1128
|
+
const effectiveMetadata = Object.keys(this.metadata).length ? this.metadata : this.decoratorMetadata;
|
|
1129
|
+
const metadataObjects = [effectiveMetadata];
|
|
1033
1130
|
let klass = this; // eslint-disable-line
|
|
1034
1131
|
while (klass !== UI5Element) {
|
|
1035
1132
|
klass = Object.getPrototypeOf(klass);
|
|
1036
|
-
|
|
1133
|
+
const effectiveKlassMetadata = Object.keys(klass.metadata).length ? klass.metadata : klass.decoratorMetadata;
|
|
1134
|
+
metadataObjects.unshift(effectiveKlassMetadata);
|
|
1037
1135
|
}
|
|
1038
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1136
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1039
1137
|
|
|
1040
1138
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1041
1139
|
return this._metadata;
|
|
1042
1140
|
}
|
|
1141
|
+
|
|
1142
|
+
static decoratorMetadata: Metadata = {};
|
|
1043
1143
|
}
|
|
1044
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
|
+
|
|
1045
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type { ChangeInfo };
|