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