@ui5/webcomponents-base 0.0.0-cf50976ce → 0.0.0-d4d43327a

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