@ui5/webcomponents-base 0.0.0-1e08ebdef → 0.0.0-1f45608ac
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 +3 -1
- package/CHANGELOG.md +414 -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 -29
- 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 +69 -30
- 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 -93
- 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 -7
- 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 -244
- 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 +86 -0
- 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 -84
- 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 -981
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +278 -306
- 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/bundle.esm.9718f067.js +24 -0
- package/dist/assets/i18nBundle.7fb08e25.js +37 -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 +151 -0
- 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 +10 -0
- 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/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 +66 -72
- 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 +42 -44
- 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 -43
- 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 +32 -0
- package/package-scripts.js +34 -28
- package/package.json +7 -7
- package/src/Boot.ts +76 -0
- package/src/{CSP.js → CSP.ts} +14 -7
- package/src/CustomElementsRegistry.ts +98 -0
- 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.ts +114 -0
- package/src/{StaticAreaItem.js → StaticAreaItem.ts} +33 -18
- package/src/{UI5Element.js → UI5Element.ts} +289 -149
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +129 -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/{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} +25 -14
- 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 -43
- package/src/CustomElementsRegistry.js +0 -39
- package/src/DOMObserver.js +0 -65
- package/src/Device.js +0 -113
- package/src/FeaturesRegistry.js +0 -11
- package/src/Keys.js +0 -248
- 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/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 -77
- package/src/util/PopupUtils.js +0 -93
- package/src/util/TabbableElements.js +0 -47
- 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,26 +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";
|
|
22
|
-
import "
|
|
26
|
+
import type { TemplateFunction, TemplateFunctionResult } from "./renderer/executeTemplate.js";
|
|
27
|
+
import type { PromiseResolve, ComponentStylesData, ClassMap } from "./types.js";
|
|
23
28
|
|
|
24
29
|
let autoId = 0;
|
|
25
30
|
|
|
26
|
-
const elementTimeouts = new Map();
|
|
27
|
-
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;
|
|
28
59
|
|
|
29
60
|
/**
|
|
30
61
|
* Triggers re-rendering of a UI5Element instance due to state change.
|
|
31
|
-
*
|
|
32
|
-
* @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.
|
|
33
63
|
* @private
|
|
34
64
|
*/
|
|
35
|
-
function _invalidate(changeInfo) {
|
|
65
|
+
function _invalidate(this: UI5Element, changeInfo: ChangeInfo) {
|
|
36
66
|
// Invalidation should be suppressed: 1) before the component is rendered for the first time 2) and during the execution of onBeforeRendering
|
|
37
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)
|
|
38
68
|
if (this._suppressInvalidation) {
|
|
@@ -53,14 +83,41 @@ function _invalidate(changeInfo) {
|
|
|
53
83
|
* @class
|
|
54
84
|
* @constructor
|
|
55
85
|
* @author SAP SE
|
|
56
|
-
* @alias sap.ui.
|
|
86
|
+
* @alias sap.ui.webc.base.UI5Element
|
|
57
87
|
* @extends HTMLElement
|
|
58
88
|
* @public
|
|
59
89
|
*/
|
|
60
|
-
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
|
+
|
|
61
117
|
constructor() {
|
|
62
118
|
super();
|
|
63
119
|
|
|
120
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
64
121
|
this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
|
|
65
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
|
|
66
123
|
this._inDOM = false; // A flag telling whether the UI5Element is currently in the DOM tree of the document or not
|
|
@@ -73,11 +130,13 @@ class UI5Element extends HTMLElement {
|
|
|
73
130
|
deferredResolve = resolve;
|
|
74
131
|
});
|
|
75
132
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
133
|
+
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
134
|
+
|
|
135
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
76
136
|
|
|
77
|
-
this._initializeState();
|
|
78
137
|
this._upgradeAllProperties();
|
|
79
138
|
|
|
80
|
-
if (
|
|
139
|
+
if (ctor._needsShadowDOM()) {
|
|
81
140
|
this.attachShadow({ mode: "open" });
|
|
82
141
|
}
|
|
83
142
|
}
|
|
@@ -101,9 +160,14 @@ class UI5Element extends HTMLElement {
|
|
|
101
160
|
* @private
|
|
102
161
|
*/
|
|
103
162
|
async connectedCallback() {
|
|
104
|
-
this.
|
|
163
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
164
|
+
|
|
165
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
166
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
167
|
+
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
168
|
+
}
|
|
105
169
|
|
|
106
|
-
const slotsAreManaged =
|
|
170
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
107
171
|
|
|
108
172
|
this._inDOM = true;
|
|
109
173
|
|
|
@@ -118,11 +182,9 @@ class UI5Element extends HTMLElement {
|
|
|
118
182
|
}
|
|
119
183
|
|
|
120
184
|
renderImmediately(this);
|
|
121
|
-
this._domRefReadyPromise._deferredResolve();
|
|
185
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
122
186
|
this._fullyConnected = true;
|
|
123
|
-
|
|
124
|
-
this.onEnterDOM();
|
|
125
|
-
}
|
|
187
|
+
this.onEnterDOM();
|
|
126
188
|
}
|
|
127
189
|
|
|
128
190
|
/**
|
|
@@ -130,7 +192,8 @@ class UI5Element extends HTMLElement {
|
|
|
130
192
|
* @private
|
|
131
193
|
*/
|
|
132
194
|
disconnectedCallback() {
|
|
133
|
-
const
|
|
195
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
196
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
134
197
|
|
|
135
198
|
this._inDOM = false;
|
|
136
199
|
|
|
@@ -139,9 +202,7 @@ class UI5Element extends HTMLElement {
|
|
|
139
202
|
}
|
|
140
203
|
|
|
141
204
|
if (this._fullyConnected) {
|
|
142
|
-
|
|
143
|
-
this.onExitDOM();
|
|
144
|
-
}
|
|
205
|
+
this.onExitDOM();
|
|
145
206
|
this._fullyConnected = false;
|
|
146
207
|
}
|
|
147
208
|
|
|
@@ -152,22 +213,47 @@ class UI5Element extends HTMLElement {
|
|
|
152
213
|
cancelRender(this);
|
|
153
214
|
}
|
|
154
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
|
+
|
|
155
240
|
/**
|
|
156
241
|
* @private
|
|
157
242
|
*/
|
|
158
243
|
_startObservingDOMChildren() {
|
|
159
|
-
const
|
|
244
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
245
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
160
246
|
if (!shouldObserveChildren) {
|
|
161
247
|
return;
|
|
162
248
|
}
|
|
163
249
|
|
|
164
|
-
const canSlotText =
|
|
250
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
165
251
|
const mutationObserverOptions = {
|
|
166
252
|
childList: true,
|
|
167
253
|
subtree: canSlotText,
|
|
168
254
|
characterData: canSlotText,
|
|
169
255
|
};
|
|
170
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
256
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
171
257
|
}
|
|
172
258
|
|
|
173
259
|
/**
|
|
@@ -182,7 +268,7 @@ class UI5Element extends HTMLElement {
|
|
|
182
268
|
* @private
|
|
183
269
|
*/
|
|
184
270
|
async _processChildren() {
|
|
185
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
271
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
186
272
|
if (hasSlots) {
|
|
187
273
|
await this._updateSlots();
|
|
188
274
|
}
|
|
@@ -192,23 +278,24 @@ class UI5Element extends HTMLElement {
|
|
|
192
278
|
* @private
|
|
193
279
|
*/
|
|
194
280
|
async _updateSlots() {
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
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>;
|
|
198
285
|
|
|
199
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
200
|
-
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
|
|
201
288
|
|
|
202
289
|
// Init the _state object based on the supported slots and store the previous values
|
|
203
290
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
204
291
|
const propertyName = slotData.propertyName || slotName;
|
|
205
292
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
206
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
293
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
207
294
|
this._clearSlot(slotName, slotData);
|
|
208
295
|
}
|
|
209
296
|
|
|
210
|
-
const autoIncrementMap = new Map();
|
|
211
|
-
const slottedChildrenMap = new Map();
|
|
297
|
+
const autoIncrementMap = new Map<string, number>();
|
|
298
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
212
299
|
|
|
213
300
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
214
301
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -217,8 +304,11 @@ class UI5Element extends HTMLElement {
|
|
|
217
304
|
|
|
218
305
|
// Check if the slotName is supported
|
|
219
306
|
if (slotData === undefined) {
|
|
220
|
-
|
|
221
|
-
|
|
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
|
+
|
|
222
312
|
return;
|
|
223
313
|
}
|
|
224
314
|
|
|
@@ -226,7 +316,7 @@ class UI5Element extends HTMLElement {
|
|
|
226
316
|
if (slotData.individualSlots) {
|
|
227
317
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
228
318
|
autoIncrementMap.set(slotName, nextIndex);
|
|
229
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
319
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
230
320
|
}
|
|
231
321
|
|
|
232
322
|
// Await for not-yet-defined custom elements
|
|
@@ -248,22 +338,26 @@ class UI5Element extends HTMLElement {
|
|
|
248
338
|
}
|
|
249
339
|
}
|
|
250
340
|
|
|
251
|
-
child =
|
|
341
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
252
342
|
|
|
253
343
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
254
|
-
if (child
|
|
255
|
-
|
|
344
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
345
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
346
|
+
|
|
347
|
+
if (childChangeListener) {
|
|
348
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
349
|
+
}
|
|
256
350
|
}
|
|
257
351
|
|
|
258
352
|
// Listen for the slotchange event if the child is a slot itself
|
|
259
|
-
if (
|
|
353
|
+
if (child instanceof HTMLSlotElement) {
|
|
260
354
|
this._attachSlotChange(child, slotName);
|
|
261
355
|
}
|
|
262
356
|
|
|
263
357
|
const propertyName = slotData.propertyName || slotName;
|
|
264
358
|
|
|
265
359
|
if (slottedChildrenMap.has(propertyName)) {
|
|
266
|
-
slottedChildrenMap.get(propertyName)
|
|
360
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
267
361
|
} else {
|
|
268
362
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
269
363
|
}
|
|
@@ -281,10 +375,10 @@ class UI5Element extends HTMLElement {
|
|
|
281
375
|
let invalidated = false;
|
|
282
376
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
283
377
|
const propertyName = slotData.propertyName || slotName;
|
|
284
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
378
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
285
379
|
_invalidate.call(this, {
|
|
286
380
|
type: "slot",
|
|
287
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
381
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
288
382
|
reason: "children",
|
|
289
383
|
});
|
|
290
384
|
invalidated = true;
|
|
@@ -306,16 +400,20 @@ class UI5Element extends HTMLElement {
|
|
|
306
400
|
* Removes all children from the slot and detaches listeners, if any
|
|
307
401
|
* @private
|
|
308
402
|
*/
|
|
309
|
-
_clearSlot(slotName, slotData) {
|
|
403
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
310
404
|
const propertyName = slotData.propertyName || slotName;
|
|
311
|
-
const children = this._state[propertyName]
|
|
405
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
312
406
|
|
|
313
407
|
children.forEach(child => {
|
|
314
|
-
if (child
|
|
315
|
-
|
|
408
|
+
if (instanceOfUI5Element(child)) {
|
|
409
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
410
|
+
|
|
411
|
+
if (childChangeListener) {
|
|
412
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
413
|
+
}
|
|
316
414
|
}
|
|
317
415
|
|
|
318
|
-
if (
|
|
416
|
+
if (child instanceof HTMLSlotElement) {
|
|
319
417
|
this._detachSlotChange(child, slotName);
|
|
320
418
|
}
|
|
321
419
|
});
|
|
@@ -326,32 +424,32 @@ class UI5Element extends HTMLElement {
|
|
|
326
424
|
/**
|
|
327
425
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
328
426
|
*
|
|
329
|
-
* @param callback
|
|
427
|
+
* @param {InvalidationInfo} callback
|
|
330
428
|
* @public
|
|
331
429
|
*/
|
|
332
|
-
attachInvalidate(callback) {
|
|
430
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
333
431
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
334
432
|
}
|
|
335
433
|
|
|
336
434
|
/**
|
|
337
435
|
* Detach the callback that is executed whenever the component is invalidated
|
|
338
436
|
*
|
|
339
|
-
* @param callback
|
|
437
|
+
* @param {InvalidationInfo} callback
|
|
340
438
|
* @public
|
|
341
439
|
*/
|
|
342
|
-
detachInvalidate(callback) {
|
|
440
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
343
441
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
344
442
|
}
|
|
345
443
|
|
|
346
444
|
/**
|
|
347
445
|
* Callback that is executed whenever a monitored child changes its state
|
|
348
446
|
*
|
|
349
|
-
* @param slotName the slot in which a child was invalidated
|
|
350
|
-
* @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
|
|
351
449
|
* @private
|
|
352
450
|
*/
|
|
353
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
354
|
-
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)) {
|
|
355
453
|
return;
|
|
356
454
|
}
|
|
357
455
|
|
|
@@ -369,44 +467,74 @@ class UI5Element extends HTMLElement {
|
|
|
369
467
|
* Do not override this method in derivatives of UI5Element
|
|
370
468
|
* @private
|
|
371
469
|
*/
|
|
372
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
373
|
-
|
|
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();
|
|
374
477
|
const realName = name.replace(/^ui5-/, "");
|
|
375
478
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
376
479
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
377
|
-
const
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
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;
|
|
382
494
|
}
|
|
383
|
-
|
|
495
|
+
|
|
496
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
384
497
|
}
|
|
385
498
|
}
|
|
386
499
|
|
|
387
500
|
/**
|
|
388
501
|
* @private
|
|
389
502
|
*/
|
|
390
|
-
_updateAttribute(name, newValue) {
|
|
391
|
-
|
|
503
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
504
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
505
|
+
|
|
506
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
392
507
|
return;
|
|
393
508
|
}
|
|
394
|
-
const properties =
|
|
395
|
-
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;
|
|
396
513
|
const attrName = camelToKebabCase(name);
|
|
397
514
|
const attrValue = this.getAttribute(attrName);
|
|
398
515
|
|
|
399
|
-
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) {
|
|
400
530
|
if (newValue === true && attrValue === null) {
|
|
401
531
|
this.setAttribute(attrName, "");
|
|
402
532
|
} else if (newValue === false && attrValue !== null) {
|
|
403
533
|
this.removeAttribute(attrName);
|
|
404
534
|
}
|
|
405
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
406
|
-
this.setAttribute(attrName, propertyTypeClass.propertyToAttribute(newValue));
|
|
407
535
|
} else if (typeof newValue !== "object") {
|
|
408
536
|
if (attrValue !== newValue) {
|
|
409
|
-
this.setAttribute(attrName, newValue);
|
|
537
|
+
this.setAttribute(attrName, newValue as string);
|
|
410
538
|
}
|
|
411
539
|
} // else { return; } // old object handling
|
|
412
540
|
}
|
|
@@ -414,11 +542,11 @@ class UI5Element extends HTMLElement {
|
|
|
414
542
|
/**
|
|
415
543
|
* @private
|
|
416
544
|
*/
|
|
417
|
-
_upgradeProperty(
|
|
418
|
-
if (this.hasOwnProperty(
|
|
419
|
-
const value = this[
|
|
420
|
-
delete this[
|
|
421
|
-
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;
|
|
422
550
|
}
|
|
423
551
|
}
|
|
424
552
|
|
|
@@ -426,25 +554,18 @@ class UI5Element extends HTMLElement {
|
|
|
426
554
|
* @private
|
|
427
555
|
*/
|
|
428
556
|
_upgradeAllProperties() {
|
|
429
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
430
|
-
allProps.forEach(this._upgradeProperty
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
/**
|
|
434
|
-
* @private
|
|
435
|
-
*/
|
|
436
|
-
_initializeState() {
|
|
437
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
557
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
558
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
438
559
|
}
|
|
439
560
|
|
|
440
561
|
/**
|
|
441
562
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
442
563
|
*
|
|
443
564
|
* @param slotName the name of the slot, where the child is
|
|
444
|
-
* @returns {
|
|
565
|
+
* @returns {ChildChangeListener}
|
|
445
566
|
* @private
|
|
446
567
|
*/
|
|
447
|
-
_getChildChangeListener(slotName) {
|
|
568
|
+
_getChildChangeListener(slotName: string) {
|
|
448
569
|
if (!this._childChangeListeners.has(slotName)) {
|
|
449
570
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
450
571
|
}
|
|
@@ -455,27 +576,30 @@ class UI5Element extends HTMLElement {
|
|
|
455
576
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
456
577
|
*
|
|
457
578
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
458
|
-
* @returns {
|
|
579
|
+
* @returns {SlotChangeListener}
|
|
459
580
|
* @private
|
|
460
581
|
*/
|
|
461
|
-
_getSlotChangeListener(slotName) {
|
|
582
|
+
_getSlotChangeListener(slotName: string) {
|
|
462
583
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
463
584
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
464
585
|
}
|
|
465
|
-
return this._slotChangeListeners.get(slotName)
|
|
586
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
466
587
|
}
|
|
467
588
|
|
|
468
589
|
/**
|
|
469
590
|
* @private
|
|
470
591
|
*/
|
|
471
|
-
_attachSlotChange(child, slotName) {
|
|
472
|
-
|
|
592
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
593
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
594
|
+
if (slotChangeListener) {
|
|
595
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
596
|
+
}
|
|
473
597
|
}
|
|
474
598
|
|
|
475
599
|
/**
|
|
476
600
|
* @private
|
|
477
601
|
*/
|
|
478
|
-
_detachSlotChange(child, slotName) {
|
|
602
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
479
603
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
480
604
|
}
|
|
481
605
|
|
|
@@ -485,7 +609,7 @@ class UI5Element extends HTMLElement {
|
|
|
485
609
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
486
610
|
* @private
|
|
487
611
|
*/
|
|
488
|
-
_onSlotChange(slotName) {
|
|
612
|
+
_onSlotChange(slotName: string) {
|
|
489
613
|
_invalidate.call(this, {
|
|
490
614
|
type: "slot",
|
|
491
615
|
name: slotName,
|
|
@@ -520,21 +644,20 @@ class UI5Element extends HTMLElement {
|
|
|
520
644
|
*
|
|
521
645
|
* @public
|
|
522
646
|
*/
|
|
523
|
-
onInvalidation(changeInfo) {}
|
|
647
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
524
648
|
|
|
525
649
|
/**
|
|
526
650
|
* Do not call this method directly, only intended to be called by js
|
|
527
651
|
* @protected
|
|
528
652
|
*/
|
|
529
653
|
_render() {
|
|
530
|
-
const
|
|
654
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
655
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
531
656
|
|
|
532
657
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
533
658
|
this._suppressInvalidation = true;
|
|
534
659
|
|
|
535
|
-
|
|
536
|
-
this.onBeforeRendering();
|
|
537
|
-
}
|
|
660
|
+
this.onBeforeRendering();
|
|
538
661
|
|
|
539
662
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
540
663
|
if (this._onComponentStateFinalized) {
|
|
@@ -558,7 +681,7 @@ class UI5Element extends HTMLElement {
|
|
|
558
681
|
}
|
|
559
682
|
res = `${res}: ${x.name}`;
|
|
560
683
|
if (x.type === "property") {
|
|
561
|
-
res = `${res} ${x.oldValue} => ${x.newValue}`;
|
|
684
|
+
res = `${res} ${JSON.stringify(x.oldValue)} => ${JSON.stringify(x.newValue)}`;
|
|
562
685
|
}
|
|
563
686
|
|
|
564
687
|
return res;
|
|
@@ -568,7 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
568
691
|
this._changedState = [];
|
|
569
692
|
|
|
570
693
|
// Update shadow root and static area item
|
|
571
|
-
if (
|
|
694
|
+
if (ctor._needsShadowDOM()) {
|
|
572
695
|
updateShadowRoot(this);
|
|
573
696
|
}
|
|
574
697
|
if (this.staticAreaItem) {
|
|
@@ -581,9 +704,7 @@ class UI5Element extends HTMLElement {
|
|
|
581
704
|
}
|
|
582
705
|
|
|
583
706
|
// Call the onAfterRendering hook
|
|
584
|
-
|
|
585
|
-
this.onAfterRendering();
|
|
586
|
-
}
|
|
707
|
+
this.onAfterRendering();
|
|
587
708
|
}
|
|
588
709
|
|
|
589
710
|
/**
|
|
@@ -592,7 +713,7 @@ class UI5Element extends HTMLElement {
|
|
|
592
713
|
_assignIndividualSlotsToChildren() {
|
|
593
714
|
const domChildren = Array.from(this.children);
|
|
594
715
|
|
|
595
|
-
domChildren.forEach(child => {
|
|
716
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
596
717
|
if (child._individualSlot) {
|
|
597
718
|
child.setAttribute("slot", child._individualSlot);
|
|
598
719
|
}
|
|
@@ -625,10 +746,10 @@ class UI5Element extends HTMLElement {
|
|
|
625
746
|
|
|
626
747
|
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
627
748
|
if (children.length !== 1) {
|
|
628
|
-
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
|
|
629
750
|
}
|
|
630
751
|
|
|
631
|
-
return children[0];
|
|
752
|
+
return children[0] as HTMLElement;
|
|
632
753
|
}
|
|
633
754
|
|
|
634
755
|
/**
|
|
@@ -639,7 +760,7 @@ class UI5Element extends HTMLElement {
|
|
|
639
760
|
getFocusDomRef() {
|
|
640
761
|
const domRef = this.getDomRef();
|
|
641
762
|
if (domRef) {
|
|
642
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
763
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
643
764
|
return focusRef || domRef;
|
|
644
765
|
}
|
|
645
766
|
}
|
|
@@ -656,15 +777,16 @@ class UI5Element extends HTMLElement {
|
|
|
656
777
|
|
|
657
778
|
/**
|
|
658
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
|
|
659
781
|
* @public
|
|
660
782
|
*/
|
|
661
|
-
async focus() {
|
|
783
|
+
async focus(focusOptions?: FocusOptions) {
|
|
662
784
|
await this._waitForDomRef();
|
|
663
785
|
|
|
664
786
|
const focusDomRef = this.getFocusDomRef();
|
|
665
787
|
|
|
666
788
|
if (focusDomRef && typeof focusDomRef.focus === "function") {
|
|
667
|
-
focusDomRef.focus();
|
|
789
|
+
focusDomRef.focus(focusOptions);
|
|
668
790
|
}
|
|
669
791
|
}
|
|
670
792
|
|
|
@@ -677,7 +799,7 @@ class UI5Element extends HTMLElement {
|
|
|
677
799
|
* @param bubbles - true, if the event bubbles
|
|
678
800
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
679
801
|
*/
|
|
680
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
802
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
681
803
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
682
804
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
683
805
|
|
|
@@ -688,8 +810,8 @@ class UI5Element extends HTMLElement {
|
|
|
688
810
|
return eventResult;
|
|
689
811
|
}
|
|
690
812
|
|
|
691
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
692
|
-
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}`, {
|
|
693
815
|
detail: data,
|
|
694
816
|
composed: false,
|
|
695
817
|
bubbles,
|
|
@@ -703,7 +825,7 @@ class UI5Element extends HTMLElement {
|
|
|
703
825
|
return noConflictEventResult;
|
|
704
826
|
}
|
|
705
827
|
|
|
706
|
-
const normalEvent = new CustomEvent(name, {
|
|
828
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
707
829
|
detail: data,
|
|
708
830
|
composed: false,
|
|
709
831
|
bubbles,
|
|
@@ -722,8 +844,8 @@ class UI5Element extends HTMLElement {
|
|
|
722
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.
|
|
723
845
|
* @public
|
|
724
846
|
*/
|
|
725
|
-
getSlottedNodes(slotName) {
|
|
726
|
-
return
|
|
847
|
+
getSlottedNodes<T = Node>(slotName: string) {
|
|
848
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]) as Array<T>;
|
|
727
849
|
}
|
|
728
850
|
|
|
729
851
|
/**
|
|
@@ -734,7 +856,7 @@ class UI5Element extends HTMLElement {
|
|
|
734
856
|
* @returns {String|undefined}
|
|
735
857
|
*/
|
|
736
858
|
get effectiveDir() {
|
|
737
|
-
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
|
|
738
860
|
return getEffectiveDir(this);
|
|
739
861
|
}
|
|
740
862
|
|
|
@@ -747,6 +869,10 @@ class UI5Element extends HTMLElement {
|
|
|
747
869
|
return true;
|
|
748
870
|
}
|
|
749
871
|
|
|
872
|
+
get classes(): ClassMap {
|
|
873
|
+
return {};
|
|
874
|
+
}
|
|
875
|
+
|
|
750
876
|
/**
|
|
751
877
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
752
878
|
* @private
|
|
@@ -773,7 +899,7 @@ class UI5Element extends HTMLElement {
|
|
|
773
899
|
* @public
|
|
774
900
|
*/
|
|
775
901
|
getStaticAreaItemDomRef() {
|
|
776
|
-
if (!this.constructor._needsStaticArea()) {
|
|
902
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
777
903
|
throw new Error("This component does not use the static area");
|
|
778
904
|
}
|
|
779
905
|
|
|
@@ -819,7 +945,7 @@ class UI5Element extends HTMLElement {
|
|
|
819
945
|
}
|
|
820
946
|
|
|
821
947
|
Object.defineProperty(proto, prop, {
|
|
822
|
-
get() {
|
|
948
|
+
get(this: UI5Element) {
|
|
823
949
|
if (this._state[prop] !== undefined) {
|
|
824
950
|
return this._state[prop];
|
|
825
951
|
}
|
|
@@ -836,15 +962,25 @@ class UI5Element extends HTMLElement {
|
|
|
836
962
|
return propDefaultValue;
|
|
837
963
|
}
|
|
838
964
|
},
|
|
839
|
-
|
|
965
|
+
|
|
966
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
840
967
|
let isDifferent;
|
|
841
|
-
|
|
968
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
969
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
842
970
|
|
|
971
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
972
|
+
const propertyType = propData.type;
|
|
973
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
843
974
|
const oldState = this._state[prop];
|
|
844
|
-
|
|
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
|
|
845
983
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
846
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
847
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
848
984
|
} else {
|
|
849
985
|
isDifferent = oldState !== value;
|
|
850
986
|
}
|
|
@@ -873,7 +1009,7 @@ class UI5Element extends HTMLElement {
|
|
|
873
1009
|
|
|
874
1010
|
const propertyName = slotData.propertyName || slotName;
|
|
875
1011
|
Object.defineProperty(proto, propertyName, {
|
|
876
|
-
get() {
|
|
1012
|
+
get(this: UI5Element) {
|
|
877
1013
|
if (this._state[propertyName] !== undefined) {
|
|
878
1014
|
return this._state[propertyName];
|
|
879
1015
|
}
|
|
@@ -891,15 +1027,13 @@ class UI5Element extends HTMLElement {
|
|
|
891
1027
|
* Returns the metadata object for this UI5 Web Component Class
|
|
892
1028
|
* @protected
|
|
893
1029
|
*/
|
|
894
|
-
static
|
|
895
|
-
return {};
|
|
896
|
-
}
|
|
1030
|
+
static metadata: Metadata = {};
|
|
897
1031
|
|
|
898
1032
|
/**
|
|
899
1033
|
* Returns the CSS for this UI5 Web Component Class
|
|
900
1034
|
* @protected
|
|
901
1035
|
*/
|
|
902
|
-
static get styles() {
|
|
1036
|
+
static get styles(): ComponentStylesData {
|
|
903
1037
|
return "";
|
|
904
1038
|
}
|
|
905
1039
|
|
|
@@ -907,7 +1041,7 @@ class UI5Element extends HTMLElement {
|
|
|
907
1041
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
908
1042
|
* @protected
|
|
909
1043
|
*/
|
|
910
|
-
static get staticAreaStyles() {
|
|
1044
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
911
1045
|
return "";
|
|
912
1046
|
}
|
|
913
1047
|
|
|
@@ -918,7 +1052,7 @@ class UI5Element extends HTMLElement {
|
|
|
918
1052
|
*
|
|
919
1053
|
* @protected
|
|
920
1054
|
*/
|
|
921
|
-
static get dependencies() {
|
|
1055
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
922
1056
|
return [];
|
|
923
1057
|
}
|
|
924
1058
|
|
|
@@ -927,21 +1061,21 @@ class UI5Element extends HTMLElement {
|
|
|
927
1061
|
*
|
|
928
1062
|
* @public
|
|
929
1063
|
*/
|
|
930
|
-
static getUniqueDependencies() {
|
|
1064
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
931
1065
|
if (!uniqueDependenciesCache.has(this)) {
|
|
932
1066
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
933
1067
|
uniqueDependenciesCache.set(this, filtered);
|
|
934
1068
|
}
|
|
935
1069
|
|
|
936
|
-
return uniqueDependenciesCache.get(this);
|
|
1070
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
937
1071
|
}
|
|
938
1072
|
|
|
939
1073
|
/**
|
|
940
1074
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
941
1075
|
*
|
|
942
|
-
* @returns {Promise
|
|
1076
|
+
* @returns {Promise}
|
|
943
1077
|
*/
|
|
944
|
-
static whenDependenciesDefined() {
|
|
1078
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
945
1079
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
946
1080
|
}
|
|
947
1081
|
|
|
@@ -969,7 +1103,6 @@ class UI5Element extends HTMLElement {
|
|
|
969
1103
|
]);
|
|
970
1104
|
|
|
971
1105
|
const tag = this.getMetadata().getTag();
|
|
972
|
-
const altTag = this.getMetadata().getAltTag();
|
|
973
1106
|
|
|
974
1107
|
const definedLocally = isTagRegistered(tag);
|
|
975
1108
|
const definedGlobally = customElements.get(tag);
|
|
@@ -979,15 +1112,8 @@ class UI5Element extends HTMLElement {
|
|
|
979
1112
|
} else if (!definedGlobally) {
|
|
980
1113
|
this._generateAccessors();
|
|
981
1114
|
registerTag(tag);
|
|
982
|
-
window.customElements.define(tag, this);
|
|
1115
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
983
1116
|
preloadLinks(this);
|
|
984
|
-
|
|
985
|
-
if (altTag && !customElements.get(altTag)) {
|
|
986
|
-
registerTag(altTag);
|
|
987
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
988
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
989
|
-
}));
|
|
990
|
-
}
|
|
991
1117
|
}
|
|
992
1118
|
return this;
|
|
993
1119
|
}
|
|
@@ -1009,11 +1135,25 @@ class UI5Element extends HTMLElement {
|
|
|
1009
1135
|
klass = Object.getPrototypeOf(klass);
|
|
1010
1136
|
metadataObjects.unshift(klass.metadata);
|
|
1011
1137
|
}
|
|
1012
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1138
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1013
1139
|
|
|
1014
1140
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1015
1141
|
return this._metadata;
|
|
1016
1142
|
}
|
|
1017
1143
|
}
|
|
1018
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
|
+
|
|
1019
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type {
|
|
1156
|
+
ChangeInfo,
|
|
1157
|
+
Renderer,
|
|
1158
|
+
RendererOptions,
|
|
1159
|
+
};
|