@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.
Files changed (794) hide show
  1. package/.eslintignore +4 -0
  2. package/CHANGELOG.md +426 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +25 -21
  5. package/dist/AssetRegistry.d.ts +5 -0
  6. package/dist/AssetRegistry.js +6 -12
  7. package/dist/AssetRegistry.js.map +1 -0
  8. package/dist/Boot.d.ts +8 -0
  9. package/dist/Boot.js +44 -0
  10. package/dist/Boot.js.map +1 -0
  11. package/dist/CSP.d.ts +30 -0
  12. package/dist/CSP.js +51 -0
  13. package/dist/CSP.js.map +1 -0
  14. package/dist/CustomElementsRegistry.d.ts +5 -0
  15. package/dist/CustomElementsRegistry.js +69 -30
  16. package/dist/CustomElementsRegistry.js.map +1 -0
  17. package/dist/CustomElementsScope.d.ts +7 -0
  18. package/dist/CustomElementsScope.js +11 -108
  19. package/dist/CustomElementsScope.js.map +1 -0
  20. package/dist/CustomElementsScopeUtils.d.ts +55 -0
  21. package/dist/CustomElementsScopeUtils.js +90 -0
  22. package/dist/CustomElementsScopeUtils.js.map +1 -0
  23. package/dist/DOMObserver.d.ts +11 -0
  24. package/dist/DOMObserver.js +23 -0
  25. package/dist/DOMObserver.js.map +1 -0
  26. package/dist/Device.d.ts +12 -0
  27. package/dist/Device.js +84 -816
  28. package/dist/Device.js.map +1 -0
  29. package/dist/EventProvider.d.ts +25 -0
  30. package/dist/EventProvider.js +67 -78
  31. package/dist/EventProvider.js.map +1 -0
  32. package/dist/FeaturesRegistry.d.ts +3 -0
  33. package/dist/FeaturesRegistry.js +5 -7
  34. package/dist/FeaturesRegistry.js.map +1 -0
  35. package/dist/FontFace.d.ts +2 -0
  36. package/dist/FontFace.js +17 -110
  37. package/dist/FontFace.js.map +1 -0
  38. package/dist/InitialConfiguration.d.ts +22 -0
  39. package/dist/InitialConfiguration.js +115 -118
  40. package/dist/InitialConfiguration.js.map +1 -0
  41. package/dist/Keys.d.ts +57 -0
  42. package/dist/Keys.js +174 -193
  43. package/dist/Keys.js.map +1 -0
  44. package/dist/ManagedStyles.d.ts +8 -0
  45. package/dist/ManagedStyles.js +77 -0
  46. package/dist/ManagedStyles.js.map +1 -0
  47. package/dist/MarkedEvents.d.ts +9 -0
  48. package/dist/MarkedEvents.js +15 -0
  49. package/dist/MarkedEvents.js.map +1 -0
  50. package/dist/MediaRange.d.ts +37 -0
  51. package/dist/MediaRange.js +98 -0
  52. package/dist/MediaRange.js.map +1 -0
  53. package/dist/PropertiesFileFormat.d.ts +8 -0
  54. package/dist/PropertiesFileFormat.js +85 -0
  55. package/dist/PropertiesFileFormat.js.map +1 -0
  56. package/dist/Render.d.ts +47 -0
  57. package/dist/Render.js +143 -0
  58. package/dist/Render.js.map +1 -0
  59. package/dist/RenderQueue.d.ts +19 -0
  60. package/dist/RenderQueue.js +52 -62
  61. package/dist/RenderQueue.js.map +1 -0
  62. package/dist/Runtimes.d.ts +27 -0
  63. package/dist/Runtimes.js +86 -0
  64. package/dist/Runtimes.js.map +1 -0
  65. package/dist/StaticArea.d.ts +0 -0
  66. package/dist/StaticArea.js +4 -29
  67. package/dist/StaticArea.js.map +1 -0
  68. package/dist/StaticAreaItem.d.ts +36 -0
  69. package/dist/StaticAreaItem.js +92 -101
  70. package/dist/StaticAreaItem.js.map +1 -0
  71. package/dist/SystemCSSVars.d.ts +2 -0
  72. package/dist/SystemCSSVars.js +6 -28
  73. package/dist/SystemCSSVars.js.map +1 -0
  74. package/dist/Theming.d.ts +3 -0
  75. package/dist/Theming.js +1 -1
  76. package/dist/Theming.js.map +1 -0
  77. package/dist/UI5Element.d.ts +373 -0
  78. package/dist/UI5Element.js +936 -1138
  79. package/dist/UI5Element.js.map +1 -0
  80. package/dist/UI5ElementMetadata.d.ts +150 -0
  81. package/dist/UI5ElementMetadata.js +278 -267
  82. package/dist/UI5ElementMetadata.js.map +1 -0
  83. package/dist/animations/AnimationQueue.d.ts +8 -0
  84. package/dist/animations/AnimationQueue.js +31 -38
  85. package/dist/animations/AnimationQueue.js.map +1 -0
  86. package/dist/animations/animate.d.ts +14 -0
  87. package/dist/animations/animate.js +46 -51
  88. package/dist/animations/animate.js.map +1 -0
  89. package/dist/animations/scroll.d.ts +5 -0
  90. package/dist/animations/scroll.js +18 -27
  91. package/dist/animations/scroll.js.map +1 -0
  92. package/dist/animations/slideDown.d.ts +5 -0
  93. package/dist/animations/slideDown.js +53 -78
  94. package/dist/animations/slideDown.js.map +1 -0
  95. package/dist/animations/slideUp.d.ts +5 -0
  96. package/dist/animations/slideUp.js +49 -70
  97. package/dist/animations/slideUp.js.map +1 -0
  98. package/dist/api.json +1 -0
  99. package/dist/asset-registries/Icons.d.ts +30 -0
  100. package/dist/asset-registries/Icons.js +104 -32
  101. package/dist/asset-registries/Icons.js.map +1 -0
  102. package/dist/asset-registries/Illustrations.d.ts +17 -0
  103. package/dist/asset-registries/Illustrations.js +46 -0
  104. package/dist/asset-registries/Illustrations.js.map +1 -0
  105. package/dist/asset-registries/LocaleData.d.ts +7 -0
  106. package/dist/asset-registries/LocaleData.js +119 -118
  107. package/dist/asset-registries/LocaleData.js.map +1 -0
  108. package/dist/asset-registries/Themes.d.ts +10 -0
  109. package/dist/asset-registries/Themes.js +39 -77
  110. package/dist/asset-registries/Themes.js.map +1 -0
  111. package/dist/asset-registries/i18n.d.ts +23 -0
  112. package/dist/asset-registries/i18n.js +71 -86
  113. package/dist/asset-registries/i18n.js.map +1 -0
  114. package/dist/assets/bundle.esm.3a492d53.js +56 -0
  115. package/dist/assets-meta/IconCollectionsAlias.d.ts +17 -0
  116. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  117. package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
  118. package/dist/config/AnimationMode.d.ts +14 -0
  119. package/dist/config/AnimationMode.js +21 -18
  120. package/dist/config/AnimationMode.js.map +1 -0
  121. package/dist/config/CalendarType.d.ts +8 -0
  122. package/dist/config/CalendarType.js +13 -12
  123. package/dist/config/CalendarType.js.map +1 -0
  124. package/dist/config/FormatSettings.d.ts +11 -0
  125. package/dist/config/FormatSettings.js +10 -8
  126. package/dist/config/FormatSettings.js.map +1 -0
  127. package/dist/config/Icons.d.ts +30 -0
  128. package/dist/config/Icons.js +48 -0
  129. package/dist/config/Icons.js.map +1 -0
  130. package/dist/config/Language.d.ts +31 -0
  131. package/dist/config/Language.js +38 -52
  132. package/dist/config/Language.js.map +1 -0
  133. package/dist/config/NoConflict.d.ts +20 -0
  134. package/dist/config/NoConflict.js +40 -41
  135. package/dist/config/NoConflict.js.map +1 -0
  136. package/dist/config/RTL.d.ts +7 -0
  137. package/dist/config/RTL.js +23 -20
  138. package/dist/config/RTL.js.map +1 -0
  139. package/dist/config/Theme.d.ts +28 -0
  140. package/dist/config/Theme.js +45 -22
  141. package/dist/config/Theme.js.map +1 -0
  142. package/dist/config/ThemeRoots.d.ts +4 -0
  143. package/dist/config/ThemeRoots.js +28 -0
  144. package/dist/config/ThemeRoots.js.map +1 -0
  145. package/dist/css/BusyIndicator.css +80 -0
  146. package/dist/css/FontFace.css +66 -0
  147. package/dist/css/OverrideFontFace.css +32 -0
  148. package/dist/css/SystemCSSVars.css +17 -0
  149. package/dist/decorators/customElement.d.ts +8 -0
  150. package/dist/decorators/customElement.js +16 -0
  151. package/dist/decorators/customElement.js.map +1 -0
  152. package/dist/decorators/event.d.ts +10 -0
  153. package/dist/decorators/event.js +24 -0
  154. package/dist/decorators/event.js.map +1 -0
  155. package/dist/decorators/fastNavigation.d.ts +7 -0
  156. package/dist/decorators/fastNavigation.js +13 -0
  157. package/dist/decorators/fastNavigation.js.map +1 -0
  158. package/dist/decorators/languageAware.d.ts +7 -0
  159. package/dist/decorators/languageAware.js +13 -0
  160. package/dist/decorators/languageAware.js.map +1 -0
  161. package/dist/decorators/property.d.ts +9 -0
  162. package/dist/decorators/property.js +24 -0
  163. package/dist/decorators/property.js.map +1 -0
  164. package/dist/decorators/slot.d.ts +9 -0
  165. package/dist/decorators/slot.js +37 -0
  166. package/dist/decorators/slot.js.map +1 -0
  167. package/dist/decorators/themeAware.d.ts +7 -0
  168. package/dist/decorators/themeAware.js +13 -0
  169. package/dist/decorators/themeAware.js.map +1 -0
  170. package/dist/delegate/ItemNavigation.d.ts +113 -0
  171. package/dist/delegate/ItemNavigation.js +280 -357
  172. package/dist/delegate/ItemNavigation.js.map +1 -0
  173. package/dist/delegate/ResizeHandler.d.ts +24 -0
  174. package/dist/delegate/ResizeHandler.js +80 -62
  175. package/dist/delegate/ResizeHandler.js.map +1 -0
  176. package/dist/delegate/ScrollEnablement.d.ts +49 -0
  177. package/dist/delegate/ScrollEnablement.js +159 -153
  178. package/dist/delegate/ScrollEnablement.js.map +1 -0
  179. package/dist/features/F6Navigation.d.ts +16 -0
  180. package/dist/features/F6Navigation.js +112 -0
  181. package/dist/features/F6Navigation.js.map +1 -0
  182. package/dist/features/OpenUI5Element.d.ts +9 -0
  183. package/dist/features/OpenUI5Element.js +5 -0
  184. package/dist/features/OpenUI5Element.js.map +1 -0
  185. package/dist/features/OpenUI5Enablement.d.ts +11 -0
  186. package/dist/features/OpenUI5Enablement.js +96 -0
  187. package/dist/features/OpenUI5Enablement.js.map +1 -0
  188. package/dist/features/OpenUI5Support.d.ts +23 -0
  189. package/dist/features/OpenUI5Support.js +93 -86
  190. package/dist/features/OpenUI5Support.js.map +1 -0
  191. package/dist/generated/AssetParameters.js +1 -1
  192. package/dist/generated/VersionInfo.js +10 -0
  193. package/dist/generated/css/BusyIndicator.css.js +5 -0
  194. package/dist/generated/css/FontFace.css.js +5 -0
  195. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  196. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  197. package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
  198. package/dist/getSharedResource.d.ts +11 -0
  199. package/dist/getSharedResource.js +12 -16
  200. package/dist/getSharedResource.js.map +1 -0
  201. package/dist/global.d.ts +44 -0
  202. package/dist/i18nBundle.d.ts +43 -0
  203. package/dist/i18nBundle.js +68 -42
  204. package/dist/i18nBundle.js.map +1 -0
  205. package/dist/locale/Locale.d.ts +22 -0
  206. package/dist/locale/Locale.js +75 -87
  207. package/dist/locale/Locale.js.map +1 -0
  208. package/dist/locale/RTLAwareRegistry.d.ts +4 -0
  209. package/dist/locale/RTLAwareRegistry.js +6 -11
  210. package/dist/locale/RTLAwareRegistry.js.map +1 -0
  211. package/dist/locale/applyDirection.d.ts +10 -0
  212. package/dist/locale/applyDirection.js +10 -8
  213. package/dist/locale/applyDirection.js.map +1 -0
  214. package/dist/locale/directionChange.d.ts +15 -0
  215. package/dist/locale/directionChange.js +24 -0
  216. package/dist/locale/directionChange.js.map +1 -0
  217. package/dist/locale/getEffectiveDir.d.ts +2 -0
  218. package/dist/locale/getEffectiveDir.js +24 -0
  219. package/dist/locale/getEffectiveDir.js.map +1 -0
  220. package/dist/locale/getLocale.d.ts +7 -0
  221. package/dist/locale/getLocale.js +26 -29
  222. package/dist/locale/getLocale.js.map +1 -0
  223. package/dist/locale/languageChange.d.ts +5 -0
  224. package/dist/locale/languageChange.js +8 -16
  225. package/dist/locale/languageChange.js.map +1 -0
  226. package/dist/locale/nextFallbackLocale.d.ts +8 -0
  227. package/dist/locale/nextFallbackLocale.js +15 -19
  228. package/dist/locale/nextFallbackLocale.js.map +1 -0
  229. package/dist/locale/normalizeLocale.d.ts +7 -0
  230. package/dist/locale/normalizeLocale.js +34 -41
  231. package/dist/locale/normalizeLocale.js.map +1 -0
  232. package/dist/renderer/LitRenderer.d.ts +14 -0
  233. package/dist/renderer/LitRenderer.js +34 -24
  234. package/dist/renderer/LitRenderer.js.map +1 -0
  235. package/dist/renderer/directives/style-map.js +72 -0
  236. package/dist/renderer/executeTemplate.d.ts +13 -0
  237. package/dist/renderer/executeTemplate.js +20 -7
  238. package/dist/renderer/executeTemplate.js.map +1 -0
  239. package/dist/sap/base/Log.js +240 -0
  240. package/dist/sap/base/assert.js +7 -0
  241. package/dist/sap/base/security/URLListValidator.js +159 -0
  242. package/dist/sap/base/security/encodeCSS.js +14 -0
  243. package/dist/sap/base/security/encodeXML.js +23 -0
  244. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  245. package/dist/sap/base/strings/toHex.js +8 -0
  246. package/dist/sap/base/util/now.js +7 -0
  247. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  248. package/dist/theming/CustomStyle.d.ts +6 -0
  249. package/dist/theming/CustomStyle.js +38 -32
  250. package/dist/theming/CustomStyle.js.map +1 -0
  251. package/dist/theming/ThemeLoaded.d.ts +5 -0
  252. package/dist/theming/ThemeLoaded.js +8 -16
  253. package/dist/theming/ThemeLoaded.js.map +1 -0
  254. package/dist/theming/applyTheme.d.ts +2 -0
  255. package/dist/theming/applyTheme.js +62 -71
  256. package/dist/theming/applyTheme.js.map +1 -0
  257. package/dist/theming/getConstructableStyle.d.ts +9 -0
  258. package/dist/theming/getConstructableStyle.js +13 -17
  259. package/dist/theming/getConstructableStyle.js.map +1 -0
  260. package/dist/theming/getEffectiveLinksHrefs.d.ts +3 -0
  261. package/dist/theming/getEffectiveLinksHrefs.js +17 -0
  262. package/dist/theming/getEffectiveLinksHrefs.js.map +1 -0
  263. package/dist/theming/getEffectiveStyle.d.ts +3 -0
  264. package/dist/theming/getEffectiveStyle.js +26 -17
  265. package/dist/theming/getEffectiveStyle.js.map +1 -0
  266. package/dist/theming/getStylesString.d.ts +3 -0
  267. package/dist/theming/getStylesString.js +9 -11
  268. package/dist/theming/getStylesString.js.map +1 -0
  269. package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
  270. package/dist/theming/getThemeDesignerTheme.js +73 -60
  271. package/dist/theming/getThemeDesignerTheme.js.map +1 -0
  272. package/dist/theming/preloadLinks.d.ts +3 -0
  273. package/dist/theming/preloadLinks.js +19 -0
  274. package/dist/theming/preloadLinks.js.map +1 -0
  275. package/dist/thirdparty/_merge.d.ts +2 -0
  276. package/dist/thirdparty/_merge.js +7 -4
  277. package/dist/thirdparty/_merge.js.map +1 -0
  278. package/dist/thirdparty/isPlainObject.d.ts +2 -0
  279. package/dist/thirdparty/isPlainObject.js +11 -10
  280. package/dist/thirdparty/isPlainObject.js.map +1 -0
  281. package/dist/thirdparty/merge.d.ts +2 -0
  282. package/dist/thirdparty/merge.js +4 -8
  283. package/dist/thirdparty/merge.js.map +1 -0
  284. package/dist/types/AnimationMode.d.ts +32 -0
  285. package/dist/types/AnimationMode.js +33 -6
  286. package/dist/types/AnimationMode.js.map +1 -0
  287. package/dist/types/CSSColor.d.ts +16 -0
  288. package/dist/types/CSSColor.js +19 -0
  289. package/dist/types/CSSColor.js.map +1 -0
  290. package/dist/types/CalendarType.d.ts +37 -0
  291. package/dist/types/CalendarType.js +35 -18
  292. package/dist/types/CalendarType.js.map +1 -0
  293. package/dist/types/DOMReference.d.ts +17 -0
  294. package/dist/types/DOMReference.js +25 -0
  295. package/dist/types/DOMReference.js.map +1 -0
  296. package/dist/types/DataType.d.ts +25 -0
  297. package/dist/types/DataType.js +33 -14
  298. package/dist/types/DataType.js.map +1 -0
  299. package/dist/types/Float.d.ts +18 -0
  300. package/dist/types/Float.js +18 -6
  301. package/dist/types/Float.js.map +1 -0
  302. package/dist/types/Integer.d.ts +18 -0
  303. package/dist/types/Integer.js +18 -5
  304. package/dist/types/Integer.js.map +1 -0
  305. package/dist/types/InvisibleMessageMode.d.ts +25 -0
  306. package/dist/types/InvisibleMessageMode.js +27 -0
  307. package/dist/types/InvisibleMessageMode.js.map +1 -0
  308. package/dist/types/ItemNavigationBehavior.d.ts +24 -0
  309. package/dist/types/ItemNavigationBehavior.js +22 -17
  310. package/dist/types/ItemNavigationBehavior.js.map +1 -0
  311. package/dist/types/NavigationMode.d.ts +32 -0
  312. package/dist/types/NavigationMode.js +33 -6
  313. package/dist/types/NavigationMode.js.map +1 -0
  314. package/dist/types/ValueState.d.ts +42 -0
  315. package/dist/types/ValueState.js +41 -19
  316. package/dist/types/ValueState.js.map +1 -0
  317. package/dist/types.d.ts +18 -0
  318. package/dist/types.js +2 -0
  319. package/dist/types.js.map +1 -0
  320. package/dist/updateShadowRoot.d.ts +8 -0
  321. package/dist/updateShadowRoot.js +34 -0
  322. package/dist/updateShadowRoot.js.map +1 -0
  323. package/dist/util/AriaLabelHelper.d.ts +6 -0
  324. package/dist/util/AriaLabelHelper.js +37 -34
  325. package/dist/util/AriaLabelHelper.js.map +1 -0
  326. package/dist/util/Caret.d.ts +7 -0
  327. package/dist/util/Caret.js +23 -0
  328. package/dist/util/Caret.js.map +1 -0
  329. package/dist/util/ColorConversion.d.ts +30 -0
  330. package/dist/util/ColorConversion.js +337 -0
  331. package/dist/util/ColorConversion.js.map +1 -0
  332. package/dist/util/FetchHelper.d.ts +3 -0
  333. package/dist/util/FetchHelper.js +19 -25
  334. package/dist/util/FetchHelper.js.map +1 -0
  335. package/dist/util/FocusableElements.d.ts +4 -0
  336. package/dist/util/FocusableElements.js +57 -68
  337. package/dist/util/FocusableElements.js.map +1 -0
  338. package/dist/util/HTMLSanitizer.d.ts +3 -0
  339. package/dist/util/HTMLSanitizer.js +6 -0
  340. package/dist/util/HTMLSanitizer.js.map +1 -0
  341. package/dist/util/InvisibleMessage.d.ts +10 -0
  342. package/dist/util/InvisibleMessage.js +56 -0
  343. package/dist/util/InvisibleMessage.js.map +1 -0
  344. package/dist/util/PopupUtils.d.ts +7 -0
  345. package/dist/util/PopupUtils.js +74 -0
  346. package/dist/util/PopupUtils.js.map +1 -0
  347. package/dist/util/SlotsHelper.d.ts +9 -0
  348. package/dist/util/SlotsHelper.js +30 -0
  349. package/dist/util/SlotsHelper.js.map +1 -0
  350. package/dist/util/StringHelper.d.ts +3 -0
  351. package/dist/util/StringHelper.js +17 -20
  352. package/dist/util/StringHelper.js.map +1 -0
  353. package/dist/util/TabbableElements.d.ts +17 -0
  354. package/dist/util/TabbableElements.js +53 -43
  355. package/dist/util/TabbableElements.js.map +1 -0
  356. package/dist/util/arraysAreEqual.d.ts +2 -0
  357. package/dist/util/arraysAreEqual.js +10 -12
  358. package/dist/util/arraysAreEqual.js.map +1 -0
  359. package/dist/util/clamp.d.ts +9 -0
  360. package/dist/util/clamp.js +12 -0
  361. package/dist/util/clamp.js.map +1 -0
  362. package/dist/util/createLinkInHead.d.ts +7 -0
  363. package/dist/util/createLinkInHead.js +21 -0
  364. package/dist/util/createLinkInHead.js.map +1 -0
  365. package/dist/util/createStyleInHead.d.ts +8 -0
  366. package/dist/util/createStyleInHead.js +10 -10
  367. package/dist/util/createStyleInHead.js.map +1 -0
  368. package/dist/util/debounce.d.ts +2 -0
  369. package/dist/util/debounce.js +15 -0
  370. package/dist/util/debounce.js.map +1 -0
  371. package/dist/util/detectNavigatorLanguage.d.ts +2 -0
  372. package/dist/util/detectNavigatorLanguage.js +7 -10
  373. package/dist/util/detectNavigatorLanguage.js.map +1 -0
  374. package/dist/util/escapeRegex.d.ts +8 -0
  375. package/dist/util/escapeRegex.js +11 -0
  376. package/dist/util/escapeRegex.js.map +1 -0
  377. package/dist/util/formatMessage.d.ts +2 -0
  378. package/dist/util/formatMessage.js +15 -19
  379. package/dist/util/formatMessage.js.map +1 -0
  380. package/dist/util/generateHighlightedMarkup.d.ts +9 -0
  381. package/dist/util/generateHighlightedMarkup.js +41 -0
  382. package/dist/util/generateHighlightedMarkup.js.map +1 -0
  383. package/dist/util/getActiveElement.d.ts +2 -0
  384. package/dist/util/getActiveElement.js +6 -8
  385. package/dist/util/getActiveElement.js.map +1 -0
  386. package/dist/util/getClassCopy.d.ts +400 -0
  387. package/dist/util/getClassCopy.js +10 -0
  388. package/dist/util/getClassCopy.js.map +1 -0
  389. package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
  390. package/dist/util/getDesigntimePropertyAsArray.js +4 -3
  391. package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
  392. package/dist/util/getEffectiveContentDensity.d.ts +2 -0
  393. package/dist/util/getEffectiveContentDensity.js +4 -0
  394. package/dist/util/getEffectiveContentDensity.js.map +1 -0
  395. package/dist/util/getEffectiveScrollbarStyle.d.ts +2 -0
  396. package/dist/util/getEffectiveScrollbarStyle.js +4 -0
  397. package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
  398. package/dist/util/getFastNavigationGroups.d.ts +2 -0
  399. package/dist/util/getFastNavigationGroups.js +51 -0
  400. package/dist/util/getFastNavigationGroups.js.map +1 -0
  401. package/dist/util/getFileExtension.d.ts +12 -0
  402. package/dist/util/getFileExtension.js +9 -11
  403. package/dist/util/getFileExtension.js.map +1 -0
  404. package/dist/util/getNormalizedTarget.d.ts +7 -0
  405. package/dist/util/getNormalizedTarget.js +14 -0
  406. package/dist/util/getNormalizedTarget.js.map +1 -0
  407. package/dist/util/getSingletonElementInstance.d.ts +2 -0
  408. package/dist/util/getSingletonElementInstance.js +7 -10
  409. package/dist/util/getSingletonElementInstance.js.map +1 -0
  410. package/dist/util/isElementClickable.d.ts +2 -0
  411. package/dist/util/isElementClickable.js +16 -0
  412. package/dist/util/isElementClickable.js.map +1 -0
  413. package/dist/util/isElementHidden.d.ts +2 -0
  414. package/dist/util/isElementHidden.js +8 -0
  415. package/dist/util/isElementHidden.js.map +1 -0
  416. package/dist/util/isElementInView.d.ts +6 -0
  417. package/dist/util/isElementInView.js +12 -0
  418. package/dist/util/isElementInView.js.map +1 -0
  419. package/dist/util/isElementTabbable.d.ts +9 -0
  420. package/dist/util/isElementTabbable.js +30 -0
  421. package/dist/util/isElementTabbable.js.map +1 -0
  422. package/dist/util/isValidPropertyName.d.ts +8 -0
  423. package/dist/util/isValidPropertyName.js +16 -17
  424. package/dist/util/isValidPropertyName.js.map +1 -0
  425. package/dist/util/whenDOMReady.d.ts +2 -0
  426. package/dist/util/whenDOMReady.js +11 -10
  427. package/dist/util/whenDOMReady.js.map +1 -0
  428. package/dist/util/willShowContent.d.ts +2 -0
  429. package/dist/util/willShowContent.js +7 -0
  430. package/dist/util/willShowContent.js.map +1 -0
  431. package/dist/validateThemeRoot.d.ts +2 -0
  432. package/dist/validateThemeRoot.js +47 -0
  433. package/dist/validateThemeRoot.js.map +1 -0
  434. package/index.js +1 -1
  435. package/lib/generate-asset-parameters/index.js +8 -5
  436. package/lib/generate-styles/index.js +26 -0
  437. package/lib/generate-version-info/index.js +32 -0
  438. package/package-scripts.js +48 -28
  439. package/package.json +20 -13
  440. package/src/AssetRegistry.ts +11 -0
  441. package/src/Boot.ts +61 -0
  442. package/src/CSP.ts +66 -0
  443. package/src/CustomElementsRegistry.ts +98 -0
  444. package/src/CustomElementsScope.ts +33 -0
  445. package/src/{CustomElementsScope.js → CustomElementsScopeUtils.ts} +14 -7
  446. package/src/DOMObserver.ts +28 -0
  447. package/src/Device.ts +124 -0
  448. package/src/EventProvider.ts +87 -0
  449. package/src/FeaturesRegistry.ts +14 -0
  450. package/src/FontFace.ts +31 -0
  451. package/src/InitialConfiguration.ts +207 -0
  452. package/src/Keys.ts +295 -0
  453. package/src/ManagedStyles.ts +92 -0
  454. package/src/MarkedEvents.ts +20 -0
  455. package/src/MediaRange.ts +110 -0
  456. package/{dist/util/parseProperties.js → src/PropertiesFileFormat.ts} +14 -8
  457. package/src/Render.ts +180 -0
  458. package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
  459. package/src/Runtimes.ts +114 -0
  460. package/src/StaticArea.ts +3 -0
  461. package/src/StaticAreaItem.ts +113 -0
  462. package/src/SystemCSSVars.ts +10 -0
  463. package/src/{Theming.js → Theming.ts} +0 -0
  464. package/src/{UI5Element.js → UI5Element.ts} +347 -361
  465. package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +178 -69
  466. package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
  467. package/src/animations/animate.ts +64 -0
  468. package/src/animations/scroll.ts +21 -0
  469. package/src/animations/{slideDown.js → slideDown.ts} +27 -34
  470. package/src/animations/{slideUp.js → slideUp.ts} +28 -32
  471. package/src/asset-registries/Icons.ts +162 -0
  472. package/src/asset-registries/Illustrations.ts +75 -0
  473. package/src/asset-registries/LocaleData.ts +172 -0
  474. package/src/asset-registries/Themes.ts +67 -0
  475. package/src/asset-registries/i18n.ts +118 -0
  476. package/src/assets-meta/IconCollectionsAlias.ts +18 -0
  477. package/src/config/AnimationMode.ts +33 -0
  478. package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
  479. package/src/config/FormatSettings.ts +21 -0
  480. package/src/config/Icons.ts +59 -0
  481. package/src/config/Language.ts +72 -0
  482. package/src/config/NoConflict.ts +67 -0
  483. package/src/config/{RTL.js → RTL.ts} +14 -4
  484. package/src/config/Theme.ts +64 -0
  485. package/src/config/ThemeRoots.ts +41 -0
  486. package/src/css/BusyIndicator.css +80 -0
  487. package/src/css/FontFace.css +66 -0
  488. package/src/css/OverrideFontFace.css +32 -0
  489. package/src/css/SystemCSSVars.css +17 -0
  490. package/src/decorators/customElement.ts +17 -0
  491. package/src/decorators/event.ts +28 -0
  492. package/src/decorators/fastNavigation.ts +14 -0
  493. package/src/decorators/languageAware.ts +14 -0
  494. package/src/decorators/property.ts +30 -0
  495. package/src/decorators/slot.ts +49 -0
  496. package/src/decorators/themeAware.ts +14 -0
  497. package/src/delegate/ItemNavigation.ts +393 -0
  498. package/src/delegate/ResizeHandler.ts +95 -0
  499. package/src/delegate/ScrollEnablement.ts +224 -0
  500. package/src/features/F6Navigation.ts +141 -0
  501. package/src/features/OpenUI5Element.ts +11 -0
  502. package/src/features/OpenUI5Enablement.ts +117 -0
  503. package/src/features/OpenUI5Support.ts +148 -0
  504. package/src/{getSharedResource.js → getSharedResource.ts} +3 -3
  505. package/src/global.d.ts +44 -0
  506. package/src/i18nBundle.ts +108 -0
  507. package/src/locale/{Locale.js → Locale.ts} +15 -5
  508. package/src/locale/RTLAwareRegistry.ts +16 -0
  509. package/src/locale/applyDirection.ts +18 -0
  510. package/src/locale/directionChange.ts +34 -0
  511. package/src/locale/getEffectiveDir.ts +28 -0
  512. package/src/locale/{getLocale.js → getLocale.ts} +12 -7
  513. package/src/locale/languageChange.ts +24 -0
  514. package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
  515. package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +5 -3
  516. package/src/renderer/LitRenderer.ts +60 -0
  517. package/src/renderer/directives/style-map.js +72 -0
  518. package/src/renderer/executeTemplate.ts +40 -0
  519. package/src/theming/CustomStyle.ts +62 -0
  520. package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
  521. package/src/theming/applyTheme.ts +90 -0
  522. package/src/theming/getConstructableStyle.ts +31 -0
  523. package/src/theming/getEffectiveLinksHrefs.ts +26 -0
  524. package/src/theming/getEffectiveStyle.ts +41 -0
  525. package/src/theming/getStylesString.ts +15 -0
  526. package/src/theming/getThemeDesignerTheme.ts +101 -0
  527. package/src/theming/preloadLinks.ts +24 -0
  528. package/src/thirdparty/{_merge.js → _merge.ts} +2 -2
  529. package/src/thirdparty/{isPlainObject.js → isPlainObject.ts} +1 -1
  530. package/src/thirdparty/merge.ts +5 -0
  531. package/src/types/AnimationMode.ts +33 -0
  532. package/src/types/CSSColor.ts +20 -0
  533. package/src/types/CalendarType.ts +38 -0
  534. package/src/types/DOMReference.ts +28 -0
  535. package/src/types/DataType.ts +51 -0
  536. package/src/types/Float.ts +25 -0
  537. package/src/types/Integer.ts +25 -0
  538. package/src/types/InvisibleMessageMode.ts +27 -0
  539. package/src/types/ItemNavigationBehavior.ts +26 -0
  540. package/src/types/NavigationMode.ts +33 -0
  541. package/src/types/ValueState.ts +47 -0
  542. package/src/types.ts +30 -0
  543. package/src/updateShadowRoot.ts +37 -0
  544. package/src/util/AriaLabelHelper.ts +63 -0
  545. package/src/util/Caret.ts +28 -0
  546. package/src/util/ColorConversion.ts +399 -0
  547. package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
  548. package/src/util/FocusableElements.ts +82 -0
  549. package/src/util/HTMLSanitizer.ts +9 -0
  550. package/src/util/InvisibleMessage.ts +69 -0
  551. package/src/util/PopupUtils.ts +112 -0
  552. package/src/util/SlotsHelper.ts +39 -0
  553. package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
  554. package/src/util/TabbableElements.ts +70 -0
  555. package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
  556. package/src/util/clamp.ts +12 -0
  557. package/src/util/createLinkInHead.ts +25 -0
  558. package/src/util/{createStyleInHead.js → createStyleInHead.ts} +4 -2
  559. package/src/util/debounce.ts +18 -0
  560. package/src/util/{detectNavigatorLanguage.js → detectNavigatorLanguage.ts} +1 -1
  561. package/src/util/escapeRegex.ts +11 -0
  562. package/src/util/{formatMessage.js → formatMessage.ts} +4 -3
  563. package/src/util/generateHighlightedMarkup.ts +43 -0
  564. package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
  565. package/src/util/getClassCopy.ts +12 -0
  566. package/src/util/{getDesigntimePropertyAsArray.js → getDesigntimePropertyAsArray.ts} +1 -1
  567. package/src/util/getEffectiveContentDensity.ts +5 -0
  568. package/src/util/getEffectiveScrollbarStyle.ts +5 -0
  569. package/src/util/getFastNavigationGroups.ts +63 -0
  570. package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
  571. package/src/util/getNormalizedTarget.ts +16 -0
  572. package/src/util/{getSingletonElementInstance.js → getSingletonElementInstance.ts} +1 -1
  573. package/src/util/isElementClickable.ts +19 -0
  574. package/src/util/isElementHidden.ts +9 -0
  575. package/src/util/isElementInView.ts +15 -0
  576. package/src/util/isElementTabbable.ts +37 -0
  577. package/src/util/{isValidPropertyName.js → isValidPropertyName.ts} +1 -1
  578. package/src/util/{whenDOMReady.js → whenDOMReady.ts} +1 -1
  579. package/src/util/willShowContent.ts +7 -0
  580. package/src/validateThemeRoot.ts +58 -0
  581. package/tsconfig.json +13 -0
  582. package/used-modules.txt +10 -0
  583. package/bundle.es5.js +0 -28
  584. package/config/.eslintrc.js +0 -3
  585. package/config/rollup.config.js +0 -1
  586. package/dist/RenderScheduler.js +0 -169
  587. package/dist/SVGIconRegistry.js +0 -73
  588. package/dist/animations/config.js +0 -5
  589. package/dist/boot.js +0 -34
  590. package/dist/compatibility/DOMObserver.js +0 -62
  591. package/dist/compatibility/patchNodeValue.js +0 -24
  592. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  593. package/dist/config/AssetsPath.js +0 -17
  594. package/dist/delegate/CustomResize.js +0 -78
  595. package/dist/delegate/NativeResize.js +0 -45
  596. package/dist/features/PropertiesFormatSupport.js +0 -8
  597. package/dist/features/browsersupport/Edge.js +0 -6
  598. package/dist/features/browsersupport/IE11.js +0 -42
  599. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  600. package/dist/renderer/ifDefined.js +0 -21
  601. package/dist/renderer/scopeHTML.js +0 -32
  602. package/dist/resources/bundle.es5.js +0 -225
  603. package/dist/resources/bundle.es5.js.map +0 -1
  604. package/dist/resources/bundle.esm.js +0 -129
  605. package/dist/resources/bundle.esm.js.map +0 -1
  606. package/dist/test-resources/assets/Themes.js +0 -17
  607. package/dist/test-resources/elements/Child.js +0 -35
  608. package/dist/test-resources/elements/Generic.js +0 -84
  609. package/dist/test-resources/elements/GenericExt.js +0 -26
  610. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  611. package/dist/test-resources/elements/Parent.js +0 -41
  612. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  613. package/dist/test-resources/pages/AllTestElements.html +0 -42
  614. package/dist/test-resources/pages/Configuration.html +0 -20
  615. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  616. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  617. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  618. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  619. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  620. package/dist/test-resources/pages/i18n.html +0 -40
  621. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  622. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  623. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  624. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  625. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  626. package/dist/test-resources/specs/Theming.spec.js +0 -31
  627. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -240
  628. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -96
  629. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -73
  630. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  631. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  632. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  633. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  634. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  635. package/dist/theming/CSSVarsPonyfill.js +0 -68
  636. package/dist/theming/adaptCSSForIE.js +0 -95
  637. package/dist/theming/createComponentStyleTag.js +0 -54
  638. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  639. package/dist/thirdparty/Array.from.js +0 -16
  640. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  641. package/dist/thirdparty/Array.prototype.find.js +0 -46
  642. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  643. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  644. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  645. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  646. package/dist/thirdparty/Number.isInteger.js +0 -5
  647. package/dist/thirdparty/Number.isNaN.js +0 -1
  648. package/dist/thirdparty/Number.parseFloat.js +0 -1
  649. package/dist/thirdparty/Number.parseInt.js +0 -1
  650. package/dist/thirdparty/Object.assign.js +0 -31
  651. package/dist/thirdparty/Object.entries.js +0 -11
  652. package/dist/thirdparty/Symbol.js +0 -2
  653. package/dist/thirdparty/WeakSet.js +0 -27
  654. package/dist/thirdparty/es6-string-methods.js +0 -182
  655. package/dist/thirdparty/events-polyfills.js +0 -89
  656. package/dist/thirdparty/fetch.js +0 -1
  657. package/dist/thirdparty/template.js +0 -600
  658. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  659. package/dist/types/CSSSize.js +0 -9
  660. package/dist/types/CalendarSelection.js +0 -17
  661. package/dist/types/PopupState.js +0 -37
  662. package/dist/util/EffectiveAssetPath.js +0 -27
  663. package/dist/util/encodeCSS.js +0 -24
  664. package/dist/util/findNodeOwner.js +0 -35
  665. package/dist/util/isDescendantOf.js +0 -15
  666. package/dist/util/isNodeClickable.js +0 -19
  667. package/dist/util/isNodeHidden.js +0 -9
  668. package/dist/util/isNodeTabbable.js +0 -28
  669. package/dist/util/isSlot.js +0 -3
  670. package/dist/util/setToArray.js +0 -10
  671. package/dist/webcomponentsjs/LICENSE.md +0 -19
  672. package/dist/webcomponentsjs/README.md +0 -229
  673. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  674. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  675. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  676. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  677. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  678. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  679. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  680. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  681. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  682. package/dist/webcomponentsjs/package.json +0 -46
  683. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  684. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  685. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  686. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  687. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  688. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  689. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  690. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  691. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  692. package/src/AssetRegistry.js +0 -12
  693. package/src/CustomElementsRegistry.js +0 -39
  694. package/src/Device.js +0 -823
  695. package/src/EventProvider.js +0 -81
  696. package/src/FeaturesRegistry.js +0 -11
  697. package/src/FontFace.js +0 -118
  698. package/src/InitialConfiguration.js +0 -150
  699. package/src/Keys.js +0 -197
  700. package/src/RenderScheduler.js +0 -169
  701. package/src/SVGIconRegistry.js +0 -73
  702. package/src/StaticArea.js +0 -31
  703. package/src/StaticAreaItem.js +0 -108
  704. package/src/SystemCSSVars.js +0 -31
  705. package/src/animations/animate.js +0 -53
  706. package/src/animations/config.js +0 -5
  707. package/src/animations/scroll.js +0 -28
  708. package/src/asset-registries/Icons.js +0 -32
  709. package/src/asset-registries/LocaleData.js +0 -135
  710. package/src/asset-registries/Themes.js +0 -88
  711. package/src/asset-registries/i18n.js +0 -110
  712. package/src/boot.js +0 -34
  713. package/src/compatibility/DOMObserver.js +0 -62
  714. package/src/compatibility/patchNodeValue.js +0 -24
  715. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  716. package/src/config/AnimationMode.js +0 -23
  717. package/src/config/AssetsPath.js +0 -17
  718. package/src/config/FormatSettings.js +0 -13
  719. package/src/config/Language.js +0 -70
  720. package/src/config/NoConflict.js +0 -51
  721. package/src/config/Theme.js +0 -28
  722. package/src/delegate/CustomResize.js +0 -78
  723. package/src/delegate/ItemNavigation.js +0 -393
  724. package/src/delegate/NativeResize.js +0 -45
  725. package/src/delegate/ResizeHandler.js +0 -65
  726. package/src/delegate/ScrollEnablement.js +0 -159
  727. package/src/features/OpenUI5Support.js +0 -90
  728. package/src/features/PropertiesFormatSupport.js +0 -8
  729. package/src/features/browsersupport/Edge.js +0 -6
  730. package/src/features/browsersupport/IE11.js +0 -42
  731. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  732. package/src/i18nBundle.js +0 -52
  733. package/src/locale/RTLAwareRegistry.js +0 -14
  734. package/src/locale/applyDirection.js +0 -15
  735. package/src/locale/languageChange.js +0 -22
  736. package/src/renderer/LitRenderer.js +0 -31
  737. package/src/renderer/executeTemplate.js +0 -17
  738. package/src/renderer/ifDefined.js +0 -21
  739. package/src/renderer/scopeHTML.js +0 -32
  740. package/src/theming/CSSVarsPonyfill.js +0 -68
  741. package/src/theming/CustomStyle.js +0 -40
  742. package/src/theming/adaptCSSForIE.js +0 -95
  743. package/src/theming/applyTheme.js +0 -84
  744. package/src/theming/createComponentStyleTag.js +0 -54
  745. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  746. package/src/theming/getConstructableStyle.js +0 -29
  747. package/src/theming/getEffectiveStyle.js +0 -23
  748. package/src/theming/getStylesString.js +0 -13
  749. package/src/theming/getThemeDesignerTheme.js +0 -67
  750. package/src/thirdparty/Array.from.js +0 -16
  751. package/src/thirdparty/Array.prototype.fill.js +0 -44
  752. package/src/thirdparty/Array.prototype.find.js +0 -46
  753. package/src/thirdparty/Array.prototype.includes.js +0 -51
  754. package/src/thirdparty/Element.prototype.closest.js +0 -11
  755. package/src/thirdparty/Element.prototype.matches.js +0 -6
  756. package/src/thirdparty/Map.prototype.keys.js +0 -9
  757. package/src/thirdparty/Number.isInteger.js +0 -5
  758. package/src/thirdparty/Number.isNaN.js +0 -1
  759. package/src/thirdparty/Number.parseFloat.js +0 -1
  760. package/src/thirdparty/Number.parseInt.js +0 -1
  761. package/src/thirdparty/Object.assign.js +0 -31
  762. package/src/thirdparty/Object.entries.js +0 -11
  763. package/src/thirdparty/Symbol.js +0 -2
  764. package/src/thirdparty/WeakSet.js +0 -27
  765. package/src/thirdparty/es6-string-methods.js +0 -182
  766. package/src/thirdparty/events-polyfills.js +0 -89
  767. package/src/thirdparty/fetch.js +0 -1
  768. package/src/thirdparty/merge.js +0 -10
  769. package/src/thirdparty/template.js +0 -600
  770. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  771. package/src/types/AnimationMode.js +0 -7
  772. package/src/types/CSSSize.js +0 -9
  773. package/src/types/CalendarSelection.js +0 -17
  774. package/src/types/CalendarType.js +0 -22
  775. package/src/types/DataType.js +0 -25
  776. package/src/types/Float.js +0 -10
  777. package/src/types/Integer.js +0 -9
  778. package/src/types/ItemNavigationBehavior.js +0 -21
  779. package/src/types/NavigationMode.js +0 -7
  780. package/src/types/PopupState.js +0 -37
  781. package/src/types/ValueState.js +0 -22
  782. package/src/util/AriaLabelHelper.js +0 -41
  783. package/src/util/EffectiveAssetPath.js +0 -27
  784. package/src/util/FocusableElements.js +0 -73
  785. package/src/util/TabbableElements.js +0 -47
  786. package/src/util/encodeCSS.js +0 -24
  787. package/src/util/findNodeOwner.js +0 -35
  788. package/src/util/isDescendantOf.js +0 -15
  789. package/src/util/isNodeClickable.js +0 -19
  790. package/src/util/isNodeHidden.js +0 -9
  791. package/src/util/isNodeTabbable.js +0 -28
  792. package/src/util/isSlot.js +0 -3
  793. package/src/util/parseProperties.js +0 -89
  794. package/src/util/setToArray.js +0 -10
@@ -1,40 +1,58 @@
1
1
  import merge from "./thirdparty/merge.js";
2
- import boot from "./boot.js";
3
- import UI5ElementMetadata from "./UI5ElementMetadata.js";
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 executeTemplate from "./renderer/executeTemplate.js";
11
+ import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
6
12
  import StaticAreaItem from "./StaticAreaItem.js";
7
- import RenderScheduler from "./RenderScheduler.js";
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 DOMObserver from "./compatibility/DOMObserver.js";
16
+ import { observeDOMNode, unobserveDOMNode } from "./DOMObserver.js";
10
17
  import { skipOriginalEvent } from "./config/NoConflict.js";
11
- import { getRTL } from "./config/RTL.js";
12
- import getConstructableStyle from "./theming/getConstructableStyle.js";
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 isSlot from "./util/isSlot.js";
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
- const GLOBAL_CONTENT_DENSITY_CSS_VAR = "--_ui5_content_density";
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
- RenderScheduler.renderDeferred(this);
49
- this._eventProvider.fireEvent("change", { ...changeInfo, target: this });
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.webcomponents.base.UI5Element
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
- this._initializeContainers();
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.setAttribute(this.constructor.getMetadata().getPureTag(), "");
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 needsShadowDOM = this.constructor._needsShadowDOM();
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
- RenderScheduler.register(this);
143
- RenderScheduler.renderImmediately(this);
144
- this._domRefReadyPromise._deferredResolve();
171
+ renderImmediately(this);
172
+ this._domRefReadyPromise._deferredResolve!();
145
173
  this._fullyConnected = true;
146
- if (typeof this.onEnterDOM === "function") {
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 needsShadowDOM = this.constructor._needsShadowDOM();
157
- const needsStaticArea = this.constructor._needsStaticArea();
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 (needsShadowDOM) {
167
- RenderScheduler.deregister(this);
168
- if (this._fullyConnected) {
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 (needsStaticArea) {
177
- this.staticAreaItem._removeFragmentFromStaticArea();
196
+ if (this.staticAreaItem && this.staticAreaItem.parentElement) {
197
+ this.staticAreaItem.parentElement.removeChild(this.staticAreaItem);
178
198
  }
179
199
 
180
- RenderScheduler.cancelRender(this);
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 shouldObserveChildren = this.constructor.getMetadata().hasSlots();
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 = this.constructor.getMetadata().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
- DOMObserver.observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);
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
- DOMObserver.unobserveDOMNode(this);
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 slotsMap = this.constructor.getMetadata().getSlots();
224
- const canSlotText = this.constructor.getMetadata().canSlotText();
225
- const domChildren = Array.from(canSlotText ? this.childNodes : this.children);
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 = this.constructor._getSlotName(child);
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
- const validValues = Object.keys(slotsMap).join(", ");
249
- console.warn(`Unknown slotName: ${slotName}, ignoring`, child, `Valid values are: ${validValues}`); // eslint-disable-line
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 = this.constructor.getMetadata().constructor.validateSlotValue(child, slotData);
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.isUI5Element && slotData.invalidateOnChildChange) {
283
- child._attachChange(this._getChildChangeListener(slotName));
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 (isSlot(child)) {
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).push({ child, idx });
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), this._state[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 && child.isUI5Element) {
343
- child._detachChange(this._getChildChangeListener(slotName));
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 (isSlot(child)) {
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
- * @protected
414
+ * @param {InvalidationInfo} callback
415
+ * @public
359
416
  */
360
- _attachChange(callback) {
361
- this._eventProvider.attachEvent("change", callback);
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
- * @protected
424
+ * @param {InvalidationInfo} callback
425
+ * @public
369
426
  */
370
- _detachChange(callback) {
371
- this._eventProvider.detachEvent("change", callback);
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
- const properties = this.constructor.getMetadata().getProperties();
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 propertyTypeClass = properties[nameInCamelCase].type;
406
- if (propertyTypeClass === Boolean) {
407
- newValue = newValue !== null;
408
- }
409
- if (propertyTypeClass === Integer) {
410
- newValue = parseInt(newValue);
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
- if (propertyTypeClass === Float) {
413
- newValue = parseFloat(newValue);
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
- this[nameInCamelCase] = newValue;
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
- if (!this.constructor.getMetadata().hasAttribute(name)) {
424
- return;
425
- }
490
+ _updateAttribute(name: string, newValue: PropertyValue) {
491
+ const ctor = this.constructor as typeof UI5Element;
426
492
 
427
- if (typeof newValue === "object") {
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
- if (typeof newValue === "boolean") {
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 (attrValue !== newValue) {
440
- this.setAttribute(attrName, newValue);
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(prop) {
448
- if (this.hasOwnProperty(prop)) { // eslint-disable-line
449
- const value = this[prop];
450
- delete this[prop];
451
- this[prop] = value;
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, this);
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 {any}
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 {any}
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
- child.addEventListener("slotchange", this._getSlotChangeListener(slotName));
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 RenderScheduler.js
637
+ * Do not call this method directly, only intended to be called by js
558
638
  * @protected
559
639
  */
560
640
  _render() {
561
- const hasIndividualSlots = this.constructor.getMetadata().hasIndividualSlots();
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
- if (typeof this.onBeforeRendering === "function") {
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
- this._updateShadowRoot();
603
- if (this._shouldUpdateFragment()) {
604
- this.staticAreaItem._updateFragment(this);
605
- this.staticAreaItemDomRef = this.staticAreaItem.staticAreaItemDomRef.shadowRoot;
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
- if (typeof this.onAfterRendering === "function") {
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
- return this.shadowRoot.children.length === 1
679
- ? this.shadowRoot.children[0] : this.shadowRoot.children[1];
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
- let compatEventResult = true; // Initialized to true, because if the event is not fired at all, it should be considered "not-prevented"
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 compat event is prevented
763
- compatEventResult = this.dispatchEvent(noConflictEvent);
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 compatEventResult;
811
+ return noConflictEventResult;
767
812
  }
768
813
 
769
- const customEvent = new CustomEvent(name, {
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(customEvent);
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 && compatEventResult;
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
- const reducer = (acc, curr) => {
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 typeof this.staticAreaTemplate === "function";
881
+ return !!this.staticAreaTemplate;
894
882
  }
895
883
 
896
884
  /**
897
885
  * @public
898
886
  */
899
887
  getStaticAreaItemDomRef() {
900
- return this.staticAreaItem.getDomRef();
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
- const MetadataClass = this.getMetadata();
912
- const defaultState = {};
913
- const slotsAreManaged = MetadataClass.slotsAreManaged();
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
- // Initialize slots
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._defaultState = defaultState;
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 (oldState !== value) {
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<any[]>}
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 metadataObjects = [this.metadata];
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
- metadataObjects.unshift(klass.metadata);
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 };