@ui5/webcomponents-base 0.0.0-1929d08ff → 0.0.0-1cc5f5e54

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