@ui5/webcomponents-base 0.0.0-4180fe799 → 0.0.0-4738ea0dc

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