@ui5/webcomponents-base 0.0.0-1e08ebdef → 0.0.0-1f45608ac

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