@ui5/webcomponents-base 0.0.0-4180fe799 → 0.0.0-4738ea0dc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +3 -1
- package/CHANGELOG.md +437 -0
- package/README.md +28 -6
- package/bundle.esm.js +15 -11
- package/dist/AssetRegistry.d.ts +5 -0
- package/dist/AssetRegistry.js +2 -7
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/Boot.d.ts +8 -0
- package/dist/Boot.js +35 -30
- package/dist/Boot.js.map +1 -0
- package/dist/CSP.d.ts +30 -0
- package/dist/CSP.js +16 -24
- package/dist/CSP.js.map +1 -0
- package/dist/CustomElementsRegistry.d.ts +5 -0
- package/dist/CustomElementsRegistry.js +69 -30
- package/dist/CustomElementsRegistry.js.map +1 -0
- package/dist/CustomElementsScope.d.ts +7 -0
- package/dist/CustomElementsScope.js +11 -108
- package/dist/CustomElementsScope.js.map +1 -0
- package/dist/CustomElementsScopeUtils.d.ts +55 -0
- package/dist/CustomElementsScopeUtils.js +90 -0
- package/dist/CustomElementsScopeUtils.js.map +1 -0
- package/dist/DOMObserver.d.ts +11 -0
- package/dist/DOMObserver.js +12 -54
- package/dist/DOMObserver.js.map +1 -0
- package/dist/Device.d.ts +12 -0
- package/dist/Device.js +148 -89
- package/dist/Device.js.map +1 -0
- package/dist/EventProvider.d.ts +25 -0
- package/dist/EventProvider.js +67 -82
- package/dist/EventProvider.js.map +1 -0
- package/dist/FeaturesRegistry.d.ts +3 -0
- package/dist/FeaturesRegistry.js +5 -7
- package/dist/FeaturesRegistry.js.map +1 -0
- package/dist/FontFace.d.ts +2 -0
- package/dist/FontFace.js +14 -19
- package/dist/FontFace.js.map +1 -0
- package/dist/InitialConfiguration.d.ts +22 -0
- package/dist/InitialConfiguration.js +112 -131
- package/dist/InitialConfiguration.js.map +1 -0
- package/dist/Keys.d.ts +57 -0
- package/dist/Keys.js +174 -244
- package/dist/Keys.js.map +1 -0
- package/dist/ManagedStyles.d.ts +8 -0
- package/dist/ManagedStyles.js +62 -68
- package/dist/ManagedStyles.js.map +1 -0
- package/dist/MarkedEvents.d.ts +9 -0
- package/dist/MarkedEvents.js +15 -0
- package/dist/MarkedEvents.js.map +1 -0
- package/dist/MediaRange.d.ts +37 -0
- package/dist/MediaRange.js +54 -65
- package/dist/MediaRange.js.map +1 -0
- package/dist/PropertiesFileFormat.d.ts +8 -0
- package/dist/PropertiesFileFormat.js +72 -82
- package/dist/PropertiesFileFormat.js.map +1 -0
- package/dist/Render.d.ts +47 -0
- package/dist/Render.js +81 -113
- package/dist/Render.js.map +1 -0
- package/dist/RenderQueue.d.ts +19 -0
- package/dist/RenderQueue.js +52 -62
- package/dist/RenderQueue.js.map +1 -0
- package/dist/Runtimes.d.ts +27 -0
- package/dist/Runtimes.js +86 -0
- package/dist/Runtimes.js.map +1 -0
- package/dist/StaticArea.d.ts +0 -0
- package/dist/StaticArea.js +4 -1
- package/dist/StaticArea.js.map +1 -0
- package/dist/StaticAreaItem.d.ts +36 -0
- package/dist/StaticAreaItem.js +85 -84
- package/dist/StaticAreaItem.js.map +1 -0
- package/dist/SystemCSSVars.d.ts +2 -0
- package/dist/SystemCSSVars.js +4 -5
- package/dist/SystemCSSVars.js.map +1 -0
- package/dist/Theming.d.ts +3 -0
- package/dist/Theming.js +1 -1
- package/dist/Theming.js.map +1 -0
- package/dist/UI5Element.d.ts +378 -0
- package/dist/UI5Element.js +917 -980
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +278 -306
- package/dist/UI5ElementMetadata.js.map +1 -0
- package/dist/animations/AnimationQueue.d.ts +8 -0
- package/dist/animations/AnimationQueue.js +31 -38
- package/dist/animations/AnimationQueue.js.map +1 -0
- package/dist/animations/animate.d.ts +14 -0
- package/dist/animations/animate.js +46 -51
- package/dist/animations/animate.js.map +1 -0
- package/dist/animations/scroll.d.ts +5 -0
- package/dist/animations/scroll.js +18 -27
- package/dist/animations/scroll.js.map +1 -0
- package/dist/animations/slideDown.d.ts +5 -0
- package/dist/animations/slideDown.js +53 -78
- package/dist/animations/slideDown.js.map +1 -0
- package/dist/animations/slideUp.d.ts +5 -0
- package/dist/animations/slideUp.js +49 -70
- package/dist/animations/slideUp.js.map +1 -0
- package/dist/api.json +1 -0
- package/dist/asset-registries/Icons.d.ts +30 -0
- package/dist/asset-registries/Icons.js +88 -123
- package/dist/asset-registries/Icons.js.map +1 -0
- package/dist/asset-registries/Illustrations.d.ts +17 -0
- package/dist/asset-registries/Illustrations.js +41 -25
- package/dist/asset-registries/Illustrations.js.map +1 -0
- package/dist/asset-registries/LocaleData.d.ts +7 -0
- package/dist/asset-registries/LocaleData.js +104 -127
- package/dist/asset-registries/LocaleData.js.map +1 -0
- package/dist/asset-registries/Themes.d.ts +11 -0
- package/dist/asset-registries/Themes.js +38 -66
- package/dist/asset-registries/Themes.js.map +1 -0
- package/dist/asset-registries/i18n.d.ts +23 -0
- package/dist/asset-registries/i18n.js +55 -81
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/bundle.esm.0059c2ef.js +60 -0
- package/dist/assets-meta/IconCollectionsAlias.d.ts +31 -0
- package/dist/assets-meta/IconCollectionsAlias.js +30 -10
- package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
- package/dist/config/AnimationMode.d.ts +14 -0
- package/dist/config/AnimationMode.js +21 -18
- package/dist/config/AnimationMode.js.map +1 -0
- package/dist/config/CalendarType.d.ts +8 -0
- package/dist/config/CalendarType.js +13 -12
- package/dist/config/CalendarType.js.map +1 -0
- package/dist/config/FormatSettings.d.ts +15 -0
- package/dist/config/FormatSettings.js +15 -9
- package/dist/config/FormatSettings.js.map +1 -0
- package/dist/config/Icons.d.ts +55 -0
- package/dist/config/Icons.js +103 -0
- package/dist/config/Icons.js.map +1 -0
- package/dist/config/Language.d.ts +31 -0
- package/dist/config/Language.js +31 -43
- package/dist/config/Language.js.map +1 -0
- package/dist/config/NoConflict.d.ts +20 -0
- package/dist/config/NoConflict.js +40 -41
- package/dist/config/NoConflict.js.map +1 -0
- package/dist/config/RTL.d.ts +7 -0
- package/dist/config/RTL.js +26 -20
- package/dist/config/RTL.js.map +1 -0
- package/dist/config/Theme.d.ts +28 -0
- package/dist/config/Theme.js +38 -29
- package/dist/config/Theme.js.map +1 -0
- package/dist/config/ThemeRoots.d.ts +4 -0
- package/dist/config/ThemeRoots.js +28 -0
- package/dist/config/ThemeRoots.js.map +1 -0
- package/dist/css/BusyIndicator.css +80 -0
- package/dist/css/FontFace.css +31 -10
- package/dist/decorators/customElement.d.ts +23 -0
- package/dist/decorators/customElement.js +31 -0
- package/dist/decorators/customElement.js.map +1 -0
- package/dist/decorators/event.d.ts +10 -0
- package/dist/decorators/event.js +24 -0
- package/dist/decorators/event.js.map +1 -0
- package/dist/decorators/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 +25 -0
- package/dist/delegate/ResizeHandler.js +70 -91
- package/dist/delegate/ResizeHandler.js.map +1 -0
- package/dist/delegate/ScrollEnablement.d.ts +49 -0
- package/dist/delegate/ScrollEnablement.js +157 -180
- package/dist/delegate/ScrollEnablement.js.map +1 -0
- package/dist/features/F6Navigation.d.ts +19 -0
- package/dist/features/F6Navigation.js +151 -0
- package/dist/features/F6Navigation.js.map +1 -0
- package/dist/features/LegacyDateFormats.d.ts +18 -0
- package/dist/features/LegacyDateFormats.js +20 -0
- package/dist/features/LegacyDateFormats.js.map +1 -0
- package/dist/features/OpenUI5Element.d.ts +9 -0
- package/dist/features/OpenUI5Element.js +5 -0
- package/dist/features/OpenUI5Element.js.map +1 -0
- package/dist/features/OpenUI5Enablement.d.ts +11 -0
- package/dist/features/OpenUI5Enablement.js +96 -0
- package/dist/features/OpenUI5Enablement.js.map +1 -0
- package/dist/features/OpenUI5Support.d.ts +25 -0
- package/dist/features/OpenUI5Support.js +92 -119
- package/dist/features/OpenUI5Support.js.map +1 -0
- package/dist/generated/AssetParameters.js +1 -1
- package/dist/generated/VersionInfo.js +10 -0
- package/dist/generated/css/BusyIndicator.css.d.ts +3 -0
- package/dist/generated/css/BusyIndicator.css.js +7 -0
- package/dist/generated/css/BusyIndicator.css.js.map +1 -0
- package/dist/generated/css/FontFace.css.d.ts +3 -0
- package/dist/generated/css/FontFace.css.js +7 -5
- package/dist/generated/css/FontFace.css.js.map +1 -0
- package/dist/generated/css/OverrideFontFace.css.d.ts +3 -0
- package/dist/generated/css/OverrideFontFace.css.js +7 -5
- package/dist/generated/css/OverrideFontFace.css.js.map +1 -0
- package/dist/generated/css/SystemCSSVars.css.d.ts +3 -0
- package/dist/generated/css/SystemCSSVars.css.js +7 -5
- package/dist/generated/css/SystemCSSVars.css.js.map +1 -0
- package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
- package/dist/getSharedResource.d.ts +11 -0
- package/dist/getSharedResource.js +21 -17
- package/dist/getSharedResource.js.map +1 -0
- package/dist/global.d.ts +38 -0
- package/dist/i18nBundle.d.ts +43 -0
- package/dist/i18nBundle.js +56 -64
- package/dist/i18nBundle.js.map +1 -0
- package/dist/locale/Locale.d.ts +22 -0
- package/dist/locale/Locale.js +75 -87
- package/dist/locale/Locale.js.map +1 -0
- package/dist/locale/RTLAwareRegistry.d.ts +4 -0
- package/dist/locale/RTLAwareRegistry.js +6 -11
- package/dist/locale/RTLAwareRegistry.js.map +1 -0
- package/dist/locale/applyDirection.d.ts +10 -0
- package/dist/locale/applyDirection.js +7 -7
- package/dist/locale/applyDirection.js.map +1 -0
- package/dist/locale/directionChange.d.ts +15 -0
- package/dist/locale/directionChange.js +7 -15
- package/dist/locale/directionChange.js.map +1 -0
- package/dist/locale/getEffectiveDir.d.ts +2 -0
- package/dist/locale/getEffectiveDir.js +20 -24
- package/dist/locale/getEffectiveDir.js.map +1 -0
- package/dist/locale/getLocale.d.ts +7 -0
- package/dist/locale/getLocale.js +26 -29
- package/dist/locale/getLocale.js.map +1 -0
- package/dist/locale/languageChange.d.ts +5 -0
- package/dist/locale/languageChange.js +8 -16
- package/dist/locale/languageChange.js.map +1 -0
- package/dist/locale/nextFallbackLocale.d.ts +8 -0
- package/dist/locale/nextFallbackLocale.js +15 -19
- package/dist/locale/nextFallbackLocale.js.map +1 -0
- package/dist/locale/normalizeLocale.d.ts +7 -0
- package/dist/locale/normalizeLocale.js +34 -41
- package/dist/locale/normalizeLocale.js.map +1 -0
- package/dist/renderer/LitRenderer.d.ts +14 -0
- package/dist/renderer/LitRenderer.js +31 -24
- package/dist/renderer/LitRenderer.js.map +1 -0
- package/dist/renderer/executeTemplate.d.ts +13 -0
- package/dist/renderer/executeTemplate.js +20 -7
- package/dist/renderer/executeTemplate.js.map +1 -0
- package/dist/sap/base/Log.js +28 -29
- package/dist/sap/base/assert.js +5 -6
- package/dist/sap/base/security/URLListValidator.js +13 -2
- package/dist/sap/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 +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 +60 -60
- package/dist/theming/applyTheme.js.map +1 -0
- package/dist/theming/getConstructableStyle.d.ts +9 -0
- package/dist/theming/getConstructableStyle.js +12 -17
- package/dist/theming/getConstructableStyle.js.map +1 -0
- package/dist/theming/getEffectiveLinksHrefs.d.ts +3 -0
- package/dist/theming/getEffectiveLinksHrefs.js +13 -16
- package/dist/theming/getEffectiveLinksHrefs.js.map +1 -0
- package/dist/theming/getEffectiveStyle.d.ts +3 -0
- package/dist/theming/getEffectiveStyle.js +25 -23
- package/dist/theming/getEffectiveStyle.js.map +1 -0
- package/dist/theming/getStylesString.d.ts +3 -0
- package/dist/theming/getStylesString.js +9 -13
- package/dist/theming/getStylesString.js.map +1 -0
- package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
- package/dist/theming/getThemeDesignerTheme.js +73 -61
- package/dist/theming/getThemeDesignerTheme.js.map +1 -0
- package/dist/theming/preloadLinks.d.ts +3 -0
- package/dist/theming/preloadLinks.js +13 -17
- package/dist/theming/preloadLinks.js.map +1 -0
- package/dist/thirdparty/_merge.d.ts +2 -0
- package/dist/thirdparty/_merge.js +7 -4
- package/dist/thirdparty/_merge.js.map +1 -0
- package/dist/thirdparty/isPlainObject.d.ts +2 -0
- package/dist/thirdparty/isPlainObject.js +11 -10
- package/dist/thirdparty/isPlainObject.js.map +1 -0
- package/dist/thirdparty/merge.d.ts +2 -0
- package/dist/thirdparty/merge.js +4 -8
- package/dist/thirdparty/merge.js.map +1 -0
- package/dist/types/AnimationMode.d.ts +32 -0
- package/dist/types/AnimationMode.js +33 -6
- package/dist/types/AnimationMode.js.map +1 -0
- package/dist/types/CSSColor.d.ts +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 +25 -17
- package/dist/updateShadowRoot.js.map +1 -0
- package/dist/util/AriaLabelHelper.d.ts +15 -0
- package/dist/util/AriaLabelHelper.js +166 -36
- package/dist/util/AriaLabelHelper.js.map +1 -0
- package/dist/util/Caret.d.ts +7 -0
- package/dist/util/Caret.js +16 -38
- package/dist/util/Caret.js.map +1 -0
- package/dist/util/ColorConversion.d.ts +30 -0
- package/dist/util/ColorConversion.js +315 -348
- package/dist/util/ColorConversion.js.map +1 -0
- package/dist/util/FetchHelper.d.ts +3 -0
- package/dist/util/FetchHelper.js +19 -25
- package/dist/util/FetchHelper.js.map +1 -0
- package/dist/util/FocusableElements.d.ts +4 -0
- package/dist/util/FocusableElements.js +66 -72
- package/dist/util/FocusableElements.js.map +1 -0
- package/dist/util/HTMLSanitizer.d.ts +3 -0
- package/dist/util/HTMLSanitizer.js +4 -5
- package/dist/util/HTMLSanitizer.js.map +1 -0
- package/dist/util/InvisibleMessage.d.ts +10 -0
- package/dist/util/InvisibleMessage.js +42 -44
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +58 -77
- package/dist/util/PopupUtils.js.map +1 -0
- package/dist/util/SlotsHelper.d.ts +9 -0
- package/dist/util/SlotsHelper.js +22 -35
- package/dist/util/SlotsHelper.js.map +1 -0
- package/dist/util/StringHelper.d.ts +3 -0
- package/dist/util/StringHelper.js +17 -20
- package/dist/util/StringHelper.js.map +1 -0
- package/dist/util/TabbableElements.d.ts +17 -0
- package/dist/util/TabbableElements.js +53 -43
- package/dist/util/TabbableElements.js.map +1 -0
- package/dist/util/arraysAreEqual.d.ts +2 -0
- package/dist/util/arraysAreEqual.js +10 -12
- package/dist/util/arraysAreEqual.js.map +1 -0
- package/dist/util/clamp.d.ts +9 -0
- package/dist/util/clamp.js +2 -2
- package/dist/util/clamp.js.map +1 -0
- package/dist/util/createLinkInHead.d.ts +7 -0
- package/dist/util/createLinkInHead.js +14 -12
- package/dist/util/createLinkInHead.js.map +1 -0
- package/dist/util/createStyleInHead.d.ts +8 -0
- package/dist/util/createStyleInHead.js +10 -10
- package/dist/util/createStyleInHead.js.map +1 -0
- package/dist/util/debounce.d.ts +2 -0
- package/dist/util/debounce.js +6 -8
- package/dist/util/debounce.js.map +1 -0
- package/dist/util/detectNavigatorLanguage.d.ts +2 -0
- package/dist/util/detectNavigatorLanguage.js +7 -10
- package/dist/util/detectNavigatorLanguage.js.map +1 -0
- package/dist/util/escapeRegex.d.ts +8 -0
- package/dist/util/escapeRegex.js +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 +398 -0
- package/dist/util/getClassCopy.js +7 -7
- package/dist/util/getClassCopy.js.map +1 -0
- package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
- package/dist/util/getDesigntimePropertyAsArray.js +4 -3
- package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
- package/dist/util/getEffectiveContentDensity.d.ts +2 -0
- package/dist/util/getEffectiveContentDensity.js +2 -3
- package/dist/util/getEffectiveContentDensity.js.map +1 -0
- package/dist/util/getEffectiveScrollbarStyle.d.ts +2 -0
- package/dist/util/getEffectiveScrollbarStyle.js +4 -0
- package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
- package/dist/util/getFastNavigationGroups.d.ts +2 -0
- package/dist/util/getFastNavigationGroups.js +51 -0
- package/dist/util/getFastNavigationGroups.js.map +1 -0
- package/dist/util/getFileExtension.d.ts +12 -0
- package/dist/util/getFileExtension.js +9 -11
- package/dist/util/getFileExtension.js.map +1 -0
- package/dist/util/getNormalizedTarget.d.ts +7 -0
- package/dist/util/getNormalizedTarget.js +14 -0
- package/dist/util/getNormalizedTarget.js.map +1 -0
- package/dist/util/getSingletonElementInstance.d.ts +2 -0
- package/dist/util/getSingletonElementInstance.js +7 -10
- package/dist/util/getSingletonElementInstance.js.map +1 -0
- package/dist/util/isElementClickable.d.ts +2 -0
- package/dist/util/isElementClickable.js +16 -0
- package/dist/util/isElementClickable.js.map +1 -0
- package/dist/util/isElementHidden.d.ts +2 -0
- package/dist/util/isElementHidden.js +8 -0
- package/dist/util/isElementHidden.js.map +1 -0
- package/dist/util/isElementInView.d.ts +6 -0
- package/dist/util/isElementInView.js +6 -9
- package/dist/util/isElementInView.js.map +1 -0
- package/dist/util/isElementTabbable.d.ts +9 -0
- package/dist/util/isElementTabbable.js +30 -0
- package/dist/util/isElementTabbable.js.map +1 -0
- package/dist/util/isValidPropertyName.d.ts +8 -0
- package/dist/util/isValidPropertyName.js +16 -17
- package/dist/util/isValidPropertyName.js.map +1 -0
- package/dist/util/whenDOMReady.d.ts +2 -0
- package/dist/util/whenDOMReady.js +11 -10
- package/dist/util/whenDOMReady.js.map +1 -0
- package/dist/util/willShowContent.d.ts +2 -0
- package/dist/util/willShowContent.js +7 -0
- package/dist/util/willShowContent.js.map +1 -0
- package/dist/validateThemeRoot.d.ts +2 -0
- package/dist/validateThemeRoot.js +47 -0
- package/dist/validateThemeRoot.js.map +1 -0
- package/lib/generate-asset-parameters/index.js +8 -4
- package/lib/generate-styles/index.js +24 -11
- package/lib/generate-version-info/index.js +32 -0
- package/package-scripts.js +34 -28
- package/package.json +7 -6
- package/src/Boot.ts +65 -0
- package/src/{CSP.js → CSP.ts} +14 -7
- package/src/CustomElementsRegistry.ts +98 -0
- package/src/CustomElementsScope.ts +33 -0
- package/src/{CustomElementsScope.js → CustomElementsScopeUtils.ts} +14 -7
- package/src/DOMObserver.ts +28 -0
- package/src/Device.ts +203 -0
- package/src/{EventProvider.js → EventProvider.ts} +9 -7
- package/src/FeaturesRegistry.ts +14 -0
- package/src/{FontFace.js → FontFace.ts} +3 -2
- package/src/{InitialConfiguration.js → InitialConfiguration.ts} +54 -13
- package/src/Keys.ts +295 -0
- package/src/ManagedStyles.ts +92 -0
- package/src/MarkedEvents.ts +20 -0
- package/src/{MediaRange.js → MediaRange.ts} +54 -53
- package/src/{PropertiesFileFormat.js → PropertiesFileFormat.ts} +8 -8
- package/src/{Render.js → Render.ts} +25 -20
- package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
- package/src/Runtimes.ts +114 -0
- package/src/{StaticAreaItem.js → StaticAreaItem.ts} +33 -18
- package/src/{UI5Element.js → UI5Element.ts} +289 -148
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +129 -59
- package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
- package/src/animations/animate.ts +64 -0
- package/src/animations/scroll.ts +21 -0
- package/src/animations/{slideDown.js → slideDown.ts} +27 -34
- package/src/animations/{slideUp.js → slideUp.ts} +28 -32
- package/src/asset-registries/Icons.ts +161 -0
- package/src/asset-registries/Illustrations.ts +75 -0
- package/src/asset-registries/{LocaleData.js → LocaleData.ts} +42 -29
- package/src/asset-registries/Themes.ts +72 -0
- package/src/asset-registries/{i18n.js → i18n.ts} +21 -24
- package/src/assets-meta/IconCollectionsAlias.ts +41 -0
- package/src/config/AnimationMode.ts +33 -0
- package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
- package/src/config/FormatSettings.ts +35 -0
- package/src/config/Icons.ts +126 -0
- package/src/config/{Language.js → Language.ts} +22 -18
- package/src/config/NoConflict.ts +67 -0
- package/src/config/{RTL.js → RTL.ts} +18 -4
- package/src/config/Theme.ts +64 -0
- package/src/config/ThemeRoots.ts +41 -0
- package/src/css/BusyIndicator.css +80 -0
- package/src/css/FontFace.css +31 -10
- package/src/decorators/customElement.ts +57 -0
- package/src/decorators/event.ts +28 -0
- package/src/decorators/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.ts +100 -0
- package/src/delegate/ScrollEnablement.ts +224 -0
- package/src/features/F6Navigation.ts +195 -0
- package/src/features/LegacyDateFormats.ts +40 -0
- package/src/features/OpenUI5Element.ts +11 -0
- package/src/features/OpenUI5Enablement.ts +117 -0
- package/src/features/OpenUI5Support.ts +153 -0
- package/src/generated/css/BusyIndicator.css.ts +9 -0
- package/src/generated/css/FontFace.css.ts +9 -0
- package/src/generated/css/OverrideFontFace.css.ts +9 -0
- package/src/generated/css/SystemCSSVars.css.ts +9 -0
- package/src/{getSharedResource.js → getSharedResource.ts} +13 -4
- package/src/global.d.ts +38 -0
- package/src/{i18nBundle.js → i18nBundle.ts} +44 -22
- package/src/locale/{Locale.js → Locale.ts} +15 -5
- package/src/locale/RTLAwareRegistry.ts +16 -0
- package/src/locale/{applyDirection.js → applyDirection.ts} +4 -3
- package/src/locale/{directionChange.js → directionChange.ts} +6 -4
- package/src/locale/{getEffectiveDir.js → getEffectiveDir.ts} +1 -1
- package/src/locale/{getLocale.js → getLocale.ts} +12 -7
- package/src/locale/languageChange.ts +24 -0
- package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
- package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +5 -3
- package/src/renderer/LitRenderer.ts +60 -0
- package/src/renderer/executeTemplate.ts +40 -0
- package/src/theming/CustomStyle.ts +64 -0
- package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
- package/src/theming/{applyTheme.js → applyTheme.ts} +30 -15
- 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.js → preloadLinks.ts} +3 -2
- package/src/thirdparty/{_merge.js → _merge.ts} +2 -2
- package/src/thirdparty/{isPlainObject.js → isPlainObject.ts} +1 -1
- package/src/thirdparty/merge.ts +5 -0
- package/src/types/AnimationMode.ts +33 -0
- package/src/types/{CSSColor.js → CSSColor.ts} +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 +42 -0
- package/src/util/AriaLabelHelper.ts +218 -0
- package/src/util/Caret.ts +28 -0
- package/src/util/ColorConversion.ts +399 -0
- package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
- package/src/util/FocusableElements.ts +92 -0
- package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
- package/src/util/{InvisibleMessage.js → InvisibleMessage.ts} +25 -14
- package/src/util/PopupUtils.ts +112 -0
- package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/{clamp.js → clamp.ts} +1 -1
- package/src/util/{createLinkInHead.js → createLinkInHead.ts} +10 -4
- package/src/util/{createStyleInHead.js → createStyleInHead.ts} +4 -2
- package/src/util/{debounce.js → debounce.ts} +5 -4
- package/src/util/{detectNavigatorLanguage.js → detectNavigatorLanguage.ts} +1 -1
- package/src/util/escapeRegex.ts +11 -0
- package/src/util/{formatMessage.js → formatMessage.ts} +4 -3
- package/src/util/generateHighlightedMarkup.ts +43 -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/isLegacyBrowser.js +0 -3
- package/dist/resources/bundle.esm.js +0 -37
- package/dist/resources/bundle.esm.js.map +0 -1
- package/dist/test-resources/assets/Themes.js +0 -17
- package/dist/test-resources/elements/Child.js +0 -35
- package/dist/test-resources/elements/Generic.js +0 -84
- package/dist/test-resources/elements/GenericExt.js +0 -26
- package/dist/test-resources/elements/NoShadowDOM.js +0 -13
- package/dist/test-resources/elements/Parent.js +0 -41
- package/dist/test-resources/elements/WithStaticArea.js +0 -77
- package/dist/test-resources/pages/AllTestElements.html +0 -42
- package/dist/test-resources/pages/Configuration.html +0 -18
- package/dist/test-resources/pages/ConfigurationScript.html +0 -34
- package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
- package/dist/test-resources/pages/i18n.html +0 -33
- package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -27
- package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -63
- package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -93
- package/dist/test-resources/specs/CustomTheme.spec.js +0 -27
- package/dist/test-resources/specs/EventProvider.spec.js +0 -63
- package/dist/test-resources/specs/StaticArea.spec.js +0 -78
- package/dist/test-resources/specs/Theming.spec.js +0 -33
- package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
- package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
- package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
- package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
- package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
- package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
- package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
- package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/PopupState.js +0 -37
- package/dist/util/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/Device.js +0 -107
- package/src/FeaturesRegistry.js +0 -11
- package/src/Keys.js +0 -248
- package/src/ManagedStyles.js +0 -83
- package/src/RenderScheduler.js +0 -44
- package/src/animations/animate.js +0 -53
- package/src/animations/config.js +0 -5
- package/src/animations/scroll.js +0 -28
- package/src/asset-registries/Icons.js +0 -139
- package/src/asset-registries/Illustrations.js +0 -30
- package/src/asset-registries/Themes.js +0 -78
- package/src/assets-meta/IconCollectionsAlias.js +0 -18
- package/src/config/AnimationMode.js +0 -23
- package/src/config/FormatSettings.js +0 -13
- package/src/config/NoConflict.js +0 -51
- package/src/config/Theme.js +0 -42
- package/src/delegate/ResizeHandler.js +0 -106
- package/src/delegate/ScrollEnablement.js +0 -188
- package/src/features/OpenUI5Support.js +0 -125
- package/src/isLegacyBrowser.js +0 -3
- package/src/locale/RTLAwareRegistry.js +0 -14
- package/src/locale/languageChange.js +0 -22
- package/src/renderer/LitRenderer.js +0 -34
- package/src/renderer/executeTemplate.js +0 -17
- package/src/theming/CustomStyle.js +0 -40
- package/src/theming/getEffectiveLinksHrefs.js +0 -20
- package/src/theming/getStylesString.js +0 -15
- package/src/theming/getThemeDesignerTheme.js +0 -68
- package/src/thirdparty/merge.js +0 -10
- package/src/types/AnimationMode.js +0 -7
- package/src/types/CSSSize.js +0 -9
- package/src/types/CalendarType.js +0 -22
- package/src/types/DataType.js +0 -37
- package/src/types/Float.js +0 -14
- package/src/types/Integer.js +0 -13
- package/src/types/InvisibleMessageMode.js +0 -30
- package/src/types/ItemNavigationBehavior.js +0 -16
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -37
- package/src/types/ValueState.js +0 -22
- package/src/updateShadowRoot.js +0 -30
- package/src/util/AriaLabelHelper.js +0 -41
- package/src/util/Caret.js +0 -45
- package/src/util/ColorConversion.js +0 -370
- package/src/util/FocusableElements.js +0 -77
- package/src/util/PopupUtils.js +0 -93
- package/src/util/TabbableElements.js +0 -47
- package/src/util/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
- /package/src/{AssetRegistry.js → AssetRegistry.ts} +0 -0
- /package/src/{StaticArea.js → StaticArea.ts} +0 -0
- /package/src/{SystemCSSVars.js → SystemCSSVars.ts} +0 -0
- /package/src/{Theming.js → Theming.ts} +0 -0
- /package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import merge from "./thirdparty/merge.js";
|
|
2
2
|
import { boot } from "./Boot.js";
|
|
3
|
-
import UI5ElementMetadata
|
|
3
|
+
import UI5ElementMetadata, {
|
|
4
|
+
Slot,
|
|
5
|
+
SlotValue,
|
|
6
|
+
State,
|
|
7
|
+
PropertyValue,
|
|
8
|
+
Metadata,
|
|
9
|
+
} from "./UI5ElementMetadata.js";
|
|
4
10
|
import EventProvider from "./EventProvider.js";
|
|
5
11
|
import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
|
|
6
12
|
import StaticAreaItem from "./StaticAreaItem.js";
|
|
@@ -13,25 +19,50 @@ import getEffectiveDir from "./locale/getEffectiveDir.js";
|
|
|
13
19
|
import DataType from "./types/DataType.js";
|
|
14
20
|
import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
|
|
15
21
|
import isValidPropertyName from "./util/isValidPropertyName.js";
|
|
16
|
-
import
|
|
17
|
-
import { isSlot, getSlotName, getSlottedElementsList } from "./util/SlotsHelper.js";
|
|
22
|
+
import { getSlotName, getSlottedNodesList } from "./util/SlotsHelper.js";
|
|
18
23
|
import arraysAreEqual from "./util/arraysAreEqual.js";
|
|
19
|
-
import getClassCopy from "./util/getClassCopy.js";
|
|
20
24
|
import { markAsRtlAware } from "./locale/RTLAwareRegistry.js";
|
|
21
25
|
import preloadLinks from "./theming/preloadLinks.js";
|
|
26
|
+
import type { TemplateFunction, TemplateFunctionResult } from "./renderer/executeTemplate.js";
|
|
27
|
+
import type { PromiseResolve, ComponentStylesData, ClassMap } from "./types.js";
|
|
22
28
|
|
|
23
29
|
let autoId = 0;
|
|
24
30
|
|
|
25
|
-
const elementTimeouts = new Map();
|
|
26
|
-
const uniqueDependenciesCache = new Map();
|
|
31
|
+
const elementTimeouts = new Map<string, Promise<void>>();
|
|
32
|
+
const uniqueDependenciesCache = new Map<typeof UI5Element, Array<typeof UI5Element>>();
|
|
33
|
+
|
|
34
|
+
type Renderer = (templateResult: TemplateFunctionResult, container: HTMLElement | DocumentFragment, styleStrOrHrefsArr: string | Array<string> | undefined, forStaticArea: boolean, options: RendererOptions) => void;
|
|
35
|
+
|
|
36
|
+
type RendererOptions = {
|
|
37
|
+
/**
|
|
38
|
+
* An object to use as the `this` value for event listeners. It's often
|
|
39
|
+
* useful to set this to the host component rendering a template.
|
|
40
|
+
*/
|
|
41
|
+
host?: object,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
type ChangeInfo = {
|
|
45
|
+
type: "property" | "slot",
|
|
46
|
+
name: string,
|
|
47
|
+
reason?: string,
|
|
48
|
+
child?: SlotValue,
|
|
49
|
+
target?: UI5Element,
|
|
50
|
+
newValue?: PropertyValue,
|
|
51
|
+
oldValue?: PropertyValue,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
type InvalidationInfo = ChangeInfo & { target: UI5Element };
|
|
55
|
+
|
|
56
|
+
type ChildChangeListener = (param: InvalidationInfo) => void;
|
|
57
|
+
|
|
58
|
+
type SlotChangeListener = (this: HTMLSlotElement, ev: Event) => void;
|
|
27
59
|
|
|
28
60
|
/**
|
|
29
61
|
* Triggers re-rendering of a UI5Element instance due to state change.
|
|
30
|
-
*
|
|
31
|
-
* @param changeInfo An object with information about the change that caused invalidation.
|
|
62
|
+
* @param {ChangeInfo} changeInfo An object with information about the change that caused invalidation.
|
|
32
63
|
* @private
|
|
33
64
|
*/
|
|
34
|
-
function _invalidate(changeInfo) {
|
|
65
|
+
function _invalidate(this: UI5Element, changeInfo: ChangeInfo) {
|
|
35
66
|
// Invalidation should be suppressed: 1) before the component is rendered for the first time 2) and during the execution of onBeforeRendering
|
|
36
67
|
// This is necessary not only as an optimization, but also to avoid infinite loops on invalidation between children and parents (when invalidateOnChildChange is used)
|
|
37
68
|
if (this._suppressInvalidation) {
|
|
@@ -52,14 +83,41 @@ function _invalidate(changeInfo) {
|
|
|
52
83
|
* @class
|
|
53
84
|
* @constructor
|
|
54
85
|
* @author SAP SE
|
|
55
|
-
* @alias sap.ui.
|
|
86
|
+
* @alias sap.ui.webc.base.UI5Element
|
|
56
87
|
* @extends HTMLElement
|
|
57
88
|
* @public
|
|
58
89
|
*/
|
|
59
|
-
class UI5Element extends HTMLElement {
|
|
90
|
+
abstract class UI5Element extends HTMLElement {
|
|
91
|
+
__id?: string;
|
|
92
|
+
_suppressInvalidation: boolean;
|
|
93
|
+
_changedState: Array<ChangeInfo>;
|
|
94
|
+
_eventProvider: EventProvider<InvalidationInfo, void>;
|
|
95
|
+
_inDOM: boolean;
|
|
96
|
+
_fullyConnected: boolean;
|
|
97
|
+
_childChangeListeners: Map<string, ChildChangeListener>;
|
|
98
|
+
_slotChangeListeners: Map<string, SlotChangeListener>;
|
|
99
|
+
_domRefReadyPromise: Promise<void> & { _deferredResolve?: PromiseResolve };
|
|
100
|
+
_doNotSyncAttributes: Set<string>;
|
|
101
|
+
_state: State;
|
|
102
|
+
_onComponentStateFinalized?: () => void;
|
|
103
|
+
_getRealDomRef?: () => HTMLElement;
|
|
104
|
+
|
|
105
|
+
staticAreaItem?: StaticAreaItem;
|
|
106
|
+
|
|
107
|
+
static template?: TemplateFunction;
|
|
108
|
+
static staticAreaTemplate?: TemplateFunction;
|
|
109
|
+
static _metadata: UI5ElementMetadata;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @deprecated
|
|
113
|
+
*/
|
|
114
|
+
static render: Renderer;
|
|
115
|
+
static renderer?: Renderer;
|
|
116
|
+
|
|
60
117
|
constructor() {
|
|
61
118
|
super();
|
|
62
119
|
|
|
120
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
63
121
|
this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
|
|
64
122
|
this._suppressInvalidation = true; // A flag telling whether all invalidations should be ignored. Initialized with "true" because a UI5Element can not be invalidated until it is rendered for the first time
|
|
65
123
|
this._inDOM = false; // A flag telling whether the UI5Element is currently in the DOM tree of the document or not
|
|
@@ -72,11 +130,13 @@ class UI5Element extends HTMLElement {
|
|
|
72
130
|
deferredResolve = resolve;
|
|
73
131
|
});
|
|
74
132
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
133
|
+
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
134
|
+
|
|
135
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
75
136
|
|
|
76
|
-
this._initializeState();
|
|
77
137
|
this._upgradeAllProperties();
|
|
78
138
|
|
|
79
|
-
if (
|
|
139
|
+
if (ctor._needsShadowDOM()) {
|
|
80
140
|
this.attachShadow({ mode: "open" });
|
|
81
141
|
}
|
|
82
142
|
}
|
|
@@ -100,9 +160,14 @@ class UI5Element extends HTMLElement {
|
|
|
100
160
|
* @private
|
|
101
161
|
*/
|
|
102
162
|
async connectedCallback() {
|
|
103
|
-
this.
|
|
163
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
164
|
+
|
|
165
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
166
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
167
|
+
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
168
|
+
}
|
|
104
169
|
|
|
105
|
-
const slotsAreManaged =
|
|
170
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
106
171
|
|
|
107
172
|
this._inDOM = true;
|
|
108
173
|
|
|
@@ -117,11 +182,9 @@ class UI5Element extends HTMLElement {
|
|
|
117
182
|
}
|
|
118
183
|
|
|
119
184
|
renderImmediately(this);
|
|
120
|
-
this._domRefReadyPromise._deferredResolve();
|
|
185
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
121
186
|
this._fullyConnected = true;
|
|
122
|
-
|
|
123
|
-
this.onEnterDOM();
|
|
124
|
-
}
|
|
187
|
+
this.onEnterDOM();
|
|
125
188
|
}
|
|
126
189
|
|
|
127
190
|
/**
|
|
@@ -129,7 +192,8 @@ class UI5Element extends HTMLElement {
|
|
|
129
192
|
* @private
|
|
130
193
|
*/
|
|
131
194
|
disconnectedCallback() {
|
|
132
|
-
const
|
|
195
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
196
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
133
197
|
|
|
134
198
|
this._inDOM = false;
|
|
135
199
|
|
|
@@ -138,9 +202,7 @@ class UI5Element extends HTMLElement {
|
|
|
138
202
|
}
|
|
139
203
|
|
|
140
204
|
if (this._fullyConnected) {
|
|
141
|
-
|
|
142
|
-
this.onExitDOM();
|
|
143
|
-
}
|
|
205
|
+
this.onExitDOM();
|
|
144
206
|
this._fullyConnected = false;
|
|
145
207
|
}
|
|
146
208
|
|
|
@@ -151,22 +213,47 @@ class UI5Element extends HTMLElement {
|
|
|
151
213
|
cancelRender(this);
|
|
152
214
|
}
|
|
153
215
|
|
|
216
|
+
/**
|
|
217
|
+
* Called every time before the component renders.
|
|
218
|
+
* @public
|
|
219
|
+
*/
|
|
220
|
+
onBeforeRendering() {}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Called every time after the component renders.
|
|
224
|
+
* @public
|
|
225
|
+
*/
|
|
226
|
+
onAfterRendering() {}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Called on connectedCallback - added to the DOM.
|
|
230
|
+
* @public
|
|
231
|
+
*/
|
|
232
|
+
onEnterDOM() {}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Called on disconnectedCallback - removed from the DOM.
|
|
236
|
+
* @public
|
|
237
|
+
*/
|
|
238
|
+
onExitDOM() {}
|
|
239
|
+
|
|
154
240
|
/**
|
|
155
241
|
* @private
|
|
156
242
|
*/
|
|
157
243
|
_startObservingDOMChildren() {
|
|
158
|
-
const
|
|
244
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
245
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
159
246
|
if (!shouldObserveChildren) {
|
|
160
247
|
return;
|
|
161
248
|
}
|
|
162
249
|
|
|
163
|
-
const canSlotText =
|
|
250
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
164
251
|
const mutationObserverOptions = {
|
|
165
252
|
childList: true,
|
|
166
253
|
subtree: canSlotText,
|
|
167
254
|
characterData: canSlotText,
|
|
168
255
|
};
|
|
169
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
256
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
170
257
|
}
|
|
171
258
|
|
|
172
259
|
/**
|
|
@@ -181,7 +268,7 @@ class UI5Element extends HTMLElement {
|
|
|
181
268
|
* @private
|
|
182
269
|
*/
|
|
183
270
|
async _processChildren() {
|
|
184
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
271
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
185
272
|
if (hasSlots) {
|
|
186
273
|
await this._updateSlots();
|
|
187
274
|
}
|
|
@@ -191,23 +278,24 @@ class UI5Element extends HTMLElement {
|
|
|
191
278
|
* @private
|
|
192
279
|
*/
|
|
193
280
|
async _updateSlots() {
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const
|
|
281
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
282
|
+
const slotsMap = ctor.getMetadata().getSlots();
|
|
283
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
284
|
+
const domChildren = Array.from(canSlotText ? this.childNodes : this.children) as Array<Node>;
|
|
197
285
|
|
|
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
|
|
286
|
+
const slotsCachedContentMap = new Map<string, Array<SlotValue>>(); // Store here the content of each slot before the mutation occurred
|
|
287
|
+
const propertyNameToSlotMap = new Map<string, string>(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
200
288
|
|
|
201
289
|
// Init the _state object based on the supported slots and store the previous values
|
|
202
290
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
203
291
|
const propertyName = slotData.propertyName || slotName;
|
|
204
292
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
205
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
293
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
206
294
|
this._clearSlot(slotName, slotData);
|
|
207
295
|
}
|
|
208
296
|
|
|
209
|
-
const autoIncrementMap = new Map();
|
|
210
|
-
const slottedChildrenMap = new Map();
|
|
297
|
+
const autoIncrementMap = new Map<string, number>();
|
|
298
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
211
299
|
|
|
212
300
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
213
301
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -216,8 +304,11 @@ class UI5Element extends HTMLElement {
|
|
|
216
304
|
|
|
217
305
|
// Check if the slotName is supported
|
|
218
306
|
if (slotData === undefined) {
|
|
219
|
-
|
|
220
|
-
|
|
307
|
+
if (slotName !== "default") {
|
|
308
|
+
const validValues = Object.keys(slotsMap).join(", ");
|
|
309
|
+
console.warn(`Unknown slotName: ${slotName}, ignoring`, child, `Valid values are: ${validValues}`); // eslint-disable-line
|
|
310
|
+
}
|
|
311
|
+
|
|
221
312
|
return;
|
|
222
313
|
}
|
|
223
314
|
|
|
@@ -225,7 +316,7 @@ class UI5Element extends HTMLElement {
|
|
|
225
316
|
if (slotData.individualSlots) {
|
|
226
317
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
227
318
|
autoIncrementMap.set(slotName, nextIndex);
|
|
228
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
319
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
229
320
|
}
|
|
230
321
|
|
|
231
322
|
// Await for not-yet-defined custom elements
|
|
@@ -247,22 +338,26 @@ class UI5Element extends HTMLElement {
|
|
|
247
338
|
}
|
|
248
339
|
}
|
|
249
340
|
|
|
250
|
-
child =
|
|
341
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
251
342
|
|
|
252
343
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
253
|
-
if (child
|
|
254
|
-
|
|
344
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
345
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
346
|
+
|
|
347
|
+
if (childChangeListener) {
|
|
348
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
349
|
+
}
|
|
255
350
|
}
|
|
256
351
|
|
|
257
352
|
// Listen for the slotchange event if the child is a slot itself
|
|
258
|
-
if (
|
|
353
|
+
if (child instanceof HTMLSlotElement) {
|
|
259
354
|
this._attachSlotChange(child, slotName);
|
|
260
355
|
}
|
|
261
356
|
|
|
262
357
|
const propertyName = slotData.propertyName || slotName;
|
|
263
358
|
|
|
264
359
|
if (slottedChildrenMap.has(propertyName)) {
|
|
265
|
-
slottedChildrenMap.get(propertyName)
|
|
360
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
266
361
|
} else {
|
|
267
362
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
268
363
|
}
|
|
@@ -280,10 +375,10 @@ class UI5Element extends HTMLElement {
|
|
|
280
375
|
let invalidated = false;
|
|
281
376
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
282
377
|
const propertyName = slotData.propertyName || slotName;
|
|
283
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
378
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
284
379
|
_invalidate.call(this, {
|
|
285
380
|
type: "slot",
|
|
286
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
381
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
287
382
|
reason: "children",
|
|
288
383
|
});
|
|
289
384
|
invalidated = true;
|
|
@@ -305,16 +400,20 @@ class UI5Element extends HTMLElement {
|
|
|
305
400
|
* Removes all children from the slot and detaches listeners, if any
|
|
306
401
|
* @private
|
|
307
402
|
*/
|
|
308
|
-
_clearSlot(slotName, slotData) {
|
|
403
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
309
404
|
const propertyName = slotData.propertyName || slotName;
|
|
310
|
-
const children = this._state[propertyName]
|
|
405
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
311
406
|
|
|
312
407
|
children.forEach(child => {
|
|
313
|
-
if (child
|
|
314
|
-
|
|
408
|
+
if (instanceOfUI5Element(child)) {
|
|
409
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
410
|
+
|
|
411
|
+
if (childChangeListener) {
|
|
412
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
413
|
+
}
|
|
315
414
|
}
|
|
316
415
|
|
|
317
|
-
if (
|
|
416
|
+
if (child instanceof HTMLSlotElement) {
|
|
318
417
|
this._detachSlotChange(child, slotName);
|
|
319
418
|
}
|
|
320
419
|
});
|
|
@@ -325,32 +424,32 @@ class UI5Element extends HTMLElement {
|
|
|
325
424
|
/**
|
|
326
425
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
327
426
|
*
|
|
328
|
-
* @param callback
|
|
427
|
+
* @param {InvalidationInfo} callback
|
|
329
428
|
* @public
|
|
330
429
|
*/
|
|
331
|
-
attachInvalidate(callback) {
|
|
430
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
332
431
|
this._eventProvider.attachEvent("invalidate", callback);
|
|
333
432
|
}
|
|
334
433
|
|
|
335
434
|
/**
|
|
336
435
|
* Detach the callback that is executed whenever the component is invalidated
|
|
337
436
|
*
|
|
338
|
-
* @param callback
|
|
437
|
+
* @param {InvalidationInfo} callback
|
|
339
438
|
* @public
|
|
340
439
|
*/
|
|
341
|
-
detachInvalidate(callback) {
|
|
440
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
342
441
|
this._eventProvider.detachEvent("invalidate", callback);
|
|
343
442
|
}
|
|
344
443
|
|
|
345
444
|
/**
|
|
346
445
|
* Callback that is executed whenever a monitored child changes its state
|
|
347
446
|
*
|
|
348
|
-
* @param slotName the slot in which a child was invalidated
|
|
349
|
-
* @param childChangeInfo the changeInfo object for the child in the given slot
|
|
447
|
+
* @param {sting} slotName the slot in which a child was invalidated
|
|
448
|
+
* @param { ChangeInfo } childChangeInfo the changeInfo object for the child in the given slot
|
|
350
449
|
* @private
|
|
351
450
|
*/
|
|
352
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
353
|
-
if (!this.constructor.getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
|
|
451
|
+
_onChildChange(slotName: string, childChangeInfo: ChangeInfo) {
|
|
452
|
+
if (!(this.constructor as typeof UI5Element).getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
|
|
354
453
|
return;
|
|
355
454
|
}
|
|
356
455
|
|
|
@@ -368,44 +467,74 @@ class UI5Element extends HTMLElement {
|
|
|
368
467
|
* Do not override this method in derivatives of UI5Element
|
|
369
468
|
* @private
|
|
370
469
|
*/
|
|
371
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
372
|
-
|
|
470
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
471
|
+
let newPropertyValue: PropertyValue;
|
|
472
|
+
if (this._doNotSyncAttributes.has(name)) { // This attribute is mutated internally, not by the user
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
const properties = (this.constructor as typeof UI5Element).getMetadata().getProperties();
|
|
373
477
|
const realName = name.replace(/^ui5-/, "");
|
|
374
478
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
375
479
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
480
|
+
const propData = properties[nameInCamelCase];
|
|
481
|
+
const propertyType = propData.type;
|
|
482
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
483
|
+
|
|
484
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
485
|
+
propertyValidator = propertyType as typeof DataType;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
if (propertyValidator) {
|
|
489
|
+
newPropertyValue = propertyValidator.attributeToProperty(newValue);
|
|
490
|
+
} else if (propertyType === Boolean) {
|
|
491
|
+
newPropertyValue = newValue !== null;
|
|
492
|
+
} else {
|
|
493
|
+
newPropertyValue = newValue as string;
|
|
381
494
|
}
|
|
382
|
-
|
|
495
|
+
|
|
496
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
383
497
|
}
|
|
384
498
|
}
|
|
385
499
|
|
|
386
500
|
/**
|
|
387
501
|
* @private
|
|
388
502
|
*/
|
|
389
|
-
_updateAttribute(name, newValue) {
|
|
390
|
-
|
|
503
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
504
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
505
|
+
|
|
506
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
391
507
|
return;
|
|
392
508
|
}
|
|
393
|
-
const properties =
|
|
394
|
-
const
|
|
509
|
+
const properties = ctor.getMetadata().getProperties();
|
|
510
|
+
const propData = properties[name];
|
|
511
|
+
const propertyType = propData.type;
|
|
512
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
395
513
|
const attrName = camelToKebabCase(name);
|
|
396
514
|
const attrValue = this.getAttribute(attrName);
|
|
397
515
|
|
|
398
|
-
if (
|
|
516
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
517
|
+
propertyValidator = propertyType as typeof DataType;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
if (propertyValidator) {
|
|
521
|
+
const newAttrValue = propertyValidator.propertyToAttribute(newValue);
|
|
522
|
+
if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
|
|
523
|
+
this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
|
|
524
|
+
this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
|
|
525
|
+
this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
|
|
526
|
+
} else {
|
|
527
|
+
this.setAttribute(attrName, newAttrValue);
|
|
528
|
+
}
|
|
529
|
+
} else if (propertyType === Boolean) {
|
|
399
530
|
if (newValue === true && attrValue === null) {
|
|
400
531
|
this.setAttribute(attrName, "");
|
|
401
532
|
} else if (newValue === false && attrValue !== null) {
|
|
402
533
|
this.removeAttribute(attrName);
|
|
403
534
|
}
|
|
404
|
-
} else if (isDescendantOf(propertyTypeClass, DataType)) {
|
|
405
|
-
this.setAttribute(attrName, propertyTypeClass.propertyToAttribute(newValue));
|
|
406
535
|
} else if (typeof newValue !== "object") {
|
|
407
536
|
if (attrValue !== newValue) {
|
|
408
|
-
this.setAttribute(attrName, newValue);
|
|
537
|
+
this.setAttribute(attrName, newValue as string);
|
|
409
538
|
}
|
|
410
539
|
} // else { return; } // old object handling
|
|
411
540
|
}
|
|
@@ -413,11 +542,11 @@ class UI5Element extends HTMLElement {
|
|
|
413
542
|
/**
|
|
414
543
|
* @private
|
|
415
544
|
*/
|
|
416
|
-
_upgradeProperty(
|
|
417
|
-
if (this.hasOwnProperty(
|
|
418
|
-
const value = this[
|
|
419
|
-
delete this[
|
|
420
|
-
this[
|
|
545
|
+
_upgradeProperty(this: Record<string, any>, propertyName: string) {
|
|
546
|
+
if (this.hasOwnProperty(propertyName)) { // eslint-disable-line
|
|
547
|
+
const value = this[propertyName];
|
|
548
|
+
delete this[propertyName];
|
|
549
|
+
this[propertyName] = value;
|
|
421
550
|
}
|
|
422
551
|
}
|
|
423
552
|
|
|
@@ -425,25 +554,18 @@ class UI5Element extends HTMLElement {
|
|
|
425
554
|
* @private
|
|
426
555
|
*/
|
|
427
556
|
_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() };
|
|
557
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
558
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
437
559
|
}
|
|
438
560
|
|
|
439
561
|
/**
|
|
440
562
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
441
563
|
*
|
|
442
564
|
* @param slotName the name of the slot, where the child is
|
|
443
|
-
* @returns {
|
|
565
|
+
* @returns {ChildChangeListener}
|
|
444
566
|
* @private
|
|
445
567
|
*/
|
|
446
|
-
_getChildChangeListener(slotName) {
|
|
568
|
+
_getChildChangeListener(slotName: string) {
|
|
447
569
|
if (!this._childChangeListeners.has(slotName)) {
|
|
448
570
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
449
571
|
}
|
|
@@ -454,27 +576,30 @@ class UI5Element extends HTMLElement {
|
|
|
454
576
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
455
577
|
*
|
|
456
578
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
457
|
-
* @returns {
|
|
579
|
+
* @returns {SlotChangeListener}
|
|
458
580
|
* @private
|
|
459
581
|
*/
|
|
460
|
-
_getSlotChangeListener(slotName) {
|
|
582
|
+
_getSlotChangeListener(slotName: string) {
|
|
461
583
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
462
584
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
463
585
|
}
|
|
464
|
-
return this._slotChangeListeners.get(slotName)
|
|
586
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
465
587
|
}
|
|
466
588
|
|
|
467
589
|
/**
|
|
468
590
|
* @private
|
|
469
591
|
*/
|
|
470
|
-
_attachSlotChange(child, slotName) {
|
|
471
|
-
|
|
592
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
593
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
594
|
+
if (slotChangeListener) {
|
|
595
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
596
|
+
}
|
|
472
597
|
}
|
|
473
598
|
|
|
474
599
|
/**
|
|
475
600
|
* @private
|
|
476
601
|
*/
|
|
477
|
-
_detachSlotChange(child, slotName) {
|
|
602
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
478
603
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
479
604
|
}
|
|
480
605
|
|
|
@@ -484,7 +609,7 @@ class UI5Element extends HTMLElement {
|
|
|
484
609
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
485
610
|
* @private
|
|
486
611
|
*/
|
|
487
|
-
_onSlotChange(slotName) {
|
|
612
|
+
_onSlotChange(slotName: string) {
|
|
488
613
|
_invalidate.call(this, {
|
|
489
614
|
type: "slot",
|
|
490
615
|
name: slotName,
|
|
@@ -519,21 +644,20 @@ class UI5Element extends HTMLElement {
|
|
|
519
644
|
*
|
|
520
645
|
* @public
|
|
521
646
|
*/
|
|
522
|
-
onInvalidation(changeInfo) {}
|
|
647
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
523
648
|
|
|
524
649
|
/**
|
|
525
650
|
* Do not call this method directly, only intended to be called by js
|
|
526
651
|
* @protected
|
|
527
652
|
*/
|
|
528
653
|
_render() {
|
|
529
|
-
const
|
|
654
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
655
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
530
656
|
|
|
531
657
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
532
658
|
this._suppressInvalidation = true;
|
|
533
659
|
|
|
534
|
-
|
|
535
|
-
this.onBeforeRendering();
|
|
536
|
-
}
|
|
660
|
+
this.onBeforeRendering();
|
|
537
661
|
|
|
538
662
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
539
663
|
if (this._onComponentStateFinalized) {
|
|
@@ -557,7 +681,7 @@ class UI5Element extends HTMLElement {
|
|
|
557
681
|
}
|
|
558
682
|
res = `${res}: ${x.name}`;
|
|
559
683
|
if (x.type === "property") {
|
|
560
|
-
res = `${res} ${x.oldValue} => ${x.newValue}`;
|
|
684
|
+
res = `${res} ${JSON.stringify(x.oldValue)} => ${JSON.stringify(x.newValue)}`;
|
|
561
685
|
}
|
|
562
686
|
|
|
563
687
|
return res;
|
|
@@ -567,7 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
567
691
|
this._changedState = [];
|
|
568
692
|
|
|
569
693
|
// Update shadow root and static area item
|
|
570
|
-
if (
|
|
694
|
+
if (ctor._needsShadowDOM()) {
|
|
571
695
|
updateShadowRoot(this);
|
|
572
696
|
}
|
|
573
697
|
if (this.staticAreaItem) {
|
|
@@ -580,9 +704,7 @@ class UI5Element extends HTMLElement {
|
|
|
580
704
|
}
|
|
581
705
|
|
|
582
706
|
// Call the onAfterRendering hook
|
|
583
|
-
|
|
584
|
-
this.onAfterRendering();
|
|
585
|
-
}
|
|
707
|
+
this.onAfterRendering();
|
|
586
708
|
}
|
|
587
709
|
|
|
588
710
|
/**
|
|
@@ -591,7 +713,7 @@ class UI5Element extends HTMLElement {
|
|
|
591
713
|
_assignIndividualSlotsToChildren() {
|
|
592
714
|
const domChildren = Array.from(this.children);
|
|
593
715
|
|
|
594
|
-
domChildren.forEach(child => {
|
|
716
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
595
717
|
if (child._individualSlot) {
|
|
596
718
|
child.setAttribute("slot", child._individualSlot);
|
|
597
719
|
}
|
|
@@ -624,10 +746,10 @@ class UI5Element extends HTMLElement {
|
|
|
624
746
|
|
|
625
747
|
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
626
748
|
if (children.length !== 1) {
|
|
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
|
|
749
|
+
console.warn(`The shadow DOM for ${(this.constructor as typeof UI5Element).getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`); // eslint-disable-line
|
|
628
750
|
}
|
|
629
751
|
|
|
630
|
-
return children[0];
|
|
752
|
+
return children[0] as HTMLElement;
|
|
631
753
|
}
|
|
632
754
|
|
|
633
755
|
/**
|
|
@@ -638,7 +760,7 @@ class UI5Element extends HTMLElement {
|
|
|
638
760
|
getFocusDomRef() {
|
|
639
761
|
const domRef = this.getDomRef();
|
|
640
762
|
if (domRef) {
|
|
641
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
763
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
642
764
|
return focusRef || domRef;
|
|
643
765
|
}
|
|
644
766
|
}
|
|
@@ -655,15 +777,16 @@ class UI5Element extends HTMLElement {
|
|
|
655
777
|
|
|
656
778
|
/**
|
|
657
779
|
* Set the focus to the element, returned by "getFocusDomRef()" (marked by "data-sap-focus-ref")
|
|
780
|
+
* @param {FocusOptions} focusOptions additional options for the focus
|
|
658
781
|
* @public
|
|
659
782
|
*/
|
|
660
|
-
async focus() {
|
|
783
|
+
async focus(focusOptions?: FocusOptions) {
|
|
661
784
|
await this._waitForDomRef();
|
|
662
785
|
|
|
663
786
|
const focusDomRef = this.getFocusDomRef();
|
|
664
787
|
|
|
665
788
|
if (focusDomRef && typeof focusDomRef.focus === "function") {
|
|
666
|
-
focusDomRef.focus();
|
|
789
|
+
focusDomRef.focus(focusOptions);
|
|
667
790
|
}
|
|
668
791
|
}
|
|
669
792
|
|
|
@@ -676,7 +799,7 @@ class UI5Element extends HTMLElement {
|
|
|
676
799
|
* @param bubbles - true, if the event bubbles
|
|
677
800
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
678
801
|
*/
|
|
679
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
802
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
680
803
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
681
804
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
682
805
|
|
|
@@ -687,8 +810,8 @@ class UI5Element extends HTMLElement {
|
|
|
687
810
|
return eventResult;
|
|
688
811
|
}
|
|
689
812
|
|
|
690
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
691
|
-
const noConflictEvent = new CustomEvent(`ui5-${name}`, {
|
|
813
|
+
_fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
814
|
+
const noConflictEvent = new CustomEvent<T>(`ui5-${name}`, {
|
|
692
815
|
detail: data,
|
|
693
816
|
composed: false,
|
|
694
817
|
bubbles,
|
|
@@ -702,7 +825,7 @@ class UI5Element extends HTMLElement {
|
|
|
702
825
|
return noConflictEventResult;
|
|
703
826
|
}
|
|
704
827
|
|
|
705
|
-
const normalEvent = new CustomEvent(name, {
|
|
828
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
706
829
|
detail: data,
|
|
707
830
|
composed: false,
|
|
708
831
|
bubbles,
|
|
@@ -721,8 +844,8 @@ class UI5Element extends HTMLElement {
|
|
|
721
844
|
* Useful when there are transitive slots in nested component scenarios and you don't want to get a list of the slots, but rather of their content.
|
|
722
845
|
* @public
|
|
723
846
|
*/
|
|
724
|
-
getSlottedNodes(slotName) {
|
|
725
|
-
return
|
|
847
|
+
getSlottedNodes<T = Node>(slotName: string) {
|
|
848
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]) as Array<T>;
|
|
726
849
|
}
|
|
727
850
|
|
|
728
851
|
/**
|
|
@@ -733,7 +856,7 @@ class UI5Element extends HTMLElement {
|
|
|
733
856
|
* @returns {String|undefined}
|
|
734
857
|
*/
|
|
735
858
|
get effectiveDir() {
|
|
736
|
-
markAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
859
|
+
markAsRtlAware(this.constructor as typeof UI5Element); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
737
860
|
return getEffectiveDir(this);
|
|
738
861
|
}
|
|
739
862
|
|
|
@@ -746,6 +869,10 @@ class UI5Element extends HTMLElement {
|
|
|
746
869
|
return true;
|
|
747
870
|
}
|
|
748
871
|
|
|
872
|
+
get classes(): ClassMap {
|
|
873
|
+
return {};
|
|
874
|
+
}
|
|
875
|
+
|
|
749
876
|
/**
|
|
750
877
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
751
878
|
* @private
|
|
@@ -772,7 +899,7 @@ class UI5Element extends HTMLElement {
|
|
|
772
899
|
* @public
|
|
773
900
|
*/
|
|
774
901
|
getStaticAreaItemDomRef() {
|
|
775
|
-
if (!this.constructor._needsStaticArea()) {
|
|
902
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
776
903
|
throw new Error("This component does not use the static area");
|
|
777
904
|
}
|
|
778
905
|
|
|
@@ -818,7 +945,7 @@ class UI5Element extends HTMLElement {
|
|
|
818
945
|
}
|
|
819
946
|
|
|
820
947
|
Object.defineProperty(proto, prop, {
|
|
821
|
-
get() {
|
|
948
|
+
get(this: UI5Element) {
|
|
822
949
|
if (this._state[prop] !== undefined) {
|
|
823
950
|
return this._state[prop];
|
|
824
951
|
}
|
|
@@ -835,15 +962,25 @@ class UI5Element extends HTMLElement {
|
|
|
835
962
|
return propDefaultValue;
|
|
836
963
|
}
|
|
837
964
|
},
|
|
838
|
-
|
|
965
|
+
|
|
966
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
839
967
|
let isDifferent;
|
|
840
|
-
|
|
968
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
969
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
841
970
|
|
|
971
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
972
|
+
const propertyType = propData.type;
|
|
973
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
842
974
|
const oldState = this._state[prop];
|
|
843
|
-
|
|
975
|
+
|
|
976
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
977
|
+
propertyValidator = propertyType as typeof DataType;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
if (propertyValidator) {
|
|
981
|
+
isDifferent = !propertyValidator.valuesAreEqual(oldState, value);
|
|
982
|
+
} else if (Array.isArray(oldState) && Array.isArray(value) && propData.multiple && propData.compareValues) { // compareValues is added for IE, test if needed now
|
|
844
983
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
845
|
-
} else if (isDescendantOf(propData.type, DataType)) {
|
|
846
|
-
isDifferent = !propData.type.valuesAreEqual(oldState, value);
|
|
847
984
|
} else {
|
|
848
985
|
isDifferent = oldState !== value;
|
|
849
986
|
}
|
|
@@ -872,7 +1009,7 @@ class UI5Element extends HTMLElement {
|
|
|
872
1009
|
|
|
873
1010
|
const propertyName = slotData.propertyName || slotName;
|
|
874
1011
|
Object.defineProperty(proto, propertyName, {
|
|
875
|
-
get() {
|
|
1012
|
+
get(this: UI5Element) {
|
|
876
1013
|
if (this._state[propertyName] !== undefined) {
|
|
877
1014
|
return this._state[propertyName];
|
|
878
1015
|
}
|
|
@@ -890,15 +1027,13 @@ class UI5Element extends HTMLElement {
|
|
|
890
1027
|
* Returns the metadata object for this UI5 Web Component Class
|
|
891
1028
|
* @protected
|
|
892
1029
|
*/
|
|
893
|
-
static
|
|
894
|
-
return {};
|
|
895
|
-
}
|
|
1030
|
+
static metadata: Metadata = {};
|
|
896
1031
|
|
|
897
1032
|
/**
|
|
898
1033
|
* Returns the CSS for this UI5 Web Component Class
|
|
899
1034
|
* @protected
|
|
900
1035
|
*/
|
|
901
|
-
static get styles() {
|
|
1036
|
+
static get styles(): ComponentStylesData {
|
|
902
1037
|
return "";
|
|
903
1038
|
}
|
|
904
1039
|
|
|
@@ -906,7 +1041,7 @@ class UI5Element extends HTMLElement {
|
|
|
906
1041
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
907
1042
|
* @protected
|
|
908
1043
|
*/
|
|
909
|
-
static get staticAreaStyles() {
|
|
1044
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
910
1045
|
return "";
|
|
911
1046
|
}
|
|
912
1047
|
|
|
@@ -917,7 +1052,7 @@ class UI5Element extends HTMLElement {
|
|
|
917
1052
|
*
|
|
918
1053
|
* @protected
|
|
919
1054
|
*/
|
|
920
|
-
static get dependencies() {
|
|
1055
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
921
1056
|
return [];
|
|
922
1057
|
}
|
|
923
1058
|
|
|
@@ -926,21 +1061,21 @@ class UI5Element extends HTMLElement {
|
|
|
926
1061
|
*
|
|
927
1062
|
* @public
|
|
928
1063
|
*/
|
|
929
|
-
static getUniqueDependencies() {
|
|
1064
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
930
1065
|
if (!uniqueDependenciesCache.has(this)) {
|
|
931
1066
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
932
1067
|
uniqueDependenciesCache.set(this, filtered);
|
|
933
1068
|
}
|
|
934
1069
|
|
|
935
|
-
return uniqueDependenciesCache.get(this);
|
|
1070
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
936
1071
|
}
|
|
937
1072
|
|
|
938
1073
|
/**
|
|
939
1074
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
940
1075
|
*
|
|
941
|
-
* @returns {Promise
|
|
1076
|
+
* @returns {Promise}
|
|
942
1077
|
*/
|
|
943
|
-
static whenDependenciesDefined() {
|
|
1078
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
944
1079
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
945
1080
|
}
|
|
946
1081
|
|
|
@@ -968,7 +1103,6 @@ class UI5Element extends HTMLElement {
|
|
|
968
1103
|
]);
|
|
969
1104
|
|
|
970
1105
|
const tag = this.getMetadata().getTag();
|
|
971
|
-
const altTag = this.getMetadata().getAltTag();
|
|
972
1106
|
|
|
973
1107
|
const definedLocally = isTagRegistered(tag);
|
|
974
1108
|
const definedGlobally = customElements.get(tag);
|
|
@@ -978,15 +1112,8 @@ class UI5Element extends HTMLElement {
|
|
|
978
1112
|
} else if (!definedGlobally) {
|
|
979
1113
|
this._generateAccessors();
|
|
980
1114
|
registerTag(tag);
|
|
981
|
-
window.customElements.define(tag, this);
|
|
1115
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
982
1116
|
preloadLinks(this);
|
|
983
|
-
|
|
984
|
-
if (altTag && !customElements.get(altTag)) {
|
|
985
|
-
registerTag(altTag);
|
|
986
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
987
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
988
|
-
}));
|
|
989
|
-
}
|
|
990
1117
|
}
|
|
991
1118
|
return this;
|
|
992
1119
|
}
|
|
@@ -1008,11 +1135,25 @@ class UI5Element extends HTMLElement {
|
|
|
1008
1135
|
klass = Object.getPrototypeOf(klass);
|
|
1009
1136
|
metadataObjects.unshift(klass.metadata);
|
|
1010
1137
|
}
|
|
1011
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1138
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1012
1139
|
|
|
1013
1140
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1014
1141
|
return this._metadata;
|
|
1015
1142
|
}
|
|
1016
1143
|
}
|
|
1017
1144
|
|
|
1145
|
+
/**
|
|
1146
|
+
* Always use duck-typing to cover all runtimes on the page.
|
|
1147
|
+
* @returns {boolean}
|
|
1148
|
+
*/
|
|
1149
|
+
const instanceOfUI5Element = (object: any): object is UI5Element => {
|
|
1150
|
+
return "isUI5Element" in object;
|
|
1151
|
+
};
|
|
1152
|
+
|
|
1018
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type {
|
|
1156
|
+
ChangeInfo,
|
|
1157
|
+
Renderer,
|
|
1158
|
+
RendererOptions,
|
|
1159
|
+
};
|