@ui5/webcomponents-base 1.9.3 → 1.10.0

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