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