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