@ui5/webcomponents-base 0.0.0-453158269 → 0.0.0-4738ea0dc

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