@ui5/webcomponents-base 0.0.0-a3eca7ade → 0.0.0-a7032d86e
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 -1
- package/CHANGELOG.md +219 -0
- package/README.md +28 -6
- package/bundle.esm.js +12 -10
- 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 +11 -108
- package/dist/CustomElementsScope.js.map +1 -0
- package/dist/CustomElementsScopeUtils.d.ts +55 -0
- package/dist/CustomElementsScopeUtils.js +90 -0
- 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 +54 -79
- 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 -276
- 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 +85 -87
- 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 +929 -985
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +278 -314
- 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 +86 -121
- 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 -127
- package/dist/asset-registries/LocaleData.js.map +1 -0
- package/dist/asset-registries/Themes.d.ts +10 -0
- package/dist/asset-registries/Themes.js +38 -66
- package/dist/asset-registries/Themes.js.map +1 -0
- package/dist/asset-registries/i18n.d.ts +23 -0
- package/dist/asset-registries/i18n.js +55 -81
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/bundle.esm.0cfce34f.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 +48 -0
- 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 +38 -29
- 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/BusyIndicator.css +80 -0
- package/dist/css/FontFace.css +31 -10
- 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 -312
- 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 -100
- 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 +96 -0
- 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/AssetParameters.js +1 -1
- package/dist/generated/VersionInfo.js +3 -3
- package/dist/generated/css/BusyIndicator.css.js +5 -0
- 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 +31 -24
- package/dist/renderer/LitRenderer.js.map +1 -0
- package/dist/renderer/executeTemplate.d.ts +13 -0
- package/dist/renderer/executeTemplate.js +20 -7
- 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/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
- 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 +13 -16
- package/dist/theming/getEffectiveLinksHrefs.js.map +1 -0
- package/dist/theming/getEffectiveStyle.d.ts +3 -0
- package/dist/theming/getEffectiveStyle.js +25 -23
- 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 +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 -17
- package/dist/updateShadowRoot.js.map +1 -0
- package/dist/util/AriaLabelHelper.d.ts +6 -0
- package/dist/util/AriaLabelHelper.js +37 -34
- package/dist/util/AriaLabelHelper.js.map +1 -0
- package/dist/util/Caret.d.ts +7 -0
- package/dist/util/Caret.js +16 -38
- package/dist/util/Caret.js.map +1 -0
- package/dist/util/ColorConversion.d.ts +30 -0
- package/dist/util/ColorConversion.js +315 -348
- 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 +41 -45
- 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 -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 +14 -0
- 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-asset-parameters/index.js +8 -4
- package/lib/generate-styles/index.js +17 -9
- package/lib/generate-version-info/index.js +18 -13
- package/package-scripts.js +29 -29
- package/package.json +7 -6
- 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} +20 -17
- package/src/CustomElementsScope.ts +33 -0
- package/src/{CustomElementsScope.js → CustomElementsScopeUtils.ts} +14 -7
- package/src/DOMObserver.ts +28 -0
- package/src/{Device.js → Device.ts} +21 -13
- 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} +31 -19
- package/src/{SystemCSSVars.js → SystemCSSVars.ts} +0 -0
- package/src/{Theming.js → Theming.ts} +0 -0
- package/src/{UI5Element.js → UI5Element.ts} +280 -148
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +121 -59
- 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.ts +162 -0
- package/src/asset-registries/Illustrations.ts +75 -0
- package/src/asset-registries/{LocaleData.js → LocaleData.ts} +42 -29
- package/src/asset-registries/Themes.ts +67 -0
- package/src/asset-registries/{i18n.js → i18n.ts} +21 -24
- 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.ts +59 -0
- 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/BusyIndicator.css +80 -0
- package/src/css/FontFace.css +31 -10
- 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} +65 -23
- 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} +5 -3
- package/src/renderer/LitRenderer.ts +60 -0
- package/src/renderer/executeTemplate.ts +40 -0
- 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} +15 -4
- 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 +30 -0
- package/src/updateShadowRoot.ts +37 -0
- package/src/util/AriaLabelHelper.ts +63 -0
- package/src/util/Caret.ts +28 -0
- package/src/util/ColorConversion.ts +399 -0
- 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} +15 -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} +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.ts +16 -0
- 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/config/.eslintrc.js +0 -3
- package/config/rollup.config.js +0 -1
- package/dist/RenderScheduler.js +0 -44
- package/dist/animations/config.js +0 -5
- package/dist/isLegacyBrowser.js +0 -3
- package/dist/resources/bundle.esm.js +0 -37
- package/dist/resources/bundle.esm.js.map +0 -1
- package/dist/test-resources/assets/Themes.js +0 -17
- package/dist/test-resources/elements/Child.js +0 -35
- package/dist/test-resources/elements/Generic.js +0 -84
- package/dist/test-resources/elements/GenericExt.js +0 -26
- package/dist/test-resources/elements/NoShadowDOM.js +0 -13
- package/dist/test-resources/elements/Parent.js +0 -41
- package/dist/test-resources/elements/WithStaticArea.js +0 -77
- package/dist/test-resources/pages/AllTestElements.html +0 -42
- package/dist/test-resources/pages/Configuration.html +0 -18
- package/dist/test-resources/pages/ConfigurationScript.html +0 -34
- package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
- package/dist/test-resources/pages/i18n.html +0 -33
- package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -27
- package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -63
- package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -93
- package/dist/test-resources/specs/CustomTheme.spec.js +0 -27
- package/dist/test-resources/specs/EventProvider.spec.js +0 -63
- package/dist/test-resources/specs/StaticArea.spec.js +0 -78
- package/dist/test-resources/specs/Theming.spec.js +0 -33
- package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
- package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
- package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
- package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
- package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
- package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
- package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
- package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/PopupState.js +0 -37
- package/dist/util/findNodeOwner.js +0 -35
- 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 -280
- 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/Icons.js +0 -139
- package/src/asset-registries/Illustrations.js +0 -30
- package/src/asset-registries/Themes.js +0 -78
- 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 -42
- package/src/delegate/ScrollEnablement.js +0 -188
- package/src/features/F6Navigation.js +0 -106
- package/src/features/OpenUI5Support.js +0 -125
- package/src/isLegacyBrowser.js +0 -3
- package/src/locale/RTLAwareRegistry.js +0 -14
- package/src/locale/languageChange.js +0 -22
- package/src/renderer/LitRenderer.js +0 -34
- package/src/renderer/executeTemplate.js +0 -17
- package/src/theming/getEffectiveLinksHrefs.js +0 -20
- 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 -30
- package/src/util/AriaLabelHelper.js +0 -41
- package/src/util/Caret.js +0 -45
- package/src/util/ColorConversion.js +0 -370
- 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/findNodeOwner.js +0 -35
- package/src/util/getEffectiveContentDensity.js +0 -5
- 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,20 +67,44 @@ function _invalidate(changeInfo) {
|
|
|
46
67
|
this._eventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
|
|
47
68
|
}
|
|
48
69
|
|
|
70
|
+
let metadata = {} as Metadata;
|
|
71
|
+
|
|
49
72
|
/**
|
|
50
73
|
* Base class for all UI5 Web Components
|
|
51
74
|
*
|
|
52
75
|
* @class
|
|
53
76
|
* @constructor
|
|
54
77
|
* @author SAP SE
|
|
55
|
-
* @alias sap.ui.
|
|
78
|
+
* @alias sap.ui.webc.base.UI5Element
|
|
56
79
|
* @extends HTMLElement
|
|
57
80
|
* @public
|
|
58
81
|
*/
|
|
59
|
-
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
|
+
|
|
60
104
|
constructor() {
|
|
61
105
|
super();
|
|
62
106
|
|
|
107
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
63
108
|
this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
|
|
64
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
|
|
65
110
|
this._inDOM = false; // A flag telling whether the UI5Element is currently in the DOM tree of the document or not
|
|
@@ -72,11 +117,13 @@ class UI5Element extends HTMLElement {
|
|
|
72
117
|
deferredResolve = resolve;
|
|
73
118
|
});
|
|
74
119
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
120
|
+
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
121
|
+
|
|
122
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
75
123
|
|
|
76
|
-
this._initializeState();
|
|
77
124
|
this._upgradeAllProperties();
|
|
78
125
|
|
|
79
|
-
if (
|
|
126
|
+
if (ctor._needsShadowDOM()) {
|
|
80
127
|
this.attachShadow({ mode: "open" });
|
|
81
128
|
}
|
|
82
129
|
}
|
|
@@ -100,12 +147,14 @@ class UI5Element extends HTMLElement {
|
|
|
100
147
|
* @private
|
|
101
148
|
*/
|
|
102
149
|
async connectedCallback() {
|
|
103
|
-
this.
|
|
104
|
-
|
|
150
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
151
|
+
|
|
152
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
153
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
105
154
|
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
106
155
|
}
|
|
107
156
|
|
|
108
|
-
const slotsAreManaged =
|
|
157
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
109
158
|
|
|
110
159
|
this._inDOM = true;
|
|
111
160
|
|
|
@@ -120,11 +169,9 @@ class UI5Element extends HTMLElement {
|
|
|
120
169
|
}
|
|
121
170
|
|
|
122
171
|
renderImmediately(this);
|
|
123
|
-
this._domRefReadyPromise._deferredResolve();
|
|
172
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
124
173
|
this._fullyConnected = true;
|
|
125
|
-
|
|
126
|
-
this.onEnterDOM();
|
|
127
|
-
}
|
|
174
|
+
this.onEnterDOM();
|
|
128
175
|
}
|
|
129
176
|
|
|
130
177
|
/**
|
|
@@ -132,7 +179,8 @@ class UI5Element extends HTMLElement {
|
|
|
132
179
|
* @private
|
|
133
180
|
*/
|
|
134
181
|
disconnectedCallback() {
|
|
135
|
-
const
|
|
182
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
183
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
136
184
|
|
|
137
185
|
this._inDOM = false;
|
|
138
186
|
|
|
@@ -141,9 +189,7 @@ class UI5Element extends HTMLElement {
|
|
|
141
189
|
}
|
|
142
190
|
|
|
143
191
|
if (this._fullyConnected) {
|
|
144
|
-
|
|
145
|
-
this.onExitDOM();
|
|
146
|
-
}
|
|
192
|
+
this.onExitDOM();
|
|
147
193
|
this._fullyConnected = false;
|
|
148
194
|
}
|
|
149
195
|
|
|
@@ -154,22 +200,47 @@ class UI5Element extends HTMLElement {
|
|
|
154
200
|
cancelRender(this);
|
|
155
201
|
}
|
|
156
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
|
+
|
|
157
227
|
/**
|
|
158
228
|
* @private
|
|
159
229
|
*/
|
|
160
230
|
_startObservingDOMChildren() {
|
|
161
|
-
const
|
|
231
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
232
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
162
233
|
if (!shouldObserveChildren) {
|
|
163
234
|
return;
|
|
164
235
|
}
|
|
165
236
|
|
|
166
|
-
const canSlotText =
|
|
237
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
167
238
|
const mutationObserverOptions = {
|
|
168
239
|
childList: true,
|
|
169
240
|
subtree: canSlotText,
|
|
170
241
|
characterData: canSlotText,
|
|
171
242
|
};
|
|
172
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
243
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
173
244
|
}
|
|
174
245
|
|
|
175
246
|
/**
|
|
@@ -184,7 +255,7 @@ class UI5Element extends HTMLElement {
|
|
|
184
255
|
* @private
|
|
185
256
|
*/
|
|
186
257
|
async _processChildren() {
|
|
187
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
258
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
188
259
|
if (hasSlots) {
|
|
189
260
|
await this._updateSlots();
|
|
190
261
|
}
|
|
@@ -194,23 +265,24 @@ class UI5Element extends HTMLElement {
|
|
|
194
265
|
* @private
|
|
195
266
|
*/
|
|
196
267
|
async _updateSlots() {
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
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>;
|
|
200
272
|
|
|
201
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
202
|
-
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
|
|
203
275
|
|
|
204
276
|
// Init the _state object based on the supported slots and store the previous values
|
|
205
277
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
206
278
|
const propertyName = slotData.propertyName || slotName;
|
|
207
279
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
208
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
280
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
209
281
|
this._clearSlot(slotName, slotData);
|
|
210
282
|
}
|
|
211
283
|
|
|
212
|
-
const autoIncrementMap = new Map();
|
|
213
|
-
const slottedChildrenMap = new Map();
|
|
284
|
+
const autoIncrementMap = new Map<string, number>();
|
|
285
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
214
286
|
|
|
215
287
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
216
288
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -219,8 +291,11 @@ class UI5Element extends HTMLElement {
|
|
|
219
291
|
|
|
220
292
|
// Check if the slotName is supported
|
|
221
293
|
if (slotData === undefined) {
|
|
222
|
-
|
|
223
|
-
|
|
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
|
+
|
|
224
299
|
return;
|
|
225
300
|
}
|
|
226
301
|
|
|
@@ -228,7 +303,7 @@ class UI5Element extends HTMLElement {
|
|
|
228
303
|
if (slotData.individualSlots) {
|
|
229
304
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
230
305
|
autoIncrementMap.set(slotName, nextIndex);
|
|
231
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
306
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
232
307
|
}
|
|
233
308
|
|
|
234
309
|
// Await for not-yet-defined custom elements
|
|
@@ -250,23 +325,26 @@ class UI5Element extends HTMLElement {
|
|
|
250
325
|
}
|
|
251
326
|
}
|
|
252
327
|
|
|
253
|
-
child =
|
|
328
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
254
329
|
|
|
255
330
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
256
|
-
if (child
|
|
257
|
-
const
|
|
258
|
-
|
|
331
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
332
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
333
|
+
|
|
334
|
+
if (childChangeListener) {
|
|
335
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
336
|
+
}
|
|
259
337
|
}
|
|
260
338
|
|
|
261
339
|
// Listen for the slotchange event if the child is a slot itself
|
|
262
|
-
if (
|
|
340
|
+
if (child instanceof HTMLSlotElement) {
|
|
263
341
|
this._attachSlotChange(child, slotName);
|
|
264
342
|
}
|
|
265
343
|
|
|
266
344
|
const propertyName = slotData.propertyName || slotName;
|
|
267
345
|
|
|
268
346
|
if (slottedChildrenMap.has(propertyName)) {
|
|
269
|
-
slottedChildrenMap.get(propertyName)
|
|
347
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
270
348
|
} else {
|
|
271
349
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
272
350
|
}
|
|
@@ -284,10 +362,10 @@ class UI5Element extends HTMLElement {
|
|
|
284
362
|
let invalidated = false;
|
|
285
363
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
286
364
|
const propertyName = slotData.propertyName || slotName;
|
|
287
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
365
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
288
366
|
_invalidate.call(this, {
|
|
289
367
|
type: "slot",
|
|
290
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
368
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
291
369
|
reason: "children",
|
|
292
370
|
});
|
|
293
371
|
invalidated = true;
|
|
@@ -309,17 +387,20 @@ class UI5Element extends HTMLElement {
|
|
|
309
387
|
* Removes all children from the slot and detaches listeners, if any
|
|
310
388
|
* @private
|
|
311
389
|
*/
|
|
312
|
-
_clearSlot(slotName, slotData) {
|
|
390
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
313
391
|
const propertyName = slotData.propertyName || slotName;
|
|
314
|
-
const children = this._state[propertyName]
|
|
392
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
315
393
|
|
|
316
394
|
children.forEach(child => {
|
|
317
|
-
if (child
|
|
318
|
-
const
|
|
319
|
-
|
|
395
|
+
if (instanceOfUI5Element(child)) {
|
|
396
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
397
|
+
|
|
398
|
+
if (childChangeListener) {
|
|
399
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
400
|
+
}
|
|
320
401
|
}
|
|
321
402
|
|
|
322
|
-
if (
|
|
403
|
+
if (child instanceof HTMLSlotElement) {
|
|
323
404
|
this._detachSlotChange(child, slotName);
|
|
324
405
|
}
|
|
325
406
|
});
|
|
@@ -330,32 +411,32 @@ class UI5Element extends HTMLElement {
|
|
|
330
411
|
/**
|
|
331
412
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
332
413
|
*
|
|
333
|
-
* @param callback
|
|
414
|
+
* @param {InvalidationInfo} callback
|
|
334
415
|
* @public
|
|
335
416
|
*/
|
|
336
|
-
attachInvalidate(callback) {
|
|
417
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
337
418
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
338
419
|
}
|
|
339
420
|
|
|
340
421
|
/**
|
|
341
422
|
* Detach the callback that is executed whenever the component is invalidated
|
|
342
423
|
*
|
|
343
|
-
* @param callback
|
|
424
|
+
* @param {InvalidationInfo} callback
|
|
344
425
|
* @public
|
|
345
426
|
*/
|
|
346
|
-
detachInvalidate(callback) {
|
|
427
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
347
428
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
348
429
|
}
|
|
349
430
|
|
|
350
431
|
/**
|
|
351
432
|
* Callback that is executed whenever a monitored child changes its state
|
|
352
433
|
*
|
|
353
|
-
* @param slotName the slot in which a child was invalidated
|
|
354
|
-
* @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
|
|
355
436
|
* @private
|
|
356
437
|
*/
|
|
357
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
358
|
-
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)) {
|
|
359
440
|
return;
|
|
360
441
|
}
|
|
361
442
|
|
|
@@ -373,44 +454,74 @@ class UI5Element extends HTMLElement {
|
|
|
373
454
|
* Do not override this method in derivatives of UI5Element
|
|
374
455
|
* @private
|
|
375
456
|
*/
|
|
376
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
377
|
-
|
|
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();
|
|
378
464
|
const realName = name.replace(/^ui5-/, "");
|
|
379
465
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
380
466
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
381
|
-
const
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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;
|
|
386
473
|
}
|
|
387
|
-
|
|
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;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
388
484
|
}
|
|
389
485
|
}
|
|
390
486
|
|
|
391
487
|
/**
|
|
392
488
|
* @private
|
|
393
489
|
*/
|
|
394
|
-
_updateAttribute(name, newValue) {
|
|
395
|
-
|
|
490
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
491
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
492
|
+
|
|
493
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
396
494
|
return;
|
|
397
495
|
}
|
|
398
|
-
const properties =
|
|
399
|
-
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;
|
|
400
500
|
const attrName = camelToKebabCase(name);
|
|
401
501
|
const attrValue = this.getAttribute(attrName);
|
|
402
502
|
|
|
403
|
-
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) {
|
|
404
517
|
if (newValue === true && attrValue === null) {
|
|
405
518
|
this.setAttribute(attrName, "");
|
|
406
519
|
} else if (newValue === false && attrValue !== null) {
|
|
407
520
|
this.removeAttribute(attrName);
|
|
408
521
|
}
|
|
409
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
410
|
-
this.setAttribute(attrName, propertyTypeClass.propertyToAttribute(newValue));
|
|
411
522
|
} else if (typeof newValue !== "object") {
|
|
412
523
|
if (attrValue !== newValue) {
|
|
413
|
-
this.setAttribute(attrName, newValue);
|
|
524
|
+
this.setAttribute(attrName, newValue as string);
|
|
414
525
|
}
|
|
415
526
|
} // else { return; } // old object handling
|
|
416
527
|
}
|
|
@@ -418,11 +529,11 @@ class UI5Element extends HTMLElement {
|
|
|
418
529
|
/**
|
|
419
530
|
* @private
|
|
420
531
|
*/
|
|
421
|
-
_upgradeProperty(
|
|
422
|
-
if (this.hasOwnProperty(
|
|
423
|
-
const value = this[
|
|
424
|
-
delete this[
|
|
425
|
-
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;
|
|
426
537
|
}
|
|
427
538
|
}
|
|
428
539
|
|
|
@@ -430,25 +541,18 @@ class UI5Element extends HTMLElement {
|
|
|
430
541
|
* @private
|
|
431
542
|
*/
|
|
432
543
|
_upgradeAllProperties() {
|
|
433
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
434
|
-
allProps.forEach(this._upgradeProperty
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* @private
|
|
439
|
-
*/
|
|
440
|
-
_initializeState() {
|
|
441
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
544
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
545
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
442
546
|
}
|
|
443
547
|
|
|
444
548
|
/**
|
|
445
549
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
446
550
|
*
|
|
447
551
|
* @param slotName the name of the slot, where the child is
|
|
448
|
-
* @returns {
|
|
552
|
+
* @returns {ChildChangeListener}
|
|
449
553
|
* @private
|
|
450
554
|
*/
|
|
451
|
-
_getChildChangeListener(slotName) {
|
|
555
|
+
_getChildChangeListener(slotName: string) {
|
|
452
556
|
if (!this._childChangeListeners.has(slotName)) {
|
|
453
557
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
454
558
|
}
|
|
@@ -459,27 +563,30 @@ class UI5Element extends HTMLElement {
|
|
|
459
563
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
460
564
|
*
|
|
461
565
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
462
|
-
* @returns {
|
|
566
|
+
* @returns {SlotChangeListener}
|
|
463
567
|
* @private
|
|
464
568
|
*/
|
|
465
|
-
_getSlotChangeListener(slotName) {
|
|
569
|
+
_getSlotChangeListener(slotName: string) {
|
|
466
570
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
467
571
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
468
572
|
}
|
|
469
|
-
return this._slotChangeListeners.get(slotName)
|
|
573
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
470
574
|
}
|
|
471
575
|
|
|
472
576
|
/**
|
|
473
577
|
* @private
|
|
474
578
|
*/
|
|
475
|
-
_attachSlotChange(child, slotName) {
|
|
476
|
-
|
|
579
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
580
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
581
|
+
if (slotChangeListener) {
|
|
582
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
583
|
+
}
|
|
477
584
|
}
|
|
478
585
|
|
|
479
586
|
/**
|
|
480
587
|
* @private
|
|
481
588
|
*/
|
|
482
|
-
_detachSlotChange(child, slotName) {
|
|
589
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
483
590
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
484
591
|
}
|
|
485
592
|
|
|
@@ -489,7 +596,7 @@ class UI5Element extends HTMLElement {
|
|
|
489
596
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
490
597
|
* @private
|
|
491
598
|
*/
|
|
492
|
-
_onSlotChange(slotName) {
|
|
599
|
+
_onSlotChange(slotName: string) {
|
|
493
600
|
_invalidate.call(this, {
|
|
494
601
|
type: "slot",
|
|
495
602
|
name: slotName,
|
|
@@ -524,21 +631,20 @@ class UI5Element extends HTMLElement {
|
|
|
524
631
|
*
|
|
525
632
|
* @public
|
|
526
633
|
*/
|
|
527
|
-
onInvalidation(changeInfo) {}
|
|
634
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
528
635
|
|
|
529
636
|
/**
|
|
530
637
|
* Do not call this method directly, only intended to be called by js
|
|
531
638
|
* @protected
|
|
532
639
|
*/
|
|
533
640
|
_render() {
|
|
534
|
-
const
|
|
641
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
642
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
535
643
|
|
|
536
644
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
537
645
|
this._suppressInvalidation = true;
|
|
538
646
|
|
|
539
|
-
|
|
540
|
-
this.onBeforeRendering();
|
|
541
|
-
}
|
|
647
|
+
this.onBeforeRendering();
|
|
542
648
|
|
|
543
649
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
544
650
|
if (this._onComponentStateFinalized) {
|
|
@@ -572,7 +678,7 @@ class UI5Element extends HTMLElement {
|
|
|
572
678
|
this._changedState = [];
|
|
573
679
|
|
|
574
680
|
// Update shadow root and static area item
|
|
575
|
-
if (
|
|
681
|
+
if (ctor._needsShadowDOM()) {
|
|
576
682
|
updateShadowRoot(this);
|
|
577
683
|
}
|
|
578
684
|
if (this.staticAreaItem) {
|
|
@@ -585,9 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
585
691
|
}
|
|
586
692
|
|
|
587
693
|
// Call the onAfterRendering hook
|
|
588
|
-
|
|
589
|
-
this.onAfterRendering();
|
|
590
|
-
}
|
|
694
|
+
this.onAfterRendering();
|
|
591
695
|
}
|
|
592
696
|
|
|
593
697
|
/**
|
|
@@ -596,7 +700,7 @@ class UI5Element extends HTMLElement {
|
|
|
596
700
|
_assignIndividualSlotsToChildren() {
|
|
597
701
|
const domChildren = Array.from(this.children);
|
|
598
702
|
|
|
599
|
-
domChildren.forEach(child => {
|
|
703
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
600
704
|
if (child._individualSlot) {
|
|
601
705
|
child.setAttribute("slot", child._individualSlot);
|
|
602
706
|
}
|
|
@@ -629,10 +733,10 @@ class UI5Element extends HTMLElement {
|
|
|
629
733
|
|
|
630
734
|
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
631
735
|
if (children.length !== 1) {
|
|
632
|
-
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
|
|
633
737
|
}
|
|
634
738
|
|
|
635
|
-
return children[0];
|
|
739
|
+
return children[0] as HTMLElement;
|
|
636
740
|
}
|
|
637
741
|
|
|
638
742
|
/**
|
|
@@ -643,7 +747,7 @@ class UI5Element extends HTMLElement {
|
|
|
643
747
|
getFocusDomRef() {
|
|
644
748
|
const domRef = this.getDomRef();
|
|
645
749
|
if (domRef) {
|
|
646
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
750
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
647
751
|
return focusRef || domRef;
|
|
648
752
|
}
|
|
649
753
|
}
|
|
@@ -681,7 +785,7 @@ class UI5Element extends HTMLElement {
|
|
|
681
785
|
* @param bubbles - true, if the event bubbles
|
|
682
786
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
683
787
|
*/
|
|
684
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
788
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
685
789
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
686
790
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
687
791
|
|
|
@@ -692,8 +796,8 @@ class UI5Element extends HTMLElement {
|
|
|
692
796
|
return eventResult;
|
|
693
797
|
}
|
|
694
798
|
|
|
695
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
696
|
-
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}`, {
|
|
697
801
|
detail: data,
|
|
698
802
|
composed: false,
|
|
699
803
|
bubbles,
|
|
@@ -707,7 +811,7 @@ class UI5Element extends HTMLElement {
|
|
|
707
811
|
return noConflictEventResult;
|
|
708
812
|
}
|
|
709
813
|
|
|
710
|
-
const normalEvent = new CustomEvent(name, {
|
|
814
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
711
815
|
detail: data,
|
|
712
816
|
composed: false,
|
|
713
817
|
bubbles,
|
|
@@ -726,8 +830,8 @@ class UI5Element extends HTMLElement {
|
|
|
726
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.
|
|
727
831
|
* @public
|
|
728
832
|
*/
|
|
729
|
-
getSlottedNodes(slotName) {
|
|
730
|
-
return
|
|
833
|
+
getSlottedNodes(slotName: string) {
|
|
834
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]);
|
|
731
835
|
}
|
|
732
836
|
|
|
733
837
|
/**
|
|
@@ -738,7 +842,7 @@ class UI5Element extends HTMLElement {
|
|
|
738
842
|
* @returns {String|undefined}
|
|
739
843
|
*/
|
|
740
844
|
get effectiveDir() {
|
|
741
|
-
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
|
|
742
846
|
return getEffectiveDir(this);
|
|
743
847
|
}
|
|
744
848
|
|
|
@@ -751,6 +855,10 @@ class UI5Element extends HTMLElement {
|
|
|
751
855
|
return true;
|
|
752
856
|
}
|
|
753
857
|
|
|
858
|
+
get classes(): ClassMap {
|
|
859
|
+
return {};
|
|
860
|
+
}
|
|
861
|
+
|
|
754
862
|
/**
|
|
755
863
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
756
864
|
* @private
|
|
@@ -777,7 +885,7 @@ class UI5Element extends HTMLElement {
|
|
|
777
885
|
* @public
|
|
778
886
|
*/
|
|
779
887
|
getStaticAreaItemDomRef() {
|
|
780
|
-
if (!this.constructor._needsStaticArea()) {
|
|
888
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
781
889
|
throw new Error("This component does not use the static area");
|
|
782
890
|
}
|
|
783
891
|
|
|
@@ -823,7 +931,7 @@ class UI5Element extends HTMLElement {
|
|
|
823
931
|
}
|
|
824
932
|
|
|
825
933
|
Object.defineProperty(proto, prop, {
|
|
826
|
-
get() {
|
|
934
|
+
get(this: UI5Element) {
|
|
827
935
|
if (this._state[prop] !== undefined) {
|
|
828
936
|
return this._state[prop];
|
|
829
937
|
}
|
|
@@ -840,15 +948,25 @@ class UI5Element extends HTMLElement {
|
|
|
840
948
|
return propDefaultValue;
|
|
841
949
|
}
|
|
842
950
|
},
|
|
843
|
-
|
|
951
|
+
|
|
952
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
844
953
|
let isDifferent;
|
|
845
|
-
|
|
954
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
955
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
846
956
|
|
|
957
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
958
|
+
const propertyType = propData.type;
|
|
959
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
847
960
|
const oldState = this._state[prop];
|
|
848
|
-
|
|
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
|
|
849
969
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
850
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
851
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
852
970
|
} else {
|
|
853
971
|
isDifferent = oldState !== value;
|
|
854
972
|
}
|
|
@@ -877,7 +995,7 @@ class UI5Element extends HTMLElement {
|
|
|
877
995
|
|
|
878
996
|
const propertyName = slotData.propertyName || slotName;
|
|
879
997
|
Object.defineProperty(proto, propertyName, {
|
|
880
|
-
get() {
|
|
998
|
+
get(this: UI5Element) {
|
|
881
999
|
if (this._state[propertyName] !== undefined) {
|
|
882
1000
|
return this._state[propertyName];
|
|
883
1001
|
}
|
|
@@ -896,14 +1014,22 @@ class UI5Element extends HTMLElement {
|
|
|
896
1014
|
* @protected
|
|
897
1015
|
*/
|
|
898
1016
|
static get metadata() {
|
|
899
|
-
return
|
|
1017
|
+
return metadata;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/**
|
|
1021
|
+
* Sets a new metadata object for this UI5 Web Component Class
|
|
1022
|
+
* @protected
|
|
1023
|
+
*/
|
|
1024
|
+
static set metadata(newMetadata) {
|
|
1025
|
+
metadata = newMetadata;
|
|
900
1026
|
}
|
|
901
1027
|
|
|
902
1028
|
/**
|
|
903
1029
|
* Returns the CSS for this UI5 Web Component Class
|
|
904
1030
|
* @protected
|
|
905
1031
|
*/
|
|
906
|
-
static get styles() {
|
|
1032
|
+
static get styles(): ComponentStylesData {
|
|
907
1033
|
return "";
|
|
908
1034
|
}
|
|
909
1035
|
|
|
@@ -911,7 +1037,7 @@ class UI5Element extends HTMLElement {
|
|
|
911
1037
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
912
1038
|
* @protected
|
|
913
1039
|
*/
|
|
914
|
-
static get staticAreaStyles() {
|
|
1040
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
915
1041
|
return "";
|
|
916
1042
|
}
|
|
917
1043
|
|
|
@@ -922,7 +1048,7 @@ class UI5Element extends HTMLElement {
|
|
|
922
1048
|
*
|
|
923
1049
|
* @protected
|
|
924
1050
|
*/
|
|
925
|
-
static get dependencies() {
|
|
1051
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
926
1052
|
return [];
|
|
927
1053
|
}
|
|
928
1054
|
|
|
@@ -931,21 +1057,21 @@ class UI5Element extends HTMLElement {
|
|
|
931
1057
|
*
|
|
932
1058
|
* @public
|
|
933
1059
|
*/
|
|
934
|
-
static getUniqueDependencies() {
|
|
1060
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
935
1061
|
if (!uniqueDependenciesCache.has(this)) {
|
|
936
1062
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
937
1063
|
uniqueDependenciesCache.set(this, filtered);
|
|
938
1064
|
}
|
|
939
1065
|
|
|
940
|
-
return uniqueDependenciesCache.get(this);
|
|
1066
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
941
1067
|
}
|
|
942
1068
|
|
|
943
1069
|
/**
|
|
944
1070
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
945
1071
|
*
|
|
946
|
-
* @returns {Promise
|
|
1072
|
+
* @returns {Promise}
|
|
947
1073
|
*/
|
|
948
|
-
static whenDependenciesDefined() {
|
|
1074
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
949
1075
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
950
1076
|
}
|
|
951
1077
|
|
|
@@ -973,7 +1099,6 @@ class UI5Element extends HTMLElement {
|
|
|
973
1099
|
]);
|
|
974
1100
|
|
|
975
1101
|
const tag = this.getMetadata().getTag();
|
|
976
|
-
const altTag = this.getMetadata().getAltTag();
|
|
977
1102
|
|
|
978
1103
|
const definedLocally = isTagRegistered(tag);
|
|
979
1104
|
const definedGlobally = customElements.get(tag);
|
|
@@ -983,15 +1108,8 @@ class UI5Element extends HTMLElement {
|
|
|
983
1108
|
} else if (!definedGlobally) {
|
|
984
1109
|
this._generateAccessors();
|
|
985
1110
|
registerTag(tag);
|
|
986
|
-
window.customElements.define(tag, this);
|
|
1111
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
987
1112
|
preloadLinks(this);
|
|
988
|
-
|
|
989
|
-
if (altTag && !customElements.get(altTag)) {
|
|
990
|
-
registerTag(altTag);
|
|
991
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
992
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
993
|
-
}));
|
|
994
|
-
}
|
|
995
1113
|
}
|
|
996
1114
|
return this;
|
|
997
1115
|
}
|
|
@@ -1007,17 +1125,31 @@ class UI5Element extends HTMLElement {
|
|
|
1007
1125
|
return this._metadata;
|
|
1008
1126
|
}
|
|
1009
1127
|
|
|
1010
|
-
const
|
|
1128
|
+
const effectiveMetadata = Object.keys(this.metadata).length ? this.metadata : this.decoratorMetadata;
|
|
1129
|
+
const metadataObjects = [effectiveMetadata];
|
|
1011
1130
|
let klass = this; // eslint-disable-line
|
|
1012
1131
|
while (klass !== UI5Element) {
|
|
1013
1132
|
klass = Object.getPrototypeOf(klass);
|
|
1014
|
-
|
|
1133
|
+
const effectiveKlassMetadata = Object.keys(klass.metadata).length ? klass.metadata : klass.decoratorMetadata;
|
|
1134
|
+
metadataObjects.unshift(effectiveKlassMetadata);
|
|
1015
1135
|
}
|
|
1016
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1136
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1017
1137
|
|
|
1018
1138
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1019
1139
|
return this._metadata;
|
|
1020
1140
|
}
|
|
1141
|
+
|
|
1142
|
+
static decoratorMetadata: Metadata = {};
|
|
1021
1143
|
}
|
|
1022
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
|
+
|
|
1023
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type { ChangeInfo };
|