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