@ui5/webcomponents-base 0.0.0-8db0ce01a → 0.0.0-8e1845415
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 -1
- package/CHANGELOG.md +466 -0
- package/README.md +53 -7
- package/bundle.esm.js +21 -13
- package/dist/AssetRegistry.d.ts +5 -0
- package/dist/AssetRegistry.js +2 -7
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/Boot.d.ts +9 -0
- package/dist/Boot.js +49 -29
- package/dist/Boot.js.map +1 -0
- package/dist/CSP.d.ts +30 -0
- package/dist/CSP.js +51 -0
- package/dist/CSP.js.map +1 -0
- package/dist/CustomElementsRegistry.d.ts +5 -0
- package/dist/CustomElementsRegistry.js +69 -30
- package/dist/CustomElementsRegistry.js.map +1 -0
- package/dist/CustomElementsScope.d.ts +7 -0
- package/dist/CustomElementsScope.js +11 -108
- package/dist/CustomElementsScope.js.map +1 -0
- package/dist/CustomElementsScopeUtils.d.ts +55 -0
- package/dist/CustomElementsScopeUtils.js +90 -0
- package/dist/CustomElementsScopeUtils.js.map +1 -0
- package/dist/DOMObserver.d.ts +11 -0
- package/dist/DOMObserver.js +12 -54
- package/dist/DOMObserver.js.map +1 -0
- package/dist/Device.d.ts +12 -0
- package/dist/Device.js +150 -84
- package/dist/Device.js.map +1 -0
- package/dist/EventProvider.d.ts +25 -0
- package/dist/EventProvider.js +67 -88
- package/dist/EventProvider.js.map +1 -0
- package/dist/FeaturesRegistry.d.ts +3 -0
- package/dist/FeaturesRegistry.js +5 -7
- package/dist/FeaturesRegistry.js.map +1 -0
- package/dist/FontFace.d.ts +2 -0
- package/dist/FontFace.js +17 -110
- package/dist/FontFace.js.map +1 -0
- package/dist/InitialConfiguration.d.ts +22 -0
- package/dist/InitialConfiguration.js +112 -127
- package/dist/InitialConfiguration.js.map +1 -0
- package/dist/Keys.d.ts +57 -0
- package/dist/Keys.js +174 -229
- package/dist/Keys.js.map +1 -0
- package/dist/ManagedStyles.d.ts +8 -0
- package/dist/ManagedStyles.js +77 -0
- package/dist/ManagedStyles.js.map +1 -0
- package/dist/MarkedEvents.d.ts +9 -0
- package/dist/MarkedEvents.js +15 -0
- package/dist/MarkedEvents.js.map +1 -0
- package/dist/MediaRange.d.ts +37 -0
- package/dist/MediaRange.js +54 -65
- package/dist/MediaRange.js.map +1 -0
- package/dist/PropertiesFileFormat.d.ts +8 -0
- package/dist/PropertiesFileFormat.js +72 -82
- package/dist/PropertiesFileFormat.js.map +1 -0
- package/dist/Render.d.ts +47 -0
- package/dist/Render.js +82 -112
- package/dist/Render.js.map +1 -0
- package/dist/RenderQueue.d.ts +19 -0
- package/dist/RenderQueue.js +52 -62
- package/dist/RenderQueue.js.map +1 -0
- package/dist/Runtimes.d.ts +27 -0
- package/dist/Runtimes.js +86 -0
- package/dist/Runtimes.js.map +1 -0
- package/dist/StaticArea.d.ts +0 -0
- package/dist/StaticArea.js +4 -1
- package/dist/StaticArea.js.map +1 -0
- package/dist/StaticAreaItem.d.ts +36 -0
- package/dist/StaticAreaItem.js +86 -83
- package/dist/StaticAreaItem.js.map +1 -0
- package/dist/SystemCSSVars.d.ts +2 -0
- package/dist/SystemCSSVars.js +6 -28
- package/dist/SystemCSSVars.js.map +1 -0
- package/dist/Theming.d.ts +3 -0
- package/dist/Theming.js +1 -1
- package/dist/Theming.js.map +1 -0
- package/dist/UI5Element.d.ts +378 -0
- package/dist/UI5Element.js +918 -997
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +278 -298
- package/dist/UI5ElementMetadata.js.map +1 -0
- package/dist/animations/AnimationQueue.d.ts +8 -0
- package/dist/animations/AnimationQueue.js +31 -38
- package/dist/animations/AnimationQueue.js.map +1 -0
- package/dist/animations/animate.d.ts +14 -0
- package/dist/animations/animate.js +46 -51
- package/dist/animations/animate.js.map +1 -0
- package/dist/animations/scroll.d.ts +5 -0
- package/dist/animations/scroll.js +18 -27
- package/dist/animations/scroll.js.map +1 -0
- package/dist/animations/slideDown.d.ts +5 -0
- package/dist/animations/slideDown.js +53 -78
- package/dist/animations/slideDown.js.map +1 -0
- package/dist/animations/slideUp.d.ts +5 -0
- package/dist/animations/slideUp.js +49 -70
- package/dist/animations/slideUp.js.map +1 -0
- package/dist/api.json +1 -0
- package/dist/asset-registries/Icons.d.ts +30 -0
- package/dist/asset-registries/Icons.js +88 -105
- package/dist/asset-registries/Icons.js.map +1 -0
- package/dist/asset-registries/Illustrations.d.ts +17 -0
- package/dist/asset-registries/Illustrations.js +46 -0
- package/dist/asset-registries/Illustrations.js.map +1 -0
- package/dist/asset-registries/LocaleData.d.ts +7 -0
- package/dist/asset-registries/LocaleData.js +104 -118
- package/dist/asset-registries/LocaleData.js.map +1 -0
- package/dist/asset-registries/Themes.d.ts +11 -0
- package/dist/asset-registries/Themes.js +41 -66
- package/dist/asset-registries/Themes.js.map +1 -0
- package/dist/asset-registries/i18n.d.ts +23 -0
- package/dist/asset-registries/i18n.js +55 -81
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/Boot.6335ce08.css +1 -0
- package/dist/assets/bundle.esm.f40d91c9.js +24 -0
- package/dist/assets/i18nBundle.cf399e86.js +37 -0
- package/dist/assets-meta/IconCollectionsAlias.d.ts +31 -0
- package/dist/assets-meta/IconCollectionsAlias.js +38 -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 +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 +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 +23 -0
- package/dist/decorators/customElement.js +31 -0
- package/dist/decorators/customElement.js.map +1 -0
- package/dist/decorators/event.d.ts +10 -0
- package/dist/decorators/event.js +24 -0
- package/dist/decorators/event.js.map +1 -0
- package/dist/decorators/property.d.ts +9 -0
- package/dist/decorators/property.js +24 -0
- package/dist/decorators/property.js.map +1 -0
- package/dist/decorators/slot.d.ts +9 -0
- package/dist/decorators/slot.js +37 -0
- package/dist/decorators/slot.js.map +1 -0
- package/dist/delegate/ItemNavigation.d.ts +113 -0
- package/dist/delegate/ItemNavigation.js +277 -246
- package/dist/delegate/ItemNavigation.js.map +1 -0
- package/dist/delegate/ResizeHandler.d.ts +25 -0
- package/dist/delegate/ResizeHandler.js +70 -91
- package/dist/delegate/ResizeHandler.js.map +1 -0
- package/dist/delegate/ScrollEnablement.d.ts +49 -0
- package/dist/delegate/ScrollEnablement.js +157 -174
- package/dist/delegate/ScrollEnablement.js.map +1 -0
- package/dist/features/F6Navigation.d.ts +19 -0
- package/dist/features/F6Navigation.js +151 -0
- package/dist/features/F6Navigation.js.map +1 -0
- package/dist/features/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 -0
- package/dist/generated/css/FontFace.css.js.map +1 -0
- package/dist/generated/css/OverrideFontFace.css.d.ts +3 -0
- package/dist/generated/css/OverrideFontFace.css.js +7 -0
- package/dist/generated/css/OverrideFontFace.css.js.map +1 -0
- package/dist/generated/css/SystemCSSVars.css.d.ts +3 -0
- package/dist/generated/css/SystemCSSVars.css.js +7 -0
- package/dist/generated/css/SystemCSSVars.css.js.map +1 -0
- package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
- package/dist/getSharedResource.d.ts +11 -0
- package/dist/getSharedResource.js +21 -17
- package/dist/getSharedResource.js.map +1 -0
- package/dist/global.d.ts +38 -0
- package/dist/i18nBundle.d.ts +43 -0
- package/dist/i18nBundle.js +67 -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 +34 -24
- package/dist/renderer/LitRenderer.js.map +1 -0
- package/dist/renderer/directives/style-map.js +72 -0
- package/dist/renderer/executeTemplate.d.ts +13 -0
- package/dist/renderer/executeTemplate.js +20 -7
- package/dist/renderer/executeTemplate.js.map +1 -0
- package/dist/sap/base/Log.js +240 -0
- package/dist/sap/base/assert.js +7 -0
- package/dist/sap/base/security/URLListValidator.js +159 -0
- package/dist/sap/base/security/encodeCSS.js +14 -0
- package/dist/sap/base/security/encodeXML.js +23 -0
- package/dist/sap/base/security/sanitizeHTML.js +16 -0
- package/dist/sap/base/strings/toHex.js +8 -0
- package/dist/sap/base/util/now.js +7 -0
- package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
- package/dist/theming/CustomStyle.d.ts +6 -0
- package/dist/theming/CustomStyle.js +39 -31
- package/dist/theming/CustomStyle.js.map +1 -0
- package/dist/theming/ThemeLoaded.d.ts +5 -0
- package/dist/theming/ThemeLoaded.js +8 -16
- package/dist/theming/ThemeLoaded.js.map +1 -0
- package/dist/theming/ThemeRegistered.d.ts +5 -0
- package/dist/theming/ThemeRegistered.js +14 -0
- package/dist/theming/ThemeRegistered.js.map +1 -0
- package/dist/theming/applyTheme.d.ts +2 -0
- package/dist/theming/applyTheme.js +63 -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 +15 -0
- package/dist/types/CSSColor.js +14 -5
- package/dist/types/CSSColor.js.map +1 -0
- package/dist/types/CalendarType.d.ts +37 -0
- package/dist/types/CalendarType.js +35 -18
- package/dist/types/CalendarType.js.map +1 -0
- package/dist/types/DOMReference.d.ts +17 -0
- package/dist/types/DOMReference.js +25 -0
- package/dist/types/DOMReference.js.map +1 -0
- package/dist/types/DataType.d.ts +25 -0
- package/dist/types/DataType.js +33 -14
- package/dist/types/DataType.js.map +1 -0
- package/dist/types/Float.d.ts +17 -0
- package/dist/types/Float.js +17 -6
- package/dist/types/Float.js.map +1 -0
- package/dist/types/Integer.d.ts +17 -0
- package/dist/types/Integer.js +17 -5
- package/dist/types/Integer.js.map +1 -0
- package/dist/types/InvisibleMessageMode.d.ts +25 -0
- package/dist/types/InvisibleMessageMode.js +27 -0
- package/dist/types/InvisibleMessageMode.js.map +1 -0
- package/dist/types/ItemNavigationBehavior.d.ts +24 -0
- package/dist/types/ItemNavigationBehavior.js +22 -12
- package/dist/types/ItemNavigationBehavior.js.map +1 -0
- package/dist/types/NavigationMode.d.ts +32 -0
- package/dist/types/NavigationMode.js +33 -6
- package/dist/types/NavigationMode.js.map +1 -0
- package/dist/types/ValueState.d.ts +42 -0
- package/dist/types/ValueState.js +41 -19
- package/dist/types/ValueState.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/updateShadowRoot.d.ts +8 -0
- package/dist/updateShadowRoot.js +27 -15
- 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 -68
- package/dist/util/FocusableElements.js.map +1 -0
- package/dist/util/HTMLSanitizer.d.ts +3 -0
- package/dist/util/HTMLSanitizer.js +6 -0
- package/dist/util/HTMLSanitizer.js.map +1 -0
- package/dist/util/InvisibleMessage.d.ts +10 -0
- package/dist/util/InvisibleMessage.js +56 -0
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +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 +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/index.js +1 -1
- package/lib/generate-asset-parameters/index.js +8 -5
- package/lib/generate-styles/index.js +31 -0
- package/lib/generate-version-info/index.js +32 -0
- package/package-scripts.js +50 -22
- package/package.json +18 -9
- package/src/Boot.ts +82 -0
- package/src/CSP.ts +66 -0
- package/src/CustomElementsRegistry.ts +98 -0
- package/src/CustomElementsScope.ts +33 -0
- package/src/{CustomElementsScope.js → CustomElementsScopeUtils.ts} +14 -7
- package/src/DOMObserver.ts +28 -0
- package/src/Device.ts +203 -0
- package/src/EventProvider.ts +87 -0
- package/src/FeaturesRegistry.ts +14 -0
- package/src/FontFace.ts +31 -0
- package/src/{InitialConfiguration.js → InitialConfiguration.ts} +63 -18
- 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/{StaticAreaItem.js → StaticAreaItem.ts} +39 -22
- package/src/SystemCSSVars.ts +10 -0
- package/src/{UI5Element.js → UI5Element.ts} +312 -187
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +138 -60
- package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
- package/src/animations/animate.ts +64 -0
- package/src/animations/scroll.ts +21 -0
- package/src/animations/{slideDown.js → slideDown.ts} +27 -34
- package/src/animations/{slideUp.js → slideUp.ts} +28 -32
- package/src/asset-registries/Icons.ts +161 -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 +75 -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 +66 -0
- package/src/css/OverrideFontFace.css +32 -0
- package/src/css/SystemCSSVars.css +17 -0
- package/src/decorators/customElement.ts +57 -0
- package/src/decorators/event.ts +28 -0
- package/src/decorators/property.ts +30 -0
- package/src/decorators/slot.ts +49 -0
- package/src/delegate/{ItemNavigation.js → ItemNavigation.ts} +131 -23
- package/src/delegate/ResizeHandler.ts +100 -0
- package/src/delegate/ScrollEnablement.ts +224 -0
- package/src/features/F6Navigation.ts +195 -0
- package/src/features/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.ts +108 -0
- package/src/locale/{Locale.js → Locale.ts} +15 -5
- package/src/locale/RTLAwareRegistry.ts +16 -0
- package/src/locale/{applyDirection.js → applyDirection.ts} +4 -3
- package/src/locale/{directionChange.js → directionChange.ts} +6 -4
- package/src/locale/{getEffectiveDir.js → getEffectiveDir.ts} +1 -1
- package/src/locale/{getLocale.js → getLocale.ts} +12 -7
- package/src/locale/languageChange.ts +24 -0
- package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
- package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +5 -3
- package/src/renderer/LitRenderer.ts +60 -0
- package/src/renderer/directives/style-map.js +72 -0
- package/src/renderer/executeTemplate.ts +40 -0
- package/src/theming/CustomStyle.ts +64 -0
- package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
- package/src/theming/ThemeRegistered.ts +24 -0
- package/src/theming/applyTheme.ts +91 -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} +11 -1
- package/src/types/CalendarType.ts +38 -0
- package/src/types/DOMReference.ts +28 -0
- package/src/types/DataType.ts +51 -0
- package/src/types/Float.ts +24 -0
- package/src/types/Integer.ts +24 -0
- package/src/types/InvisibleMessageMode.ts +27 -0
- package/src/types/ItemNavigationBehavior.ts +26 -0
- package/src/types/NavigationMode.ts +33 -0
- package/src/types/ValueState.ts +47 -0
- package/src/types.ts +30 -0
- package/src/updateShadowRoot.ts +42 -0
- package/src/util/AriaLabelHelper.ts +218 -0
- package/src/util/Caret.ts +28 -0
- package/src/util/ColorConversion.ts +399 -0
- package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
- package/src/util/FocusableElements.ts +92 -0
- package/src/util/HTMLSanitizer.ts +9 -0
- package/src/util/InvisibleMessage.ts +69 -0
- package/src/util/PopupUtils.ts +112 -0
- package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/{clamp.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/{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 +10 -0
- package/config/.eslintrc.js +0 -3
- package/config/rollup.config.js +0 -1
- package/dist/RenderScheduler.js +0 -44
- package/dist/animations/config.js +0 -5
- package/dist/config/AssetsPath.js +0 -17
- package/dist/isLegacyBrowser.js +0 -3
- package/dist/renderer/ifDefined.js +0 -21
- package/dist/renderer/scopeHTML.js +0 -32
- package/dist/resources/bundle.esm.js +0 -121
- package/dist/resources/bundle.esm.js.map +0 -1
- package/dist/test-resources/assets/Themes.js +0 -17
- package/dist/test-resources/elements/Child.js +0 -35
- package/dist/test-resources/elements/Generic.js +0 -84
- package/dist/test-resources/elements/GenericExt.js +0 -26
- package/dist/test-resources/elements/NoShadowDOM.js +0 -13
- package/dist/test-resources/elements/Parent.js +0 -41
- package/dist/test-resources/elements/WithStaticArea.js +0 -76
- package/dist/test-resources/pages/AllTestElements.html +0 -39
- package/dist/test-resources/pages/Configuration.html +0 -18
- package/dist/test-resources/pages/ConfigurationScript.html +0 -34
- package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
- package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
- package/dist/test-resources/pages/i18n.html +0 -35
- package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -27
- package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -63
- package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -93
- package/dist/test-resources/specs/CustomTheme.spec.js +0 -27
- package/dist/test-resources/specs/StaticArea.spec.js +0 -36
- package/dist/test-resources/specs/Theming.spec.js +0 -33
- package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
- package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
- package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
- package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
- package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
- package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
- package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
- package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
- package/dist/theming/createThemePropertiesStyleTag.js +0 -20
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/PopupState.js +0 -37
- package/dist/util/encodeCSS.js +0 -24
- package/dist/util/findNodeOwner.js +0 -35
- package/dist/util/isDescendantOf.js +0 -15
- package/dist/util/isNodeClickable.js +0 -19
- package/dist/util/isNodeHidden.js +0 -9
- package/dist/util/isNodeTabbable.js +0 -28
- package/dist/util/setToArray.js +0 -10
- package/hash.txt +0 -1
- package/src/Boot.js +0 -43
- package/src/CustomElementsRegistry.js +0 -39
- package/src/DOMObserver.js +0 -65
- package/src/Device.js +0 -100
- package/src/EventProvider.js +0 -91
- package/src/FeaturesRegistry.js +0 -11
- package/src/FontFace.js +0 -118
- package/src/Keys.js +0 -233
- package/src/RenderScheduler.js +0 -44
- package/src/SystemCSSVars.js +0 -31
- package/src/animations/animate.js +0 -53
- package/src/animations/config.js +0 -5
- package/src/animations/scroll.js +0 -28
- package/src/asset-registries/Icons.js +0 -121
- package/src/asset-registries/Themes.js +0 -78
- package/src/config/AnimationMode.js +0 -23
- package/src/config/AssetsPath.js +0 -17
- package/src/config/FormatSettings.js +0 -13
- package/src/config/NoConflict.js +0 -51
- package/src/config/Theme.js +0 -28
- package/src/delegate/ResizeHandler.js +0 -106
- package/src/delegate/ScrollEnablement.js +0 -182
- package/src/features/OpenUI5Support.js +0 -125
- package/src/i18nBundle.js +0 -55
- package/src/isLegacyBrowser.js +0 -3
- package/src/locale/RTLAwareRegistry.js +0 -14
- package/src/locale/languageChange.js +0 -22
- package/src/renderer/LitRenderer.js +0 -31
- package/src/renderer/executeTemplate.js +0 -17
- package/src/renderer/ifDefined.js +0 -21
- package/src/renderer/scopeHTML.js +0 -32
- package/src/theming/CustomStyle.js +0 -40
- package/src/theming/applyTheme.js +0 -78
- package/src/theming/createThemePropertiesStyleTag.js +0 -20
- package/src/theming/getStylesString.js +0 -13
- package/src/theming/getThemeDesignerTheme.js +0 -67
- package/src/thirdparty/merge.js +0 -10
- package/src/types/AnimationMode.js +0 -7
- package/src/types/CSSSize.js +0 -9
- package/src/types/CalendarType.js +0 -22
- package/src/types/DataType.js +0 -25
- package/src/types/Float.js +0 -10
- package/src/types/Integer.js +0 -9
- package/src/types/ItemNavigationBehavior.js +0 -16
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -37
- package/src/types/ValueState.js +0 -22
- package/src/updateShadowRoot.js +0 -26
- package/src/util/AriaLabelHelper.js +0 -41
- package/src/util/Caret.js +0 -45
- package/src/util/ColorConversion.js +0 -370
- package/src/util/FocusableElements.js +0 -73
- package/src/util/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/{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";
|
|
@@ -10,28 +16,53 @@ import { registerTag, isTagRegistered, recordTagRegistrationFailure } from "./Cu
|
|
|
10
16
|
import { observeDOMNode, unobserveDOMNode } from "./DOMObserver.js";
|
|
11
17
|
import { skipOriginalEvent } from "./config/NoConflict.js";
|
|
12
18
|
import getEffectiveDir from "./locale/getEffectiveDir.js";
|
|
13
|
-
import
|
|
14
|
-
import Float from "./types/Float.js";
|
|
19
|
+
import DataType from "./types/DataType.js";
|
|
15
20
|
import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
|
|
16
21
|
import isValidPropertyName from "./util/isValidPropertyName.js";
|
|
17
|
-
import {
|
|
22
|
+
import { getSlotName, getSlottedNodesList } from "./util/SlotsHelper.js";
|
|
18
23
|
import arraysAreEqual from "./util/arraysAreEqual.js";
|
|
19
|
-
import getClassCopy from "./util/getClassCopy.js";
|
|
20
24
|
import { markAsRtlAware } from "./locale/RTLAwareRegistry.js";
|
|
21
|
-
import
|
|
25
|
+
import preloadLinks from "./theming/preloadLinks.js";
|
|
26
|
+
import 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) {
|
|
@@ -43,7 +74,7 @@ function _invalidate(changeInfo) {
|
|
|
43
74
|
|
|
44
75
|
this._changedState.push(changeInfo);
|
|
45
76
|
renderDeferred(this);
|
|
46
|
-
this._eventProvider.fireEvent("
|
|
77
|
+
this._eventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
|
|
47
78
|
}
|
|
48
79
|
|
|
49
80
|
/**
|
|
@@ -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,10 +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;
|
|
104
164
|
|
|
105
|
-
|
|
106
|
-
|
|
165
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
166
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
167
|
+
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
107
171
|
|
|
108
172
|
this._inDOM = true;
|
|
109
173
|
|
|
@@ -113,20 +177,14 @@ class UI5Element extends HTMLElement {
|
|
|
113
177
|
await this._processChildren();
|
|
114
178
|
}
|
|
115
179
|
|
|
116
|
-
if (needsShadowDOM && !this.shadowRoot) { // Workaround for Firefox74 bug
|
|
117
|
-
await Promise.resolve();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
180
|
if (!this._inDOM) { // Component removed from DOM while _processChildren was running
|
|
121
181
|
return;
|
|
122
182
|
}
|
|
123
183
|
|
|
124
184
|
renderImmediately(this);
|
|
125
|
-
this._domRefReadyPromise._deferredResolve();
|
|
185
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
126
186
|
this._fullyConnected = true;
|
|
127
|
-
|
|
128
|
-
this.onEnterDOM();
|
|
129
|
-
}
|
|
187
|
+
this.onEnterDOM();
|
|
130
188
|
}
|
|
131
189
|
|
|
132
190
|
/**
|
|
@@ -134,8 +192,8 @@ class UI5Element extends HTMLElement {
|
|
|
134
192
|
* @private
|
|
135
193
|
*/
|
|
136
194
|
disconnectedCallback() {
|
|
137
|
-
const
|
|
138
|
-
const slotsAreManaged =
|
|
195
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
196
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
139
197
|
|
|
140
198
|
this._inDOM = false;
|
|
141
199
|
|
|
@@ -143,13 +201,9 @@ class UI5Element extends HTMLElement {
|
|
|
143
201
|
this._stopObservingDOMChildren();
|
|
144
202
|
}
|
|
145
203
|
|
|
146
|
-
if (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.onExitDOM();
|
|
150
|
-
}
|
|
151
|
-
this._fullyConnected = false;
|
|
152
|
-
}
|
|
204
|
+
if (this._fullyConnected) {
|
|
205
|
+
this.onExitDOM();
|
|
206
|
+
this._fullyConnected = false;
|
|
153
207
|
}
|
|
154
208
|
|
|
155
209
|
if (this.staticAreaItem && this.staticAreaItem.parentElement) {
|
|
@@ -159,22 +213,47 @@ class UI5Element extends HTMLElement {
|
|
|
159
213
|
cancelRender(this);
|
|
160
214
|
}
|
|
161
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
|
+
|
|
162
240
|
/**
|
|
163
241
|
* @private
|
|
164
242
|
*/
|
|
165
243
|
_startObservingDOMChildren() {
|
|
166
|
-
const
|
|
244
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
245
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
167
246
|
if (!shouldObserveChildren) {
|
|
168
247
|
return;
|
|
169
248
|
}
|
|
170
249
|
|
|
171
|
-
const canSlotText =
|
|
250
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
172
251
|
const mutationObserverOptions = {
|
|
173
252
|
childList: true,
|
|
174
253
|
subtree: canSlotText,
|
|
175
254
|
characterData: canSlotText,
|
|
176
255
|
};
|
|
177
|
-
observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
|
|
256
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
178
257
|
}
|
|
179
258
|
|
|
180
259
|
/**
|
|
@@ -189,7 +268,7 @@ class UI5Element extends HTMLElement {
|
|
|
189
268
|
* @private
|
|
190
269
|
*/
|
|
191
270
|
async _processChildren() {
|
|
192
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
271
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
193
272
|
if (hasSlots) {
|
|
194
273
|
await this._updateSlots();
|
|
195
274
|
}
|
|
@@ -199,23 +278,24 @@ class UI5Element extends HTMLElement {
|
|
|
199
278
|
* @private
|
|
200
279
|
*/
|
|
201
280
|
async _updateSlots() {
|
|
202
|
-
const
|
|
203
|
-
const
|
|
204
|
-
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>;
|
|
205
285
|
|
|
206
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
207
|
-
const propertyNameToSlotMap = new Map(); // Used for reverse lookup to determine to which slot the property name corresponds
|
|
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
|
|
208
288
|
|
|
209
289
|
// Init the _state object based on the supported slots and store the previous values
|
|
210
290
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
211
291
|
const propertyName = slotData.propertyName || slotName;
|
|
212
292
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
213
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
293
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
214
294
|
this._clearSlot(slotName, slotData);
|
|
215
295
|
}
|
|
216
296
|
|
|
217
|
-
const autoIncrementMap = new Map();
|
|
218
|
-
const slottedChildrenMap = new Map();
|
|
297
|
+
const autoIncrementMap = new Map<string, number>();
|
|
298
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
219
299
|
|
|
220
300
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
221
301
|
// Determine the type of the child (mainly by the slot attribute)
|
|
@@ -224,8 +304,11 @@ class UI5Element extends HTMLElement {
|
|
|
224
304
|
|
|
225
305
|
// Check if the slotName is supported
|
|
226
306
|
if (slotData === undefined) {
|
|
227
|
-
|
|
228
|
-
|
|
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
|
+
|
|
229
312
|
return;
|
|
230
313
|
}
|
|
231
314
|
|
|
@@ -233,7 +316,7 @@ class UI5Element extends HTMLElement {
|
|
|
233
316
|
if (slotData.individualSlots) {
|
|
234
317
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
235
318
|
autoIncrementMap.set(slotName, nextIndex);
|
|
236
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
319
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
237
320
|
}
|
|
238
321
|
|
|
239
322
|
// Await for not-yet-defined custom elements
|
|
@@ -255,22 +338,26 @@ class UI5Element extends HTMLElement {
|
|
|
255
338
|
}
|
|
256
339
|
}
|
|
257
340
|
|
|
258
|
-
child =
|
|
341
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
259
342
|
|
|
260
343
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
261
|
-
if (child
|
|
262
|
-
|
|
344
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
345
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
346
|
+
|
|
347
|
+
if (childChangeListener) {
|
|
348
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
349
|
+
}
|
|
263
350
|
}
|
|
264
351
|
|
|
265
352
|
// Listen for the slotchange event if the child is a slot itself
|
|
266
|
-
if (
|
|
353
|
+
if (child instanceof HTMLSlotElement) {
|
|
267
354
|
this._attachSlotChange(child, slotName);
|
|
268
355
|
}
|
|
269
356
|
|
|
270
357
|
const propertyName = slotData.propertyName || slotName;
|
|
271
358
|
|
|
272
359
|
if (slottedChildrenMap.has(propertyName)) {
|
|
273
|
-
slottedChildrenMap.get(propertyName)
|
|
360
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
274
361
|
} else {
|
|
275
362
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
276
363
|
}
|
|
@@ -288,10 +375,10 @@ class UI5Element extends HTMLElement {
|
|
|
288
375
|
let invalidated = false;
|
|
289
376
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
290
377
|
const propertyName = slotData.propertyName || slotName;
|
|
291
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
378
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
292
379
|
_invalidate.call(this, {
|
|
293
380
|
type: "slot",
|
|
294
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
381
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
295
382
|
reason: "children",
|
|
296
383
|
});
|
|
297
384
|
invalidated = true;
|
|
@@ -313,16 +400,20 @@ class UI5Element extends HTMLElement {
|
|
|
313
400
|
* Removes all children from the slot and detaches listeners, if any
|
|
314
401
|
* @private
|
|
315
402
|
*/
|
|
316
|
-
_clearSlot(slotName, slotData) {
|
|
403
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
317
404
|
const propertyName = slotData.propertyName || slotName;
|
|
318
|
-
const children = this._state[propertyName]
|
|
405
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
319
406
|
|
|
320
407
|
children.forEach(child => {
|
|
321
|
-
if (child
|
|
322
|
-
|
|
408
|
+
if (instanceOfUI5Element(child)) {
|
|
409
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
410
|
+
|
|
411
|
+
if (childChangeListener) {
|
|
412
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
413
|
+
}
|
|
323
414
|
}
|
|
324
415
|
|
|
325
|
-
if (
|
|
416
|
+
if (child instanceof HTMLSlotElement) {
|
|
326
417
|
this._detachSlotChange(child, slotName);
|
|
327
418
|
}
|
|
328
419
|
});
|
|
@@ -333,32 +424,32 @@ class UI5Element extends HTMLElement {
|
|
|
333
424
|
/**
|
|
334
425
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
335
426
|
*
|
|
336
|
-
* @param callback
|
|
337
|
-
* @
|
|
427
|
+
* @param {InvalidationInfo} callback
|
|
428
|
+
* @public
|
|
338
429
|
*/
|
|
339
|
-
|
|
340
|
-
this._eventProvider.attachEvent("
|
|
430
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
431
|
+
this._eventProvider.attachEvent("invalidate", callback);
|
|
341
432
|
}
|
|
342
433
|
|
|
343
434
|
/**
|
|
344
435
|
* Detach the callback that is executed whenever the component is invalidated
|
|
345
436
|
*
|
|
346
|
-
* @param callback
|
|
347
|
-
* @
|
|
437
|
+
* @param {InvalidationInfo} callback
|
|
438
|
+
* @public
|
|
348
439
|
*/
|
|
349
|
-
|
|
350
|
-
this._eventProvider.detachEvent("
|
|
440
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
441
|
+
this._eventProvider.detachEvent("invalidate", callback);
|
|
351
442
|
}
|
|
352
443
|
|
|
353
444
|
/**
|
|
354
445
|
* Callback that is executed whenever a monitored child changes its state
|
|
355
446
|
*
|
|
356
|
-
* @param slotName the slot in which a child was invalidated
|
|
357
|
-
* @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
|
|
358
449
|
* @private
|
|
359
450
|
*/
|
|
360
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
361
|
-
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)) {
|
|
362
453
|
return;
|
|
363
454
|
}
|
|
364
455
|
|
|
@@ -376,58 +467,86 @@ class UI5Element extends HTMLElement {
|
|
|
376
467
|
* Do not override this method in derivatives of UI5Element
|
|
377
468
|
* @private
|
|
378
469
|
*/
|
|
379
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
380
|
-
|
|
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();
|
|
381
477
|
const realName = name.replace(/^ui5-/, "");
|
|
382
478
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
383
479
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
if (
|
|
389
|
-
|
|
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;
|
|
390
486
|
}
|
|
391
|
-
|
|
392
|
-
|
|
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;
|
|
393
494
|
}
|
|
394
|
-
|
|
495
|
+
|
|
496
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
395
497
|
}
|
|
396
498
|
}
|
|
397
499
|
|
|
398
500
|
/**
|
|
399
501
|
* @private
|
|
400
502
|
*/
|
|
401
|
-
_updateAttribute(name, newValue) {
|
|
402
|
-
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
503
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
504
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
405
505
|
|
|
406
|
-
if (
|
|
506
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
407
507
|
return;
|
|
408
508
|
}
|
|
409
|
-
|
|
509
|
+
const properties = ctor.getMetadata().getProperties();
|
|
510
|
+
const propData = properties[name];
|
|
511
|
+
const propertyType = propData.type;
|
|
512
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
410
513
|
const attrName = camelToKebabCase(name);
|
|
411
514
|
const attrValue = this.getAttribute(attrName);
|
|
412
|
-
|
|
515
|
+
|
|
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) {
|
|
413
530
|
if (newValue === true && attrValue === null) {
|
|
414
531
|
this.setAttribute(attrName, "");
|
|
415
532
|
} else if (newValue === false && attrValue !== null) {
|
|
416
533
|
this.removeAttribute(attrName);
|
|
417
534
|
}
|
|
418
|
-
} else if (
|
|
419
|
-
|
|
420
|
-
|
|
535
|
+
} else if (typeof newValue !== "object") {
|
|
536
|
+
if (attrValue !== newValue) {
|
|
537
|
+
this.setAttribute(attrName, newValue as string);
|
|
538
|
+
}
|
|
539
|
+
} // else { return; } // old object handling
|
|
421
540
|
}
|
|
422
541
|
|
|
423
542
|
/**
|
|
424
543
|
* @private
|
|
425
544
|
*/
|
|
426
|
-
_upgradeProperty(
|
|
427
|
-
if (this.hasOwnProperty(
|
|
428
|
-
const value = this[
|
|
429
|
-
delete this[
|
|
430
|
-
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;
|
|
431
550
|
}
|
|
432
551
|
}
|
|
433
552
|
|
|
@@ -435,25 +554,18 @@ class UI5Element extends HTMLElement {
|
|
|
435
554
|
* @private
|
|
436
555
|
*/
|
|
437
556
|
_upgradeAllProperties() {
|
|
438
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
439
|
-
allProps.forEach(this._upgradeProperty
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* @private
|
|
444
|
-
*/
|
|
445
|
-
_initializeState() {
|
|
446
|
-
this._state = { ...this.constructor.getMetadata().getInitialState() };
|
|
557
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
558
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
447
559
|
}
|
|
448
560
|
|
|
449
561
|
/**
|
|
450
562
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
451
563
|
*
|
|
452
564
|
* @param slotName the name of the slot, where the child is
|
|
453
|
-
* @returns {
|
|
565
|
+
* @returns {ChildChangeListener}
|
|
454
566
|
* @private
|
|
455
567
|
*/
|
|
456
|
-
_getChildChangeListener(slotName) {
|
|
568
|
+
_getChildChangeListener(slotName: string) {
|
|
457
569
|
if (!this._childChangeListeners.has(slotName)) {
|
|
458
570
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
459
571
|
}
|
|
@@ -464,27 +576,30 @@ class UI5Element extends HTMLElement {
|
|
|
464
576
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
465
577
|
*
|
|
466
578
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
467
|
-
* @returns {
|
|
579
|
+
* @returns {SlotChangeListener}
|
|
468
580
|
* @private
|
|
469
581
|
*/
|
|
470
|
-
_getSlotChangeListener(slotName) {
|
|
582
|
+
_getSlotChangeListener(slotName: string) {
|
|
471
583
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
472
584
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
473
585
|
}
|
|
474
|
-
return this._slotChangeListeners.get(slotName)
|
|
586
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
475
587
|
}
|
|
476
588
|
|
|
477
589
|
/**
|
|
478
590
|
* @private
|
|
479
591
|
*/
|
|
480
|
-
_attachSlotChange(child, slotName) {
|
|
481
|
-
|
|
592
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
593
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
594
|
+
if (slotChangeListener) {
|
|
595
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
596
|
+
}
|
|
482
597
|
}
|
|
483
598
|
|
|
484
599
|
/**
|
|
485
600
|
* @private
|
|
486
601
|
*/
|
|
487
|
-
_detachSlotChange(child, slotName) {
|
|
602
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
488
603
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
489
604
|
}
|
|
490
605
|
|
|
@@ -494,7 +609,7 @@ class UI5Element extends HTMLElement {
|
|
|
494
609
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
495
610
|
* @private
|
|
496
611
|
*/
|
|
497
|
-
_onSlotChange(slotName) {
|
|
612
|
+
_onSlotChange(slotName: string) {
|
|
498
613
|
_invalidate.call(this, {
|
|
499
614
|
type: "slot",
|
|
500
615
|
name: slotName,
|
|
@@ -529,21 +644,20 @@ class UI5Element extends HTMLElement {
|
|
|
529
644
|
*
|
|
530
645
|
* @public
|
|
531
646
|
*/
|
|
532
|
-
onInvalidation(changeInfo) {}
|
|
647
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
533
648
|
|
|
534
649
|
/**
|
|
535
650
|
* Do not call this method directly, only intended to be called by js
|
|
536
651
|
* @protected
|
|
537
652
|
*/
|
|
538
653
|
_render() {
|
|
539
|
-
const
|
|
654
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
655
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
540
656
|
|
|
541
657
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
542
658
|
this._suppressInvalidation = true;
|
|
543
659
|
|
|
544
|
-
|
|
545
|
-
this.onBeforeRendering();
|
|
546
|
-
}
|
|
660
|
+
this.onBeforeRendering();
|
|
547
661
|
|
|
548
662
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
549
663
|
if (this._onComponentStateFinalized) {
|
|
@@ -567,7 +681,7 @@ class UI5Element extends HTMLElement {
|
|
|
567
681
|
}
|
|
568
682
|
res = `${res}: ${x.name}`;
|
|
569
683
|
if (x.type === "property") {
|
|
570
|
-
res = `${res} ${x.oldValue} => ${x.newValue}`;
|
|
684
|
+
res = `${res} ${JSON.stringify(x.oldValue)} => ${JSON.stringify(x.newValue)}`;
|
|
571
685
|
}
|
|
572
686
|
|
|
573
687
|
return res;
|
|
@@ -577,7 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
577
691
|
this._changedState = [];
|
|
578
692
|
|
|
579
693
|
// Update shadow root and static area item
|
|
580
|
-
if (
|
|
694
|
+
if (ctor._needsShadowDOM()) {
|
|
581
695
|
updateShadowRoot(this);
|
|
582
696
|
}
|
|
583
697
|
if (this.staticAreaItem) {
|
|
@@ -590,9 +704,7 @@ class UI5Element extends HTMLElement {
|
|
|
590
704
|
}
|
|
591
705
|
|
|
592
706
|
// Call the onAfterRendering hook
|
|
593
|
-
|
|
594
|
-
this.onAfterRendering();
|
|
595
|
-
}
|
|
707
|
+
this.onAfterRendering();
|
|
596
708
|
}
|
|
597
709
|
|
|
598
710
|
/**
|
|
@@ -601,7 +713,7 @@ class UI5Element extends HTMLElement {
|
|
|
601
713
|
_assignIndividualSlotsToChildren() {
|
|
602
714
|
const domChildren = Array.from(this.children);
|
|
603
715
|
|
|
604
|
-
domChildren.forEach(child => {
|
|
716
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
605
717
|
if (child._individualSlot) {
|
|
606
718
|
child.setAttribute("slot", child._individualSlot);
|
|
607
719
|
}
|
|
@@ -617,25 +729,27 @@ class UI5Element extends HTMLElement {
|
|
|
617
729
|
|
|
618
730
|
/**
|
|
619
731
|
* Returns the DOM Element inside the Shadow Root that corresponds to the opening tag in the UI5 Web Component's template
|
|
732
|
+
* *Note:* For logical (abstract) elements (items, options, etc...), returns the part of the parent's DOM that represents this option
|
|
620
733
|
* Use this method instead of "this.shadowRoot" to read the Shadow DOM, if ever necessary
|
|
734
|
+
*
|
|
621
735
|
* @public
|
|
622
736
|
*/
|
|
623
737
|
getDomRef() {
|
|
738
|
+
// If a component set _getRealDomRef to its children, use the return value of this function
|
|
739
|
+
if (typeof this._getRealDomRef === "function") {
|
|
740
|
+
return this._getRealDomRef();
|
|
741
|
+
}
|
|
742
|
+
|
|
624
743
|
if (!this.shadowRoot || this.shadowRoot.children.length === 0) {
|
|
625
744
|
return;
|
|
626
745
|
}
|
|
627
746
|
|
|
628
|
-
this.
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
? this.shadowRoot.children[0] : this.shadowRoot.children[1];
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
_assertShadowRootStructure() {
|
|
635
|
-
const expectedChildrenCount = document.adoptedStyleSheets || isLegacyBrowser() ? 1 : 2;
|
|
636
|
-
if (this.shadowRoot.children.length !== expectedChildrenCount) {
|
|
637
|
-
console.warn(`The shadow DOM for ${this.constructor.getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`); // eslint-disable-line
|
|
747
|
+
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
748
|
+
if (children.length !== 1) {
|
|
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
|
|
638
750
|
}
|
|
751
|
+
|
|
752
|
+
return children[0] as HTMLElement;
|
|
639
753
|
}
|
|
640
754
|
|
|
641
755
|
/**
|
|
@@ -646,7 +760,7 @@ class UI5Element extends HTMLElement {
|
|
|
646
760
|
getFocusDomRef() {
|
|
647
761
|
const domRef = this.getDomRef();
|
|
648
762
|
if (domRef) {
|
|
649
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
763
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
650
764
|
return focusRef || domRef;
|
|
651
765
|
}
|
|
652
766
|
}
|
|
@@ -661,28 +775,18 @@ class UI5Element extends HTMLElement {
|
|
|
661
775
|
return this.getFocusDomRef();
|
|
662
776
|
}
|
|
663
777
|
|
|
664
|
-
/**
|
|
665
|
-
* Use this method in order to get a reference to an element in the shadow root of the web component or the static area item of the component
|
|
666
|
-
* @public
|
|
667
|
-
* @method
|
|
668
|
-
* @param {String} refName Defines the name of the stable DOM ref
|
|
669
|
-
*/
|
|
670
|
-
getStableDomRef(refName) {
|
|
671
|
-
const staticAreaResult = this.staticAreaItem && this.staticAreaItem.getStableDomRef(refName);
|
|
672
|
-
return staticAreaResult || this.getDomRef().querySelector(`[data-ui5-stable=${refName}]`);
|
|
673
|
-
}
|
|
674
|
-
|
|
675
778
|
/**
|
|
676
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
|
|
677
781
|
* @public
|
|
678
782
|
*/
|
|
679
|
-
async focus() {
|
|
783
|
+
async focus(focusOptions?: FocusOptions) {
|
|
680
784
|
await this._waitForDomRef();
|
|
681
785
|
|
|
682
786
|
const focusDomRef = this.getFocusDomRef();
|
|
683
787
|
|
|
684
788
|
if (focusDomRef && typeof focusDomRef.focus === "function") {
|
|
685
|
-
focusDomRef.focus();
|
|
789
|
+
focusDomRef.focus(focusOptions);
|
|
686
790
|
}
|
|
687
791
|
}
|
|
688
792
|
|
|
@@ -695,7 +799,7 @@ class UI5Element extends HTMLElement {
|
|
|
695
799
|
* @param bubbles - true, if the event bubbles
|
|
696
800
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
697
801
|
*/
|
|
698
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
802
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
699
803
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
700
804
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
701
805
|
|
|
@@ -706,8 +810,8 @@ class UI5Element extends HTMLElement {
|
|
|
706
810
|
return eventResult;
|
|
707
811
|
}
|
|
708
812
|
|
|
709
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
710
|
-
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}`, {
|
|
711
815
|
detail: data,
|
|
712
816
|
composed: false,
|
|
713
817
|
bubbles,
|
|
@@ -721,7 +825,7 @@ class UI5Element extends HTMLElement {
|
|
|
721
825
|
return noConflictEventResult;
|
|
722
826
|
}
|
|
723
827
|
|
|
724
|
-
const normalEvent = new CustomEvent(name, {
|
|
828
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
725
829
|
detail: data,
|
|
726
830
|
composed: false,
|
|
727
831
|
bubbles,
|
|
@@ -740,8 +844,8 @@ class UI5Element extends HTMLElement {
|
|
|
740
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.
|
|
741
845
|
* @public
|
|
742
846
|
*/
|
|
743
|
-
getSlottedNodes(slotName) {
|
|
744
|
-
return
|
|
847
|
+
getSlottedNodes<T = Node>(slotName: string) {
|
|
848
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]) as Array<T>;
|
|
745
849
|
}
|
|
746
850
|
|
|
747
851
|
/**
|
|
@@ -752,7 +856,7 @@ class UI5Element extends HTMLElement {
|
|
|
752
856
|
* @returns {String|undefined}
|
|
753
857
|
*/
|
|
754
858
|
get effectiveDir() {
|
|
755
|
-
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
|
|
756
860
|
return getEffectiveDir(this);
|
|
757
861
|
}
|
|
758
862
|
|
|
@@ -765,6 +869,10 @@ class UI5Element extends HTMLElement {
|
|
|
765
869
|
return true;
|
|
766
870
|
}
|
|
767
871
|
|
|
872
|
+
get classes(): ClassMap {
|
|
873
|
+
return {};
|
|
874
|
+
}
|
|
875
|
+
|
|
768
876
|
/**
|
|
769
877
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
770
878
|
* @private
|
|
@@ -791,7 +899,7 @@ class UI5Element extends HTMLElement {
|
|
|
791
899
|
* @public
|
|
792
900
|
*/
|
|
793
901
|
getStaticAreaItemDomRef() {
|
|
794
|
-
if (!this.constructor._needsStaticArea()) {
|
|
902
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
795
903
|
throw new Error("This component does not use the static area");
|
|
796
904
|
}
|
|
797
905
|
|
|
@@ -837,7 +945,7 @@ class UI5Element extends HTMLElement {
|
|
|
837
945
|
}
|
|
838
946
|
|
|
839
947
|
Object.defineProperty(proto, prop, {
|
|
840
|
-
get() {
|
|
948
|
+
get(this: UI5Element) {
|
|
841
949
|
if (this._state[prop] !== undefined) {
|
|
842
950
|
return this._state[prop];
|
|
843
951
|
}
|
|
@@ -854,12 +962,24 @@ class UI5Element extends HTMLElement {
|
|
|
854
962
|
return propDefaultValue;
|
|
855
963
|
}
|
|
856
964
|
},
|
|
857
|
-
|
|
965
|
+
|
|
966
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
858
967
|
let isDifferent;
|
|
859
|
-
|
|
968
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
969
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
860
970
|
|
|
971
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
972
|
+
const propertyType = propData.type;
|
|
973
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
861
974
|
const oldState = this._state[prop];
|
|
862
|
-
|
|
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
|
|
863
983
|
isDifferent = !arraysAreEqual(oldState, value);
|
|
864
984
|
} else {
|
|
865
985
|
isDifferent = oldState !== value;
|
|
@@ -889,7 +1009,7 @@ class UI5Element extends HTMLElement {
|
|
|
889
1009
|
|
|
890
1010
|
const propertyName = slotData.propertyName || slotName;
|
|
891
1011
|
Object.defineProperty(proto, propertyName, {
|
|
892
|
-
get() {
|
|
1012
|
+
get(this: UI5Element) {
|
|
893
1013
|
if (this._state[propertyName] !== undefined) {
|
|
894
1014
|
return this._state[propertyName];
|
|
895
1015
|
}
|
|
@@ -907,15 +1027,13 @@ class UI5Element extends HTMLElement {
|
|
|
907
1027
|
* Returns the metadata object for this UI5 Web Component Class
|
|
908
1028
|
* @protected
|
|
909
1029
|
*/
|
|
910
|
-
static
|
|
911
|
-
return {};
|
|
912
|
-
}
|
|
1030
|
+
static metadata: Metadata = {};
|
|
913
1031
|
|
|
914
1032
|
/**
|
|
915
1033
|
* Returns the CSS for this UI5 Web Component Class
|
|
916
1034
|
* @protected
|
|
917
1035
|
*/
|
|
918
|
-
static get styles() {
|
|
1036
|
+
static get styles(): ComponentStylesData {
|
|
919
1037
|
return "";
|
|
920
1038
|
}
|
|
921
1039
|
|
|
@@ -923,7 +1041,7 @@ class UI5Element extends HTMLElement {
|
|
|
923
1041
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
924
1042
|
* @protected
|
|
925
1043
|
*/
|
|
926
|
-
static get staticAreaStyles() {
|
|
1044
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
927
1045
|
return "";
|
|
928
1046
|
}
|
|
929
1047
|
|
|
@@ -934,7 +1052,7 @@ class UI5Element extends HTMLElement {
|
|
|
934
1052
|
*
|
|
935
1053
|
* @protected
|
|
936
1054
|
*/
|
|
937
|
-
static get dependencies() {
|
|
1055
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
938
1056
|
return [];
|
|
939
1057
|
}
|
|
940
1058
|
|
|
@@ -943,21 +1061,21 @@ class UI5Element extends HTMLElement {
|
|
|
943
1061
|
*
|
|
944
1062
|
* @public
|
|
945
1063
|
*/
|
|
946
|
-
static getUniqueDependencies() {
|
|
1064
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
947
1065
|
if (!uniqueDependenciesCache.has(this)) {
|
|
948
1066
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
949
1067
|
uniqueDependenciesCache.set(this, filtered);
|
|
950
1068
|
}
|
|
951
1069
|
|
|
952
|
-
return uniqueDependenciesCache.get(this);
|
|
1070
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
953
1071
|
}
|
|
954
1072
|
|
|
955
1073
|
/**
|
|
956
1074
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
957
1075
|
*
|
|
958
|
-
* @returns {Promise
|
|
1076
|
+
* @returns {Promise}
|
|
959
1077
|
*/
|
|
960
|
-
static whenDependenciesDefined() {
|
|
1078
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
961
1079
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
962
1080
|
}
|
|
963
1081
|
|
|
@@ -985,7 +1103,6 @@ class UI5Element extends HTMLElement {
|
|
|
985
1103
|
]);
|
|
986
1104
|
|
|
987
1105
|
const tag = this.getMetadata().getTag();
|
|
988
|
-
const altTag = this.getMetadata().getAltTag();
|
|
989
1106
|
|
|
990
1107
|
const definedLocally = isTagRegistered(tag);
|
|
991
1108
|
const definedGlobally = customElements.get(tag);
|
|
@@ -995,14 +1112,8 @@ class UI5Element extends HTMLElement {
|
|
|
995
1112
|
} else if (!definedGlobally) {
|
|
996
1113
|
this._generateAccessors();
|
|
997
1114
|
registerTag(tag);
|
|
998
|
-
window.customElements.define(tag, this);
|
|
999
|
-
|
|
1000
|
-
if (altTag && !customElements.get(altTag)) {
|
|
1001
|
-
registerTag(altTag);
|
|
1002
|
-
window.customElements.define(altTag, getClassCopy(this, () => {
|
|
1003
|
-
console.log(`The ${altTag} tag is deprecated and will be removed in the next release, please use ${tag} instead.`); // eslint-disable-line
|
|
1004
|
-
}));
|
|
1005
|
-
}
|
|
1115
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
1116
|
+
preloadLinks(this);
|
|
1006
1117
|
}
|
|
1007
1118
|
return this;
|
|
1008
1119
|
}
|
|
@@ -1024,11 +1135,25 @@ class UI5Element extends HTMLElement {
|
|
|
1024
1135
|
klass = Object.getPrototypeOf(klass);
|
|
1025
1136
|
metadataObjects.unshift(klass.metadata);
|
|
1026
1137
|
}
|
|
1027
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1138
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1028
1139
|
|
|
1029
1140
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1030
1141
|
return this._metadata;
|
|
1031
1142
|
}
|
|
1032
1143
|
}
|
|
1033
1144
|
|
|
1145
|
+
/**
|
|
1146
|
+
* Always use duck-typing to cover all runtimes on the page.
|
|
1147
|
+
* @returns {boolean}
|
|
1148
|
+
*/
|
|
1149
|
+
const instanceOfUI5Element = (object: any): object is UI5Element => {
|
|
1150
|
+
return "isUI5Element" in object;
|
|
1151
|
+
};
|
|
1152
|
+
|
|
1034
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type {
|
|
1156
|
+
ChangeInfo,
|
|
1157
|
+
Renderer,
|
|
1158
|
+
RendererOptions,
|
|
1159
|
+
};
|