@ui5/webcomponents-base 0.0.0-cf50976ce → 0.0.0-d4d43327a
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 +167 -0
- package/bundle.esm.js +8 -2
- 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 +9 -0
- package/dist/Boot.js +43 -45
- 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 -1007
- 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 +52 -80
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/Boot.4539908a.js +9 -0
- package/dist/assets/Boot.6335ce08.css +1 -0
- package/dist/assets/bundle.esm.a14a2ceb.js +52 -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/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 -317
- 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 -104
- 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 +14 -13
- 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 -16
- package/dist/updateShadowRoot.js.map +1 -0
- package/dist/util/AriaLabelHelper.d.ts +15 -0
- package/dist/util/AriaLabelHelper.js +166 -34
- package/dist/util/AriaLabelHelper.js.map +1 -0
- package/dist/util/Caret.d.ts +7 -0
- package/dist/util/Caret.js +16 -25
- package/dist/util/Caret.js.map +1 -0
- package/dist/util/ColorConversion.d.ts +30 -0
- package/dist/util/ColorConversion.js +311 -372
- package/dist/util/ColorConversion.js.map +1 -0
- package/dist/util/FetchHelper.d.ts +3 -0
- package/dist/util/FetchHelper.js +19 -25
- package/dist/util/FetchHelper.js.map +1 -0
- package/dist/util/FocusableElements.d.ts +4 -0
- package/dist/util/FocusableElements.js +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 +40 -53
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +58 -77
- package/dist/util/PopupUtils.js.map +1 -0
- package/dist/util/SlotsHelper.d.ts +9 -0
- package/dist/util/SlotsHelper.js +22 -35
- package/dist/util/SlotsHelper.js.map +1 -0
- package/dist/util/StringHelper.d.ts +3 -0
- package/dist/util/StringHelper.js +17 -20
- package/dist/util/StringHelper.js.map +1 -0
- package/dist/util/TabbableElements.d.ts +17 -0
- package/dist/util/TabbableElements.js +53 -47
- package/dist/util/TabbableElements.js.map +1 -0
- package/dist/util/arraysAreEqual.d.ts +2 -0
- package/dist/util/arraysAreEqual.js +10 -12
- package/dist/util/arraysAreEqual.js.map +1 -0
- package/dist/util/clamp.d.ts +9 -0
- package/dist/util/clamp.js +2 -2
- package/dist/util/clamp.js.map +1 -0
- package/dist/util/createLinkInHead.d.ts +7 -0
- package/dist/util/createLinkInHead.js +14 -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 +1 -2
- 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 +22 -7
- package/package.json +4 -4
- package/src/Boot.ts +76 -0
- package/src/{CSP.js → CSP.ts} +14 -7
- package/src/{CustomElementsRegistry.js → CustomElementsRegistry.ts} +19 -16
- package/src/{CustomElementsScope.js → CustomElementsScope.ts} +8 -5
- package/src/{CustomElementsScopeUtils.js → CustomElementsScopeUtils.ts} +14 -7
- package/src/DOMObserver.ts +28 -0
- package/src/Device.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} +280 -166
- 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} +18 -23
- 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/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} +56 -19
- 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} +45 -23
- package/src/locale/{Locale.js → Locale.ts} +15 -5
- package/src/locale/RTLAwareRegistry.ts +16 -0
- package/src/locale/{applyDirection.js → applyDirection.ts} +4 -3
- package/src/locale/{directionChange.js → directionChange.ts} +6 -4
- package/src/locale/{getEffectiveDir.js → getEffectiveDir.ts} +1 -1
- package/src/locale/{getLocale.js → getLocale.ts} +12 -7
- package/src/locale/languageChange.ts +24 -0
- package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
- package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +5 -3
- package/src/renderer/LitRenderer.ts +60 -0
- package/src/renderer/{executeTemplate.js → executeTemplate.ts} +11 -5
- package/src/theming/{CustomStyle.js → CustomStyle.ts} +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.js → DOMReference.ts} +6 -2
- 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.js → Caret.ts} +5 -9
- package/src/util/{ColorConversion.js → ColorConversion.ts} +183 -182
- package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
- package/src/util/FocusableElements.ts +92 -0
- package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
- package/src/util/{InvisibleMessage.js → InvisibleMessage.ts} +6 -6
- package/src/util/PopupUtils.ts +112 -0
- package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/{clamp.js → clamp.ts} +1 -1
- package/src/util/{createLinkInHead.js → createLinkInHead.ts} +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/getFastNavigationGroups.ts +63 -0
- package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
- package/src/util/{getNormalizedTarget.js → getNormalizedTarget.ts} +2 -2
- package/src/util/{getSingletonElementInstance.js → getSingletonElementInstance.ts} +1 -1
- package/src/util/isElementClickable.ts +19 -0
- package/src/util/isElementHidden.ts +9 -0
- package/src/util/{isElementInView.js → isElementInView.ts} +1 -1
- package/src/util/isElementTabbable.ts +37 -0
- package/src/util/{isValidPropertyName.js → isValidPropertyName.ts} +1 -1
- package/src/util/{whenDOMReady.js → whenDOMReady.ts} +1 -1
- package/src/util/willShowContent.ts +7 -0
- package/src/validateThemeRoot.ts +58 -0
- package/tsconfig.json +13 -0
- package/dist/RenderScheduler.js +0 -44
- package/dist/animations/config.js +0 -5
- package/dist/assets/bundle.esm.83f057b4.js +0 -43
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/PopupState.js +0 -37
- package/dist/util/isDefaultSlotProvided.js +0 -11
- package/dist/util/isDescendantOf.js +0 -15
- package/dist/util/isNodeClickable.js +0 -19
- package/dist/util/isNodeHidden.js +0 -9
- package/dist/util/isNodeTabbable.js +0 -28
- package/dist/util/setToArray.js +0 -10
- package/hash.txt +0 -1
- package/src/Boot.js +0 -59
- package/src/DOMObserver.js +0 -65
- package/src/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 -110
- package/src/features/OpenUI5Enablement.js +0 -119
- package/src/features/OpenUI5Support.js +0 -125
- package/src/locale/RTLAwareRegistry.js +0 -14
- package/src/locale/languageChange.js +0 -22
- package/src/renderer/LitRenderer.js +0 -52
- package/src/theming/getEffectiveLinksHrefs.js +0 -27
- package/src/theming/getStylesString.js +0 -15
- package/src/thirdparty/merge.js +0 -10
- package/src/types/AnimationMode.js +0 -7
- package/src/types/CSSSize.js +0 -9
- package/src/types/CalendarType.js +0 -22
- package/src/types/DataType.js +0 -37
- package/src/types/Float.js +0 -14
- package/src/types/Integer.js +0 -13
- package/src/types/InvisibleMessageMode.js +0 -30
- package/src/types/ItemNavigationBehavior.js +0 -16
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -37
- package/src/types/ValueState.js +0 -22
- package/src/updateShadowRoot.js +0 -29
- package/src/util/AriaLabelHelper.js +0 -39
- package/src/util/FocusableElements.js +0 -79
- package/src/util/PopupUtils.js +0 -93
- package/src/util/TabbableElements.js +0 -51
- package/src/util/escapeRegex.js +0 -10
- package/src/util/getEffectiveContentDensity.js +0 -5
- package/src/util/isDefaultSlotProvided.js +0 -11
- package/src/util/isDescendantOf.js +0 -15
- package/src/util/isNodeClickable.js +0 -19
- package/src/util/isNodeHidden.js +0 -9
- package/src/util/isNodeTabbable.js +0 -28
- package/src/util/setToArray.js +0 -10
- /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
- /package/src/util/{getEffectiveScrollbarStyle.js → getEffectiveScrollbarStyle.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
|
|
@@ -76,10 +132,11 @@ class UI5Element extends HTMLElement {
|
|
|
76
132
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
77
133
|
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
78
134
|
|
|
79
|
-
this.
|
|
135
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
136
|
+
|
|
80
137
|
this._upgradeAllProperties();
|
|
81
138
|
|
|
82
|
-
if (
|
|
139
|
+
if (ctor._needsShadowDOM()) {
|
|
83
140
|
this.attachShadow({ mode: "open" });
|
|
84
141
|
}
|
|
85
142
|
}
|
|
@@ -103,12 +160,14 @@ class UI5Element extends HTMLElement {
|
|
|
103
160
|
* @private
|
|
104
161
|
*/
|
|
105
162
|
async connectedCallback() {
|
|
106
|
-
this.
|
|
107
|
-
|
|
163
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
164
|
+
|
|
165
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
166
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
108
167
|
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
109
168
|
}
|
|
110
169
|
|
|
111
|
-
const slotsAreManaged =
|
|
170
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
112
171
|
|
|
113
172
|
this._inDOM = true;
|
|
114
173
|
|
|
@@ -123,11 +182,9 @@ class UI5Element extends HTMLElement {
|
|
|
123
182
|
}
|
|
124
183
|
|
|
125
184
|
renderImmediately(this);
|
|
126
|
-
this._domRefReadyPromise._deferredResolve();
|
|
185
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
127
186
|
this._fullyConnected = true;
|
|
128
|
-
|
|
129
|
-
this.onEnterDOM();
|
|
130
|
-
}
|
|
187
|
+
this.onEnterDOM();
|
|
131
188
|
}
|
|
132
189
|
|
|
133
190
|
/**
|
|
@@ -135,7 +192,8 @@ class UI5Element extends HTMLElement {
|
|
|
135
192
|
* @private
|
|
136
193
|
*/
|
|
137
194
|
disconnectedCallback() {
|
|
138
|
-
const
|
|
195
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
196
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
139
197
|
|
|
140
198
|
this._inDOM = false;
|
|
141
199
|
|
|
@@ -144,9 +202,7 @@ class UI5Element extends HTMLElement {
|
|
|
144
202
|
}
|
|
145
203
|
|
|
146
204
|
if (this._fullyConnected) {
|
|
147
|
-
|
|
148
|
-
this.onExitDOM();
|
|
149
|
-
}
|
|
205
|
+
this.onExitDOM();
|
|
150
206
|
this._fullyConnected = false;
|
|
151
207
|
}
|
|
152
208
|
|
|
@@ -157,22 +213,47 @@ class UI5Element extends HTMLElement {
|
|
|
157
213
|
cancelRender(this);
|
|
158
214
|
}
|
|
159
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
|
+
|
|
160
240
|
/**
|
|
161
241
|
* @private
|
|
162
242
|
*/
|
|
163
243
|
_startObservingDOMChildren() {
|
|
164
|
-
const
|
|
244
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
245
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
165
246
|
if (!shouldObserveChildren) {
|
|
166
247
|
return;
|
|
167
248
|
}
|
|
168
249
|
|
|
169
|
-
const canSlotText =
|
|
250
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
170
251
|
const mutationObserverOptions = {
|
|
171
252
|
childList: true,
|
|
172
253
|
subtree: canSlotText,
|
|
173
254
|
characterData: canSlotText,
|
|
174
255
|
};
|
|
175
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
256
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
176
257
|
}
|
|
177
258
|
|
|
178
259
|
/**
|
|
@@ -187,7 +268,7 @@ class UI5Element extends HTMLElement {
|
|
|
187
268
|
* @private
|
|
188
269
|
*/
|
|
189
270
|
async _processChildren() {
|
|
190
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
271
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
191
272
|
if (hasSlots) {
|
|
192
273
|
await this._updateSlots();
|
|
193
274
|
}
|
|
@@ -197,23 +278,24 @@ class UI5Element extends HTMLElement {
|
|
|
197
278
|
* @private
|
|
198
279
|
*/
|
|
199
280
|
async _updateSlots() {
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
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>;
|
|
203
285
|
|
|
204
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
205
|
-
const propertyNameToSlotMap = new Map(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
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
|
|
206
288
|
|
|
207
289
|
// Init the _state object based on the supported slots and store the previous values
|
|
208
290
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
209
291
|
const propertyName = slotData.propertyName || slotName;
|
|
210
292
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
211
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
293
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
212
294
|
this._clearSlot(slotName, slotData);
|
|
213
295
|
}
|
|
214
296
|
|
|
215
|
-
const autoIncrementMap = new Map();
|
|
216
|
-
const slottedChildrenMap = new Map();
|
|
297
|
+
const autoIncrementMap = new Map<string, number>();
|
|
298
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
217
299
|
|
|
218
300
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
219
301
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -222,8 +304,11 @@ class UI5Element extends HTMLElement {
|
|
|
222
304
|
|
|
223
305
|
// Check if the slotName is supported
|
|
224
306
|
if (slotData === undefined) {
|
|
225
|
-
|
|
226
|
-
|
|
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
|
+
|
|
227
312
|
return;
|
|
228
313
|
}
|
|
229
314
|
|
|
@@ -231,7 +316,7 @@ class UI5Element extends HTMLElement {
|
|
|
231
316
|
if (slotData.individualSlots) {
|
|
232
317
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
233
318
|
autoIncrementMap.set(slotName, nextIndex);
|
|
234
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
319
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
235
320
|
}
|
|
236
321
|
|
|
237
322
|
// Await for not-yet-defined custom elements
|
|
@@ -253,23 +338,26 @@ class UI5Element extends HTMLElement {
|
|
|
253
338
|
}
|
|
254
339
|
}
|
|
255
340
|
|
|
256
|
-
child =
|
|
341
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
257
342
|
|
|
258
343
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
259
|
-
if (child
|
|
260
|
-
const
|
|
261
|
-
|
|
344
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
345
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
346
|
+
|
|
347
|
+
if (childChangeListener) {
|
|
348
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
349
|
+
}
|
|
262
350
|
}
|
|
263
351
|
|
|
264
352
|
// Listen for the slotchange event if the child is a slot itself
|
|
265
|
-
if (
|
|
353
|
+
if (child instanceof HTMLSlotElement) {
|
|
266
354
|
this._attachSlotChange(child, slotName);
|
|
267
355
|
}
|
|
268
356
|
|
|
269
357
|
const propertyName = slotData.propertyName || slotName;
|
|
270
358
|
|
|
271
359
|
if (slottedChildrenMap.has(propertyName)) {
|
|
272
|
-
slottedChildrenMap.get(propertyName)
|
|
360
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
273
361
|
} else {
|
|
274
362
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
275
363
|
}
|
|
@@ -287,10 +375,10 @@ class UI5Element extends HTMLElement {
|
|
|
287
375
|
let invalidated = false;
|
|
288
376
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
289
377
|
const propertyName = slotData.propertyName || slotName;
|
|
290
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
378
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
291
379
|
_invalidate.call(this, {
|
|
292
380
|
type: "slot",
|
|
293
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
381
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
294
382
|
reason: "children",
|
|
295
383
|
});
|
|
296
384
|
invalidated = true;
|
|
@@ -312,17 +400,20 @@ class UI5Element extends HTMLElement {
|
|
|
312
400
|
* Removes all children from the slot and detaches listeners, if any
|
|
313
401
|
* @private
|
|
314
402
|
*/
|
|
315
|
-
_clearSlot(slotName, slotData) {
|
|
403
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
316
404
|
const propertyName = slotData.propertyName || slotName;
|
|
317
|
-
const children = this._state[propertyName]
|
|
405
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
318
406
|
|
|
319
407
|
children.forEach(child => {
|
|
320
|
-
if (child
|
|
321
|
-
const
|
|
322
|
-
|
|
408
|
+
if (instanceOfUI5Element(child)) {
|
|
409
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
410
|
+
|
|
411
|
+
if (childChangeListener) {
|
|
412
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
413
|
+
}
|
|
323
414
|
}
|
|
324
415
|
|
|
325
|
-
if (
|
|
416
|
+
if (child instanceof HTMLSlotElement) {
|
|
326
417
|
this._detachSlotChange(child, slotName);
|
|
327
418
|
}
|
|
328
419
|
});
|
|
@@ -333,32 +424,32 @@ class UI5Element extends HTMLElement {
|
|
|
333
424
|
/**
|
|
334
425
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
335
426
|
*
|
|
336
|
-
* @param callback
|
|
427
|
+
* @param {InvalidationInfo} callback
|
|
337
428
|
* @public
|
|
338
429
|
*/
|
|
339
|
-
attachInvalidate(callback) {
|
|
430
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
340
431
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
341
432
|
}
|
|
342
433
|
|
|
343
434
|
/**
|
|
344
435
|
* Detach the callback that is executed whenever the component is invalidated
|
|
345
436
|
*
|
|
346
|
-
* @param callback
|
|
437
|
+
* @param {InvalidationInfo} callback
|
|
347
438
|
* @public
|
|
348
439
|
*/
|
|
349
|
-
detachInvalidate(callback) {
|
|
440
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
350
441
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
351
442
|
}
|
|
352
443
|
|
|
353
444
|
/**
|
|
354
445
|
* Callback that is executed whenever a monitored child changes its state
|
|
355
446
|
*
|
|
356
|
-
* @param slotName the slot in which a child was invalidated
|
|
357
|
-
* @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
|
|
358
449
|
* @private
|
|
359
450
|
*/
|
|
360
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
361
|
-
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)) {
|
|
362
453
|
return;
|
|
363
454
|
}
|
|
364
455
|
|
|
@@ -376,45 +467,58 @@ class UI5Element extends HTMLElement {
|
|
|
376
467
|
* Do not override this method in derivatives of UI5Element
|
|
377
468
|
* @private
|
|
378
469
|
*/
|
|
379
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
470
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
471
|
+
let newPropertyValue: PropertyValue;
|
|
380
472
|
if (this._doNotSyncAttributes.has(name)) { // This attribute is mutated internally, not by the user
|
|
381
473
|
return;
|
|
382
474
|
}
|
|
383
475
|
|
|
384
|
-
const properties = this.constructor.getMetadata().getProperties();
|
|
476
|
+
const properties = (this.constructor as typeof UI5Element).getMetadata().getProperties();
|
|
385
477
|
const realName = name.replace(/^ui5-/, "");
|
|
386
478
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
387
479
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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;
|
|
393
486
|
}
|
|
394
|
-
|
|
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;
|
|
395
497
|
}
|
|
396
498
|
}
|
|
397
499
|
|
|
398
500
|
/**
|
|
399
501
|
* @private
|
|
400
502
|
*/
|
|
401
|
-
_updateAttribute(name, newValue) {
|
|
402
|
-
|
|
503
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
504
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
505
|
+
|
|
506
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
403
507
|
return;
|
|
404
508
|
}
|
|
405
|
-
const properties =
|
|
406
|
-
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;
|
|
407
513
|
const attrName = camelToKebabCase(name);
|
|
408
514
|
const attrValue = this.getAttribute(attrName);
|
|
409
515
|
|
|
410
|
-
if (
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
417
|
-
const newAttrValue = propertyTypeClass.propertyToAttribute(newValue);
|
|
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);
|
|
418
522
|
if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
|
|
419
523
|
this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
|
|
420
524
|
this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
|
|
@@ -422,9 +526,15 @@ class UI5Element extends HTMLElement {
|
|
|
422
526
|
} else {
|
|
423
527
|
this.setAttribute(attrName, newAttrValue);
|
|
424
528
|
}
|
|
529
|
+
} else if (propertyType === Boolean) {
|
|
530
|
+
if (newValue === true && attrValue === null) {
|
|
531
|
+
this.setAttribute(attrName, "");
|
|
532
|
+
} else if (newValue === false && attrValue !== null) {
|
|
533
|
+
this.removeAttribute(attrName);
|
|
534
|
+
}
|
|
425
535
|
} else if (typeof newValue !== "object") {
|
|
426
536
|
if (attrValue !== newValue) {
|
|
427
|
-
this.setAttribute(attrName, newValue);
|
|
537
|
+
this.setAttribute(attrName, newValue as string);
|
|
428
538
|
}
|
|
429
539
|
} // else { return; } // old object handling
|
|
430
540
|
}
|
|
@@ -432,11 +542,11 @@ class UI5Element extends HTMLElement {
|
|
|
432
542
|
/**
|
|
433
543
|
* @private
|
|
434
544
|
*/
|
|
435
|
-
_upgradeProperty(
|
|
436
|
-
if (this.hasOwnProperty(
|
|
437
|
-
const value = this[
|
|
438
|
-
delete this[
|
|
439
|
-
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;
|
|
440
550
|
}
|
|
441
551
|
}
|
|
442
552
|
|
|
@@ -444,25 +554,18 @@ class UI5Element extends HTMLElement {
|
|
|
444
554
|
* @private
|
|
445
555
|
*/
|
|
446
556
|
_upgradeAllProperties() {
|
|
447
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
448
|
-
allProps.forEach(this._upgradeProperty
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/**
|
|
452
|
-
* @private
|
|
453
|
-
*/
|
|
454
|
-
_initializeState() {
|
|
455
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
557
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
558
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
456
559
|
}
|
|
457
560
|
|
|
458
561
|
/**
|
|
459
562
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
460
563
|
*
|
|
461
564
|
* @param slotName the name of the slot, where the child is
|
|
462
|
-
* @returns {
|
|
565
|
+
* @returns {ChildChangeListener}
|
|
463
566
|
* @private
|
|
464
567
|
*/
|
|
465
|
-
_getChildChangeListener(slotName) {
|
|
568
|
+
_getChildChangeListener(slotName: string) {
|
|
466
569
|
if (!this._childChangeListeners.has(slotName)) {
|
|
467
570
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
468
571
|
}
|
|
@@ -473,27 +576,30 @@ class UI5Element extends HTMLElement {
|
|
|
473
576
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
474
577
|
*
|
|
475
578
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
476
|
-
* @returns {
|
|
579
|
+
* @returns {SlotChangeListener}
|
|
477
580
|
* @private
|
|
478
581
|
*/
|
|
479
|
-
_getSlotChangeListener(slotName) {
|
|
582
|
+
_getSlotChangeListener(slotName: string) {
|
|
480
583
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
481
584
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
482
585
|
}
|
|
483
|
-
return this._slotChangeListeners.get(slotName)
|
|
586
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
484
587
|
}
|
|
485
588
|
|
|
486
589
|
/**
|
|
487
590
|
* @private
|
|
488
591
|
*/
|
|
489
|
-
_attachSlotChange(child, slotName) {
|
|
490
|
-
|
|
592
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
593
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
594
|
+
if (slotChangeListener) {
|
|
595
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
596
|
+
}
|
|
491
597
|
}
|
|
492
598
|
|
|
493
599
|
/**
|
|
494
600
|
* @private
|
|
495
601
|
*/
|
|
496
|
-
_detachSlotChange(child, slotName) {
|
|
602
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
497
603
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
498
604
|
}
|
|
499
605
|
|
|
@@ -503,7 +609,7 @@ class UI5Element extends HTMLElement {
|
|
|
503
609
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
504
610
|
* @private
|
|
505
611
|
*/
|
|
506
|
-
_onSlotChange(slotName) {
|
|
612
|
+
_onSlotChange(slotName: string) {
|
|
507
613
|
_invalidate.call(this, {
|
|
508
614
|
type: "slot",
|
|
509
615
|
name: slotName,
|
|
@@ -538,21 +644,20 @@ class UI5Element extends HTMLElement {
|
|
|
538
644
|
*
|
|
539
645
|
* @public
|
|
540
646
|
*/
|
|
541
|
-
onInvalidation(changeInfo) {}
|
|
647
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
542
648
|
|
|
543
649
|
/**
|
|
544
650
|
* Do not call this method directly, only intended to be called by js
|
|
545
651
|
* @protected
|
|
546
652
|
*/
|
|
547
653
|
_render() {
|
|
548
|
-
const
|
|
654
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
655
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
549
656
|
|
|
550
657
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
551
658
|
this._suppressInvalidation = true;
|
|
552
659
|
|
|
553
|
-
|
|
554
|
-
this.onBeforeRendering();
|
|
555
|
-
}
|
|
660
|
+
this.onBeforeRendering();
|
|
556
661
|
|
|
557
662
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
558
663
|
if (this._onComponentStateFinalized) {
|
|
@@ -576,7 +681,7 @@ class UI5Element extends HTMLElement {
|
|
|
576
681
|
}
|
|
577
682
|
res = `${res}: ${x.name}`;
|
|
578
683
|
if (x.type === "property") {
|
|
579
|
-
res = `${res} ${x.oldValue} => ${x.newValue}`;
|
|
684
|
+
res = `${res} ${JSON.stringify(x.oldValue)} => ${JSON.stringify(x.newValue)}`;
|
|
580
685
|
}
|
|
581
686
|
|
|
582
687
|
return res;
|
|
@@ -586,7 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
586
691
|
this._changedState = [];
|
|
587
692
|
|
|
588
693
|
// Update shadow root and static area item
|
|
589
|
-
if (
|
|
694
|
+
if (ctor._needsShadowDOM()) {
|
|
590
695
|
updateShadowRoot(this);
|
|
591
696
|
}
|
|
592
697
|
if (this.staticAreaItem) {
|
|
@@ -599,9 +704,7 @@ class UI5Element extends HTMLElement {
|
|
|
599
704
|
}
|
|
600
705
|
|
|
601
706
|
// Call the onAfterRendering hook
|
|
602
|
-
|
|
603
|
-
this.onAfterRendering();
|
|
604
|
-
}
|
|
707
|
+
this.onAfterRendering();
|
|
605
708
|
}
|
|
606
709
|
|
|
607
710
|
/**
|
|
@@ -610,7 +713,7 @@ class UI5Element extends HTMLElement {
|
|
|
610
713
|
_assignIndividualSlotsToChildren() {
|
|
611
714
|
const domChildren = Array.from(this.children);
|
|
612
715
|
|
|
613
|
-
domChildren.forEach(child => {
|
|
716
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
614
717
|
if (child._individualSlot) {
|
|
615
718
|
child.setAttribute("slot", child._individualSlot);
|
|
616
719
|
}
|
|
@@ -643,10 +746,10 @@ class UI5Element extends HTMLElement {
|
|
|
643
746
|
|
|
644
747
|
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
645
748
|
if (children.length !== 1) {
|
|
646
|
-
console.warn(`The shadow DOM for ${this.constructor.getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`); // eslint-disable-line
|
|
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
|
|
647
750
|
}
|
|
648
751
|
|
|
649
|
-
return children[0];
|
|
752
|
+
return children[0] as HTMLElement;
|
|
650
753
|
}
|
|
651
754
|
|
|
652
755
|
/**
|
|
@@ -657,7 +760,7 @@ class UI5Element extends HTMLElement {
|
|
|
657
760
|
getFocusDomRef() {
|
|
658
761
|
const domRef = this.getDomRef();
|
|
659
762
|
if (domRef) {
|
|
660
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
763
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
661
764
|
return focusRef || domRef;
|
|
662
765
|
}
|
|
663
766
|
}
|
|
@@ -674,15 +777,16 @@ class UI5Element extends HTMLElement {
|
|
|
674
777
|
|
|
675
778
|
/**
|
|
676
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
|
|
677
781
|
* @public
|
|
678
782
|
*/
|
|
679
|
-
async focus() {
|
|
783
|
+
async focus(focusOptions?: FocusOptions) {
|
|
680
784
|
await this._waitForDomRef();
|
|
681
785
|
|
|
682
786
|
const focusDomRef = this.getFocusDomRef();
|
|
683
787
|
|
|
684
788
|
if (focusDomRef && typeof focusDomRef.focus === "function") {
|
|
685
|
-
focusDomRef.focus();
|
|
789
|
+
focusDomRef.focus(focusOptions);
|
|
686
790
|
}
|
|
687
791
|
}
|
|
688
792
|
|
|
@@ -695,7 +799,7 @@ class UI5Element extends HTMLElement {
|
|
|
695
799
|
* @param bubbles - true, if the event bubbles
|
|
696
800
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
697
801
|
*/
|
|
698
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
802
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
699
803
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
700
804
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
701
805
|
|
|
@@ -706,8 +810,8 @@ class UI5Element extends HTMLElement {
|
|
|
706
810
|
return eventResult;
|
|
707
811
|
}
|
|
708
812
|
|
|
709
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
710
|
-
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}`, {
|
|
711
815
|
detail: data,
|
|
712
816
|
composed: false,
|
|
713
817
|
bubbles,
|
|
@@ -721,7 +825,7 @@ class UI5Element extends HTMLElement {
|
|
|
721
825
|
return noConflictEventResult;
|
|
722
826
|
}
|
|
723
827
|
|
|
724
|
-
const normalEvent = new CustomEvent(name, {
|
|
828
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
725
829
|
detail: data,
|
|
726
830
|
composed: false,
|
|
727
831
|
bubbles,
|
|
@@ -740,8 +844,8 @@ class UI5Element extends HTMLElement {
|
|
|
740
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.
|
|
741
845
|
* @public
|
|
742
846
|
*/
|
|
743
|
-
getSlottedNodes(slotName) {
|
|
744
|
-
return
|
|
847
|
+
getSlottedNodes<T = Node>(slotName: string) {
|
|
848
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]) as Array<T>;
|
|
745
849
|
}
|
|
746
850
|
|
|
747
851
|
/**
|
|
@@ -752,7 +856,7 @@ class UI5Element extends HTMLElement {
|
|
|
752
856
|
* @returns {String|undefined}
|
|
753
857
|
*/
|
|
754
858
|
get effectiveDir() {
|
|
755
|
-
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
|
|
756
860
|
return getEffectiveDir(this);
|
|
757
861
|
}
|
|
758
862
|
|
|
@@ -765,6 +869,10 @@ class UI5Element extends HTMLElement {
|
|
|
765
869
|
return true;
|
|
766
870
|
}
|
|
767
871
|
|
|
872
|
+
get classes(): ClassMap {
|
|
873
|
+
return {};
|
|
874
|
+
}
|
|
875
|
+
|
|
768
876
|
/**
|
|
769
877
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
770
878
|
* @private
|
|
@@ -791,7 +899,7 @@ class UI5Element extends HTMLElement {
|
|
|
791
899
|
* @public
|
|
792
900
|
*/
|
|
793
901
|
getStaticAreaItemDomRef() {
|
|
794
|
-
if (!this.constructor._needsStaticArea()) {
|
|
902
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
795
903
|
throw new Error("This component does not use the static area");
|
|
796
904
|
}
|
|
797
905
|
|
|
@@ -837,7 +945,7 @@ class UI5Element extends HTMLElement {
|
|
|
837
945
|
}
|
|
838
946
|
|
|
839
947
|
Object.defineProperty(proto, prop, {
|
|
840
|
-
get() {
|
|
948
|
+
get(this: UI5Element) {
|
|
841
949
|
if (this._state[prop] !== undefined) {
|
|
842
950
|
return this._state[prop];
|
|
843
951
|
}
|
|
@@ -854,15 +962,25 @@ class UI5Element extends HTMLElement {
|
|
|
854
962
|
return propDefaultValue;
|
|
855
963
|
}
|
|
856
964
|
},
|
|
857
|
-
|
|
965
|
+
|
|
966
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
858
967
|
let isDifferent;
|
|
859
|
-
|
|
968
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
969
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
860
970
|
|
|
971
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
972
|
+
const propertyType = propData.type;
|
|
973
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
861
974
|
const oldState = this._state[prop];
|
|
862
|
-
|
|
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
|
|
863
983
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
864
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
865
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
866
984
|
} else {
|
|
867
985
|
isDifferent = oldState !== value;
|
|
868
986
|
}
|
|
@@ -891,7 +1009,7 @@ class UI5Element extends HTMLElement {
|
|
|
891
1009
|
|
|
892
1010
|
const propertyName = slotData.propertyName || slotName;
|
|
893
1011
|
Object.defineProperty(proto, propertyName, {
|
|
894
|
-
get() {
|
|
1012
|
+
get(this: UI5Element) {
|
|
895
1013
|
if (this._state[propertyName] !== undefined) {
|
|
896
1014
|
return this._state[propertyName];
|
|
897
1015
|
}
|
|
@@ -909,23 +1027,13 @@ class UI5Element extends HTMLElement {
|
|
|
909
1027
|
* Returns the metadata object for this UI5 Web Component Class
|
|
910
1028
|
* @protected
|
|
911
1029
|
*/
|
|
912
|
-
static
|
|
913
|
-
return metadata;
|
|
914
|
-
}
|
|
915
|
-
|
|
916
|
-
/**
|
|
917
|
-
* Sets a new metadata object for this UI5 Web Component Class
|
|
918
|
-
* @protected
|
|
919
|
-
*/
|
|
920
|
-
static set metadata(newMetadata) {
|
|
921
|
-
metadata = newMetadata;
|
|
922
|
-
}
|
|
1030
|
+
static metadata: Metadata = {};
|
|
923
1031
|
|
|
924
1032
|
/**
|
|
925
1033
|
* Returns the CSS for this UI5 Web Component Class
|
|
926
1034
|
* @protected
|
|
927
1035
|
*/
|
|
928
|
-
static get styles() {
|
|
1036
|
+
static get styles(): ComponentStylesData {
|
|
929
1037
|
return "";
|
|
930
1038
|
}
|
|
931
1039
|
|
|
@@ -933,7 +1041,7 @@ class UI5Element extends HTMLElement {
|
|
|
933
1041
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
934
1042
|
* @protected
|
|
935
1043
|
*/
|
|
936
|
-
static get staticAreaStyles() {
|
|
1044
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
937
1045
|
return "";
|
|
938
1046
|
}
|
|
939
1047
|
|
|
@@ -944,7 +1052,7 @@ class UI5Element extends HTMLElement {
|
|
|
944
1052
|
*
|
|
945
1053
|
* @protected
|
|
946
1054
|
*/
|
|
947
|
-
static get dependencies() {
|
|
1055
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
948
1056
|
return [];
|
|
949
1057
|
}
|
|
950
1058
|
|
|
@@ -953,21 +1061,21 @@ class UI5Element extends HTMLElement {
|
|
|
953
1061
|
*
|
|
954
1062
|
* @public
|
|
955
1063
|
*/
|
|
956
|
-
static getUniqueDependencies() {
|
|
1064
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
957
1065
|
if (!uniqueDependenciesCache.has(this)) {
|
|
958
1066
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
959
1067
|
uniqueDependenciesCache.set(this, filtered);
|
|
960
1068
|
}
|
|
961
1069
|
|
|
962
|
-
return uniqueDependenciesCache.get(this);
|
|
1070
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
963
1071
|
}
|
|
964
1072
|
|
|
965
1073
|
/**
|
|
966
1074
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
967
1075
|
*
|
|
968
|
-
* @returns {Promise
|
|
1076
|
+
* @returns {Promise}
|
|
969
1077
|
*/
|
|
970
|
-
static whenDependenciesDefined() {
|
|
1078
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
971
1079
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
972
1080
|
}
|
|
973
1081
|
|
|
@@ -995,7 +1103,6 @@ class UI5Element extends HTMLElement {
|
|
|
995
1103
|
]);
|
|
996
1104
|
|
|
997
1105
|
const tag = this.getMetadata().getTag();
|
|
998
|
-
const altTag = this.getMetadata().getAltTag();
|
|
999
1106
|
|
|
1000
1107
|
const definedLocally = isTagRegistered(tag);
|
|
1001
1108
|
const definedGlobally = customElements.get(tag);
|
|
@@ -1005,15 +1112,8 @@ class UI5Element extends HTMLElement {
|
|
|
1005
1112
|
} else if (!definedGlobally) {
|
|
1006
1113
|
this._generateAccessors();
|
|
1007
1114
|
registerTag(tag);
|
|
1008
|
-
window.customElements.define(tag, this);
|
|
1115
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
1009
1116
|
preloadLinks(this);
|
|
1010
|
-
|
|
1011
|
-
if (altTag && !customElements.get(altTag)) {
|
|
1012
|
-
registerTag(altTag);
|
|
1013
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
1014
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
1015
|
-
}));
|
|
1016
|
-
}
|
|
1017
1117
|
}
|
|
1018
1118
|
return this;
|
|
1019
1119
|
}
|
|
@@ -1035,11 +1135,25 @@ class UI5Element extends HTMLElement {
|
|
|
1035
1135
|
klass = Object.getPrototypeOf(klass);
|
|
1036
1136
|
metadataObjects.unshift(klass.metadata);
|
|
1037
1137
|
}
|
|
1038
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1138
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1039
1139
|
|
|
1040
1140
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1041
1141
|
return this._metadata;
|
|
1042
1142
|
}
|
|
1043
1143
|
}
|
|
1044
1144
|
|
|
1145
|
+
/**
|
|
1146
|
+
* Always use duck-typing to cover all runtimes on the page.
|
|
1147
|
+
* @returns {boolean}
|
|
1148
|
+
*/
|
|
1149
|
+
const instanceOfUI5Element = (object: any): object is UI5Element => {
|
|
1150
|
+
return "isUI5Element" in object;
|
|
1151
|
+
};
|
|
1152
|
+
|
|
1045
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type {
|
|
1156
|
+
ChangeInfo,
|
|
1157
|
+
Renderer,
|
|
1158
|
+
RendererOptions,
|
|
1159
|
+
};
|