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