@ui5/webcomponents-base 0.0.0-8db0ce01a → 0.0.0-8e1845415

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