@ui5/webcomponents-base 0.0.0-50304f58c → 0.0.0-51202adee
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 +4 -0
- package/CHANGELOG.md +426 -0
- package/README.md +53 -7
- package/bundle.esm.js +25 -21
- package/dist/AssetRegistry.d.ts +5 -0
- package/dist/AssetRegistry.js +6 -12
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/Boot.d.ts +8 -0
- package/dist/Boot.js +44 -0
- 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 +23 -0
- package/dist/DOMObserver.js.map +1 -0
- package/dist/Device.d.ts +12 -0
- package/dist/Device.js +84 -816
- package/dist/Device.js.map +1 -0
- package/dist/EventProvider.d.ts +25 -0
- package/dist/EventProvider.js +67 -78
- 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 +115 -118
- package/dist/InitialConfiguration.js.map +1 -0
- package/dist/Keys.d.ts +57 -0
- package/dist/Keys.js +174 -193
- 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 +98 -0
- package/dist/MediaRange.js.map +1 -0
- package/dist/PropertiesFileFormat.d.ts +8 -0
- package/dist/PropertiesFileFormat.js +85 -0
- package/dist/PropertiesFileFormat.js.map +1 -0
- package/dist/Render.d.ts +47 -0
- package/dist/Render.js +143 -0
- 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 -29
- package/dist/StaticArea.js.map +1 -0
- package/dist/StaticAreaItem.d.ts +36 -0
- package/dist/StaticAreaItem.js +92 -101
- 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 +373 -0
- package/dist/UI5Element.js +936 -1138
- package/dist/UI5Element.js.map +1 -0
- package/dist/UI5ElementMetadata.d.ts +150 -0
- package/dist/UI5ElementMetadata.js +278 -267
- 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 +104 -32
- 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 +119 -118
- package/dist/asset-registries/LocaleData.js.map +1 -0
- package/dist/asset-registries/Themes.d.ts +10 -0
- package/dist/asset-registries/Themes.js +39 -77
- package/dist/asset-registries/Themes.js.map +1 -0
- package/dist/asset-registries/i18n.d.ts +23 -0
- package/dist/asset-registries/i18n.js +71 -86
- package/dist/asset-registries/i18n.js.map +1 -0
- package/dist/assets/bundle.esm.3a492d53.js +56 -0
- package/dist/assets-meta/IconCollectionsAlias.d.ts +17 -0
- package/dist/assets-meta/IconCollectionsAlias.js +18 -0
- package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
- package/dist/config/AnimationMode.d.ts +14 -0
- package/dist/config/AnimationMode.js +21 -18
- package/dist/config/AnimationMode.js.map +1 -0
- package/dist/config/CalendarType.d.ts +8 -0
- package/dist/config/CalendarType.js +13 -12
- package/dist/config/CalendarType.js.map +1 -0
- package/dist/config/FormatSettings.d.ts +11 -0
- package/dist/config/FormatSettings.js +10 -8
- package/dist/config/FormatSettings.js.map +1 -0
- package/dist/config/Icons.d.ts +30 -0
- package/dist/config/Icons.js +48 -0
- package/dist/config/Icons.js.map +1 -0
- package/dist/config/Language.d.ts +31 -0
- package/dist/config/Language.js +38 -52
- package/dist/config/Language.js.map +1 -0
- package/dist/config/NoConflict.d.ts +20 -0
- package/dist/config/NoConflict.js +40 -41
- package/dist/config/NoConflict.js.map +1 -0
- package/dist/config/RTL.d.ts +7 -0
- package/dist/config/RTL.js +23 -20
- package/dist/config/RTL.js.map +1 -0
- package/dist/config/Theme.d.ts +28 -0
- package/dist/config/Theme.js +45 -22
- package/dist/config/Theme.js.map +1 -0
- package/dist/config/ThemeRoots.d.ts +4 -0
- package/dist/config/ThemeRoots.js +28 -0
- package/dist/config/ThemeRoots.js.map +1 -0
- package/dist/css/BusyIndicator.css +80 -0
- package/dist/css/FontFace.css +66 -0
- package/dist/css/OverrideFontFace.css +32 -0
- package/dist/css/SystemCSSVars.css +17 -0
- package/dist/decorators/customElement.d.ts +8 -0
- package/dist/decorators/customElement.js +16 -0
- package/dist/decorators/customElement.js.map +1 -0
- package/dist/decorators/event.d.ts +10 -0
- package/dist/decorators/event.js +24 -0
- package/dist/decorators/event.js.map +1 -0
- package/dist/decorators/fastNavigation.d.ts +7 -0
- package/dist/decorators/fastNavigation.js +13 -0
- package/dist/decorators/fastNavigation.js.map +1 -0
- package/dist/decorators/languageAware.d.ts +7 -0
- package/dist/decorators/languageAware.js +13 -0
- package/dist/decorators/languageAware.js.map +1 -0
- package/dist/decorators/property.d.ts +9 -0
- package/dist/decorators/property.js +24 -0
- package/dist/decorators/property.js.map +1 -0
- package/dist/decorators/slot.d.ts +9 -0
- package/dist/decorators/slot.js +37 -0
- package/dist/decorators/slot.js.map +1 -0
- package/dist/decorators/themeAware.d.ts +7 -0
- package/dist/decorators/themeAware.js +13 -0
- package/dist/decorators/themeAware.js.map +1 -0
- package/dist/delegate/ItemNavigation.d.ts +113 -0
- package/dist/delegate/ItemNavigation.js +280 -357
- package/dist/delegate/ItemNavigation.js.map +1 -0
- package/dist/delegate/ResizeHandler.d.ts +24 -0
- package/dist/delegate/ResizeHandler.js +80 -62
- package/dist/delegate/ResizeHandler.js.map +1 -0
- package/dist/delegate/ScrollEnablement.d.ts +49 -0
- package/dist/delegate/ScrollEnablement.js +159 -153
- package/dist/delegate/ScrollEnablement.js.map +1 -0
- package/dist/features/F6Navigation.d.ts +16 -0
- package/dist/features/F6Navigation.js +112 -0
- package/dist/features/F6Navigation.js.map +1 -0
- package/dist/features/OpenUI5Element.d.ts +9 -0
- package/dist/features/OpenUI5Element.js +5 -0
- package/dist/features/OpenUI5Element.js.map +1 -0
- package/dist/features/OpenUI5Enablement.d.ts +11 -0
- package/dist/features/OpenUI5Enablement.js +96 -0
- package/dist/features/OpenUI5Enablement.js.map +1 -0
- package/dist/features/OpenUI5Support.d.ts +23 -0
- package/dist/features/OpenUI5Support.js +93 -86
- package/dist/features/OpenUI5Support.js.map +1 -0
- package/dist/generated/AssetParameters.js +1 -1
- package/dist/generated/VersionInfo.js +10 -0
- package/dist/generated/css/BusyIndicator.css.js +5 -0
- package/dist/generated/css/FontFace.css.js +5 -0
- package/dist/generated/css/OverrideFontFace.css.js +5 -0
- package/dist/generated/css/SystemCSSVars.css.js +5 -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 +44 -0
- package/dist/i18nBundle.d.ts +43 -0
- package/dist/i18nBundle.js +68 -42
- 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 +10 -8
- package/dist/locale/applyDirection.js.map +1 -0
- package/dist/locale/directionChange.d.ts +15 -0
- package/dist/locale/directionChange.js +24 -0
- package/dist/locale/directionChange.js.map +1 -0
- package/dist/locale/getEffectiveDir.d.ts +2 -0
- package/dist/locale/getEffectiveDir.js +24 -0
- 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 +38 -32
- package/dist/theming/CustomStyle.js.map +1 -0
- package/dist/theming/ThemeLoaded.d.ts +5 -0
- package/dist/theming/ThemeLoaded.js +8 -16
- package/dist/theming/ThemeLoaded.js.map +1 -0
- package/dist/theming/applyTheme.d.ts +2 -0
- package/dist/theming/applyTheme.js +62 -71
- package/dist/theming/applyTheme.js.map +1 -0
- package/dist/theming/getConstructableStyle.d.ts +9 -0
- package/dist/theming/getConstructableStyle.js +13 -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 +26 -17
- package/dist/theming/getEffectiveStyle.js.map +1 -0
- package/dist/theming/getStylesString.d.ts +3 -0
- package/dist/theming/getStylesString.js +9 -11
- package/dist/theming/getStylesString.js.map +1 -0
- package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
- package/dist/theming/getThemeDesignerTheme.js +73 -60
- package/dist/theming/getThemeDesignerTheme.js.map +1 -0
- package/dist/theming/preloadLinks.d.ts +3 -0
- package/dist/theming/preloadLinks.js +19 -0
- package/dist/theming/preloadLinks.js.map +1 -0
- package/dist/thirdparty/_merge.d.ts +2 -0
- package/dist/thirdparty/_merge.js +7 -4
- package/dist/thirdparty/_merge.js.map +1 -0
- package/dist/thirdparty/isPlainObject.d.ts +2 -0
- package/dist/thirdparty/isPlainObject.js +11 -10
- package/dist/thirdparty/isPlainObject.js.map +1 -0
- package/dist/thirdparty/merge.d.ts +2 -0
- package/dist/thirdparty/merge.js +4 -8
- package/dist/thirdparty/merge.js.map +1 -0
- package/dist/types/AnimationMode.d.ts +32 -0
- package/dist/types/AnimationMode.js +33 -6
- package/dist/types/AnimationMode.js.map +1 -0
- package/dist/types/CSSColor.d.ts +16 -0
- package/dist/types/CSSColor.js +19 -0
- package/dist/types/CSSColor.js.map +1 -0
- package/dist/types/CalendarType.d.ts +37 -0
- package/dist/types/CalendarType.js +35 -18
- package/dist/types/CalendarType.js.map +1 -0
- package/dist/types/DOMReference.d.ts +17 -0
- package/dist/types/DOMReference.js +25 -0
- package/dist/types/DOMReference.js.map +1 -0
- package/dist/types/DataType.d.ts +25 -0
- package/dist/types/DataType.js +33 -14
- package/dist/types/DataType.js.map +1 -0
- package/dist/types/Float.d.ts +18 -0
- package/dist/types/Float.js +18 -6
- package/dist/types/Float.js.map +1 -0
- package/dist/types/Integer.d.ts +18 -0
- package/dist/types/Integer.js +18 -5
- package/dist/types/Integer.js.map +1 -0
- package/dist/types/InvisibleMessageMode.d.ts +25 -0
- package/dist/types/InvisibleMessageMode.js +27 -0
- package/dist/types/InvisibleMessageMode.js.map +1 -0
- package/dist/types/ItemNavigationBehavior.d.ts +24 -0
- package/dist/types/ItemNavigationBehavior.js +22 -17
- 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 +34 -0
- 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 +23 -0
- package/dist/util/Caret.js.map +1 -0
- package/dist/util/ColorConversion.d.ts +30 -0
- package/dist/util/ColorConversion.js +337 -0
- 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 +57 -68
- package/dist/util/FocusableElements.js.map +1 -0
- package/dist/util/HTMLSanitizer.d.ts +3 -0
- package/dist/util/HTMLSanitizer.js +6 -0
- package/dist/util/HTMLSanitizer.js.map +1 -0
- package/dist/util/InvisibleMessage.d.ts +10 -0
- package/dist/util/InvisibleMessage.js +56 -0
- package/dist/util/InvisibleMessage.js.map +1 -0
- package/dist/util/PopupUtils.d.ts +7 -0
- package/dist/util/PopupUtils.js +74 -0
- package/dist/util/PopupUtils.js.map +1 -0
- package/dist/util/SlotsHelper.d.ts +9 -0
- package/dist/util/SlotsHelper.js +30 -0
- package/dist/util/SlotsHelper.js.map +1 -0
- package/dist/util/StringHelper.d.ts +3 -0
- package/dist/util/StringHelper.js +17 -20
- package/dist/util/StringHelper.js.map +1 -0
- package/dist/util/TabbableElements.d.ts +17 -0
- package/dist/util/TabbableElements.js +53 -43
- package/dist/util/TabbableElements.js.map +1 -0
- package/dist/util/arraysAreEqual.d.ts +2 -0
- package/dist/util/arraysAreEqual.js +10 -12
- package/dist/util/arraysAreEqual.js.map +1 -0
- package/dist/util/clamp.d.ts +9 -0
- package/dist/util/clamp.js +12 -0
- package/dist/util/clamp.js.map +1 -0
- package/dist/util/createLinkInHead.d.ts +7 -0
- package/dist/util/createLinkInHead.js +21 -0
- package/dist/util/createLinkInHead.js.map +1 -0
- package/dist/util/createStyleInHead.d.ts +8 -0
- package/dist/util/createStyleInHead.js +10 -10
- package/dist/util/createStyleInHead.js.map +1 -0
- package/dist/util/debounce.d.ts +2 -0
- package/dist/util/debounce.js +15 -0
- package/dist/util/debounce.js.map +1 -0
- package/dist/util/detectNavigatorLanguage.d.ts +2 -0
- package/dist/util/detectNavigatorLanguage.js +7 -10
- package/dist/util/detectNavigatorLanguage.js.map +1 -0
- package/dist/util/escapeRegex.d.ts +8 -0
- package/dist/util/escapeRegex.js +11 -0
- package/dist/util/escapeRegex.js.map +1 -0
- package/dist/util/formatMessage.d.ts +2 -0
- package/dist/util/formatMessage.js +15 -19
- package/dist/util/formatMessage.js.map +1 -0
- package/dist/util/generateHighlightedMarkup.d.ts +9 -0
- package/dist/util/generateHighlightedMarkup.js +41 -0
- package/dist/util/generateHighlightedMarkup.js.map +1 -0
- package/dist/util/getActiveElement.d.ts +2 -0
- package/dist/util/getActiveElement.js +6 -8
- package/dist/util/getActiveElement.js.map +1 -0
- package/dist/util/getClassCopy.d.ts +400 -0
- package/dist/util/getClassCopy.js +10 -0
- package/dist/util/getClassCopy.js.map +1 -0
- package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
- package/dist/util/getDesigntimePropertyAsArray.js +4 -3
- package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
- package/dist/util/getEffectiveContentDensity.d.ts +2 -0
- package/dist/util/getEffectiveContentDensity.js +4 -0
- package/dist/util/getEffectiveContentDensity.js.map +1 -0
- package/dist/util/getEffectiveScrollbarStyle.d.ts +2 -0
- package/dist/util/getEffectiveScrollbarStyle.js +4 -0
- package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
- package/dist/util/getFastNavigationGroups.d.ts +2 -0
- package/dist/util/getFastNavigationGroups.js +51 -0
- package/dist/util/getFastNavigationGroups.js.map +1 -0
- package/dist/util/getFileExtension.d.ts +12 -0
- package/dist/util/getFileExtension.js +9 -11
- package/dist/util/getFileExtension.js.map +1 -0
- package/dist/util/getNormalizedTarget.d.ts +7 -0
- package/dist/util/getNormalizedTarget.js +14 -0
- package/dist/util/getNormalizedTarget.js.map +1 -0
- package/dist/util/getSingletonElementInstance.d.ts +2 -0
- package/dist/util/getSingletonElementInstance.js +7 -10
- package/dist/util/getSingletonElementInstance.js.map +1 -0
- package/dist/util/isElementClickable.d.ts +2 -0
- package/dist/util/isElementClickable.js +16 -0
- package/dist/util/isElementClickable.js.map +1 -0
- package/dist/util/isElementHidden.d.ts +2 -0
- package/dist/util/isElementHidden.js +8 -0
- package/dist/util/isElementHidden.js.map +1 -0
- package/dist/util/isElementInView.d.ts +6 -0
- package/dist/util/isElementInView.js +12 -0
- package/dist/util/isElementInView.js.map +1 -0
- package/dist/util/isElementTabbable.d.ts +9 -0
- package/dist/util/isElementTabbable.js +30 -0
- package/dist/util/isElementTabbable.js.map +1 -0
- package/dist/util/isValidPropertyName.d.ts +8 -0
- package/dist/util/isValidPropertyName.js +16 -17
- package/dist/util/isValidPropertyName.js.map +1 -0
- package/dist/util/whenDOMReady.d.ts +2 -0
- package/dist/util/whenDOMReady.js +11 -10
- package/dist/util/whenDOMReady.js.map +1 -0
- package/dist/util/willShowContent.d.ts +2 -0
- package/dist/util/willShowContent.js +7 -0
- package/dist/util/willShowContent.js.map +1 -0
- package/dist/validateThemeRoot.d.ts +2 -0
- package/dist/validateThemeRoot.js +47 -0
- package/dist/validateThemeRoot.js.map +1 -0
- package/index.js +1 -1
- package/lib/generate-asset-parameters/index.js +8 -5
- package/lib/generate-styles/index.js +26 -0
- package/lib/generate-version-info/index.js +32 -0
- package/package-scripts.js +48 -28
- package/package.json +20 -13
- package/src/AssetRegistry.ts +11 -0
- package/src/Boot.ts +61 -0
- package/src/CSP.ts +66 -0
- package/src/CustomElementsRegistry.ts +98 -0
- package/src/CustomElementsScope.ts +33 -0
- package/src/{CustomElementsScope.js → CustomElementsScopeUtils.ts} +14 -7
- package/src/DOMObserver.ts +28 -0
- package/src/Device.ts +124 -0
- package/src/EventProvider.ts +87 -0
- package/src/FeaturesRegistry.ts +14 -0
- package/src/FontFace.ts +31 -0
- package/src/InitialConfiguration.ts +207 -0
- package/src/Keys.ts +295 -0
- package/src/ManagedStyles.ts +92 -0
- package/src/MarkedEvents.ts +20 -0
- package/src/MediaRange.ts +110 -0
- package/{dist/util/parseProperties.js → src/PropertiesFileFormat.ts} +14 -8
- package/src/Render.ts +180 -0
- package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
- package/src/Runtimes.ts +114 -0
- package/src/StaticArea.ts +3 -0
- package/src/StaticAreaItem.ts +113 -0
- package/src/SystemCSSVars.ts +10 -0
- package/src/{Theming.js → Theming.ts} +0 -0
- package/src/{UI5Element.js → UI5Element.ts} +347 -361
- package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +178 -69
- package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
- package/src/animations/animate.ts +64 -0
- package/src/animations/scroll.ts +21 -0
- package/src/animations/{slideDown.js → slideDown.ts} +27 -34
- package/src/animations/{slideUp.js → slideUp.ts} +28 -32
- package/src/asset-registries/Icons.ts +162 -0
- package/src/asset-registries/Illustrations.ts +75 -0
- package/src/asset-registries/LocaleData.ts +172 -0
- package/src/asset-registries/Themes.ts +67 -0
- package/src/asset-registries/i18n.ts +118 -0
- package/src/assets-meta/IconCollectionsAlias.ts +18 -0
- package/src/config/AnimationMode.ts +33 -0
- package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
- package/src/config/FormatSettings.ts +21 -0
- package/src/config/Icons.ts +59 -0
- package/src/config/Language.ts +72 -0
- package/src/config/NoConflict.ts +67 -0
- package/src/config/{RTL.js → RTL.ts} +14 -4
- package/src/config/Theme.ts +64 -0
- package/src/config/ThemeRoots.ts +41 -0
- package/src/css/BusyIndicator.css +80 -0
- package/src/css/FontFace.css +66 -0
- package/src/css/OverrideFontFace.css +32 -0
- package/src/css/SystemCSSVars.css +17 -0
- package/src/decorators/customElement.ts +17 -0
- package/src/decorators/event.ts +28 -0
- package/src/decorators/fastNavigation.ts +14 -0
- package/src/decorators/languageAware.ts +14 -0
- package/src/decorators/property.ts +30 -0
- package/src/decorators/slot.ts +49 -0
- package/src/decorators/themeAware.ts +14 -0
- package/src/delegate/ItemNavigation.ts +393 -0
- package/src/delegate/ResizeHandler.ts +95 -0
- 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/{getSharedResource.js → getSharedResource.ts} +3 -3
- package/src/global.d.ts +44 -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.ts +18 -0
- package/src/locale/directionChange.ts +34 -0
- package/src/locale/getEffectiveDir.ts +28 -0
- package/src/locale/{getLocale.js → getLocale.ts} +12 -7
- package/src/locale/languageChange.ts +24 -0
- package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
- package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +5 -3
- package/src/renderer/LitRenderer.ts +60 -0
- package/src/renderer/directives/style-map.js +72 -0
- package/src/renderer/executeTemplate.ts +40 -0
- package/src/theming/CustomStyle.ts +62 -0
- package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
- package/src/theming/applyTheme.ts +90 -0
- package/src/theming/getConstructableStyle.ts +31 -0
- package/src/theming/getEffectiveLinksHrefs.ts +26 -0
- package/src/theming/getEffectiveStyle.ts +41 -0
- 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.ts +20 -0
- 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 +82 -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.ts +39 -0
- package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
- package/src/util/TabbableElements.ts +70 -0
- package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
- package/src/util/clamp.ts +12 -0
- package/src/util/createLinkInHead.ts +25 -0
- package/src/util/{createStyleInHead.js → createStyleInHead.ts} +4 -2
- package/src/util/debounce.ts +18 -0
- package/src/util/{detectNavigatorLanguage.js → detectNavigatorLanguage.ts} +1 -1
- package/src/util/escapeRegex.ts +11 -0
- package/src/util/{formatMessage.js → formatMessage.ts} +4 -3
- package/src/util/generateHighlightedMarkup.ts +43 -0
- package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
- package/src/util/getClassCopy.ts +12 -0
- package/src/util/{getDesigntimePropertyAsArray.js → getDesigntimePropertyAsArray.ts} +1 -1
- package/src/util/getEffectiveContentDensity.ts +5 -0
- package/src/util/getEffectiveScrollbarStyle.ts +5 -0
- package/src/util/getFastNavigationGroups.ts +63 -0
- package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
- package/src/util/getNormalizedTarget.ts +16 -0
- package/src/util/{getSingletonElementInstance.js → getSingletonElementInstance.ts} +1 -1
- package/src/util/isElementClickable.ts +19 -0
- package/src/util/isElementHidden.ts +9 -0
- package/src/util/isElementInView.ts +15 -0
- package/src/util/isElementTabbable.ts +37 -0
- package/src/util/{isValidPropertyName.js → isValidPropertyName.ts} +1 -1
- package/src/util/{whenDOMReady.js → whenDOMReady.ts} +1 -1
- package/src/util/willShowContent.ts +7 -0
- package/src/validateThemeRoot.ts +58 -0
- package/tsconfig.json +13 -0
- package/used-modules.txt +10 -0
- package/bundle.es5.js +0 -28
- package/config/.eslintrc.js +0 -3
- package/config/rollup.config.js +0 -1
- package/dist/RenderScheduler.js +0 -169
- package/dist/SVGIconRegistry.js +0 -73
- package/dist/animations/config.js +0 -5
- package/dist/boot.js +0 -34
- package/dist/compatibility/DOMObserver.js +0 -62
- package/dist/compatibility/patchNodeValue.js +0 -24
- package/dist/compatibility/whenPolyfillLoaded.js +0 -26
- package/dist/config/AssetsPath.js +0 -17
- package/dist/delegate/CustomResize.js +0 -78
- package/dist/delegate/NativeResize.js +0 -45
- package/dist/features/PropertiesFormatSupport.js +0 -8
- package/dist/features/browsersupport/Edge.js +0 -6
- package/dist/features/browsersupport/IE11.js +0 -42
- package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
- package/dist/renderer/ifDefined.js +0 -21
- package/dist/renderer/scopeHTML.js +0 -32
- package/dist/resources/bundle.es5.js +0 -225
- package/dist/resources/bundle.es5.js.map +0 -1
- package/dist/resources/bundle.esm.js +0 -129
- 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 -42
- package/dist/test-resources/pages/Configuration.html +0 -20
- package/dist/test-resources/pages/ConfigurationScript.html +0 -36
- 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 -40
- package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
- package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
- package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
- package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
- package/dist/test-resources/specs/StaticArea.spec.js +0 -34
- package/dist/test-resources/specs/Theming.spec.js +0 -31
- package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -240
- package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -96
- package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -73
- package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
- package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
- package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
- package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
- package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
- package/dist/theming/CSSVarsPonyfill.js +0 -68
- package/dist/theming/adaptCSSForIE.js +0 -95
- package/dist/theming/createComponentStyleTag.js +0 -54
- package/dist/theming/createThemePropertiesStyleTag.js +0 -20
- package/dist/thirdparty/Array.from.js +0 -16
- package/dist/thirdparty/Array.prototype.fill.js +0 -44
- package/dist/thirdparty/Array.prototype.find.js +0 -46
- package/dist/thirdparty/Array.prototype.includes.js +0 -51
- package/dist/thirdparty/Element.prototype.closest.js +0 -11
- package/dist/thirdparty/Element.prototype.matches.js +0 -6
- package/dist/thirdparty/Map.prototype.keys.js +0 -9
- package/dist/thirdparty/Number.isInteger.js +0 -5
- package/dist/thirdparty/Number.isNaN.js +0 -1
- package/dist/thirdparty/Number.parseFloat.js +0 -1
- package/dist/thirdparty/Number.parseInt.js +0 -1
- package/dist/thirdparty/Object.assign.js +0 -31
- package/dist/thirdparty/Object.entries.js +0 -11
- package/dist/thirdparty/Symbol.js +0 -2
- package/dist/thirdparty/WeakSet.js +0 -27
- package/dist/thirdparty/es6-string-methods.js +0 -182
- package/dist/thirdparty/events-polyfills.js +0 -89
- package/dist/thirdparty/fetch.js +0 -1
- package/dist/thirdparty/template.js +0 -600
- package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
- package/dist/types/CSSSize.js +0 -9
- package/dist/types/CalendarSelection.js +0 -17
- package/dist/types/PopupState.js +0 -37
- package/dist/util/EffectiveAssetPath.js +0 -27
- 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/isSlot.js +0 -3
- package/dist/util/setToArray.js +0 -10
- package/dist/webcomponentsjs/LICENSE.md +0 -19
- package/dist/webcomponentsjs/README.md +0 -229
- package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
- package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
- package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
- package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
- package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
- package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
- package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
- package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
- package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
- package/dist/webcomponentsjs/package.json +0 -46
- package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
- package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
- package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
- package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
- package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
- package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
- package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
- package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
- package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
- package/src/AssetRegistry.js +0 -12
- package/src/CustomElementsRegistry.js +0 -39
- package/src/Device.js +0 -823
- package/src/EventProvider.js +0 -81
- package/src/FeaturesRegistry.js +0 -11
- package/src/FontFace.js +0 -118
- package/src/InitialConfiguration.js +0 -150
- package/src/Keys.js +0 -197
- package/src/RenderScheduler.js +0 -169
- package/src/SVGIconRegistry.js +0 -73
- package/src/StaticArea.js +0 -31
- package/src/StaticAreaItem.js +0 -108
- 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 -32
- package/src/asset-registries/LocaleData.js +0 -135
- package/src/asset-registries/Themes.js +0 -88
- package/src/asset-registries/i18n.js +0 -110
- package/src/boot.js +0 -34
- package/src/compatibility/DOMObserver.js +0 -62
- package/src/compatibility/patchNodeValue.js +0 -24
- package/src/compatibility/whenPolyfillLoaded.js +0 -26
- package/src/config/AnimationMode.js +0 -23
- package/src/config/AssetsPath.js +0 -17
- package/src/config/FormatSettings.js +0 -13
- package/src/config/Language.js +0 -70
- package/src/config/NoConflict.js +0 -51
- package/src/config/Theme.js +0 -28
- package/src/delegate/CustomResize.js +0 -78
- package/src/delegate/ItemNavigation.js +0 -393
- package/src/delegate/NativeResize.js +0 -45
- package/src/delegate/ResizeHandler.js +0 -65
- package/src/delegate/ScrollEnablement.js +0 -159
- package/src/features/OpenUI5Support.js +0 -90
- package/src/features/PropertiesFormatSupport.js +0 -8
- package/src/features/browsersupport/Edge.js +0 -6
- package/src/features/browsersupport/IE11.js +0 -42
- package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
- package/src/i18nBundle.js +0 -52
- package/src/locale/RTLAwareRegistry.js +0 -14
- package/src/locale/applyDirection.js +0 -15
- 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/CSSVarsPonyfill.js +0 -68
- package/src/theming/CustomStyle.js +0 -40
- package/src/theming/adaptCSSForIE.js +0 -95
- package/src/theming/applyTheme.js +0 -84
- package/src/theming/createComponentStyleTag.js +0 -54
- package/src/theming/createThemePropertiesStyleTag.js +0 -20
- package/src/theming/getConstructableStyle.js +0 -29
- package/src/theming/getEffectiveStyle.js +0 -23
- package/src/theming/getStylesString.js +0 -13
- package/src/theming/getThemeDesignerTheme.js +0 -67
- package/src/thirdparty/Array.from.js +0 -16
- package/src/thirdparty/Array.prototype.fill.js +0 -44
- package/src/thirdparty/Array.prototype.find.js +0 -46
- package/src/thirdparty/Array.prototype.includes.js +0 -51
- package/src/thirdparty/Element.prototype.closest.js +0 -11
- package/src/thirdparty/Element.prototype.matches.js +0 -6
- package/src/thirdparty/Map.prototype.keys.js +0 -9
- package/src/thirdparty/Number.isInteger.js +0 -5
- package/src/thirdparty/Number.isNaN.js +0 -1
- package/src/thirdparty/Number.parseFloat.js +0 -1
- package/src/thirdparty/Number.parseInt.js +0 -1
- package/src/thirdparty/Object.assign.js +0 -31
- package/src/thirdparty/Object.entries.js +0 -11
- package/src/thirdparty/Symbol.js +0 -2
- package/src/thirdparty/WeakSet.js +0 -27
- package/src/thirdparty/es6-string-methods.js +0 -182
- package/src/thirdparty/events-polyfills.js +0 -89
- package/src/thirdparty/fetch.js +0 -1
- package/src/thirdparty/merge.js +0 -10
- package/src/thirdparty/template.js +0 -600
- package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
- package/src/types/AnimationMode.js +0 -7
- package/src/types/CSSSize.js +0 -9
- package/src/types/CalendarSelection.js +0 -17
- 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 -21
- package/src/types/NavigationMode.js +0 -7
- package/src/types/PopupState.js +0 -37
- package/src/types/ValueState.js +0 -22
- package/src/util/AriaLabelHelper.js +0 -41
- package/src/util/EffectiveAssetPath.js +0 -27
- package/src/util/FocusableElements.js +0 -73
- package/src/util/TabbableElements.js +0 -47
- package/src/util/encodeCSS.js +0 -24
- package/src/util/findNodeOwner.js +0 -35
- package/src/util/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/isSlot.js +0 -3
- package/src/util/parseProperties.js +0 -89
- package/src/util/setToArray.js +0 -10
|
@@ -1,40 +1,58 @@
|
|
|
1
1
|
import merge from "./thirdparty/merge.js";
|
|
2
|
-
import boot from "./
|
|
3
|
-
import UI5ElementMetadata
|
|
2
|
+
import { boot } from "./Boot.js";
|
|
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
|
-
import
|
|
11
|
+
import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
|
|
6
12
|
import StaticAreaItem from "./StaticAreaItem.js";
|
|
7
|
-
import
|
|
13
|
+
import updateShadowRoot from "./updateShadowRoot.js";
|
|
14
|
+
import { renderDeferred, renderImmediately, cancelRender } from "./Render.js";
|
|
8
15
|
import { registerTag, isTagRegistered, recordTagRegistrationFailure } from "./CustomElementsRegistry.js";
|
|
9
|
-
import
|
|
16
|
+
import { observeDOMNode, unobserveDOMNode } from "./DOMObserver.js";
|
|
10
17
|
import { skipOriginalEvent } from "./config/NoConflict.js";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import createComponentStyleTag from "./theming/createComponentStyleTag.js";
|
|
14
|
-
import getEffectiveStyle from "./theming/getEffectiveStyle.js";
|
|
15
|
-
import Integer from "./types/Integer.js";
|
|
16
|
-
import Float from "./types/Float.js";
|
|
18
|
+
import getEffectiveDir from "./locale/getEffectiveDir.js";
|
|
19
|
+
import DataType from "./types/DataType.js";
|
|
17
20
|
import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
|
|
18
21
|
import isValidPropertyName from "./util/isValidPropertyName.js";
|
|
19
|
-
import
|
|
22
|
+
import { getSlotName, getSlottedNodesList } from "./util/SlotsHelper.js";
|
|
20
23
|
import arraysAreEqual from "./util/arraysAreEqual.js";
|
|
21
24
|
import { markAsRtlAware } from "./locale/RTLAwareRegistry.js";
|
|
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;
|
|
27
47
|
|
|
28
|
-
|
|
29
|
-
const GLOBAL_DIR_CSS_VAR = "--_ui5_dir";
|
|
48
|
+
type SlotChangeListener = (this: HTMLSlotElement, ev: Event) => void;
|
|
30
49
|
|
|
31
50
|
/**
|
|
32
51
|
* Triggers re-rendering of a UI5Element instance due to state change.
|
|
33
|
-
*
|
|
34
|
-
* @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.
|
|
35
53
|
* @private
|
|
36
54
|
*/
|
|
37
|
-
function _invalidate(changeInfo) {
|
|
55
|
+
function _invalidate(this: UI5Element, changeInfo: ChangeInfo) {
|
|
38
56
|
// Invalidation should be suppressed: 1) before the component is rendered for the first time 2) and during the execution of onBeforeRendering
|
|
39
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)
|
|
40
58
|
if (this._suppressInvalidation) {
|
|
@@ -45,24 +63,48 @@ function _invalidate(changeInfo) {
|
|
|
45
63
|
this.onInvalidation(changeInfo);
|
|
46
64
|
|
|
47
65
|
this._changedState.push(changeInfo);
|
|
48
|
-
|
|
49
|
-
this._eventProvider.fireEvent("
|
|
66
|
+
renderDeferred(this);
|
|
67
|
+
this._eventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
|
|
50
68
|
}
|
|
51
69
|
|
|
70
|
+
let metadata = {} as Metadata;
|
|
71
|
+
|
|
52
72
|
/**
|
|
53
73
|
* Base class for all UI5 Web Components
|
|
54
74
|
*
|
|
55
75
|
* @class
|
|
56
76
|
* @constructor
|
|
57
77
|
* @author SAP SE
|
|
58
|
-
* @alias sap.ui.
|
|
78
|
+
* @alias sap.ui.webc.base.UI5Element
|
|
59
79
|
* @extends HTMLElement
|
|
60
80
|
* @public
|
|
61
81
|
*/
|
|
62
|
-
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
|
+
|
|
63
104
|
constructor() {
|
|
64
105
|
super();
|
|
65
106
|
|
|
107
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
66
108
|
this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
|
|
67
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
|
|
68
110
|
this._inDOM = false; // A flag telling whether the UI5Element is currently in the DOM tree of the document or not
|
|
@@ -75,10 +117,15 @@ class UI5Element extends HTMLElement {
|
|
|
75
117
|
deferredResolve = resolve;
|
|
76
118
|
});
|
|
77
119
|
this._domRefReadyPromise._deferredResolve = deferredResolve;
|
|
120
|
+
this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
|
|
121
|
+
|
|
122
|
+
this._state = { ...ctor.getMetadata().getInitialState() };
|
|
78
123
|
|
|
79
|
-
this._initializeState();
|
|
80
124
|
this._upgradeAllProperties();
|
|
81
|
-
|
|
125
|
+
|
|
126
|
+
if (ctor._needsShadowDOM()) {
|
|
127
|
+
this.attachShadow({ mode: "open" });
|
|
128
|
+
}
|
|
82
129
|
}
|
|
83
130
|
|
|
84
131
|
/**
|
|
@@ -95,33 +142,19 @@ class UI5Element extends HTMLElement {
|
|
|
95
142
|
return this.__id;
|
|
96
143
|
}
|
|
97
144
|
|
|
98
|
-
/**
|
|
99
|
-
* @private
|
|
100
|
-
*/
|
|
101
|
-
_initializeContainers() {
|
|
102
|
-
const needsShadowDOM = this.constructor._needsShadowDOM();
|
|
103
|
-
const needsStaticArea = this.constructor._needsStaticArea();
|
|
104
|
-
|
|
105
|
-
// Init Shadow Root
|
|
106
|
-
if (needsShadowDOM) {
|
|
107
|
-
this.attachShadow({ mode: "open" });
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Init StaticAreaItem only if needed
|
|
111
|
-
if (needsStaticArea) {
|
|
112
|
-
this.staticAreaItem = new StaticAreaItem(this);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
145
|
/**
|
|
117
146
|
* Do not call this method from derivatives of UI5Element, use "onEnterDOM" only
|
|
118
147
|
* @private
|
|
119
148
|
*/
|
|
120
149
|
async connectedCallback() {
|
|
121
|
-
this.
|
|
150
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
151
|
+
|
|
152
|
+
this.setAttribute(ctor.getMetadata().getPureTag(), "");
|
|
153
|
+
if (ctor.getMetadata().supportsF6FastNavigation()) {
|
|
154
|
+
this.setAttribute("data-sap-ui-fastnavgroup", "true");
|
|
155
|
+
}
|
|
122
156
|
|
|
123
|
-
const
|
|
124
|
-
const slotsAreManaged = this.constructor.getMetadata().slotsAreManaged();
|
|
157
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
125
158
|
|
|
126
159
|
this._inDOM = true;
|
|
127
160
|
|
|
@@ -131,21 +164,14 @@ class UI5Element extends HTMLElement {
|
|
|
131
164
|
await this._processChildren();
|
|
132
165
|
}
|
|
133
166
|
|
|
134
|
-
if (needsShadowDOM && !this.shadowRoot) { // Workaround for Firefox74 bug
|
|
135
|
-
await Promise.resolve();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
167
|
if (!this._inDOM) { // Component removed from DOM while _processChildren was running
|
|
139
168
|
return;
|
|
140
169
|
}
|
|
141
170
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
this._domRefReadyPromise._deferredResolve();
|
|
171
|
+
renderImmediately(this);
|
|
172
|
+
this._domRefReadyPromise._deferredResolve!();
|
|
145
173
|
this._fullyConnected = true;
|
|
146
|
-
|
|
147
|
-
this.onEnterDOM();
|
|
148
|
-
}
|
|
174
|
+
this.onEnterDOM();
|
|
149
175
|
}
|
|
150
176
|
|
|
151
177
|
/**
|
|
@@ -153,9 +179,8 @@ class UI5Element extends HTMLElement {
|
|
|
153
179
|
* @private
|
|
154
180
|
*/
|
|
155
181
|
disconnectedCallback() {
|
|
156
|
-
const
|
|
157
|
-
const
|
|
158
|
-
const slotsAreManaged = this.constructor.getMetadata().slotsAreManaged();
|
|
182
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
183
|
+
const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
|
|
159
184
|
|
|
160
185
|
this._inDOM = false;
|
|
161
186
|
|
|
@@ -163,46 +188,66 @@ class UI5Element extends HTMLElement {
|
|
|
163
188
|
this._stopObservingDOMChildren();
|
|
164
189
|
}
|
|
165
190
|
|
|
166
|
-
if (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (typeof this.onExitDOM === "function") {
|
|
170
|
-
this.onExitDOM();
|
|
171
|
-
}
|
|
172
|
-
this._fullyConnected = false;
|
|
173
|
-
}
|
|
191
|
+
if (this._fullyConnected) {
|
|
192
|
+
this.onExitDOM();
|
|
193
|
+
this._fullyConnected = false;
|
|
174
194
|
}
|
|
175
195
|
|
|
176
|
-
if (
|
|
177
|
-
this.staticAreaItem.
|
|
196
|
+
if (this.staticAreaItem && this.staticAreaItem.parentElement) {
|
|
197
|
+
this.staticAreaItem.parentElement.removeChild(this.staticAreaItem);
|
|
178
198
|
}
|
|
179
199
|
|
|
180
|
-
|
|
200
|
+
cancelRender(this);
|
|
181
201
|
}
|
|
182
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
|
+
|
|
183
227
|
/**
|
|
184
228
|
* @private
|
|
185
229
|
*/
|
|
186
230
|
_startObservingDOMChildren() {
|
|
187
|
-
const
|
|
231
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
232
|
+
const shouldObserveChildren = ctor.getMetadata().hasSlots();
|
|
188
233
|
if (!shouldObserveChildren) {
|
|
189
234
|
return;
|
|
190
235
|
}
|
|
191
236
|
|
|
192
|
-
const canSlotText =
|
|
237
|
+
const canSlotText = ctor.getMetadata().canSlotText();
|
|
193
238
|
const mutationObserverOptions = {
|
|
194
239
|
childList: true,
|
|
195
240
|
subtree: canSlotText,
|
|
196
241
|
characterData: canSlotText,
|
|
197
242
|
};
|
|
198
|
-
|
|
243
|
+
observeDOMNode(this, this._processChildren.bind(this) as MutationCallback, mutationObserverOptions);
|
|
199
244
|
}
|
|
200
245
|
|
|
201
246
|
/**
|
|
202
247
|
* @private
|
|
203
248
|
*/
|
|
204
249
|
_stopObservingDOMChildren() {
|
|
205
|
-
|
|
250
|
+
unobserveDOMNode(this);
|
|
206
251
|
}
|
|
207
252
|
|
|
208
253
|
/**
|
|
@@ -210,7 +255,7 @@ class UI5Element extends HTMLElement {
|
|
|
210
255
|
* @private
|
|
211
256
|
*/
|
|
212
257
|
async _processChildren() {
|
|
213
|
-
const hasSlots = this.constructor.getMetadata().hasSlots();
|
|
258
|
+
const hasSlots = (this.constructor as typeof UI5Element).getMetadata().hasSlots();
|
|
214
259
|
if (hasSlots) {
|
|
215
260
|
await this._updateSlots();
|
|
216
261
|
}
|
|
@@ -220,33 +265,37 @@ class UI5Element extends HTMLElement {
|
|
|
220
265
|
* @private
|
|
221
266
|
*/
|
|
222
267
|
async _updateSlots() {
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
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>;
|
|
226
272
|
|
|
227
|
-
const slotsCachedContentMap = new Map(); // Store here the content of each slot before the mutation occurred
|
|
228
|
-
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
|
|
229
275
|
|
|
230
276
|
// Init the _state object based on the supported slots and store the previous values
|
|
231
277
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
232
278
|
const propertyName = slotData.propertyName || slotName;
|
|
233
279
|
propertyNameToSlotMap.set(propertyName, slotName);
|
|
234
|
-
slotsCachedContentMap.set(propertyName, [...this._state[propertyName]]);
|
|
280
|
+
slotsCachedContentMap.set(propertyName, [...(this._state[propertyName] as Array<SlotValue>)]);
|
|
235
281
|
this._clearSlot(slotName, slotData);
|
|
236
282
|
}
|
|
237
283
|
|
|
238
|
-
const autoIncrementMap = new Map();
|
|
239
|
-
const slottedChildrenMap = new Map();
|
|
284
|
+
const autoIncrementMap = new Map<string, number>();
|
|
285
|
+
const slottedChildrenMap = new Map<string, Array<{child: Node, idx: number }>>();
|
|
240
286
|
|
|
241
287
|
const allChildrenUpgraded = domChildren.map(async (child, idx) => {
|
|
242
288
|
// Determine the type of the child (mainly by the slot attribute)
|
|
243
|
-
const slotName =
|
|
289
|
+
const slotName = getSlotName(child);
|
|
244
290
|
const slotData = slotsMap[slotName];
|
|
245
291
|
|
|
246
292
|
// Check if the slotName is supported
|
|
247
293
|
if (slotData === undefined) {
|
|
248
|
-
|
|
249
|
-
|
|
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
|
+
|
|
250
299
|
return;
|
|
251
300
|
}
|
|
252
301
|
|
|
@@ -254,7 +303,7 @@ class UI5Element extends HTMLElement {
|
|
|
254
303
|
if (slotData.individualSlots) {
|
|
255
304
|
const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
|
|
256
305
|
autoIncrementMap.set(slotName, nextIndex);
|
|
257
|
-
child._individualSlot = `${slotName}-${nextIndex}`;
|
|
306
|
+
(child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
|
|
258
307
|
}
|
|
259
308
|
|
|
260
309
|
// Await for not-yet-defined custom elements
|
|
@@ -276,22 +325,26 @@ class UI5Element extends HTMLElement {
|
|
|
276
325
|
}
|
|
277
326
|
}
|
|
278
327
|
|
|
279
|
-
child =
|
|
328
|
+
child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
|
|
280
329
|
|
|
281
330
|
// Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
|
|
282
|
-
if (child
|
|
283
|
-
|
|
331
|
+
if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
|
|
332
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
333
|
+
|
|
334
|
+
if (childChangeListener) {
|
|
335
|
+
child.attachInvalidate.call(child, childChangeListener);
|
|
336
|
+
}
|
|
284
337
|
}
|
|
285
338
|
|
|
286
339
|
// Listen for the slotchange event if the child is a slot itself
|
|
287
|
-
if (
|
|
340
|
+
if (child instanceof HTMLSlotElement) {
|
|
288
341
|
this._attachSlotChange(child, slotName);
|
|
289
342
|
}
|
|
290
343
|
|
|
291
344
|
const propertyName = slotData.propertyName || slotName;
|
|
292
345
|
|
|
293
346
|
if (slottedChildrenMap.has(propertyName)) {
|
|
294
|
-
slottedChildrenMap.get(propertyName)
|
|
347
|
+
slottedChildrenMap.get(propertyName)!.push({ child, idx });
|
|
295
348
|
} else {
|
|
296
349
|
slottedChildrenMap.set(propertyName, [{ child, idx }]);
|
|
297
350
|
}
|
|
@@ -309,10 +362,10 @@ class UI5Element extends HTMLElement {
|
|
|
309
362
|
let invalidated = false;
|
|
310
363
|
for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
|
|
311
364
|
const propertyName = slotData.propertyName || slotName;
|
|
312
|
-
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)
|
|
365
|
+
if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
|
|
313
366
|
_invalidate.call(this, {
|
|
314
367
|
type: "slot",
|
|
315
|
-
name: propertyNameToSlotMap.get(propertyName)
|
|
368
|
+
name: propertyNameToSlotMap.get(propertyName)!,
|
|
316
369
|
reason: "children",
|
|
317
370
|
});
|
|
318
371
|
invalidated = true;
|
|
@@ -334,16 +387,20 @@ class UI5Element extends HTMLElement {
|
|
|
334
387
|
* Removes all children from the slot and detaches listeners, if any
|
|
335
388
|
* @private
|
|
336
389
|
*/
|
|
337
|
-
_clearSlot(slotName, slotData) {
|
|
390
|
+
_clearSlot(slotName: string, slotData: Slot) {
|
|
338
391
|
const propertyName = slotData.propertyName || slotName;
|
|
339
|
-
const children = this._state[propertyName]
|
|
392
|
+
const children = this._state[propertyName] as Array<SlotValue>;
|
|
340
393
|
|
|
341
394
|
children.forEach(child => {
|
|
342
|
-
if (child
|
|
343
|
-
|
|
395
|
+
if (instanceOfUI5Element(child)) {
|
|
396
|
+
const childChangeListener = this._getChildChangeListener(slotName);
|
|
397
|
+
|
|
398
|
+
if (childChangeListener) {
|
|
399
|
+
child.detachInvalidate.call(child, childChangeListener);
|
|
400
|
+
}
|
|
344
401
|
}
|
|
345
402
|
|
|
346
|
-
if (
|
|
403
|
+
if (child instanceof HTMLSlotElement) {
|
|
347
404
|
this._detachSlotChange(child, slotName);
|
|
348
405
|
}
|
|
349
406
|
});
|
|
@@ -354,32 +411,32 @@ class UI5Element extends HTMLElement {
|
|
|
354
411
|
/**
|
|
355
412
|
* Attach a callback that will be executed whenever the component is invalidated
|
|
356
413
|
*
|
|
357
|
-
* @param callback
|
|
358
|
-
* @
|
|
414
|
+
* @param {InvalidationInfo} callback
|
|
415
|
+
* @public
|
|
359
416
|
*/
|
|
360
|
-
|
|
361
|
-
this._eventProvider.attachEvent("
|
|
417
|
+
attachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
418
|
+
this._eventProvider.attachEvent("invalidate", callback);
|
|
362
419
|
}
|
|
363
420
|
|
|
364
421
|
/**
|
|
365
422
|
* Detach the callback that is executed whenever the component is invalidated
|
|
366
423
|
*
|
|
367
|
-
* @param callback
|
|
368
|
-
* @
|
|
424
|
+
* @param {InvalidationInfo} callback
|
|
425
|
+
* @public
|
|
369
426
|
*/
|
|
370
|
-
|
|
371
|
-
this._eventProvider.detachEvent("
|
|
427
|
+
detachInvalidate(callback: (param: InvalidationInfo) => void) {
|
|
428
|
+
this._eventProvider.detachEvent("invalidate", callback);
|
|
372
429
|
}
|
|
373
430
|
|
|
374
431
|
/**
|
|
375
432
|
* Callback that is executed whenever a monitored child changes its state
|
|
376
433
|
*
|
|
377
|
-
* @param slotName the slot in which a child was invalidated
|
|
378
|
-
* @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
|
|
379
436
|
* @private
|
|
380
437
|
*/
|
|
381
|
-
_onChildChange(slotName, childChangeInfo) {
|
|
382
|
-
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)) {
|
|
383
440
|
return;
|
|
384
441
|
}
|
|
385
442
|
|
|
@@ -397,58 +454,86 @@ class UI5Element extends HTMLElement {
|
|
|
397
454
|
* Do not override this method in derivatives of UI5Element
|
|
398
455
|
* @private
|
|
399
456
|
*/
|
|
400
|
-
attributeChangedCallback(name, oldValue, newValue) {
|
|
401
|
-
|
|
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();
|
|
402
464
|
const realName = name.replace(/^ui5-/, "");
|
|
403
465
|
const nameInCamelCase = kebabToCamelCase(realName);
|
|
404
466
|
if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
if (
|
|
410
|
-
|
|
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;
|
|
411
473
|
}
|
|
412
|
-
|
|
413
|
-
|
|
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;
|
|
414
481
|
}
|
|
415
|
-
|
|
482
|
+
|
|
483
|
+
(this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
|
|
416
484
|
}
|
|
417
485
|
}
|
|
418
486
|
|
|
419
487
|
/**
|
|
420
488
|
* @private
|
|
421
489
|
*/
|
|
422
|
-
_updateAttribute(name, newValue) {
|
|
423
|
-
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
490
|
+
_updateAttribute(name: string, newValue: PropertyValue) {
|
|
491
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
426
492
|
|
|
427
|
-
if (
|
|
493
|
+
if (!ctor.getMetadata().hasAttribute(name)) {
|
|
428
494
|
return;
|
|
429
495
|
}
|
|
430
|
-
|
|
496
|
+
const properties = ctor.getMetadata().getProperties();
|
|
497
|
+
const propData = properties[name];
|
|
498
|
+
const propertyType = propData.type;
|
|
499
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
431
500
|
const attrName = camelToKebabCase(name);
|
|
432
501
|
const attrValue = this.getAttribute(attrName);
|
|
433
|
-
|
|
502
|
+
|
|
503
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
504
|
+
propertyValidator = propertyType as typeof DataType;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
if (propertyValidator) {
|
|
508
|
+
const newAttrValue = propertyValidator.propertyToAttribute(newValue);
|
|
509
|
+
if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
|
|
510
|
+
this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
|
|
511
|
+
this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
|
|
512
|
+
this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
|
|
513
|
+
} else {
|
|
514
|
+
this.setAttribute(attrName, newAttrValue);
|
|
515
|
+
}
|
|
516
|
+
} else if (propertyType === Boolean) {
|
|
434
517
|
if (newValue === true && attrValue === null) {
|
|
435
518
|
this.setAttribute(attrName, "");
|
|
436
519
|
} else if (newValue === false && attrValue !== null) {
|
|
437
520
|
this.removeAttribute(attrName);
|
|
438
521
|
}
|
|
439
|
-
} else if (
|
|
440
|
-
|
|
441
|
-
|
|
522
|
+
} else if (typeof newValue !== "object") {
|
|
523
|
+
if (attrValue !== newValue) {
|
|
524
|
+
this.setAttribute(attrName, newValue as string);
|
|
525
|
+
}
|
|
526
|
+
} // else { return; } // old object handling
|
|
442
527
|
}
|
|
443
528
|
|
|
444
529
|
/**
|
|
445
530
|
* @private
|
|
446
531
|
*/
|
|
447
|
-
_upgradeProperty(
|
|
448
|
-
if (this.hasOwnProperty(
|
|
449
|
-
const value = this[
|
|
450
|
-
delete this[
|
|
451
|
-
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;
|
|
452
537
|
}
|
|
453
538
|
}
|
|
454
539
|
|
|
@@ -456,26 +541,18 @@ class UI5Element extends HTMLElement {
|
|
|
456
541
|
* @private
|
|
457
542
|
*/
|
|
458
543
|
_upgradeAllProperties() {
|
|
459
|
-
const allProps = this.constructor.getMetadata().getPropertiesList();
|
|
460
|
-
allProps.forEach(this._upgradeProperty
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
/**
|
|
464
|
-
* @private
|
|
465
|
-
*/
|
|
466
|
-
_initializeState() {
|
|
467
|
-
const defaultState = this.constructor._getDefaultState();
|
|
468
|
-
this._state = Object.assign({}, defaultState);
|
|
544
|
+
const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
|
|
545
|
+
allProps.forEach(this._upgradeProperty.bind(this));
|
|
469
546
|
}
|
|
470
547
|
|
|
471
548
|
/**
|
|
472
549
|
* Returns a singleton event listener for the "change" event of a child in a given slot
|
|
473
550
|
*
|
|
474
551
|
* @param slotName the name of the slot, where the child is
|
|
475
|
-
* @returns {
|
|
552
|
+
* @returns {ChildChangeListener}
|
|
476
553
|
* @private
|
|
477
554
|
*/
|
|
478
|
-
_getChildChangeListener(slotName) {
|
|
555
|
+
_getChildChangeListener(slotName: string) {
|
|
479
556
|
if (!this._childChangeListeners.has(slotName)) {
|
|
480
557
|
this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
|
|
481
558
|
}
|
|
@@ -486,27 +563,30 @@ class UI5Element extends HTMLElement {
|
|
|
486
563
|
* Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
|
|
487
564
|
*
|
|
488
565
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
489
|
-
* @returns {
|
|
566
|
+
* @returns {SlotChangeListener}
|
|
490
567
|
* @private
|
|
491
568
|
*/
|
|
492
|
-
_getSlotChangeListener(slotName) {
|
|
569
|
+
_getSlotChangeListener(slotName: string) {
|
|
493
570
|
if (!this._slotChangeListeners.has(slotName)) {
|
|
494
571
|
this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
|
|
495
572
|
}
|
|
496
|
-
return this._slotChangeListeners.get(slotName)
|
|
573
|
+
return this._slotChangeListeners.get(slotName)!;
|
|
497
574
|
}
|
|
498
575
|
|
|
499
576
|
/**
|
|
500
577
|
* @private
|
|
501
578
|
*/
|
|
502
|
-
_attachSlotChange(child, slotName) {
|
|
503
|
-
|
|
579
|
+
_attachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
580
|
+
const slotChangeListener = this._getSlotChangeListener(slotName);
|
|
581
|
+
if (slotChangeListener) {
|
|
582
|
+
child.addEventListener("slotchange", slotChangeListener);
|
|
583
|
+
}
|
|
504
584
|
}
|
|
505
585
|
|
|
506
586
|
/**
|
|
507
587
|
* @private
|
|
508
588
|
*/
|
|
509
|
-
_detachSlotChange(child, slotName) {
|
|
589
|
+
_detachSlotChange(child: HTMLSlotElement, slotName: string) {
|
|
510
590
|
child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
|
|
511
591
|
}
|
|
512
592
|
|
|
@@ -516,7 +596,7 @@ class UI5Element extends HTMLElement {
|
|
|
516
596
|
* @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
|
|
517
597
|
* @private
|
|
518
598
|
*/
|
|
519
|
-
_onSlotChange(slotName) {
|
|
599
|
+
_onSlotChange(slotName: string) {
|
|
520
600
|
_invalidate.call(this, {
|
|
521
601
|
type: "slot",
|
|
522
602
|
name: slotName,
|
|
@@ -551,21 +631,20 @@ class UI5Element extends HTMLElement {
|
|
|
551
631
|
*
|
|
552
632
|
* @public
|
|
553
633
|
*/
|
|
554
|
-
onInvalidation(changeInfo) {}
|
|
634
|
+
onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
|
|
555
635
|
|
|
556
636
|
/**
|
|
557
|
-
* Do not call this method directly, only intended to be called by
|
|
637
|
+
* Do not call this method directly, only intended to be called by js
|
|
558
638
|
* @protected
|
|
559
639
|
*/
|
|
560
640
|
_render() {
|
|
561
|
-
const
|
|
641
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
642
|
+
const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
|
|
562
643
|
|
|
563
644
|
// suppress invalidation to prevent state changes scheduling another rendering
|
|
564
645
|
this._suppressInvalidation = true;
|
|
565
646
|
|
|
566
|
-
|
|
567
|
-
this.onBeforeRendering();
|
|
568
|
-
}
|
|
647
|
+
this.onBeforeRendering();
|
|
569
648
|
|
|
570
649
|
// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
|
|
571
650
|
if (this._onComponentStateFinalized) {
|
|
@@ -589,7 +668,7 @@ class UI5Element extends HTMLElement {
|
|
|
589
668
|
}
|
|
590
669
|
res = `${res}: ${x.name}`;
|
|
591
670
|
if (x.type === "property") {
|
|
592
|
-
res = `${res} ${x.oldValue} => ${x.newValue}`;
|
|
671
|
+
res = `${res} ${JSON.stringify(x.oldValue)} => ${JSON.stringify(x.newValue)}`;
|
|
593
672
|
}
|
|
594
673
|
|
|
595
674
|
return res;
|
|
@@ -599,10 +678,11 @@ class UI5Element extends HTMLElement {
|
|
|
599
678
|
this._changedState = [];
|
|
600
679
|
|
|
601
680
|
// Update shadow root and static area item
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
681
|
+
if (ctor._needsShadowDOM()) {
|
|
682
|
+
updateShadowRoot(this);
|
|
683
|
+
}
|
|
684
|
+
if (this.staticAreaItem) {
|
|
685
|
+
this.staticAreaItem.update();
|
|
606
686
|
}
|
|
607
687
|
|
|
608
688
|
// Safari requires that children get the slot attribute only after the slot tags have been rendered in the shadow DOM
|
|
@@ -611,38 +691,7 @@ class UI5Element extends HTMLElement {
|
|
|
611
691
|
}
|
|
612
692
|
|
|
613
693
|
// Call the onAfterRendering hook
|
|
614
|
-
|
|
615
|
-
this.onAfterRendering();
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* @private
|
|
621
|
-
*/
|
|
622
|
-
_updateShadowRoot() {
|
|
623
|
-
if (!this.constructor._needsShadowDOM()) {
|
|
624
|
-
return;
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
let styleToPrepend;
|
|
628
|
-
const renderResult = executeTemplate(this.constructor.template, this);
|
|
629
|
-
|
|
630
|
-
// IE11, Edge
|
|
631
|
-
if (window.ShadyDOM) {
|
|
632
|
-
createComponentStyleTag(this.constructor);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
// Chrome
|
|
636
|
-
if (document.adoptedStyleSheets) {
|
|
637
|
-
this.shadowRoot.adoptedStyleSheets = getConstructableStyle(this.constructor);
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
// FF, Safari
|
|
641
|
-
if (!document.adoptedStyleSheets && !window.ShadyDOM) {
|
|
642
|
-
styleToPrepend = getEffectiveStyle(this.constructor);
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
this.constructor.render(renderResult, this.shadowRoot, styleToPrepend, { eventContext: this });
|
|
694
|
+
this.onAfterRendering();
|
|
646
695
|
}
|
|
647
696
|
|
|
648
697
|
/**
|
|
@@ -651,7 +700,7 @@ class UI5Element extends HTMLElement {
|
|
|
651
700
|
_assignIndividualSlotsToChildren() {
|
|
652
701
|
const domChildren = Array.from(this.children);
|
|
653
702
|
|
|
654
|
-
domChildren.forEach(child => {
|
|
703
|
+
domChildren.forEach((child: Record<string, any>) => {
|
|
655
704
|
if (child._individualSlot) {
|
|
656
705
|
child.setAttribute("slot", child._individualSlot);
|
|
657
706
|
}
|
|
@@ -667,16 +716,27 @@ class UI5Element extends HTMLElement {
|
|
|
667
716
|
|
|
668
717
|
/**
|
|
669
718
|
* Returns the DOM Element inside the Shadow Root that corresponds to the opening tag in the UI5 Web Component's template
|
|
719
|
+
* *Note:* For logical (abstract) elements (items, options, etc...), returns the part of the parent's DOM that represents this option
|
|
670
720
|
* Use this method instead of "this.shadowRoot" to read the Shadow DOM, if ever necessary
|
|
721
|
+
*
|
|
671
722
|
* @public
|
|
672
723
|
*/
|
|
673
724
|
getDomRef() {
|
|
725
|
+
// If a component set _getRealDomRef to its children, use the return value of this function
|
|
726
|
+
if (typeof this._getRealDomRef === "function") {
|
|
727
|
+
return this._getRealDomRef();
|
|
728
|
+
}
|
|
729
|
+
|
|
674
730
|
if (!this.shadowRoot || this.shadowRoot.children.length === 0) {
|
|
675
731
|
return;
|
|
676
732
|
}
|
|
677
733
|
|
|
678
|
-
|
|
679
|
-
|
|
734
|
+
const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
|
|
735
|
+
if (children.length !== 1) {
|
|
736
|
+
console.warn(`The shadow DOM for ${(this.constructor as typeof UI5Element).getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`); // eslint-disable-line
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
return children[0] as HTMLElement;
|
|
680
740
|
}
|
|
681
741
|
|
|
682
742
|
/**
|
|
@@ -687,7 +747,7 @@ class UI5Element extends HTMLElement {
|
|
|
687
747
|
getFocusDomRef() {
|
|
688
748
|
const domRef = this.getDomRef();
|
|
689
749
|
if (domRef) {
|
|
690
|
-
const focusRef = domRef.querySelector("[data-sap-focus-ref]");
|
|
750
|
+
const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
|
|
691
751
|
return focusRef || domRef;
|
|
692
752
|
}
|
|
693
753
|
}
|
|
@@ -702,19 +762,6 @@ class UI5Element extends HTMLElement {
|
|
|
702
762
|
return this.getFocusDomRef();
|
|
703
763
|
}
|
|
704
764
|
|
|
705
|
-
/**
|
|
706
|
-
* 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
|
|
707
|
-
* @public
|
|
708
|
-
* @method
|
|
709
|
-
* @param {String} refName Defines the name of the stable DOM ref
|
|
710
|
-
*/
|
|
711
|
-
getStableDomRef(refName) {
|
|
712
|
-
const staticAreaResult = this.staticAreaItemDomRef && this.staticAreaItemDomRef.querySelector(`[data-ui5-stable=${refName}]`);
|
|
713
|
-
|
|
714
|
-
return staticAreaResult
|
|
715
|
-
|| this.getDomRef().querySelector(`[data-ui5-stable=${refName}]`);
|
|
716
|
-
}
|
|
717
|
-
|
|
718
765
|
/**
|
|
719
766
|
* Set the focus to the element, returned by "getFocusDomRef()" (marked by "data-sap-focus-ref")
|
|
720
767
|
* @public
|
|
@@ -738,7 +785,7 @@ class UI5Element extends HTMLElement {
|
|
|
738
785
|
* @param bubbles - true, if the event bubbles
|
|
739
786
|
* @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
|
|
740
787
|
*/
|
|
741
|
-
fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
788
|
+
fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
742
789
|
const eventResult = this._fireEvent(name, data, cancelable, bubbles);
|
|
743
790
|
const camelCaseEventName = kebabToCamelCase(name);
|
|
744
791
|
|
|
@@ -749,24 +796,22 @@ class UI5Element extends HTMLElement {
|
|
|
749
796
|
return eventResult;
|
|
750
797
|
}
|
|
751
798
|
|
|
752
|
-
_fireEvent(name, data, cancelable = false, bubbles = true) {
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
const noConflictEvent = new CustomEvent(`ui5-${name}`, {
|
|
799
|
+
_fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
|
|
800
|
+
const noConflictEvent = new CustomEvent<T>(`ui5-${name}`, {
|
|
756
801
|
detail: data,
|
|
757
802
|
composed: false,
|
|
758
803
|
bubbles,
|
|
759
804
|
cancelable,
|
|
760
805
|
});
|
|
761
806
|
|
|
762
|
-
// This will be false if the
|
|
763
|
-
|
|
807
|
+
// This will be false if the no-conflict event is prevented
|
|
808
|
+
const noConflictEventResult = this.dispatchEvent(noConflictEvent);
|
|
764
809
|
|
|
765
810
|
if (skipOriginalEvent(name)) {
|
|
766
|
-
return
|
|
811
|
+
return noConflictEventResult;
|
|
767
812
|
}
|
|
768
813
|
|
|
769
|
-
const
|
|
814
|
+
const normalEvent = new CustomEvent<T>(name, {
|
|
770
815
|
detail: data,
|
|
771
816
|
composed: false,
|
|
772
817
|
bubbles,
|
|
@@ -774,10 +819,10 @@ class UI5Element extends HTMLElement {
|
|
|
774
819
|
});
|
|
775
820
|
|
|
776
821
|
// This will be false if the normal event is prevented
|
|
777
|
-
const normalEventResult = this.dispatchEvent(
|
|
822
|
+
const normalEventResult = this.dispatchEvent(normalEvent);
|
|
778
823
|
|
|
779
824
|
// Return false if any of the two events was prevented (its result was false).
|
|
780
|
-
return normalEventResult &&
|
|
825
|
+
return normalEventResult && noConflictEventResult;
|
|
781
826
|
}
|
|
782
827
|
|
|
783
828
|
/**
|
|
@@ -785,19 +830,8 @@ class UI5Element extends HTMLElement {
|
|
|
785
830
|
* 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.
|
|
786
831
|
* @public
|
|
787
832
|
*/
|
|
788
|
-
getSlottedNodes(slotName) {
|
|
789
|
-
|
|
790
|
-
if (!isSlot(curr)) {
|
|
791
|
-
return acc.concat([curr]);
|
|
792
|
-
}
|
|
793
|
-
return acc.concat(curr.assignedNodes({ flatten: true }).filter(item => item instanceof HTMLElement));
|
|
794
|
-
};
|
|
795
|
-
|
|
796
|
-
return this[slotName].reduce(reducer, []);
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
get isCompact() {
|
|
800
|
-
return getComputedStyle(this).getPropertyValue(GLOBAL_CONTENT_DENSITY_CSS_VAR) === "compact";
|
|
833
|
+
getSlottedNodes(slotName: string) {
|
|
834
|
+
return getSlottedNodesList((this as unknown as Record<string, Array<SlotValue>>)[slotName]);
|
|
801
835
|
}
|
|
802
836
|
|
|
803
837
|
/**
|
|
@@ -808,34 +842,8 @@ class UI5Element extends HTMLElement {
|
|
|
808
842
|
* @returns {String|undefined}
|
|
809
843
|
*/
|
|
810
844
|
get effectiveDir() {
|
|
811
|
-
markAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
812
|
-
|
|
813
|
-
const doc = window.document;
|
|
814
|
-
const dirValues = ["ltr", "rtl"]; // exclude "auto" and "" from all calculations
|
|
815
|
-
const locallyAppliedDir = getComputedStyle(this).getPropertyValue(GLOBAL_DIR_CSS_VAR);
|
|
816
|
-
|
|
817
|
-
// In that order, inspect the CSS Var (for modern browsers), the element itself, html and body (for IE fallback)
|
|
818
|
-
if (dirValues.includes(locallyAppliedDir)) {
|
|
819
|
-
return locallyAppliedDir;
|
|
820
|
-
}
|
|
821
|
-
if (dirValues.includes(this.dir)) {
|
|
822
|
-
return this.dir;
|
|
823
|
-
}
|
|
824
|
-
if (dirValues.includes(doc.documentElement.dir)) {
|
|
825
|
-
return doc.documentElement.dir;
|
|
826
|
-
}
|
|
827
|
-
if (dirValues.includes(doc.body.dir)) {
|
|
828
|
-
return doc.body.dir;
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
// Finally, check the configuration for explicitly set RTL or language-implied RTL
|
|
832
|
-
return getRTL() ? "rtl" : undefined;
|
|
833
|
-
}
|
|
834
|
-
|
|
835
|
-
updateStaticAreaItemContentDensity() {
|
|
836
|
-
if (this.staticAreaItem) {
|
|
837
|
-
this.staticAreaItem._updateContentDensity(this.isCompact);
|
|
838
|
-
}
|
|
845
|
+
markAsRtlAware(this.constructor as typeof UI5Element); // if a UI5 Element calls this method, it's considered to be rtl-aware
|
|
846
|
+
return getEffectiveDir(this);
|
|
839
847
|
}
|
|
840
848
|
|
|
841
849
|
/**
|
|
@@ -847,6 +855,10 @@ class UI5Element extends HTMLElement {
|
|
|
847
855
|
return true;
|
|
848
856
|
}
|
|
849
857
|
|
|
858
|
+
get classes(): ClassMap {
|
|
859
|
+
return {};
|
|
860
|
+
}
|
|
861
|
+
|
|
850
862
|
/**
|
|
851
863
|
* Do not override this method in derivatives of UI5Element, use metadata properties instead
|
|
852
864
|
* @private
|
|
@@ -855,26 +867,6 @@ class UI5Element extends HTMLElement {
|
|
|
855
867
|
return this.getMetadata().getAttributesList();
|
|
856
868
|
}
|
|
857
869
|
|
|
858
|
-
/**
|
|
859
|
-
* @private
|
|
860
|
-
*/
|
|
861
|
-
static _getSlotName(child) {
|
|
862
|
-
// Text nodes can only go to the default slot
|
|
863
|
-
if (!(child instanceof HTMLElement)) {
|
|
864
|
-
return "default";
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
// Discover the slot based on the real slot name (f.e. footer => footer, or content-32 => content)
|
|
868
|
-
const slot = child.getAttribute("slot");
|
|
869
|
-
if (slot) {
|
|
870
|
-
const match = slot.match(/^(.+?)-\d+$/);
|
|
871
|
-
return match ? match[1] : slot;
|
|
872
|
-
}
|
|
873
|
-
|
|
874
|
-
// Use default slot as a fallback
|
|
875
|
-
return "default";
|
|
876
|
-
}
|
|
877
|
-
|
|
878
870
|
/**
|
|
879
871
|
* @private
|
|
880
872
|
*/
|
|
@@ -882,70 +874,30 @@ class UI5Element extends HTMLElement {
|
|
|
882
874
|
return !!this.template;
|
|
883
875
|
}
|
|
884
876
|
|
|
885
|
-
_shouldUpdateFragment() {
|
|
886
|
-
return this.constructor._needsStaticArea() && this.staticAreaItem.isRendered();
|
|
887
|
-
}
|
|
888
|
-
|
|
889
877
|
/**
|
|
890
878
|
* @private
|
|
891
879
|
*/
|
|
892
880
|
static _needsStaticArea() {
|
|
893
|
-
return
|
|
881
|
+
return !!this.staticAreaTemplate;
|
|
894
882
|
}
|
|
895
883
|
|
|
896
884
|
/**
|
|
897
885
|
* @public
|
|
898
886
|
*/
|
|
899
887
|
getStaticAreaItemDomRef() {
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
/**
|
|
904
|
-
* @private
|
|
905
|
-
*/
|
|
906
|
-
static _getDefaultState() {
|
|
907
|
-
if (Object.prototype.hasOwnProperty.call(this, "_defaultState")) {
|
|
908
|
-
return this._defaultState;
|
|
888
|
+
if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
|
|
889
|
+
throw new Error("This component does not use the static area");
|
|
909
890
|
}
|
|
910
891
|
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
// Initialize properties
|
|
916
|
-
const props = MetadataClass.getProperties();
|
|
917
|
-
for (const propName in props) { // eslint-disable-line
|
|
918
|
-
const propType = props[propName].type;
|
|
919
|
-
const propDefaultValue = props[propName].defaultValue;
|
|
920
|
-
|
|
921
|
-
if (propType === Boolean) {
|
|
922
|
-
defaultState[propName] = false;
|
|
923
|
-
|
|
924
|
-
if (propDefaultValue !== undefined) {
|
|
925
|
-
console.warn("The 'defaultValue' metadata key is ignored for all booleans properties, they would be initialized with 'false' by default"); // eslint-disable-line
|
|
926
|
-
}
|
|
927
|
-
} else if (props[propName].multiple) {
|
|
928
|
-
defaultState[propName] = [];
|
|
929
|
-
} else if (propType === Object) {
|
|
930
|
-
defaultState[propName] = "defaultValue" in props[propName] ? props[propName].defaultValue : {};
|
|
931
|
-
} else if (propType === String) {
|
|
932
|
-
defaultState[propName] = "defaultValue" in props[propName] ? props[propName].defaultValue : "";
|
|
933
|
-
} else {
|
|
934
|
-
defaultState[propName] = propDefaultValue;
|
|
935
|
-
}
|
|
892
|
+
if (!this.staticAreaItem) {
|
|
893
|
+
this.staticAreaItem = StaticAreaItem.createInstance();
|
|
894
|
+
this.staticAreaItem.setOwnerElement(this);
|
|
936
895
|
}
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
if (slotsAreManaged) {
|
|
940
|
-
const slots = MetadataClass.getSlots();
|
|
941
|
-
for (const [slotName, slotData] of Object.entries(slots)) { // eslint-disable-line
|
|
942
|
-
const propertyName = slotData.propertyName || slotName;
|
|
943
|
-
defaultState[propertyName] = [];
|
|
944
|
-
}
|
|
896
|
+
if (!this.staticAreaItem.parentElement) {
|
|
897
|
+
getSingletonElementInstance("ui5-static-area").appendChild(this.staticAreaItem);
|
|
945
898
|
}
|
|
946
899
|
|
|
947
|
-
this.
|
|
948
|
-
return defaultState;
|
|
900
|
+
return this.staticAreaItem.getDomRef();
|
|
949
901
|
}
|
|
950
902
|
|
|
951
903
|
/**
|
|
@@ -979,7 +931,7 @@ class UI5Element extends HTMLElement {
|
|
|
979
931
|
}
|
|
980
932
|
|
|
981
933
|
Object.defineProperty(proto, prop, {
|
|
982
|
-
get() {
|
|
934
|
+
get(this: UI5Element) {
|
|
983
935
|
if (this._state[prop] !== undefined) {
|
|
984
936
|
return this._state[prop];
|
|
985
937
|
}
|
|
@@ -996,12 +948,30 @@ class UI5Element extends HTMLElement {
|
|
|
996
948
|
return propDefaultValue;
|
|
997
949
|
}
|
|
998
950
|
},
|
|
999
|
-
set(value) {
|
|
1000
|
-
value = this.constructor.getMetadata().constructor.validatePropertyValue(value, propData);
|
|
1001
951
|
|
|
952
|
+
set(this: UI5Element, value: PropertyValue) {
|
|
953
|
+
let isDifferent;
|
|
954
|
+
const ctor = this.constructor as typeof UI5Element;
|
|
955
|
+
const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
|
|
956
|
+
|
|
957
|
+
value = metadataCtor.validatePropertyValue(value, propData);
|
|
958
|
+
const propertyType = propData.type;
|
|
959
|
+
let propertyValidator = propData.validator as typeof DataType;
|
|
1002
960
|
const oldState = this._state[prop];
|
|
1003
961
|
|
|
1004
|
-
if (
|
|
962
|
+
if (propertyType && (propertyType as typeof DataType).isDataTypeClass) {
|
|
963
|
+
propertyValidator = propertyType as typeof DataType;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
if (propertyValidator) {
|
|
967
|
+
isDifferent = !propertyValidator.valuesAreEqual(oldState, value);
|
|
968
|
+
} else if (Array.isArray(oldState) && Array.isArray(value) && propData.multiple && propData.compareValues) { // compareValues is added for IE, test if needed now
|
|
969
|
+
isDifferent = !arraysAreEqual(oldState, value);
|
|
970
|
+
} else {
|
|
971
|
+
isDifferent = oldState !== value;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
if (isDifferent) {
|
|
1005
975
|
this._state[prop] = value;
|
|
1006
976
|
_invalidate.call(this, {
|
|
1007
977
|
type: "property",
|
|
@@ -1025,7 +995,7 @@ class UI5Element extends HTMLElement {
|
|
|
1025
995
|
|
|
1026
996
|
const propertyName = slotData.propertyName || slotName;
|
|
1027
997
|
Object.defineProperty(proto, propertyName, {
|
|
1028
|
-
get() {
|
|
998
|
+
get(this: UI5Element) {
|
|
1029
999
|
if (this._state[propertyName] !== undefined) {
|
|
1030
1000
|
return this._state[propertyName];
|
|
1031
1001
|
}
|
|
@@ -1044,14 +1014,22 @@ class UI5Element extends HTMLElement {
|
|
|
1044
1014
|
* @protected
|
|
1045
1015
|
*/
|
|
1046
1016
|
static get metadata() {
|
|
1047
|
-
return
|
|
1017
|
+
return metadata;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/**
|
|
1021
|
+
* Sets a new metadata object for this UI5 Web Component Class
|
|
1022
|
+
* @protected
|
|
1023
|
+
*/
|
|
1024
|
+
static set metadata(newMetadata) {
|
|
1025
|
+
metadata = newMetadata;
|
|
1048
1026
|
}
|
|
1049
1027
|
|
|
1050
1028
|
/**
|
|
1051
1029
|
* Returns the CSS for this UI5 Web Component Class
|
|
1052
1030
|
* @protected
|
|
1053
1031
|
*/
|
|
1054
|
-
static get styles() {
|
|
1032
|
+
static get styles(): ComponentStylesData {
|
|
1055
1033
|
return "";
|
|
1056
1034
|
}
|
|
1057
1035
|
|
|
@@ -1059,7 +1037,7 @@ class UI5Element extends HTMLElement {
|
|
|
1059
1037
|
* Returns the Static Area CSS for this UI5 Web Component Class
|
|
1060
1038
|
* @protected
|
|
1061
1039
|
*/
|
|
1062
|
-
static get staticAreaStyles() {
|
|
1040
|
+
static get staticAreaStyles(): ComponentStylesData {
|
|
1063
1041
|
return "";
|
|
1064
1042
|
}
|
|
1065
1043
|
|
|
@@ -1070,7 +1048,7 @@ class UI5Element extends HTMLElement {
|
|
|
1070
1048
|
*
|
|
1071
1049
|
* @protected
|
|
1072
1050
|
*/
|
|
1073
|
-
static get dependencies() {
|
|
1051
|
+
static get dependencies(): Array<typeof UI5Element> {
|
|
1074
1052
|
return [];
|
|
1075
1053
|
}
|
|
1076
1054
|
|
|
@@ -1079,21 +1057,21 @@ class UI5Element extends HTMLElement {
|
|
|
1079
1057
|
*
|
|
1080
1058
|
* @public
|
|
1081
1059
|
*/
|
|
1082
|
-
static getUniqueDependencies() {
|
|
1060
|
+
static getUniqueDependencies(this: typeof UI5Element) {
|
|
1083
1061
|
if (!uniqueDependenciesCache.has(this)) {
|
|
1084
1062
|
const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
|
|
1085
1063
|
uniqueDependenciesCache.set(this, filtered);
|
|
1086
1064
|
}
|
|
1087
1065
|
|
|
1088
|
-
return uniqueDependenciesCache.get(this);
|
|
1066
|
+
return uniqueDependenciesCache.get(this) || [];
|
|
1089
1067
|
}
|
|
1090
1068
|
|
|
1091
1069
|
/**
|
|
1092
1070
|
* Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
|
|
1093
1071
|
*
|
|
1094
|
-
* @returns {Promise
|
|
1072
|
+
* @returns {Promise}
|
|
1095
1073
|
*/
|
|
1096
|
-
static whenDependenciesDefined() {
|
|
1074
|
+
static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
|
|
1097
1075
|
return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
|
|
1098
1076
|
}
|
|
1099
1077
|
|
|
@@ -1121,7 +1099,6 @@ class UI5Element extends HTMLElement {
|
|
|
1121
1099
|
]);
|
|
1122
1100
|
|
|
1123
1101
|
const tag = this.getMetadata().getTag();
|
|
1124
|
-
const altTag = this.getMetadata().getAltTag();
|
|
1125
1102
|
|
|
1126
1103
|
const definedLocally = isTagRegistered(tag);
|
|
1127
1104
|
const definedGlobally = customElements.get(tag);
|
|
@@ -1131,13 +1108,8 @@ class UI5Element extends HTMLElement {
|
|
|
1131
1108
|
} else if (!definedGlobally) {
|
|
1132
1109
|
this._generateAccessors();
|
|
1133
1110
|
registerTag(tag);
|
|
1134
|
-
window.customElements.define(tag, this);
|
|
1135
|
-
|
|
1136
|
-
if (altTag && !customElements.get(altTag)) {
|
|
1137
|
-
class oldClassName extends this {}
|
|
1138
|
-
registerTag(altTag);
|
|
1139
|
-
window.customElements.define(altTag, oldClassName);
|
|
1140
|
-
}
|
|
1111
|
+
window.customElements.define(tag, this as unknown as CustomElementConstructor);
|
|
1112
|
+
preloadLinks(this);
|
|
1141
1113
|
}
|
|
1142
1114
|
return this;
|
|
1143
1115
|
}
|
|
@@ -1153,17 +1125,31 @@ class UI5Element extends HTMLElement {
|
|
|
1153
1125
|
return this._metadata;
|
|
1154
1126
|
}
|
|
1155
1127
|
|
|
1156
|
-
const
|
|
1128
|
+
const effectiveMetadata = Object.keys(this.metadata).length ? this.metadata : this.decoratorMetadata;
|
|
1129
|
+
const metadataObjects = [effectiveMetadata];
|
|
1157
1130
|
let klass = this; // eslint-disable-line
|
|
1158
1131
|
while (klass !== UI5Element) {
|
|
1159
1132
|
klass = Object.getPrototypeOf(klass);
|
|
1160
|
-
|
|
1133
|
+
const effectiveKlassMetadata = Object.keys(klass.metadata).length ? klass.metadata : klass.decoratorMetadata;
|
|
1134
|
+
metadataObjects.unshift(effectiveKlassMetadata);
|
|
1161
1135
|
}
|
|
1162
|
-
const mergedMetadata = merge({}, ...metadataObjects);
|
|
1136
|
+
const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
|
|
1163
1137
|
|
|
1164
1138
|
this._metadata = new UI5ElementMetadata(mergedMetadata);
|
|
1165
1139
|
return this._metadata;
|
|
1166
1140
|
}
|
|
1141
|
+
|
|
1142
|
+
static decoratorMetadata: Metadata = {};
|
|
1167
1143
|
}
|
|
1168
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
|
+
|
|
1169
1153
|
export default UI5Element;
|
|
1154
|
+
export { instanceOfUI5Element };
|
|
1155
|
+
export type { ChangeInfo };
|