@ui5/webcomponents-base 0.0.0-701b14e36 → 0.0.0-7d5f73b20

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