@ui5/webcomponents-base 0.0.0-2c7615fe9 → 0.0.0-2f7664755
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 -2
- package/CHANGELOG.md +392 -0
- package/README.md +53 -7
- package/bundle.esm.js +15 -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 +62 -73
- package/dist/Device.js.map +1 -0
- package/dist/EventProvider.d.ts +25 -0
- package/dist/EventProvider.js +67 -79
- 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 -244
- 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 +85 -93
- 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 +931 -989
- 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 -111
- 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.8fc86dc4.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 -312
- 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 +49 -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.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 +12 -16
- 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 -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 +32 -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 -26
- package/dist/types/DataType.js.map +1 -0
- package/dist/types/Float.d.ts +18 -0
- package/dist/types/Float.js +18 -10
- package/dist/types/Float.js.map +1 -0
- package/dist/types/Integer.d.ts +18 -0
- package/dist/types/Integer.js +18 -9
- package/dist/types/Integer.js.map +1 -0
- package/dist/types/InvisibleMessageMode.d.ts +25 -0
- package/dist/types/InvisibleMessageMode.js +20 -23
- package/dist/types/InvisibleMessageMode.js.map +1 -0
- package/dist/types/ItemNavigationBehavior.d.ts +24 -0
- package/dist/types/ItemNavigationBehavior.js +22 -12
- package/dist/types/ItemNavigationBehavior.js.map +1 -0
- package/dist/types/NavigationMode.d.ts +32 -0
- package/dist/types/NavigationMode.js +33 -6
- package/dist/types/NavigationMode.js.map +1 -0
- package/dist/types/ValueState.d.ts +42 -0
- package/dist/types/ValueState.js +41 -19
- package/dist/types/ValueState.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/updateShadowRoot.d.ts +8 -0
- package/dist/updateShadowRoot.js +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 -72
- package/dist/util/FocusableElements.js.map +1 -0
- package/dist/util/HTMLSanitizer.d.ts +3 -0
- package/dist/util/HTMLSanitizer.js +4 -5
- package/dist/util/HTMLSanitizer.js.map +1 -0
- package/dist/util/InvisibleMessage.d.ts +10 -0
- package/dist/util/InvisibleMessage.js +42 -44
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +58 -77
- package/dist/util/PopupUtils.js.map +1 -0
- package/dist/util/SlotsHelper.d.ts +9 -0
- package/dist/util/SlotsHelper.js +22 -35
- package/dist/util/SlotsHelper.js.map +1 -0
- package/dist/util/StringHelper.d.ts +3 -0
- package/dist/util/StringHelper.js +17 -20
- package/dist/util/StringHelper.js.map +1 -0
- package/dist/util/TabbableElements.d.ts +17 -0
- package/dist/util/TabbableElements.js +53 -43
- package/dist/util/TabbableElements.js.map +1 -0
- package/dist/util/arraysAreEqual.d.ts +2 -0
- package/dist/util/arraysAreEqual.js +10 -12
- package/dist/util/arraysAreEqual.js.map +1 -0
- package/dist/util/clamp.d.ts +9 -0
- package/dist/util/clamp.js +2 -2
- package/dist/util/clamp.js.map +1 -0
- package/dist/util/createLinkInHead.d.ts +7 -0
- package/dist/util/createLinkInHead.js +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/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 +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} +33 -11
- package/src/{EventProvider.js → EventProvider.ts} +14 -9
- 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} +33 -27
- package/src/SystemCSSVars.ts +10 -0
- package/src/{Theming.js → Theming.ts} +0 -0
- package/src/{UI5Element.js → UI5Element.ts} +298 -168
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +137 -59
- package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
- package/src/animations/animate.ts +64 -0
- package/src/animations/scroll.ts +21 -0
- package/src/animations/{slideDown.js → slideDown.ts} +27 -34
- package/src/animations/{slideUp.js → slideUp.ts} +28 -32
- package/src/asset-registries/Icons.ts +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} +65 -23
- package/src/delegate/{ResizeHandler.js → ResizeHandler.ts} +25 -36
- package/src/delegate/ScrollEnablement.ts +224 -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/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} +3 -3
- 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 +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 +92 -0
- package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
- package/src/util/{InvisibleMessage.js → InvisibleMessage.ts} +25 -14
- package/src/util/PopupUtils.ts +112 -0
- package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/{clamp.js → clamp.ts} +1 -1
- package/src/util/createLinkInHead.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 -77
- package/dist/test-resources/pages/AllTestElements.html +0 -42
- package/dist/test-resources/pages/Configuration.html +0 -18
- package/dist/test-resources/pages/ConfigurationScript.html +0 -34
- package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
- package/dist/test-resources/pages/i18n.html +0 -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 -78
- package/dist/test-resources/specs/Theming.spec.js +0 -33
- package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
- package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
- package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
- package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
- package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
- package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
- package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
- package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
- package/dist/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/FeaturesRegistry.js +0 -11
- package/src/FontFace.js +0 -118
- package/src/Keys.js +0 -248
- 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 -128
- 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 -32
- 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 -37
- package/src/types/Float.js +0 -14
- package/src/types/Integer.js +0 -13
- package/src/types/InvisibleMessageMode.js +0 -30
- package/src/types/ItemNavigationBehavior.js +0 -16
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -37
- package/src/types/ValueState.js +0 -22
- package/src/updateShadowRoot.js +0 -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/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";
|
|
@@ -13,25 +19,40 @@ import getEffectiveDir from "./locale/getEffectiveDir.js";
|
|
|
13
19
|
import DataType from "./types/DataType.js";
|
|
14
20
|
import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
|
|
15
21
|
import isValidPropertyName from "./util/isValidPropertyName.js";
|
|
16
|
-
import
|
|
17
|
-
import { isSlot, getSlotName, getSlottedElementsList } from "./util/SlotsHelper.js";
|
|
22
|
+
import { getSlotName, getSlottedNodesList } from "./util/SlotsHelper.js";
|
|
18
23
|
import arraysAreEqual from "./util/arraysAreEqual.js";
|
|
19
|
-
import getClassCopy from "./util/getClassCopy.js";
|
|
20
24
|
import { markAsRtlAware } from "./locale/RTLAwareRegistry.js";
|
|
21
|
-
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) {
|
|
@@ -46,20 +67,44 @@ function _invalidate(changeInfo) {
|
|
|
46
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,9 +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;
|
|
104
151
|
|
|
105
|
-
|
|
152
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
153
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
154
|
+
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
106
158
|
|
|
107
159
|
this._inDOM = true;
|
|
108
160
|
|
|
@@ -117,11 +169,9 @@ class UI5Element extends HTMLElement {
|
|
|
117
169
|
}
|
|
118
170
|
|
|
119
171
|
renderImmediately(this);
|
|
120
|
-
this._domRefReadyPromise._deferredResolve();
|
|
172
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
121
173
|
this._fullyConnected = true;
|
|
122
|
-
|
|
123
|
-
this.onEnterDOM();
|
|
124
|
-
}
|
|
174
|
+
this.onEnterDOM();
|
|
125
175
|
}
|
|
126
176
|
|
|
127
177
|
/**
|
|
@@ -129,7 +179,8 @@ class UI5Element extends HTMLElement {
|
|
|
129
179
|
* @private
|
|
130
180
|
*/
|
|
131
181
|
disconnectedCallback() {
|
|
132
|
-
const
|
|
182
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
183
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
133
184
|
|
|
134
185
|
this._inDOM = false;
|
|
135
186
|
|
|
@@ -138,9 +189,7 @@ class UI5Element extends HTMLElement {
|
|
|
138
189
|
}
|
|
139
190
|
|
|
140
191
|
if (this._fullyConnected) {
|
|
141
|
-
|
|
142
|
-
this.onExitDOM();
|
|
143
|
-
}
|
|
192
|
+
this.onExitDOM();
|
|
144
193
|
this._fullyConnected = false;
|
|
145
194
|
}
|
|
146
195
|
|
|
@@ -151,22 +200,47 @@ class UI5Element extends HTMLElement {
|
|
|
151
200
|
cancelRender(this);
|
|
152
201
|
}
|
|
153
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
|
+
|
|
154
227
|
/**
|
|
155
228
|
* @private
|
|
156
229
|
*/
|
|
157
230
|
_startObservingDOMChildren() {
|
|
158
|
-
const
|
|
231
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
232
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
159
233
|
if (!shouldObserveChildren) {
|
|
160
234
|
return;
|
|
161
235
|
}
|
|
162
236
|
|
|
163
|
-
const canSlotText =
|
|
237
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
164
238
|
const mutationObserverOptions = {
|
|
165
239
|
childList: true,
|
|
166
240
|
subtree: canSlotText,
|
|
167
241
|
characterData: canSlotText,
|
|
168
242
|
};
|
|
169
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
243
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
170
244
|
}
|
|
171
245
|
|
|
172
246
|
/**
|
|
@@ -181,7 +255,7 @@ class UI5Element extends HTMLElement {
|
|
|
181
255
|
* @private
|
|
182
256
|
*/
|
|
183
257
|
async _processChildren() {
|
|
184
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
258
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
185
259
|
if (hasSlots) {
|
|
186
260
|
await this._updateSlots();
|
|
187
261
|
}
|
|
@@ -191,23 +265,24 @@ class UI5Element extends HTMLElement {
|
|
|
191
265
|
* @private
|
|
192
266
|
*/
|
|
193
267
|
async _updateSlots() {
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
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>;
|
|
197
272
|
|
|
198
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
199
|
-
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
|
|
200
275
|
|
|
201
276
|
// Init the _state object based on the supported slots and store the previous values
|
|
202
277
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
203
278
|
const propertyName = slotData.propertyName || slotName;
|
|
204
279
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
205
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
280
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
206
281
|
this._clearSlot(slotName, slotData);
|
|
207
282
|
}
|
|
208
283
|
|
|
209
|
-
const autoIncrementMap = new Map();
|
|
210
|
-
const slottedChildrenMap = new Map();
|
|
284
|
+
const autoIncrementMap = new Map<string, number>();
|
|
285
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
211
286
|
|
|
212
287
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
213
288
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -216,8 +291,11 @@ class UI5Element extends HTMLElement {
|
|
|
216
291
|
|
|
217
292
|
// Check if the slotName is supported
|
|
218
293
|
if (slotData === undefined) {
|
|
219
|
-
|
|
220
|
-
|
|
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
|
+
|
|
221
299
|
return;
|
|
222
300
|
}
|
|
223
301
|
|
|
@@ -225,7 +303,7 @@ class UI5Element extends HTMLElement {
|
|
|
225
303
|
if (slotData.individualSlots) {
|
|
226
304
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
227
305
|
autoIncrementMap.set(slotName, nextIndex);
|
|
228
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
306
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
229
307
|
}
|
|
230
308
|
|
|
231
309
|
// Await for not-yet-defined custom elements
|
|
@@ -247,22 +325,26 @@ class UI5Element extends HTMLElement {
|
|
|
247
325
|
}
|
|
248
326
|
}
|
|
249
327
|
|
|
250
|
-
child =
|
|
328
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
251
329
|
|
|
252
330
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
253
|
-
if (child
|
|
254
|
-
|
|
331
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
332
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
333
|
+
|
|
334
|
+
if (childChangeListener) {
|
|
335
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
336
|
+
}
|
|
255
337
|
}
|
|
256
338
|
|
|
257
339
|
// Listen for the slotchange event if the child is a slot itself
|
|
258
|
-
if (
|
|
340
|
+
if (child instanceof HTMLSlotElement) {
|
|
259
341
|
this._attachSlotChange(child, slotName);
|
|
260
342
|
}
|
|
261
343
|
|
|
262
344
|
const propertyName = slotData.propertyName || slotName;
|
|
263
345
|
|
|
264
346
|
if (slottedChildrenMap.has(propertyName)) {
|
|
265
|
-
slottedChildrenMap.get(propertyName)
|
|
347
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
266
348
|
} else {
|
|
267
349
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
268
350
|
}
|
|
@@ -280,10 +362,10 @@ class UI5Element extends HTMLElement {
|
|
|
280
362
|
let invalidated = false;
|
|
281
363
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
282
364
|
const propertyName = slotData.propertyName || slotName;
|
|
283
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
365
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
284
366
|
_invalidate.call(this, {
|
|
285
367
|
type: "slot",
|
|
286
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
368
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
287
369
|
reason: "children",
|
|
288
370
|
});
|
|
289
371
|
invalidated = true;
|
|
@@ -305,16 +387,20 @@ class UI5Element extends HTMLElement {
|
|
|
305
387
|
* Removes all children from the slot and detaches listeners, if any
|
|
306
388
|
* @private
|
|
307
389
|
*/
|
|
308
|
-
_clearSlot(slotName, slotData) {
|
|
390
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
309
391
|
const propertyName = slotData.propertyName || slotName;
|
|
310
|
-
const children = this._state[propertyName]
|
|
392
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
311
393
|
|
|
312
394
|
children.forEach(child => {
|
|
313
|
-
if (child
|
|
314
|
-
|
|
395
|
+
if (instanceOfUI5Element(child)) {
|
|
396
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
397
|
+
|
|
398
|
+
if (childChangeListener) {
|
|
399
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
400
|
+
}
|
|
315
401
|
}
|
|
316
402
|
|
|
317
|
-
if (
|
|
403
|
+
if (child instanceof HTMLSlotElement) {
|
|
318
404
|
this._detachSlotChange(child, slotName);
|
|
319
405
|
}
|
|
320
406
|
});
|
|
@@ -325,32 +411,32 @@ class UI5Element extends HTMLElement {
|
|
|
325
411
|
/**
|
|
326
412
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
327
413
|
*
|
|
328
|
-
* @param callback
|
|
414
|
+
* @param {InvalidationInfo} callback
|
|
329
415
|
* @public
|
|
330
416
|
*/
|
|
331
|
-
attachInvalidate(callback) {
|
|
417
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
332
418
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
333
419
|
}
|
|
334
420
|
|
|
335
421
|
/**
|
|
336
422
|
* Detach the callback that is executed whenever the component is invalidated
|
|
337
423
|
*
|
|
338
|
-
* @param callback
|
|
424
|
+
* @param {InvalidationInfo} callback
|
|
339
425
|
* @public
|
|
340
426
|
*/
|
|
341
|
-
detachInvalidate(callback) {
|
|
427
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
342
428
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
343
429
|
}
|
|
344
430
|
|
|
345
431
|
/**
|
|
346
432
|
* Callback that is executed whenever a monitored child changes its state
|
|
347
433
|
*
|
|
348
|
-
* @param slotName the slot in which a child was invalidated
|
|
349
|
-
* @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
|
|
350
436
|
* @private
|
|
351
437
|
*/
|
|
352
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
353
|
-
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)) {
|
|
354
440
|
return;
|
|
355
441
|
}
|
|
356
442
|
|
|
@@ -368,44 +454,74 @@ class UI5Element extends HTMLElement {
|
|
|
368
454
|
* Do not override this method in derivatives of UI5Element
|
|
369
455
|
* @private
|
|
370
456
|
*/
|
|
371
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
372
|
-
|
|
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();
|
|
373
464
|
const realName = name.replace(/^ui5-/, "");
|
|
374
465
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
375
466
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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;
|
|
381
473
|
}
|
|
382
|
-
|
|
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;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
383
484
|
}
|
|
384
485
|
}
|
|
385
486
|
|
|
386
487
|
/**
|
|
387
488
|
* @private
|
|
388
489
|
*/
|
|
389
|
-
_updateAttribute(name, newValue) {
|
|
390
|
-
|
|
490
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
491
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
492
|
+
|
|
493
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
391
494
|
return;
|
|
392
495
|
}
|
|
393
|
-
const properties =
|
|
394
|
-
const
|
|
496
|
+
const properties = ctor.getMetadata().getProperties();
|
|
497
|
+
const propData = properties[name];
|
|
498
|
+
const propertyType = propData.type;
|
|
499
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
395
500
|
const attrName = camelToKebabCase(name);
|
|
396
501
|
const attrValue = this.getAttribute(attrName);
|
|
397
502
|
|
|
398
|
-
if (
|
|
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) {
|
|
399
517
|
if (newValue === true && attrValue === null) {
|
|
400
518
|
this.setAttribute(attrName, "");
|
|
401
519
|
} else if (newValue === false && attrValue !== null) {
|
|
402
520
|
this.removeAttribute(attrName);
|
|
403
521
|
}
|
|
404
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
405
|
-
this.setAttribute(attrName, propertyTypeClass.propertyToAttribute(newValue));
|
|
406
522
|
} else if (typeof newValue !== "object") {
|
|
407
523
|
if (attrValue !== newValue) {
|
|
408
|
-
this.setAttribute(attrName, newValue);
|
|
524
|
+
this.setAttribute(attrName, newValue as string);
|
|
409
525
|
}
|
|
410
526
|
} // else { return; } // old object handling
|
|
411
527
|
}
|
|
@@ -413,11 +529,11 @@ class UI5Element extends HTMLElement {
|
|
|
413
529
|
/**
|
|
414
530
|
* @private
|
|
415
531
|
*/
|
|
416
|
-
_upgradeProperty(
|
|
417
|
-
if (this.hasOwnProperty(
|
|
418
|
-
const value = this[
|
|
419
|
-
delete this[
|
|
420
|
-
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;
|
|
421
537
|
}
|
|
422
538
|
}
|
|
423
539
|
|
|
@@ -425,25 +541,18 @@ class UI5Element extends HTMLElement {
|
|
|
425
541
|
* @private
|
|
426
542
|
*/
|
|
427
543
|
_upgradeAllProperties() {
|
|
428
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
429
|
-
allProps.forEach(this._upgradeProperty
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* @private
|
|
434
|
-
*/
|
|
435
|
-
_initializeState() {
|
|
436
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
544
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
545
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
437
546
|
}
|
|
438
547
|
|
|
439
548
|
/**
|
|
440
549
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
441
550
|
*
|
|
442
551
|
* @param slotName the name of the slot, where the child is
|
|
443
|
-
* @returns {
|
|
552
|
+
* @returns {ChildChangeListener}
|
|
444
553
|
* @private
|
|
445
554
|
*/
|
|
446
|
-
_getChildChangeListener(slotName) {
|
|
555
|
+
_getChildChangeListener(slotName: string) {
|
|
447
556
|
if (!this._childChangeListeners.has(slotName)) {
|
|
448
557
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
449
558
|
}
|
|
@@ -454,27 +563,30 @@ class UI5Element extends HTMLElement {
|
|
|
454
563
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
455
564
|
*
|
|
456
565
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
457
|
-
* @returns {
|
|
566
|
+
* @returns {SlotChangeListener}
|
|
458
567
|
* @private
|
|
459
568
|
*/
|
|
460
|
-
_getSlotChangeListener(slotName) {
|
|
569
|
+
_getSlotChangeListener(slotName: string) {
|
|
461
570
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
462
571
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
463
572
|
}
|
|
464
|
-
return this._slotChangeListeners.get(slotName)
|
|
573
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
465
574
|
}
|
|
466
575
|
|
|
467
576
|
/**
|
|
468
577
|
* @private
|
|
469
578
|
*/
|
|
470
|
-
_attachSlotChange(child, slotName) {
|
|
471
|
-
|
|
579
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
580
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
581
|
+
if (slotChangeListener) {
|
|
582
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
583
|
+
}
|
|
472
584
|
}
|
|
473
585
|
|
|
474
586
|
/**
|
|
475
587
|
* @private
|
|
476
588
|
*/
|
|
477
|
-
_detachSlotChange(child, slotName) {
|
|
589
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
478
590
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
479
591
|
}
|
|
480
592
|
|
|
@@ -484,7 +596,7 @@ class UI5Element extends HTMLElement {
|
|
|
484
596
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
485
597
|
* @private
|
|
486
598
|
*/
|
|
487
|
-
_onSlotChange(slotName) {
|
|
599
|
+
_onSlotChange(slotName: string) {
|
|
488
600
|
_invalidate.call(this, {
|
|
489
601
|
type: "slot",
|
|
490
602
|
name: slotName,
|
|
@@ -519,21 +631,20 @@ class UI5Element extends HTMLElement {
|
|
|
519
631
|
*
|
|
520
632
|
* @public
|
|
521
633
|
*/
|
|
522
|
-
onInvalidation(changeInfo) {}
|
|
634
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
523
635
|
|
|
524
636
|
/**
|
|
525
637
|
* Do not call this method directly, only intended to be called by js
|
|
526
638
|
* @protected
|
|
527
639
|
*/
|
|
528
640
|
_render() {
|
|
529
|
-
const
|
|
641
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
642
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
530
643
|
|
|
531
644
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
532
645
|
this._suppressInvalidation = true;
|
|
533
646
|
|
|
534
|
-
|
|
535
|
-
this.onBeforeRendering();
|
|
536
|
-
}
|
|
647
|
+
this.onBeforeRendering();
|
|
537
648
|
|
|
538
649
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
539
650
|
if (this._onComponentStateFinalized) {
|
|
@@ -557,7 +668,7 @@ class UI5Element extends HTMLElement {
|
|
|
557
668
|
}
|
|
558
669
|
res = `${res}: ${x.name}`;
|
|
559
670
|
if (x.type === "property") {
|
|
560
|
-
res = `${res} ${x.oldValue} => ${x.newValue}`;
|
|
671
|
+
res = `${res} ${JSON.stringify(x.oldValue)} => ${JSON.stringify(x.newValue)}`;
|
|
561
672
|
}
|
|
562
673
|
|
|
563
674
|
return res;
|
|
@@ -567,7 +678,7 @@ class UI5Element extends HTMLElement {
|
|
|
567
678
|
this._changedState = [];
|
|
568
679
|
|
|
569
680
|
// Update shadow root and static area item
|
|
570
|
-
if (
|
|
681
|
+
if (ctor._needsShadowDOM()) {
|
|
571
682
|
updateShadowRoot(this);
|
|
572
683
|
}
|
|
573
684
|
if (this.staticAreaItem) {
|
|
@@ -580,9 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
580
691
|
}
|
|
581
692
|
|
|
582
693
|
// Call the onAfterRendering hook
|
|
583
|
-
|
|
584
|
-
this.onAfterRendering();
|
|
585
|
-
}
|
|
694
|
+
this.onAfterRendering();
|
|
586
695
|
}
|
|
587
696
|
|
|
588
697
|
/**
|
|
@@ -591,7 +700,7 @@ class UI5Element extends HTMLElement {
|
|
|
591
700
|
_assignIndividualSlotsToChildren() {
|
|
592
701
|
const domChildren = Array.from(this.children);
|
|
593
702
|
|
|
594
|
-
domChildren.forEach(child => {
|
|
703
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
595
704
|
if (child._individualSlot) {
|
|
596
705
|
child.setAttribute("slot", child._individualSlot);
|
|
597
706
|
}
|
|
@@ -607,25 +716,27 @@ class UI5Element extends HTMLElement {
|
|
|
607
716
|
|
|
608
717
|
/**
|
|
609
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
|
|
610
720
|
* Use this method instead of "this.shadowRoot" to read the Shadow DOM, if ever necessary
|
|
721
|
+
*
|
|
611
722
|
* @public
|
|
612
723
|
*/
|
|
613
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
|
+
|
|
614
730
|
if (!this.shadowRoot || this.shadowRoot.children.length === 0) {
|
|
615
731
|
return;
|
|
616
732
|
}
|
|
617
733
|
|
|
618
|
-
this.
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
? this.shadowRoot.children[0] : this.shadowRoot.children[1];
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
_assertShadowRootStructure() {
|
|
625
|
-
const expectedChildrenCount = document.adoptedStyleSheets || isLegacyBrowser() ? 1 : 2;
|
|
626
|
-
if (this.shadowRoot.children.length !== expectedChildrenCount) {
|
|
627
|
-
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
|
|
628
737
|
}
|
|
738
|
+
|
|
739
|
+
return children[0] as HTMLElement;
|
|
629
740
|
}
|
|
630
741
|
|
|
631
742
|
/**
|
|
@@ -636,7 +747,7 @@ class UI5Element extends HTMLElement {
|
|
|
636
747
|
getFocusDomRef() {
|
|
637
748
|
const domRef = this.getDomRef();
|
|
638
749
|
if (domRef) {
|
|
639
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
750
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
640
751
|
return focusRef || domRef;
|
|
641
752
|
}
|
|
642
753
|
}
|
|
@@ -651,28 +762,18 @@ class UI5Element extends HTMLElement {
|
|
|
651
762
|
return this.getFocusDomRef();
|
|
652
763
|
}
|
|
653
764
|
|
|
654
|
-
/**
|
|
655
|
-
* 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
|
|
656
|
-
* @public
|
|
657
|
-
* @method
|
|
658
|
-
* @param {String} refName Defines the name of the stable DOM ref
|
|
659
|
-
*/
|
|
660
|
-
getStableDomRef(refName) {
|
|
661
|
-
const staticAreaResult = this.staticAreaItem && this.staticAreaItem.getStableDomRef(refName);
|
|
662
|
-
return staticAreaResult || this.getDomRef().querySelector(`[data-ui5-stable=${refName}]`);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
765
|
/**
|
|
666
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
|
|
667
768
|
* @public
|
|
668
769
|
*/
|
|
669
|
-
async focus() {
|
|
770
|
+
async focus(focusOptions?: FocusOptions) {
|
|
670
771
|
await this._waitForDomRef();
|
|
671
772
|
|
|
672
773
|
const focusDomRef = this.getFocusDomRef();
|
|
673
774
|
|
|
674
775
|
if (focusDomRef && typeof focusDomRef.focus === "function") {
|
|
675
|
-
focusDomRef.focus();
|
|
776
|
+
focusDomRef.focus(focusOptions);
|
|
676
777
|
}
|
|
677
778
|
}
|
|
678
779
|
|
|
@@ -685,7 +786,7 @@ class UI5Element extends HTMLElement {
|
|
|
685
786
|
* @param bubbles - true, if the event bubbles
|
|
686
787
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
687
788
|
*/
|
|
688
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
789
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
689
790
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
690
791
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
691
792
|
|
|
@@ -696,8 +797,8 @@ class UI5Element extends HTMLElement {
|
|
|
696
797
|
return eventResult;
|
|
697
798
|
}
|
|
698
799
|
|
|
699
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
700
|
-
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}`, {
|
|
701
802
|
detail: data,
|
|
702
803
|
composed: false,
|
|
703
804
|
bubbles,
|
|
@@ -711,7 +812,7 @@ class UI5Element extends HTMLElement {
|
|
|
711
812
|
return noConflictEventResult;
|
|
712
813
|
}
|
|
713
814
|
|
|
714
|
-
const normalEvent = new CustomEvent(name, {
|
|
815
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
715
816
|
detail: data,
|
|
716
817
|
composed: false,
|
|
717
818
|
bubbles,
|
|
@@ -730,8 +831,8 @@ class UI5Element extends HTMLElement {
|
|
|
730
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.
|
|
731
832
|
* @public
|
|
732
833
|
*/
|
|
733
|
-
getSlottedNodes(slotName) {
|
|
734
|
-
return
|
|
834
|
+
getSlottedNodes(slotName: string) {
|
|
835
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]);
|
|
735
836
|
}
|
|
736
837
|
|
|
737
838
|
/**
|
|
@@ -742,7 +843,7 @@ class UI5Element extends HTMLElement {
|
|
|
742
843
|
* @returns {String|undefined}
|
|
743
844
|
*/
|
|
744
845
|
get effectiveDir() {
|
|
745
|
-
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
|
|
746
847
|
return getEffectiveDir(this);
|
|
747
848
|
}
|
|
748
849
|
|
|
@@ -755,6 +856,10 @@ class UI5Element extends HTMLElement {
|
|
|
755
856
|
return true;
|
|
756
857
|
}
|
|
757
858
|
|
|
859
|
+
get classes(): ClassMap {
|
|
860
|
+
return {};
|
|
861
|
+
}
|
|
862
|
+
|
|
758
863
|
/**
|
|
759
864
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
760
865
|
* @private
|
|
@@ -781,7 +886,7 @@ class UI5Element extends HTMLElement {
|
|
|
781
886
|
* @public
|
|
782
887
|
*/
|
|
783
888
|
getStaticAreaItemDomRef() {
|
|
784
|
-
if (!this.constructor._needsStaticArea()) {
|
|
889
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
785
890
|
throw new Error("This component does not use the static area");
|
|
786
891
|
}
|
|
787
892
|
|
|
@@ -827,7 +932,7 @@ class UI5Element extends HTMLElement {
|
|
|
827
932
|
}
|
|
828
933
|
|
|
829
934
|
Object.defineProperty(proto, prop, {
|
|
830
|
-
get() {
|
|
935
|
+
get(this: UI5Element) {
|
|
831
936
|
if (this._state[prop] !== undefined) {
|
|
832
937
|
return this._state[prop];
|
|
833
938
|
}
|
|
@@ -844,15 +949,25 @@ class UI5Element extends HTMLElement {
|
|
|
844
949
|
return propDefaultValue;
|
|
845
950
|
}
|
|
846
951
|
},
|
|
847
|
-
|
|
952
|
+
|
|
953
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
848
954
|
let isDifferent;
|
|
849
|
-
|
|
955
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
956
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
850
957
|
|
|
958
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
959
|
+
const propertyType = propData.type;
|
|
960
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
851
961
|
const oldState = this._state[prop];
|
|
852
|
-
|
|
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
|
|
853
970
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
854
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
855
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
856
971
|
} else {
|
|
857
972
|
isDifferent = oldState !== value;
|
|
858
973
|
}
|
|
@@ -881,7 +996,7 @@ class UI5Element extends HTMLElement {
|
|
|
881
996
|
|
|
882
997
|
const propertyName = slotData.propertyName || slotName;
|
|
883
998
|
Object.defineProperty(proto, propertyName, {
|
|
884
|
-
get() {
|
|
999
|
+
get(this: UI5Element) {
|
|
885
1000
|
if (this._state[propertyName] !== undefined) {
|
|
886
1001
|
return this._state[propertyName];
|
|
887
1002
|
}
|
|
@@ -900,14 +1015,22 @@ class UI5Element extends HTMLElement {
|
|
|
900
1015
|
* @protected
|
|
901
1016
|
*/
|
|
902
1017
|
static get metadata() {
|
|
903
|
-
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;
|
|
904
1027
|
}
|
|
905
1028
|
|
|
906
1029
|
/**
|
|
907
1030
|
* Returns the CSS for this UI5 Web Component Class
|
|
908
1031
|
* @protected
|
|
909
1032
|
*/
|
|
910
|
-
static get styles() {
|
|
1033
|
+
static get styles(): ComponentStylesData {
|
|
911
1034
|
return "";
|
|
912
1035
|
}
|
|
913
1036
|
|
|
@@ -915,7 +1038,7 @@ class UI5Element extends HTMLElement {
|
|
|
915
1038
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
916
1039
|
* @protected
|
|
917
1040
|
*/
|
|
918
|
-
static get staticAreaStyles() {
|
|
1041
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
919
1042
|
return "";
|
|
920
1043
|
}
|
|
921
1044
|
|
|
@@ -926,7 +1049,7 @@ class UI5Element extends HTMLElement {
|
|
|
926
1049
|
*
|
|
927
1050
|
* @protected
|
|
928
1051
|
*/
|
|
929
|
-
static get dependencies() {
|
|
1052
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
930
1053
|
return [];
|
|
931
1054
|
}
|
|
932
1055
|
|
|
@@ -935,21 +1058,21 @@ class UI5Element extends HTMLElement {
|
|
|
935
1058
|
*
|
|
936
1059
|
* @public
|
|
937
1060
|
*/
|
|
938
|
-
static getUniqueDependencies() {
|
|
1061
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
939
1062
|
if (!uniqueDependenciesCache.has(this)) {
|
|
940
1063
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
941
1064
|
uniqueDependenciesCache.set(this, filtered);
|
|
942
1065
|
}
|
|
943
1066
|
|
|
944
|
-
return uniqueDependenciesCache.get(this);
|
|
1067
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
945
1068
|
}
|
|
946
1069
|
|
|
947
1070
|
/**
|
|
948
1071
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
949
1072
|
*
|
|
950
|
-
* @returns {Promise
|
|
1073
|
+
* @returns {Promise}
|
|
951
1074
|
*/
|
|
952
|
-
static whenDependenciesDefined() {
|
|
1075
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
953
1076
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
954
1077
|
}
|
|
955
1078
|
|
|
@@ -977,7 +1100,6 @@ class UI5Element extends HTMLElement {
|
|
|
977
1100
|
]);
|
|
978
1101
|
|
|
979
1102
|
const tag = this.getMetadata().getTag();
|
|
980
|
-
const altTag = this.getMetadata().getAltTag();
|
|
981
1103
|
|
|
982
1104
|
const definedLocally = isTagRegistered(tag);
|
|
983
1105
|
const definedGlobally = customElements.get(tag);
|
|
@@ -987,14 +1109,8 @@ class UI5Element extends HTMLElement {
|
|
|
987
1109
|
} else if (!definedGlobally) {
|
|
988
1110
|
this._generateAccessors();
|
|
989
1111
|
registerTag(tag);
|
|
990
|
-
window.customElements.define(tag, this);
|
|
991
|
-
|
|
992
|
-
if (altTag && !customElements.get(altTag)) {
|
|
993
|
-
registerTag(altTag);
|
|
994
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
995
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
996
|
-
}));
|
|
997
|
-
}
|
|
1112
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
1113
|
+
preloadLinks(this);
|
|
998
1114
|
}
|
|
999
1115
|
return this;
|
|
1000
1116
|
}
|
|
@@ -1010,17 +1126,31 @@ class UI5Element extends HTMLElement {
|
|
|
1010
1126
|
return this._metadata;
|
|
1011
1127
|
}
|
|
1012
1128
|
|
|
1013
|
-
const
|
|
1129
|
+
const effectiveMetadata = Object.keys(this.metadata).length ? this.metadata : this.decoratorMetadata;
|
|
1130
|
+
const metadataObjects = [effectiveMetadata];
|
|
1014
1131
|
let klass = this; // eslint-disable-line
|
|
1015
1132
|
while (klass !== UI5Element) {
|
|
1016
1133
|
klass = Object.getPrototypeOf(klass);
|
|
1017
|
-
|
|
1134
|
+
const effectiveKlassMetadata = Object.keys(klass.metadata).length ? klass.metadata : klass.decoratorMetadata;
|
|
1135
|
+
metadataObjects.unshift(effectiveKlassMetadata);
|
|
1018
1136
|
}
|
|
1019
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1137
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1020
1138
|
|
|
1021
1139
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1022
1140
|
return this._metadata;
|
|
1023
1141
|
}
|
|
1142
|
+
|
|
1143
|
+
static decoratorMetadata: Metadata = {};
|
|
1024
1144
|
}
|
|
1025
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
|
+
|
|
1026
1154
|
export default UI5Element;
|
|
1155
|
+
export { instanceOfUI5Element };
|
|
1156
|
+
export type { ChangeInfo };
|