@ui5/webcomponents-base 0.0.0-4821618b2 → 0.0.0-49cef2d02
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 +4 -2
- package/CHANGELOG.md +316 -0
- package/README.md +53 -7
- package/bundle.esm.js +18 -12
- package/dist/AssetRegistry.d.ts +5 -0
- package/dist/AssetRegistry.js +2 -7
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/Boot.d.ts +8 -0
- package/dist/Boot.js +31 -30
- package/dist/Boot.js.map +1 -0
- package/dist/CSP.d.ts +30 -0
- package/dist/CSP.js +51 -0
- 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 +63 -72
- package/dist/Device.js.map +1 -0
- package/dist/EventProvider.d.ts +25 -0
- package/dist/EventProvider.js +67 -88
- 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 +17 -110
- package/dist/FontFace.js.map +1 -0
- package/dist/InitialConfiguration.d.ts +22 -0
- package/dist/InitialConfiguration.js +112 -127
- package/dist/InitialConfiguration.js.map +1 -0
- package/dist/Keys.d.ts +57 -0
- package/dist/Keys.js +174 -235
- package/dist/Keys.js.map +1 -0
- package/dist/ManagedStyles.d.ts +8 -0
- package/dist/ManagedStyles.js +77 -0
- 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 +82 -112
- 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 +86 -83
- package/dist/StaticAreaItem.js.map +1 -0
- package/dist/SystemCSSVars.d.ts +2 -0
- package/dist/SystemCSSVars.js +6 -28
- 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 +373 -0
- package/dist/UI5Element.js +930 -997
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +278 -298
- 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 +87 -104
- 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 -18
- 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 -118
- package/dist/asset-registries/LocaleData.js.map +1 -0
- package/dist/asset-registries/Themes.d.ts +10 -0
- package/dist/asset-registries/Themes.js +38 -66
- package/dist/asset-registries/Themes.js.map +1 -0
- package/dist/asset-registries/i18n.d.ts +23 -0
- package/dist/asset-registries/i18n.js +55 -81
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/bundle.esm.90eb65b3.js +56 -0
- package/dist/assets-meta/IconCollectionsAlias.d.ts +17 -0
- package/dist/assets-meta/IconCollectionsAlias.js +18 -0
- package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
- package/dist/config/AnimationMode.d.ts +14 -0
- package/dist/config/AnimationMode.js +21 -18
- package/dist/config/AnimationMode.js.map +1 -0
- package/dist/config/CalendarType.d.ts +8 -0
- package/dist/config/CalendarType.js +13 -12
- package/dist/config/CalendarType.js.map +1 -0
- package/dist/config/FormatSettings.d.ts +11 -0
- package/dist/config/FormatSettings.js +10 -8
- package/dist/config/FormatSettings.js.map +1 -0
- package/dist/config/Icons.d.ts +30 -0
- package/dist/config/Icons.js +48 -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 +23 -20
- package/dist/config/RTL.js.map +1 -0
- package/dist/config/Theme.d.ts +28 -0
- package/dist/config/Theme.js +45 -22
- 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 +66 -0
- package/dist/css/OverrideFontFace.css +32 -0
- package/dist/css/SystemCSSVars.css +17 -0
- package/dist/decorators/customElement.d.ts +8 -0
- package/dist/decorators/customElement.js +16 -0
- package/dist/decorators/customElement.js.map +1 -0
- package/dist/decorators/event.d.ts +10 -0
- package/dist/decorators/event.js +24 -0
- package/dist/decorators/event.js.map +1 -0
- package/dist/decorators/fastNavigation.d.ts +7 -0
- package/dist/decorators/fastNavigation.js +13 -0
- package/dist/decorators/fastNavigation.js.map +1 -0
- package/dist/decorators/languageAware.d.ts +7 -0
- package/dist/decorators/languageAware.js +13 -0
- package/dist/decorators/languageAware.js.map +1 -0
- package/dist/decorators/property.d.ts +9 -0
- package/dist/decorators/property.js +24 -0
- package/dist/decorators/property.js.map +1 -0
- package/dist/decorators/slot.d.ts +9 -0
- package/dist/decorators/slot.js +37 -0
- package/dist/decorators/slot.js.map +1 -0
- package/dist/decorators/themeAware.d.ts +7 -0
- package/dist/decorators/themeAware.js +13 -0
- package/dist/decorators/themeAware.js.map +1 -0
- package/dist/delegate/ItemNavigation.d.ts +113 -0
- package/dist/delegate/ItemNavigation.js +277 -246
- package/dist/delegate/ItemNavigation.js.map +1 -0
- package/dist/delegate/ResizeHandler.d.ts +24 -0
- package/dist/delegate/ResizeHandler.js +68 -91
- package/dist/delegate/ResizeHandler.js.map +1 -0
- package/dist/delegate/ScrollEnablement.d.ts +48 -0
- package/dist/delegate/ScrollEnablement.js +157 -180
- package/dist/delegate/ScrollEnablement.js.map +1 -0
- package/dist/features/F6Navigation.d.ts +16 -0
- package/dist/features/F6Navigation.js +112 -0
- package/dist/features/F6Navigation.js.map +1 -0
- package/dist/features/OpenUI5Element.d.ts +9 -0
- package/dist/features/OpenUI5Element.js +5 -0
- package/dist/features/OpenUI5Element.js.map +1 -0
- package/dist/features/OpenUI5Enablement.d.ts +11 -0
- package/dist/features/OpenUI5Enablement.js +96 -0
- package/dist/features/OpenUI5Enablement.js.map +1 -0
- package/dist/features/OpenUI5Support.d.ts +23 -0
- package/dist/features/OpenUI5Support.js +91 -119
- package/dist/features/OpenUI5Support.js.map +1 -0
- package/dist/generated/AssetParameters.js +1 -1
- package/dist/generated/VersionInfo.js +10 -0
- package/dist/generated/css/BusyIndicator.css.js +5 -0
- package/dist/generated/css/FontFace.css.js +5 -0
- package/dist/generated/css/OverrideFontFace.css.js +5 -0
- package/dist/generated/css/SystemCSSVars.css.js +5 -0
- package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
- package/dist/getSharedResource.d.ts +11 -0
- package/dist/getSharedResource.js +12 -16
- package/dist/getSharedResource.js.map +1 -0
- package/dist/i18nBundle.d.ts +43 -0
- package/dist/i18nBundle.js +67 -44
- 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 +33 -23
- package/dist/renderer/LitRenderer.js.map +1 -0
- package/dist/renderer/directives/style-map.js +72 -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 -37
- package/dist/sap/base/assert.js +5 -10
- package/dist/sap/base/security/URLListValidator.js +13 -2
- package/dist/sap/base/security/encodeCSS.js +14 -0
- package/dist/sap/base/security/encodeXML.js +23 -0
- package/dist/sap/base/strings/toHex.js +8 -0
- package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
- package/dist/theming/CustomStyle.d.ts +6 -0
- package/dist/theming/CustomStyle.js +37 -31
- 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 +62 -65
- 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 +17 -0
- 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 -11
- package/dist/theming/getStylesString.js.map +1 -0
- package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
- package/dist/theming/getThemeDesignerTheme.js +73 -60
- package/dist/theming/getThemeDesignerTheme.js.map +1 -0
- package/dist/theming/preloadLinks.d.ts +3 -0
- package/dist/theming/preloadLinks.js +19 -0
- package/dist/theming/preloadLinks.js.map +1 -0
- package/dist/thirdparty/_merge.d.ts +2 -0
- package/dist/thirdparty/_merge.js +7 -4
- package/dist/thirdparty/_merge.js.map +1 -0
- package/dist/thirdparty/isPlainObject.d.ts +2 -0
- package/dist/thirdparty/isPlainObject.js +11 -10
- package/dist/thirdparty/isPlainObject.js.map +1 -0
- package/dist/thirdparty/merge.d.ts +2 -0
- package/dist/thirdparty/merge.js +4 -8
- package/dist/thirdparty/merge.js.map +1 -0
- package/dist/types/AnimationMode.d.ts +32 -0
- package/dist/types/AnimationMode.js +33 -6
- package/dist/types/AnimationMode.js.map +1 -0
- package/dist/types/CSSColor.d.ts +16 -0
- package/dist/types/CSSColor.js +15 -5
- package/dist/types/CSSColor.js.map +1 -0
- package/dist/types/CalendarType.d.ts +37 -0
- package/dist/types/CalendarType.js +35 -18
- package/dist/types/CalendarType.js.map +1 -0
- package/dist/types/DOMReference.d.ts +17 -0
- package/dist/types/DOMReference.js +25 -0
- package/dist/types/DOMReference.js.map +1 -0
- package/dist/types/DataType.d.ts +25 -0
- package/dist/types/DataType.js +33 -14
- package/dist/types/DataType.js.map +1 -0
- package/dist/types/Float.d.ts +18 -0
- package/dist/types/Float.js +18 -6
- package/dist/types/Float.js.map +1 -0
- package/dist/types/Integer.d.ts +18 -0
- package/dist/types/Integer.js +18 -5
- 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 +23 -15
- package/dist/updateShadowRoot.js.map +1 -0
- package/dist/util/AriaLabelHelper.d.ts +6 -0
- package/dist/util/AriaLabelHelper.js +37 -34
- package/dist/util/AriaLabelHelper.js.map +1 -0
- package/dist/util/Caret.d.ts +7 -0
- package/dist/util/Caret.js +16 -38
- package/dist/util/Caret.js.map +1 -0
- package/dist/util/ColorConversion.d.ts +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 +57 -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 +47 -39
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +57 -76
- package/dist/util/PopupUtils.js.map +1 -0
- package/dist/util/SlotsHelper.d.ts +9 -0
- package/dist/util/SlotsHelper.js +22 -35
- package/dist/util/SlotsHelper.js.map +1 -0
- package/dist/util/StringHelper.d.ts +3 -0
- package/dist/util/StringHelper.js +17 -20
- package/dist/util/StringHelper.js.map +1 -0
- package/dist/util/TabbableElements.d.ts +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 +21 -0
- 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 +11 -0
- 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 +41 -0
- 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 +400 -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/global.d.ts +44 -0
- package/lib/generate-asset-parameters/index.js +8 -5
- package/lib/generate-styles/index.js +26 -0
- package/lib/generate-version-info/index.js +32 -0
- package/package-scripts.js +37 -32
- package/package.json +11 -12
- package/src/{AssetRegistry.js → AssetRegistry.ts} +0 -0
- package/src/Boot.ts +61 -0
- package/src/CSP.ts +66 -0
- 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.js → Device.ts} +34 -10
- package/src/EventProvider.ts +87 -0
- package/src/FeaturesRegistry.ts +14 -0
- package/src/FontFace.ts +31 -0
- package/src/{InitialConfiguration.js → InitialConfiguration.ts} +62 -17
- 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} +27 -20
- package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
- package/src/Runtimes.ts +114 -0
- package/src/{StaticArea.js → StaticArea.ts} +0 -0
- package/src/{StaticAreaItem.js → StaticAreaItem.ts} +39 -22
- package/src/SystemCSSVars.ts +10 -0
- package/src/{Theming.js → Theming.ts} +0 -0
- package/src/{UI5Element.js → UI5Element.ts} +305 -184
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +138 -60
- 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 +162 -0
- package/src/asset-registries/Illustrations.ts +75 -0
- package/src/asset-registries/{LocaleData.js → LocaleData.ts} +47 -25
- package/src/asset-registries/Themes.ts +67 -0
- package/src/asset-registries/{i18n.js → i18n.ts} +21 -24
- package/src/assets-meta/IconCollectionsAlias.ts +18 -0
- package/src/config/AnimationMode.ts +33 -0
- package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
- package/src/config/FormatSettings.ts +21 -0
- package/src/config/Icons.ts +59 -0
- package/src/config/{Language.js → Language.ts} +22 -18
- package/src/config/NoConflict.ts +67 -0
- package/src/config/{RTL.js → RTL.ts} +14 -4
- package/src/config/Theme.ts +64 -0
- package/src/config/ThemeRoots.ts +41 -0
- package/src/css/BusyIndicator.css +80 -0
- package/src/css/FontFace.css +66 -0
- package/src/css/OverrideFontFace.css +32 -0
- package/src/css/SystemCSSVars.css +17 -0
- package/src/decorators/customElement.ts +17 -0
- package/src/decorators/event.ts +28 -0
- package/src/decorators/fastNavigation.ts +14 -0
- package/src/decorators/languageAware.ts +14 -0
- package/src/decorators/property.ts +30 -0
- package/src/decorators/slot.ts +49 -0
- package/src/decorators/themeAware.ts +14 -0
- package/src/delegate/{ItemNavigation.js → ItemNavigation.ts} +131 -23
- package/src/delegate/{ResizeHandler.js → ResizeHandler.ts} +25 -36
- package/src/delegate/ScrollEnablement.ts +221 -0
- package/src/features/F6Navigation.ts +141 -0
- package/src/features/OpenUI5Element.ts +11 -0
- package/src/features/OpenUI5Enablement.ts +117 -0
- package/src/features/OpenUI5Support.ts +148 -0
- package/src/{getSharedResource.js → getSharedResource.ts} +3 -3
- package/src/i18nBundle.ts +108 -0
- 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/directives/style-map.js +72 -0
- package/src/renderer/executeTemplate.ts +40 -0
- package/src/theming/CustomStyle.ts +62 -0
- package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
- package/src/theming/applyTheme.ts +90 -0
- 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.ts +101 -0
- package/src/theming/preloadLinks.ts +24 -0
- package/src/thirdparty/{_merge.js → _merge.ts} +2 -2
- package/src/thirdparty/{isPlainObject.js → isPlainObject.ts} +1 -1
- package/src/thirdparty/merge.ts +5 -0
- package/src/types/AnimationMode.ts +33 -0
- package/src/types/{CSSColor.js → CSSColor.ts} +12 -1
- package/src/types/CalendarType.ts +38 -0
- package/src/types/DOMReference.ts +28 -0
- package/src/types/DataType.ts +51 -0
- package/src/types/Float.ts +25 -0
- package/src/types/Integer.ts +25 -0
- package/src/types/InvisibleMessageMode.ts +27 -0
- package/src/types/ItemNavigationBehavior.ts +26 -0
- package/src/types/NavigationMode.ts +33 -0
- package/src/types/ValueState.ts +47 -0
- package/src/types.ts +30 -0
- package/src/updateShadowRoot.ts +37 -0
- package/src/util/AriaLabelHelper.ts +63 -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 +82 -0
- package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
- package/src/util/InvisibleMessage.ts +69 -0
- package/src/util/PopupUtils.ts +114 -0
- package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/{clamp.js → clamp.ts} +1 -1
- package/src/util/createLinkInHead.ts +25 -0
- 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.ts +43 -0
- package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
- package/src/util/{getClassCopy.js → getClassCopy.ts} +3 -1
- package/src/util/{getDesigntimePropertyAsArray.js → getDesigntimePropertyAsArray.ts} +1 -1
- package/src/util/getEffectiveContentDensity.ts +5 -0
- package/src/util/getEffectiveScrollbarStyle.ts +5 -0
- package/src/util/getFastNavigationGroups.ts +63 -0
- package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
- package/src/util/getNormalizedTarget.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/used-modules.txt +4 -1
- 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/config/AssetsPath.js +0 -17
- package/dist/isLegacyBrowser.js +0 -3
- package/dist/resources/bundle.esm.js +0 -26
- 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 -76
- package/dist/test-resources/pages/AllTestElements.html +0 -39
- 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 -35
- 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/StaticArea.spec.js +0 -36
- 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/theming/createThemePropertiesStyleTag.js +0 -20
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/PopupState.js +0 -37
- package/dist/util/encodeCSS.js +0 -24
- 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/EventProvider.js +0 -91
- package/src/FeaturesRegistry.js +0 -11
- package/src/FontFace.js +0 -118
- package/src/Keys.js +0 -239
- package/src/RenderScheduler.js +0 -44
- package/src/SystemCSSVars.js +0 -31
- 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 -121
- package/src/asset-registries/Illustrations.js +0 -23
- package/src/asset-registries/Themes.js +0 -78
- package/src/config/AnimationMode.js +0 -23
- package/src/config/AssetsPath.js +0 -17
- package/src/config/FormatSettings.js +0 -13
- package/src/config/NoConflict.js +0 -51
- package/src/config/Theme.js +0 -28
- package/src/delegate/ScrollEnablement.js +0 -188
- package/src/features/OpenUI5Support.js +0 -125
- package/src/i18nBundle.js +0 -55
- 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 -31
- package/src/renderer/executeTemplate.js +0 -17
- package/src/theming/CustomStyle.js +0 -40
- package/src/theming/applyTheme.js +0 -78
- package/src/theming/createThemePropertiesStyleTag.js +0 -20
- package/src/theming/getStylesString.js +0 -13
- package/src/theming/getThemeDesignerTheme.js +0 -67
- 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 -25
- package/src/types/Float.js +0 -10
- package/src/types/Integer.js +0 -9
- 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 -26
- 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/InvisibleMessage.js +0 -48
- package/src/util/PopupUtils.js +0 -93
- package/src/util/TabbableElements.js +0 -47
- package/src/util/encodeCSS.js +0 -24
- package/src/util/findNodeOwner.js +0 -35
- package/src/util/getEffectiveContentDensity.js +0 -5
- package/src/util/isDescendantOf.js +0 -15
- package/src/util/isNodeClickable.js +0 -19
- package/src/util/isNodeHidden.js +0 -9
- package/src/util/isNodeTabbable.js +0 -28
- package/src/util/setToArray.js +0 -10
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import merge from "./thirdparty/merge.js";
|
|
2
2
|
import { boot } from "./Boot.js";
|
|
3
|
-
import UI5ElementMetadata
|
|
3
|
+
import UI5ElementMetadata, {
|
|
4
|
+
Slot,
|
|
5
|
+
SlotValue,
|
|
6
|
+
State,
|
|
7
|
+
PropertyValue,
|
|
8
|
+
Metadata,
|
|
9
|
+
} from "./UI5ElementMetadata.js";
|
|
4
10
|
import EventProvider from "./EventProvider.js";
|
|
5
11
|
import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
|
|
6
12
|
import StaticAreaItem from "./StaticAreaItem.js";
|
|
@@ -10,28 +16,43 @@ import { registerTag, isTagRegistered, recordTagRegistrationFailure } from "./Cu
|
|
|
10
16
|
import { observeDOMNode, unobserveDOMNode } from "./DOMObserver.js";
|
|
11
17
|
import { skipOriginalEvent } from "./config/NoConflict.js";
|
|
12
18
|
import getEffectiveDir from "./locale/getEffectiveDir.js";
|
|
13
|
-
import
|
|
14
|
-
import Float from "./types/Float.js";
|
|
19
|
+
import DataType from "./types/DataType.js";
|
|
15
20
|
import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
|
|
16
21
|
import isValidPropertyName from "./util/isValidPropertyName.js";
|
|
17
|
-
import {
|
|
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
|
-
import
|
|
25
|
+
import preloadLinks from "./theming/preloadLinks.js";
|
|
26
|
+
import { TemplateFunction, TemplateFunctionResult } from "./renderer/executeTemplate.js";
|
|
27
|
+
import { 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 ChangeInfo = {
|
|
35
|
+
type: "property" | "slot",
|
|
36
|
+
name: string,
|
|
37
|
+
reason?: string,
|
|
38
|
+
child?: SlotValue,
|
|
39
|
+
target?: UI5Element,
|
|
40
|
+
newValue?: PropertyValue,
|
|
41
|
+
oldValue?: PropertyValue,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
type InvalidationInfo = ChangeInfo & { target: UI5Element };
|
|
45
|
+
|
|
46
|
+
type ChildChangeListener = (param: InvalidationInfo) => void;
|
|
47
|
+
|
|
48
|
+
type SlotChangeListener = (this: HTMLSlotElement, ev: Event) => void;
|
|
27
49
|
|
|
28
50
|
/**
|
|
29
51
|
* Triggers re-rendering of a UI5Element instance due to state change.
|
|
30
|
-
*
|
|
31
|
-
* @param changeInfo An object with information about the change that caused invalidation.
|
|
52
|
+
* @param {ChangeInfo} changeInfo An object with information about the change that caused invalidation.
|
|
32
53
|
* @private
|
|
33
54
|
*/
|
|
34
|
-
function _invalidate(changeInfo) {
|
|
55
|
+
function _invalidate(this: UI5Element, changeInfo: ChangeInfo) {
|
|
35
56
|
// Invalidation should be suppressed: 1) before the component is rendered for the first time 2) and during the execution of onBeforeRendering
|
|
36
57
|
// This is necessary not only as an optimization, but also to avoid infinite loops on invalidation between children and parents (when invalidateOnChildChange is used)
|
|
37
58
|
if (this._suppressInvalidation) {
|
|
@@ -43,23 +64,47 @@ function _invalidate(changeInfo) {
|
|
|
43
64
|
|
|
44
65
|
this._changedState.push(changeInfo);
|
|
45
66
|
renderDeferred(this);
|
|
46
|
-
this._eventProvider.fireEvent("
|
|
67
|
+
this._eventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
|
|
47
68
|
}
|
|
48
69
|
|
|
70
|
+
let metadata = {} as Metadata;
|
|
71
|
+
|
|
49
72
|
/**
|
|
50
73
|
* Base class for all UI5 Web Components
|
|
51
74
|
*
|
|
52
75
|
* @class
|
|
53
76
|
* @constructor
|
|
54
77
|
* @author SAP SE
|
|
55
|
-
* @alias sap.ui.
|
|
78
|
+
* @alias sap.ui.webc.base.UI5Element
|
|
56
79
|
* @extends HTMLElement
|
|
57
80
|
* @public
|
|
58
81
|
*/
|
|
59
|
-
class UI5Element extends HTMLElement {
|
|
82
|
+
abstract class UI5Element extends HTMLElement {
|
|
83
|
+
__id?: string;
|
|
84
|
+
_suppressInvalidation: boolean;
|
|
85
|
+
_changedState: Array<ChangeInfo>;
|
|
86
|
+
_eventProvider: EventProvider<InvalidationInfo, void>;
|
|
87
|
+
_inDOM: boolean;
|
|
88
|
+
_fullyConnected: boolean;
|
|
89
|
+
_childChangeListeners: Map<string, ChildChangeListener>;
|
|
90
|
+
_slotChangeListeners: Map<string, SlotChangeListener>;
|
|
91
|
+
_domRefReadyPromise: Promise<void> & { _deferredResolve?: PromiseResolve };
|
|
92
|
+
_doNotSyncAttributes: Set<string>;
|
|
93
|
+
_state: State;
|
|
94
|
+
_onComponentStateFinalized?: () => void;
|
|
95
|
+
_getRealDomRef?: () => HTMLElement;
|
|
96
|
+
|
|
97
|
+
staticAreaItem?: StaticAreaItem;
|
|
98
|
+
|
|
99
|
+
static template?: TemplateFunction;
|
|
100
|
+
static staticAreaTemplate?: TemplateFunction;
|
|
101
|
+
static _metadata: UI5ElementMetadata;
|
|
102
|
+
static render: (templateFunctionResult: TemplateFunctionResult, container: HTMLElement | DocumentFragment, styleStrOrHrefsArr: string | Array<string> | undefined, forStaticArea: boolean, options: { host: HTMLElement }) => void;
|
|
103
|
+
|
|
60
104
|
constructor() {
|
|
61
105
|
super();
|
|
62
106
|
|
|
107
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
63
108
|
this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
|
|
64
109
|
this._suppressInvalidation = true; // A flag telling whether all invalidations should be ignored. Initialized with "true" because a UI5Element can not be invalidated until it is rendered for the first time
|
|
65
110
|
this._inDOM = false; // A flag telling whether the UI5Element is currently in the DOM tree of the document or not
|
|
@@ -72,11 +117,13 @@ class UI5Element extends HTMLElement {
|
|
|
72
117
|
deferredResolve = resolve;
|
|
73
118
|
});
|
|
74
119
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
120
|
+
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
121
|
+
|
|
122
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
75
123
|
|
|
76
|
-
this._initializeState();
|
|
77
124
|
this._upgradeAllProperties();
|
|
78
125
|
|
|
79
|
-
if (
|
|
126
|
+
if (ctor._needsShadowDOM()) {
|
|
80
127
|
this.attachShadow({ mode: "open" });
|
|
81
128
|
}
|
|
82
129
|
}
|
|
@@ -100,10 +147,14 @@ class UI5Element extends HTMLElement {
|
|
|
100
147
|
* @private
|
|
101
148
|
*/
|
|
102
149
|
async connectedCallback() {
|
|
103
|
-
this.
|
|
150
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
151
|
+
|
|
152
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
153
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
154
|
+
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
155
|
+
}
|
|
104
156
|
|
|
105
|
-
const
|
|
106
|
-
const slotsAreManaged = this.constructor.getMetadata().slotsAreManaged();
|
|
157
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
107
158
|
|
|
108
159
|
this._inDOM = true;
|
|
109
160
|
|
|
@@ -113,20 +164,14 @@ class UI5Element extends HTMLElement {
|
|
|
113
164
|
await this._processChildren();
|
|
114
165
|
}
|
|
115
166
|
|
|
116
|
-
if (needsShadowDOM && !this.shadowRoot) { // Workaround for Firefox74 bug
|
|
117
|
-
await Promise.resolve();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
167
|
if (!this._inDOM) { // Component removed from DOM while _processChildren was running
|
|
121
168
|
return;
|
|
122
169
|
}
|
|
123
170
|
|
|
124
171
|
renderImmediately(this);
|
|
125
|
-
this._domRefReadyPromise._deferredResolve();
|
|
172
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
126
173
|
this._fullyConnected = true;
|
|
127
|
-
|
|
128
|
-
this.onEnterDOM();
|
|
129
|
-
}
|
|
174
|
+
this.onEnterDOM();
|
|
130
175
|
}
|
|
131
176
|
|
|
132
177
|
/**
|
|
@@ -134,8 +179,8 @@ class UI5Element extends HTMLElement {
|
|
|
134
179
|
* @private
|
|
135
180
|
*/
|
|
136
181
|
disconnectedCallback() {
|
|
137
|
-
const
|
|
138
|
-
const slotsAreManaged =
|
|
182
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
183
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
139
184
|
|
|
140
185
|
this._inDOM = false;
|
|
141
186
|
|
|
@@ -143,13 +188,9 @@ class UI5Element extends HTMLElement {
|
|
|
143
188
|
this._stopObservingDOMChildren();
|
|
144
189
|
}
|
|
145
190
|
|
|
146
|
-
if (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.onExitDOM();
|
|
150
|
-
}
|
|
151
|
-
this._fullyConnected = false;
|
|
152
|
-
}
|
|
191
|
+
if (this._fullyConnected) {
|
|
192
|
+
this.onExitDOM();
|
|
193
|
+
this._fullyConnected = false;
|
|
153
194
|
}
|
|
154
195
|
|
|
155
196
|
if (this.staticAreaItem && this.staticAreaItem.parentElement) {
|
|
@@ -159,22 +200,47 @@ class UI5Element extends HTMLElement {
|
|
|
159
200
|
cancelRender(this);
|
|
160
201
|
}
|
|
161
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Called every time before the component renders.
|
|
205
|
+
* @public
|
|
206
|
+
*/
|
|
207
|
+
onBeforeRendering() {}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Called every time after the component renders.
|
|
211
|
+
* @public
|
|
212
|
+
*/
|
|
213
|
+
onAfterRendering() {}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Called on connectedCallback - added to the DOM.
|
|
217
|
+
* @public
|
|
218
|
+
*/
|
|
219
|
+
onEnterDOM() {}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Called on disconnectedCallback - removed from the DOM.
|
|
223
|
+
* @public
|
|
224
|
+
*/
|
|
225
|
+
onExitDOM() {}
|
|
226
|
+
|
|
162
227
|
/**
|
|
163
228
|
* @private
|
|
164
229
|
*/
|
|
165
230
|
_startObservingDOMChildren() {
|
|
166
|
-
const
|
|
231
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
232
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
167
233
|
if (!shouldObserveChildren) {
|
|
168
234
|
return;
|
|
169
235
|
}
|
|
170
236
|
|
|
171
|
-
const canSlotText =
|
|
237
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
172
238
|
const mutationObserverOptions = {
|
|
173
239
|
childList: true,
|
|
174
240
|
subtree: canSlotText,
|
|
175
241
|
characterData: canSlotText,
|
|
176
242
|
};
|
|
177
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
243
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
178
244
|
}
|
|
179
245
|
|
|
180
246
|
/**
|
|
@@ -189,7 +255,7 @@ class UI5Element extends HTMLElement {
|
|
|
189
255
|
* @private
|
|
190
256
|
*/
|
|
191
257
|
async _processChildren() {
|
|
192
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
258
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
193
259
|
if (hasSlots) {
|
|
194
260
|
await this._updateSlots();
|
|
195
261
|
}
|
|
@@ -199,23 +265,24 @@ class UI5Element extends HTMLElement {
|
|
|
199
265
|
* @private
|
|
200
266
|
*/
|
|
201
267
|
async _updateSlots() {
|
|
202
|
-
const
|
|
203
|
-
const
|
|
204
|
-
const
|
|
268
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
269
|
+
const slotsMap = ctor.getMetadata().getSlots();
|
|
270
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
271
|
+
const domChildren = Array.from(canSlotText ? this.childNodes : this.children) as Array<Node>;
|
|
205
272
|
|
|
206
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
207
|
-
const propertyNameToSlotMap = new Map(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
273
|
+
const slotsCachedContentMap = new Map<string, Array<SlotValue>>(); // Store here the content of each slot before the mutation occurred
|
|
274
|
+
const propertyNameToSlotMap = new Map<string, string>(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
208
275
|
|
|
209
276
|
// Init the _state object based on the supported slots and store the previous values
|
|
210
277
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
211
278
|
const propertyName = slotData.propertyName || slotName;
|
|
212
279
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
213
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
280
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
214
281
|
this._clearSlot(slotName, slotData);
|
|
215
282
|
}
|
|
216
283
|
|
|
217
|
-
const autoIncrementMap = new Map();
|
|
218
|
-
const slottedChildrenMap = new Map();
|
|
284
|
+
const autoIncrementMap = new Map<string, number>();
|
|
285
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
219
286
|
|
|
220
287
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
221
288
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -224,8 +291,11 @@ class UI5Element extends HTMLElement {
|
|
|
224
291
|
|
|
225
292
|
// Check if the slotName is supported
|
|
226
293
|
if (slotData === undefined) {
|
|
227
|
-
|
|
228
|
-
|
|
294
|
+
if (slotName !== "default") {
|
|
295
|
+
const validValues = Object.keys(slotsMap).join(", ");
|
|
296
|
+
console.warn(`Unknown slotName: ${slotName}, ignoring`, child, `Valid values are: ${validValues}`); // eslint-disable-line
|
|
297
|
+
}
|
|
298
|
+
|
|
229
299
|
return;
|
|
230
300
|
}
|
|
231
301
|
|
|
@@ -233,7 +303,7 @@ class UI5Element extends HTMLElement {
|
|
|
233
303
|
if (slotData.individualSlots) {
|
|
234
304
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
235
305
|
autoIncrementMap.set(slotName, nextIndex);
|
|
236
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
306
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
237
307
|
}
|
|
238
308
|
|
|
239
309
|
// Await for not-yet-defined custom elements
|
|
@@ -255,22 +325,26 @@ class UI5Element extends HTMLElement {
|
|
|
255
325
|
}
|
|
256
326
|
}
|
|
257
327
|
|
|
258
|
-
child =
|
|
328
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
259
329
|
|
|
260
330
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
261
|
-
if (child
|
|
262
|
-
|
|
331
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
332
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
333
|
+
|
|
334
|
+
if (childChangeListener) {
|
|
335
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
336
|
+
}
|
|
263
337
|
}
|
|
264
338
|
|
|
265
339
|
// Listen for the slotchange event if the child is a slot itself
|
|
266
|
-
if (
|
|
340
|
+
if (child instanceof HTMLSlotElement) {
|
|
267
341
|
this._attachSlotChange(child, slotName);
|
|
268
342
|
}
|
|
269
343
|
|
|
270
344
|
const propertyName = slotData.propertyName || slotName;
|
|
271
345
|
|
|
272
346
|
if (slottedChildrenMap.has(propertyName)) {
|
|
273
|
-
slottedChildrenMap.get(propertyName)
|
|
347
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
274
348
|
} else {
|
|
275
349
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
276
350
|
}
|
|
@@ -288,10 +362,10 @@ class UI5Element extends HTMLElement {
|
|
|
288
362
|
let invalidated = false;
|
|
289
363
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
290
364
|
const propertyName = slotData.propertyName || slotName;
|
|
291
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
365
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
292
366
|
_invalidate.call(this, {
|
|
293
367
|
type: "slot",
|
|
294
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
368
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
295
369
|
reason: "children",
|
|
296
370
|
});
|
|
297
371
|
invalidated = true;
|
|
@@ -313,16 +387,20 @@ class UI5Element extends HTMLElement {
|
|
|
313
387
|
* Removes all children from the slot and detaches listeners, if any
|
|
314
388
|
* @private
|
|
315
389
|
*/
|
|
316
|
-
_clearSlot(slotName, slotData) {
|
|
390
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
317
391
|
const propertyName = slotData.propertyName || slotName;
|
|
318
|
-
const children = this._state[propertyName]
|
|
392
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
319
393
|
|
|
320
394
|
children.forEach(child => {
|
|
321
|
-
if (child
|
|
322
|
-
|
|
395
|
+
if (instanceOfUI5Element(child)) {
|
|
396
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
397
|
+
|
|
398
|
+
if (childChangeListener) {
|
|
399
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
400
|
+
}
|
|
323
401
|
}
|
|
324
402
|
|
|
325
|
-
if (
|
|
403
|
+
if (child instanceof HTMLSlotElement) {
|
|
326
404
|
this._detachSlotChange(child, slotName);
|
|
327
405
|
}
|
|
328
406
|
});
|
|
@@ -333,32 +411,32 @@ class UI5Element extends HTMLElement {
|
|
|
333
411
|
/**
|
|
334
412
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
335
413
|
*
|
|
336
|
-
* @param callback
|
|
337
|
-
* @
|
|
414
|
+
* @param {InvalidationInfo} callback
|
|
415
|
+
* @public
|
|
338
416
|
*/
|
|
339
|
-
|
|
340
|
-
this._eventProvider.attachEvent("
|
|
417
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
418
|
+
this._eventProvider.attachEvent("invalidate", callback);
|
|
341
419
|
}
|
|
342
420
|
|
|
343
421
|
/**
|
|
344
422
|
* Detach the callback that is executed whenever the component is invalidated
|
|
345
423
|
*
|
|
346
|
-
* @param callback
|
|
347
|
-
* @
|
|
424
|
+
* @param {InvalidationInfo} callback
|
|
425
|
+
* @public
|
|
348
426
|
*/
|
|
349
|
-
|
|
350
|
-
this._eventProvider.detachEvent("
|
|
427
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
428
|
+
this._eventProvider.detachEvent("invalidate", callback);
|
|
351
429
|
}
|
|
352
430
|
|
|
353
431
|
/**
|
|
354
432
|
* Callback that is executed whenever a monitored child changes its state
|
|
355
433
|
*
|
|
356
|
-
* @param slotName the slot in which a child was invalidated
|
|
357
|
-
* @param childChangeInfo the changeInfo object for the child in the given slot
|
|
434
|
+
* @param {sting} slotName the slot in which a child was invalidated
|
|
435
|
+
* @param { ChangeInfo } childChangeInfo the changeInfo object for the child in the given slot
|
|
358
436
|
* @private
|
|
359
437
|
*/
|
|
360
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
361
|
-
if (!this.constructor.getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
|
|
438
|
+
_onChildChange(slotName: string, childChangeInfo: ChangeInfo) {
|
|
439
|
+
if (!(this.constructor as typeof UI5Element).getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
|
|
362
440
|
return;
|
|
363
441
|
}
|
|
364
442
|
|
|
@@ -376,58 +454,86 @@ class UI5Element extends HTMLElement {
|
|
|
376
454
|
* Do not override this method in derivatives of UI5Element
|
|
377
455
|
* @private
|
|
378
456
|
*/
|
|
379
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
380
|
-
|
|
457
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
458
|
+
let newPropertyValue: PropertyValue;
|
|
459
|
+
if (this._doNotSyncAttributes.has(name)) { // This attribute is mutated internally, not by the user
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const properties = (this.constructor as typeof UI5Element).getMetadata().getProperties();
|
|
381
464
|
const realName = name.replace(/^ui5-/, "");
|
|
382
465
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
383
466
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
if (
|
|
389
|
-
|
|
467
|
+
const propData = properties[nameInCamelCase];
|
|
468
|
+
const propertyType = propData.type;
|
|
469
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
470
|
+
|
|
471
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
472
|
+
propertyValidator = propertyType as typeof DataType;
|
|
390
473
|
}
|
|
391
|
-
|
|
392
|
-
|
|
474
|
+
|
|
475
|
+
if (propertyValidator) {
|
|
476
|
+
newPropertyValue = propertyValidator.attributeToProperty(newValue);
|
|
477
|
+
} else if (propertyType === Boolean) {
|
|
478
|
+
newPropertyValue = newValue !== null;
|
|
479
|
+
} else {
|
|
480
|
+
newPropertyValue = newValue as string;
|
|
393
481
|
}
|
|
394
|
-
|
|
482
|
+
|
|
483
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
395
484
|
}
|
|
396
485
|
}
|
|
397
486
|
|
|
398
487
|
/**
|
|
399
488
|
* @private
|
|
400
489
|
*/
|
|
401
|
-
_updateAttribute(name, newValue) {
|
|
402
|
-
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
490
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
491
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
405
492
|
|
|
406
|
-
if (
|
|
493
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
407
494
|
return;
|
|
408
495
|
}
|
|
409
|
-
|
|
496
|
+
const properties = ctor.getMetadata().getProperties();
|
|
497
|
+
const propData = properties[name];
|
|
498
|
+
const propertyType = propData.type;
|
|
499
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
410
500
|
const attrName = camelToKebabCase(name);
|
|
411
501
|
const attrValue = this.getAttribute(attrName);
|
|
412
|
-
|
|
502
|
+
|
|
503
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
504
|
+
propertyValidator = propertyType as typeof DataType;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
if (propertyValidator) {
|
|
508
|
+
const newAttrValue = propertyValidator.propertyToAttribute(newValue);
|
|
509
|
+
if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
|
|
510
|
+
this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
|
|
511
|
+
this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
|
|
512
|
+
this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
|
|
513
|
+
} else {
|
|
514
|
+
this.setAttribute(attrName, newAttrValue);
|
|
515
|
+
}
|
|
516
|
+
} else if (propertyType === Boolean) {
|
|
413
517
|
if (newValue === true && attrValue === null) {
|
|
414
518
|
this.setAttribute(attrName, "");
|
|
415
519
|
} else if (newValue === false && attrValue !== null) {
|
|
416
520
|
this.removeAttribute(attrName);
|
|
417
521
|
}
|
|
418
|
-
} else if (
|
|
419
|
-
|
|
420
|
-
|
|
522
|
+
} else if (typeof newValue !== "object") {
|
|
523
|
+
if (attrValue !== newValue) {
|
|
524
|
+
this.setAttribute(attrName, newValue as string);
|
|
525
|
+
}
|
|
526
|
+
} // else { return; } // old object handling
|
|
421
527
|
}
|
|
422
528
|
|
|
423
529
|
/**
|
|
424
530
|
* @private
|
|
425
531
|
*/
|
|
426
|
-
_upgradeProperty(
|
|
427
|
-
if (this.hasOwnProperty(
|
|
428
|
-
const value = this[
|
|
429
|
-
delete this[
|
|
430
|
-
this[
|
|
532
|
+
_upgradeProperty(this: Record<string, any>, propertyName: string) {
|
|
533
|
+
if (this.hasOwnProperty(propertyName)) { // eslint-disable-line
|
|
534
|
+
const value = this[propertyName];
|
|
535
|
+
delete this[propertyName];
|
|
536
|
+
this[propertyName] = value;
|
|
431
537
|
}
|
|
432
538
|
}
|
|
433
539
|
|
|
@@ -435,25 +541,18 @@ class UI5Element extends HTMLElement {
|
|
|
435
541
|
* @private
|
|
436
542
|
*/
|
|
437
543
|
_upgradeAllProperties() {
|
|
438
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
439
|
-
allProps.forEach(this._upgradeProperty
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* @private
|
|
444
|
-
*/
|
|
445
|
-
_initializeState() {
|
|
446
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
544
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
545
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
447
546
|
}
|
|
448
547
|
|
|
449
548
|
/**
|
|
450
549
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
451
550
|
*
|
|
452
551
|
* @param slotName the name of the slot, where the child is
|
|
453
|
-
* @returns {
|
|
552
|
+
* @returns {ChildChangeListener}
|
|
454
553
|
* @private
|
|
455
554
|
*/
|
|
456
|
-
_getChildChangeListener(slotName) {
|
|
555
|
+
_getChildChangeListener(slotName: string) {
|
|
457
556
|
if (!this._childChangeListeners.has(slotName)) {
|
|
458
557
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
459
558
|
}
|
|
@@ -464,27 +563,30 @@ class UI5Element extends HTMLElement {
|
|
|
464
563
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
465
564
|
*
|
|
466
565
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
467
|
-
* @returns {
|
|
566
|
+
* @returns {SlotChangeListener}
|
|
468
567
|
* @private
|
|
469
568
|
*/
|
|
470
|
-
_getSlotChangeListener(slotName) {
|
|
569
|
+
_getSlotChangeListener(slotName: string) {
|
|
471
570
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
472
571
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
473
572
|
}
|
|
474
|
-
return this._slotChangeListeners.get(slotName)
|
|
573
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
475
574
|
}
|
|
476
575
|
|
|
477
576
|
/**
|
|
478
577
|
* @private
|
|
479
578
|
*/
|
|
480
|
-
_attachSlotChange(child, slotName) {
|
|
481
|
-
|
|
579
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
580
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
581
|
+
if (slotChangeListener) {
|
|
582
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
583
|
+
}
|
|
482
584
|
}
|
|
483
585
|
|
|
484
586
|
/**
|
|
485
587
|
* @private
|
|
486
588
|
*/
|
|
487
|
-
_detachSlotChange(child, slotName) {
|
|
589
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
488
590
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
489
591
|
}
|
|
490
592
|
|
|
@@ -494,7 +596,7 @@ class UI5Element extends HTMLElement {
|
|
|
494
596
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
495
597
|
* @private
|
|
496
598
|
*/
|
|
497
|
-
_onSlotChange(slotName) {
|
|
599
|
+
_onSlotChange(slotName: string) {
|
|
498
600
|
_invalidate.call(this, {
|
|
499
601
|
type: "slot",
|
|
500
602
|
name: slotName,
|
|
@@ -529,21 +631,20 @@ class UI5Element extends HTMLElement {
|
|
|
529
631
|
*
|
|
530
632
|
* @public
|
|
531
633
|
*/
|
|
532
|
-
onInvalidation(changeInfo) {}
|
|
634
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
533
635
|
|
|
534
636
|
/**
|
|
535
637
|
* Do not call this method directly, only intended to be called by js
|
|
536
638
|
* @protected
|
|
537
639
|
*/
|
|
538
640
|
_render() {
|
|
539
|
-
const
|
|
641
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
642
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
540
643
|
|
|
541
644
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
542
645
|
this._suppressInvalidation = true;
|
|
543
646
|
|
|
544
|
-
|
|
545
|
-
this.onBeforeRendering();
|
|
546
|
-
}
|
|
647
|
+
this.onBeforeRendering();
|
|
547
648
|
|
|
548
649
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
549
650
|
if (this._onComponentStateFinalized) {
|
|
@@ -577,7 +678,7 @@ class UI5Element extends HTMLElement {
|
|
|
577
678
|
this._changedState = [];
|
|
578
679
|
|
|
579
680
|
// Update shadow root and static area item
|
|
580
|
-
if (
|
|
681
|
+
if (ctor._needsShadowDOM()) {
|
|
581
682
|
updateShadowRoot(this);
|
|
582
683
|
}
|
|
583
684
|
if (this.staticAreaItem) {
|
|
@@ -590,9 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
590
691
|
}
|
|
591
692
|
|
|
592
693
|
// Call the onAfterRendering hook
|
|
593
|
-
|
|
594
|
-
this.onAfterRendering();
|
|
595
|
-
}
|
|
694
|
+
this.onAfterRendering();
|
|
596
695
|
}
|
|
597
696
|
|
|
598
697
|
/**
|
|
@@ -601,7 +700,7 @@ class UI5Element extends HTMLElement {
|
|
|
601
700
|
_assignIndividualSlotsToChildren() {
|
|
602
701
|
const domChildren = Array.from(this.children);
|
|
603
702
|
|
|
604
|
-
domChildren.forEach(child => {
|
|
703
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
605
704
|
if (child._individualSlot) {
|
|
606
705
|
child.setAttribute("slot", child._individualSlot);
|
|
607
706
|
}
|
|
@@ -617,25 +716,27 @@ class UI5Element extends HTMLElement {
|
|
|
617
716
|
|
|
618
717
|
/**
|
|
619
718
|
* Returns the DOM Element inside the Shadow Root that corresponds to the opening tag in the UI5 Web Component's template
|
|
719
|
+
* *Note:* For logical (abstract) elements (items, options, etc...), returns the part of the parent's DOM that represents this option
|
|
620
720
|
* Use this method instead of "this.shadowRoot" to read the Shadow DOM, if ever necessary
|
|
721
|
+
*
|
|
621
722
|
* @public
|
|
622
723
|
*/
|
|
623
724
|
getDomRef() {
|
|
725
|
+
// If a component set _getRealDomRef to its children, use the return value of this function
|
|
726
|
+
if (typeof this._getRealDomRef === "function") {
|
|
727
|
+
return this._getRealDomRef();
|
|
728
|
+
}
|
|
729
|
+
|
|
624
730
|
if (!this.shadowRoot || this.shadowRoot.children.length === 0) {
|
|
625
731
|
return;
|
|
626
732
|
}
|
|
627
733
|
|
|
628
|
-
this.
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
? this.shadowRoot.children[0] : this.shadowRoot.children[1];
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
_assertShadowRootStructure() {
|
|
635
|
-
const expectedChildrenCount = document.adoptedStyleSheets || isLegacyBrowser() ? 1 : 2;
|
|
636
|
-
if (this.shadowRoot.children.length !== expectedChildrenCount) {
|
|
637
|
-
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
|
|
734
|
+
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
735
|
+
if (children.length !== 1) {
|
|
736
|
+
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
|
|
638
737
|
}
|
|
738
|
+
|
|
739
|
+
return children[0] as HTMLElement;
|
|
639
740
|
}
|
|
640
741
|
|
|
641
742
|
/**
|
|
@@ -646,7 +747,7 @@ class UI5Element extends HTMLElement {
|
|
|
646
747
|
getFocusDomRef() {
|
|
647
748
|
const domRef = this.getDomRef();
|
|
648
749
|
if (domRef) {
|
|
649
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
750
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
650
751
|
return focusRef || domRef;
|
|
651
752
|
}
|
|
652
753
|
}
|
|
@@ -661,17 +762,6 @@ class UI5Element extends HTMLElement {
|
|
|
661
762
|
return this.getFocusDomRef();
|
|
662
763
|
}
|
|
663
764
|
|
|
664
|
-
/**
|
|
665
|
-
* Use this method in order to get a reference to an element in the shadow root of the web component or the static area item of the component
|
|
666
|
-
* @public
|
|
667
|
-
* @method
|
|
668
|
-
* @param {String} refName Defines the name of the stable DOM ref
|
|
669
|
-
*/
|
|
670
|
-
getStableDomRef(refName) {
|
|
671
|
-
const staticAreaResult = this.staticAreaItem && this.staticAreaItem.getStableDomRef(refName);
|
|
672
|
-
return staticAreaResult || this.getDomRef().querySelector(`[data-ui5-stable=${refName}]`);
|
|
673
|
-
}
|
|
674
|
-
|
|
675
765
|
/**
|
|
676
766
|
* Set the focus to the element, returned by "getFocusDomRef()" (marked by "data-sap-focus-ref")
|
|
677
767
|
* @public
|
|
@@ -695,7 +785,7 @@ class UI5Element extends HTMLElement {
|
|
|
695
785
|
* @param bubbles - true, if the event bubbles
|
|
696
786
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
697
787
|
*/
|
|
698
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
788
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
699
789
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
700
790
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
701
791
|
|
|
@@ -706,8 +796,8 @@ class UI5Element extends HTMLElement {
|
|
|
706
796
|
return eventResult;
|
|
707
797
|
}
|
|
708
798
|
|
|
709
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
710
|
-
const noConflictEvent = new CustomEvent(`ui5-${name}`, {
|
|
799
|
+
_fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
800
|
+
const noConflictEvent = new CustomEvent<T>(`ui5-${name}`, {
|
|
711
801
|
detail: data,
|
|
712
802
|
composed: false,
|
|
713
803
|
bubbles,
|
|
@@ -721,7 +811,7 @@ class UI5Element extends HTMLElement {
|
|
|
721
811
|
return noConflictEventResult;
|
|
722
812
|
}
|
|
723
813
|
|
|
724
|
-
const normalEvent = new CustomEvent(name, {
|
|
814
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
725
815
|
detail: data,
|
|
726
816
|
composed: false,
|
|
727
817
|
bubbles,
|
|
@@ -740,8 +830,8 @@ class UI5Element extends HTMLElement {
|
|
|
740
830
|
* Useful when there are transitive slots in nested component scenarios and you don't want to get a list of the slots, but rather of their content.
|
|
741
831
|
* @public
|
|
742
832
|
*/
|
|
743
|
-
getSlottedNodes(slotName) {
|
|
744
|
-
return
|
|
833
|
+
getSlottedNodes(slotName: string) {
|
|
834
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]);
|
|
745
835
|
}
|
|
746
836
|
|
|
747
837
|
/**
|
|
@@ -752,7 +842,7 @@ class UI5Element extends HTMLElement {
|
|
|
752
842
|
* @returns {String|undefined}
|
|
753
843
|
*/
|
|
754
844
|
get effectiveDir() {
|
|
755
|
-
markAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
845
|
+
markAsRtlAware(this.constructor as typeof UI5Element); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
756
846
|
return getEffectiveDir(this);
|
|
757
847
|
}
|
|
758
848
|
|
|
@@ -765,6 +855,10 @@ class UI5Element extends HTMLElement {
|
|
|
765
855
|
return true;
|
|
766
856
|
}
|
|
767
857
|
|
|
858
|
+
get classes(): ClassMap {
|
|
859
|
+
return {};
|
|
860
|
+
}
|
|
861
|
+
|
|
768
862
|
/**
|
|
769
863
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
770
864
|
* @private
|
|
@@ -791,7 +885,7 @@ class UI5Element extends HTMLElement {
|
|
|
791
885
|
* @public
|
|
792
886
|
*/
|
|
793
887
|
getStaticAreaItemDomRef() {
|
|
794
|
-
if (!this.constructor._needsStaticArea()) {
|
|
888
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
795
889
|
throw new Error("This component does not use the static area");
|
|
796
890
|
}
|
|
797
891
|
|
|
@@ -837,7 +931,7 @@ class UI5Element extends HTMLElement {
|
|
|
837
931
|
}
|
|
838
932
|
|
|
839
933
|
Object.defineProperty(proto, prop, {
|
|
840
|
-
get() {
|
|
934
|
+
get(this: UI5Element) {
|
|
841
935
|
if (this._state[prop] !== undefined) {
|
|
842
936
|
return this._state[prop];
|
|
843
937
|
}
|
|
@@ -854,12 +948,24 @@ class UI5Element extends HTMLElement {
|
|
|
854
948
|
return propDefaultValue;
|
|
855
949
|
}
|
|
856
950
|
},
|
|
857
|
-
|
|
951
|
+
|
|
952
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
858
953
|
let isDifferent;
|
|
859
|
-
|
|
954
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
955
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
860
956
|
|
|
957
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
958
|
+
const propertyType = propData.type;
|
|
959
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
861
960
|
const oldState = this._state[prop];
|
|
862
|
-
|
|
961
|
+
|
|
962
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
963
|
+
propertyValidator = propertyType as typeof DataType;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
if (propertyValidator) {
|
|
967
|
+
isDifferent = !propertyValidator.valuesAreEqual(oldState, value);
|
|
968
|
+
} else if (Array.isArray(oldState) && Array.isArray(value) && propData.multiple && propData.compareValues) { // compareValues is added for IE, test if needed now
|
|
863
969
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
864
970
|
} else {
|
|
865
971
|
isDifferent = oldState !== value;
|
|
@@ -889,7 +995,7 @@ class UI5Element extends HTMLElement {
|
|
|
889
995
|
|
|
890
996
|
const propertyName = slotData.propertyName || slotName;
|
|
891
997
|
Object.defineProperty(proto, propertyName, {
|
|
892
|
-
get() {
|
|
998
|
+
get(this: UI5Element) {
|
|
893
999
|
if (this._state[propertyName] !== undefined) {
|
|
894
1000
|
return this._state[propertyName];
|
|
895
1001
|
}
|
|
@@ -908,14 +1014,22 @@ class UI5Element extends HTMLElement {
|
|
|
908
1014
|
* @protected
|
|
909
1015
|
*/
|
|
910
1016
|
static get metadata() {
|
|
911
|
-
return
|
|
1017
|
+
return metadata;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/**
|
|
1021
|
+
* Sets a new metadata object for this UI5 Web Component Class
|
|
1022
|
+
* @protected
|
|
1023
|
+
*/
|
|
1024
|
+
static set metadata(newMetadata) {
|
|
1025
|
+
metadata = newMetadata;
|
|
912
1026
|
}
|
|
913
1027
|
|
|
914
1028
|
/**
|
|
915
1029
|
* Returns the CSS for this UI5 Web Component Class
|
|
916
1030
|
* @protected
|
|
917
1031
|
*/
|
|
918
|
-
static get styles() {
|
|
1032
|
+
static get styles(): ComponentStylesData {
|
|
919
1033
|
return "";
|
|
920
1034
|
}
|
|
921
1035
|
|
|
@@ -923,7 +1037,7 @@ class UI5Element extends HTMLElement {
|
|
|
923
1037
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
924
1038
|
* @protected
|
|
925
1039
|
*/
|
|
926
|
-
static get staticAreaStyles() {
|
|
1040
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
927
1041
|
return "";
|
|
928
1042
|
}
|
|
929
1043
|
|
|
@@ -934,7 +1048,7 @@ class UI5Element extends HTMLElement {
|
|
|
934
1048
|
*
|
|
935
1049
|
* @protected
|
|
936
1050
|
*/
|
|
937
|
-
static get dependencies() {
|
|
1051
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
938
1052
|
return [];
|
|
939
1053
|
}
|
|
940
1054
|
|
|
@@ -943,21 +1057,21 @@ class UI5Element extends HTMLElement {
|
|
|
943
1057
|
*
|
|
944
1058
|
* @public
|
|
945
1059
|
*/
|
|
946
|
-
static getUniqueDependencies() {
|
|
1060
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
947
1061
|
if (!uniqueDependenciesCache.has(this)) {
|
|
948
1062
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
949
1063
|
uniqueDependenciesCache.set(this, filtered);
|
|
950
1064
|
}
|
|
951
1065
|
|
|
952
|
-
return uniqueDependenciesCache.get(this);
|
|
1066
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
953
1067
|
}
|
|
954
1068
|
|
|
955
1069
|
/**
|
|
956
1070
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
957
1071
|
*
|
|
958
|
-
* @returns {Promise
|
|
1072
|
+
* @returns {Promise}
|
|
959
1073
|
*/
|
|
960
|
-
static whenDependenciesDefined() {
|
|
1074
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
961
1075
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
962
1076
|
}
|
|
963
1077
|
|
|
@@ -985,7 +1099,6 @@ class UI5Element extends HTMLElement {
|
|
|
985
1099
|
]);
|
|
986
1100
|
|
|
987
1101
|
const tag = this.getMetadata().getTag();
|
|
988
|
-
const altTag = this.getMetadata().getAltTag();
|
|
989
1102
|
|
|
990
1103
|
const definedLocally = isTagRegistered(tag);
|
|
991
1104
|
const definedGlobally = customElements.get(tag);
|
|
@@ -995,14 +1108,8 @@ class UI5Element extends HTMLElement {
|
|
|
995
1108
|
} else if (!definedGlobally) {
|
|
996
1109
|
this._generateAccessors();
|
|
997
1110
|
registerTag(tag);
|
|
998
|
-
window.customElements.define(tag, this);
|
|
999
|
-
|
|
1000
|
-
if (altTag && !customElements.get(altTag)) {
|
|
1001
|
-
registerTag(altTag);
|
|
1002
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
1003
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
1004
|
-
}));
|
|
1005
|
-
}
|
|
1111
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
1112
|
+
preloadLinks(this);
|
|
1006
1113
|
}
|
|
1007
1114
|
return this;
|
|
1008
1115
|
}
|
|
@@ -1018,17 +1125,31 @@ class UI5Element extends HTMLElement {
|
|
|
1018
1125
|
return this._metadata;
|
|
1019
1126
|
}
|
|
1020
1127
|
|
|
1021
|
-
const
|
|
1128
|
+
const effectiveMetadata = Object.keys(this.metadata).length ? this.metadata : this.decoratorMetadata;
|
|
1129
|
+
const metadataObjects = [effectiveMetadata];
|
|
1022
1130
|
let klass = this; // eslint-disable-line
|
|
1023
1131
|
while (klass !== UI5Element) {
|
|
1024
1132
|
klass = Object.getPrototypeOf(klass);
|
|
1025
|
-
|
|
1133
|
+
const effectiveKlassMetadata = Object.keys(klass.metadata).length ? klass.metadata : klass.decoratorMetadata;
|
|
1134
|
+
metadataObjects.unshift(effectiveKlassMetadata);
|
|
1026
1135
|
}
|
|
1027
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1136
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1028
1137
|
|
|
1029
1138
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1030
1139
|
return this._metadata;
|
|
1031
1140
|
}
|
|
1141
|
+
|
|
1142
|
+
static decoratorMetadata: Metadata = {};
|
|
1032
1143
|
}
|
|
1033
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
|
+
|
|
1034
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type { ChangeInfo };
|