@ui5/webcomponents-base 0.0.0-deac3098a → 0.0.0-e0658a650

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 (627) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/README.md +28 -6
  3. package/bundle.esm.js +12 -10
  4. package/dist/AssetRegistry.d.ts +5 -0
  5. package/dist/AssetRegistry.js +2 -7
  6. package/dist/AssetRegistry.js.map +1 -0
  7. package/dist/Boot.d.ts +8 -0
  8. package/dist/Boot.js +29 -44
  9. package/dist/Boot.js.map +1 -0
  10. package/dist/CSP.d.ts +30 -0
  11. package/dist/CSP.js +16 -24
  12. package/dist/CSP.js.map +1 -0
  13. package/dist/CustomElementsRegistry.d.ts +5 -0
  14. package/dist/CustomElementsRegistry.js +66 -83
  15. package/dist/CustomElementsRegistry.js.map +1 -0
  16. package/dist/CustomElementsScope.d.ts +7 -0
  17. package/dist/CustomElementsScope.js +10 -29
  18. package/dist/CustomElementsScope.js.map +1 -0
  19. package/dist/CustomElementsScopeUtils.d.ts +55 -0
  20. package/dist/CustomElementsScopeUtils.js +34 -52
  21. package/dist/CustomElementsScopeUtils.js.map +1 -0
  22. package/dist/DOMObserver.d.ts +11 -0
  23. package/dist/DOMObserver.js +12 -54
  24. package/dist/DOMObserver.js.map +1 -0
  25. package/dist/Device.d.ts +11 -0
  26. package/dist/Device.js +51 -78
  27. package/dist/Device.js.map +1 -0
  28. package/dist/EventProvider.d.ts +25 -0
  29. package/dist/EventProvider.js +67 -82
  30. package/dist/EventProvider.js.map +1 -0
  31. package/dist/FeaturesRegistry.d.ts +3 -0
  32. package/dist/FeaturesRegistry.js +5 -10
  33. package/dist/FeaturesRegistry.js.map +1 -0
  34. package/dist/FontFace.d.ts +2 -0
  35. package/dist/FontFace.js +14 -19
  36. package/dist/FontFace.js.map +1 -0
  37. package/dist/InitialConfiguration.d.ts +22 -0
  38. package/dist/InitialConfiguration.js +112 -131
  39. package/dist/InitialConfiguration.js.map +1 -0
  40. package/dist/Keys.d.ts +57 -0
  41. package/dist/Keys.js +174 -291
  42. package/dist/Keys.js.map +1 -0
  43. package/dist/ManagedStyles.d.ts +8 -0
  44. package/dist/ManagedStyles.js +62 -68
  45. package/dist/ManagedStyles.js.map +1 -0
  46. package/dist/MediaRange.d.ts +36 -0
  47. package/dist/MediaRange.js +38 -51
  48. package/dist/MediaRange.js.map +1 -0
  49. package/dist/PropertiesFileFormat.d.ts +8 -0
  50. package/dist/PropertiesFileFormat.js +72 -82
  51. package/dist/PropertiesFileFormat.js.map +1 -0
  52. package/dist/Render.d.ts +47 -0
  53. package/dist/Render.js +81 -113
  54. package/dist/Render.js.map +1 -0
  55. package/dist/RenderQueue.d.ts +19 -0
  56. package/dist/RenderQueue.js +52 -62
  57. package/dist/RenderQueue.js.map +1 -0
  58. package/dist/Runtimes.d.ts +27 -0
  59. package/dist/Runtimes.js +49 -70
  60. package/dist/Runtimes.js.map +1 -0
  61. package/dist/StaticArea.d.ts +0 -0
  62. package/dist/StaticArea.js +4 -1
  63. package/dist/StaticArea.js.map +1 -0
  64. package/dist/StaticAreaItem.d.ts +36 -0
  65. package/dist/StaticAreaItem.js +84 -86
  66. package/dist/StaticAreaItem.js.map +1 -0
  67. package/dist/SystemCSSVars.d.ts +2 -0
  68. package/dist/SystemCSSVars.js +4 -5
  69. package/dist/SystemCSSVars.js.map +1 -0
  70. package/dist/Theming.d.ts +3 -0
  71. package/dist/Theming.js +1 -1
  72. package/dist/Theming.js.map +1 -0
  73. package/dist/UI5Element.d.ts +371 -0
  74. package/dist/UI5Element.js +905 -993
  75. package/dist/UI5Element.js.map +1 -0
  76. package/dist/UI5ElementMetadata.d.ts +147 -0
  77. package/dist/UI5ElementMetadata.js +260 -313
  78. package/dist/UI5ElementMetadata.js.map +1 -0
  79. package/dist/animations/AnimationQueue.d.ts +8 -0
  80. package/dist/animations/AnimationQueue.js +31 -38
  81. package/dist/animations/AnimationQueue.js.map +1 -0
  82. package/dist/animations/animate.d.ts +14 -0
  83. package/dist/animations/animate.js +46 -51
  84. package/dist/animations/animate.js.map +1 -0
  85. package/dist/animations/scroll.d.ts +5 -0
  86. package/dist/animations/scroll.js +18 -27
  87. package/dist/animations/scroll.js.map +1 -0
  88. package/dist/animations/slideDown.d.ts +5 -0
  89. package/dist/animations/slideDown.js +53 -78
  90. package/dist/animations/slideDown.js.map +1 -0
  91. package/dist/animations/slideUp.d.ts +5 -0
  92. package/dist/animations/slideUp.js +49 -70
  93. package/dist/animations/slideUp.js.map +1 -0
  94. package/dist/api.json +1 -0
  95. package/dist/asset-registries/Icons.d.ts +30 -0
  96. package/dist/asset-registries/Icons.js +85 -116
  97. package/dist/asset-registries/Icons.js.map +1 -0
  98. package/dist/asset-registries/Illustrations.d.ts +16 -0
  99. package/dist/asset-registries/Illustrations.js +40 -24
  100. package/dist/asset-registries/Illustrations.js.map +1 -0
  101. package/dist/asset-registries/LocaleData.d.ts +7 -0
  102. package/dist/asset-registries/LocaleData.js +104 -132
  103. package/dist/asset-registries/LocaleData.js.map +1 -0
  104. package/dist/asset-registries/Themes.d.ts +10 -0
  105. package/dist/asset-registries/Themes.js +38 -66
  106. package/dist/asset-registries/Themes.js.map +1 -0
  107. package/dist/asset-registries/i18n.d.ts +23 -0
  108. package/dist/asset-registries/i18n.js +55 -81
  109. package/dist/asset-registries/i18n.js.map +1 -0
  110. package/dist/assets/bundle.esm.72c1d211.js +56 -0
  111. package/dist/assets-meta/IconCollectionsAlias.d.ts +17 -0
  112. package/dist/assets-meta/IconCollectionsAlias.js +4 -4
  113. package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
  114. package/dist/config/AnimationMode.d.ts +14 -0
  115. package/dist/config/AnimationMode.js +21 -18
  116. package/dist/config/AnimationMode.js.map +1 -0
  117. package/dist/config/CalendarType.d.ts +8 -0
  118. package/dist/config/CalendarType.js +13 -12
  119. package/dist/config/CalendarType.js.map +1 -0
  120. package/dist/config/FormatSettings.d.ts +11 -0
  121. package/dist/config/FormatSettings.js +10 -8
  122. package/dist/config/FormatSettings.js.map +1 -0
  123. package/dist/config/Icons.d.ts +30 -0
  124. package/dist/config/Icons.js +28 -32
  125. package/dist/config/Icons.js.map +1 -0
  126. package/dist/config/Language.d.ts +31 -0
  127. package/dist/config/Language.js +31 -43
  128. package/dist/config/Language.js.map +1 -0
  129. package/dist/config/NoConflict.d.ts +20 -0
  130. package/dist/config/NoConflict.js +40 -41
  131. package/dist/config/NoConflict.js.map +1 -0
  132. package/dist/config/RTL.d.ts +7 -0
  133. package/dist/config/RTL.js +23 -20
  134. package/dist/config/RTL.js.map +1 -0
  135. package/dist/config/Theme.d.ts +28 -0
  136. package/dist/config/Theme.js +34 -36
  137. package/dist/config/Theme.js.map +1 -0
  138. package/dist/config/ThemeRoots.d.ts +4 -0
  139. package/dist/config/ThemeRoots.js +28 -0
  140. package/dist/config/ThemeRoots.js.map +1 -0
  141. package/dist/css/BusyIndicator.css +4 -0
  142. package/dist/css/FontFace.css +9 -18
  143. package/dist/delegate/ItemNavigation.d.ts +113 -0
  144. package/dist/delegate/ItemNavigation.js +277 -312
  145. package/dist/delegate/ItemNavigation.js.map +1 -0
  146. package/dist/delegate/ResizeHandler.d.ts +24 -0
  147. package/dist/delegate/ResizeHandler.js +68 -91
  148. package/dist/delegate/ResizeHandler.js.map +1 -0
  149. package/dist/delegate/ScrollEnablement.d.ts +43 -0
  150. package/dist/delegate/ScrollEnablement.js +157 -180
  151. package/dist/delegate/ScrollEnablement.js.map +1 -0
  152. package/dist/features/F6Navigation.d.ts +16 -0
  153. package/dist/features/F6Navigation.js +106 -102
  154. package/dist/features/F6Navigation.js.map +1 -0
  155. package/dist/features/OpenUI5Element.d.ts +9 -0
  156. package/dist/features/OpenUI5Element.js +5 -0
  157. package/dist/features/OpenUI5Element.js.map +1 -0
  158. package/dist/features/OpenUI5Enablement.d.ts +11 -0
  159. package/dist/features/OpenUI5Enablement.js +89 -112
  160. package/dist/features/OpenUI5Enablement.js.map +1 -0
  161. package/dist/features/OpenUI5Support.d.ts +23 -0
  162. package/dist/features/OpenUI5Support.js +91 -119
  163. package/dist/features/OpenUI5Support.js.map +1 -0
  164. package/dist/generated/VersionInfo.js +3 -3
  165. package/dist/generated/css/BusyIndicator.css.js +1 -1
  166. package/dist/generated/css/FontFace.css.js +1 -1
  167. package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
  168. package/dist/getSharedResource.d.ts +11 -0
  169. package/dist/getSharedResource.js +12 -16
  170. package/dist/getSharedResource.js.map +1 -0
  171. package/dist/i18nBundle.d.ts +43 -0
  172. package/dist/i18nBundle.js +56 -64
  173. package/dist/i18nBundle.js.map +1 -0
  174. package/dist/locale/Locale.d.ts +22 -0
  175. package/dist/locale/Locale.js +75 -87
  176. package/dist/locale/Locale.js.map +1 -0
  177. package/dist/locale/RTLAwareRegistry.d.ts +4 -0
  178. package/dist/locale/RTLAwareRegistry.js +6 -11
  179. package/dist/locale/RTLAwareRegistry.js.map +1 -0
  180. package/dist/locale/applyDirection.d.ts +10 -0
  181. package/dist/locale/applyDirection.js +7 -7
  182. package/dist/locale/applyDirection.js.map +1 -0
  183. package/dist/locale/directionChange.d.ts +15 -0
  184. package/dist/locale/directionChange.js +7 -15
  185. package/dist/locale/directionChange.js.map +1 -0
  186. package/dist/locale/getEffectiveDir.d.ts +2 -0
  187. package/dist/locale/getEffectiveDir.js +20 -24
  188. package/dist/locale/getEffectiveDir.js.map +1 -0
  189. package/dist/locale/getLocale.d.ts +7 -0
  190. package/dist/locale/getLocale.js +26 -29
  191. package/dist/locale/getLocale.js.map +1 -0
  192. package/dist/locale/languageChange.d.ts +5 -0
  193. package/dist/locale/languageChange.js +8 -16
  194. package/dist/locale/languageChange.js.map +1 -0
  195. package/dist/locale/nextFallbackLocale.d.ts +8 -0
  196. package/dist/locale/nextFallbackLocale.js +15 -19
  197. package/dist/locale/nextFallbackLocale.js.map +1 -0
  198. package/dist/locale/normalizeLocale.d.ts +7 -0
  199. package/dist/locale/normalizeLocale.js +34 -41
  200. package/dist/locale/normalizeLocale.js.map +1 -0
  201. package/dist/renderer/LitRenderer.d.ts +14 -0
  202. package/dist/renderer/LitRenderer.js +28 -39
  203. package/dist/renderer/LitRenderer.js.map +1 -0
  204. package/dist/renderer/executeTemplate.d.ts +13 -0
  205. package/dist/renderer/executeTemplate.js +12 -16
  206. package/dist/renderer/executeTemplate.js.map +1 -0
  207. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
  208. package/dist/theming/CustomStyle.d.ts +6 -0
  209. package/dist/theming/CustomStyle.js +29 -43
  210. package/dist/theming/CustomStyle.js.map +1 -0
  211. package/dist/theming/ThemeLoaded.d.ts +5 -0
  212. package/dist/theming/ThemeLoaded.js +8 -16
  213. package/dist/theming/ThemeLoaded.js.map +1 -0
  214. package/dist/theming/applyTheme.d.ts +2 -0
  215. package/dist/theming/applyTheme.js +60 -64
  216. package/dist/theming/applyTheme.js.map +1 -0
  217. package/dist/theming/getConstructableStyle.d.ts +9 -0
  218. package/dist/theming/getConstructableStyle.js +12 -17
  219. package/dist/theming/getConstructableStyle.js.map +1 -0
  220. package/dist/theming/getEffectiveLinksHrefs.d.ts +3 -0
  221. package/dist/theming/getEffectiveLinksHrefs.js +11 -22
  222. package/dist/theming/getEffectiveLinksHrefs.js.map +1 -0
  223. package/dist/theming/getEffectiveStyle.d.ts +3 -0
  224. package/dist/theming/getEffectiveStyle.js +24 -31
  225. package/dist/theming/getEffectiveStyle.js.map +1 -0
  226. package/dist/theming/getStylesString.d.ts +3 -0
  227. package/dist/theming/getStylesString.js +8 -13
  228. package/dist/theming/getStylesString.js.map +1 -0
  229. package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
  230. package/dist/theming/getThemeDesignerTheme.js +72 -79
  231. package/dist/theming/getThemeDesignerTheme.js.map +1 -0
  232. package/dist/theming/preloadLinks.d.ts +3 -0
  233. package/dist/theming/preloadLinks.js +13 -17
  234. package/dist/theming/preloadLinks.js.map +1 -0
  235. package/dist/thirdparty/_merge.d.ts +2 -0
  236. package/dist/thirdparty/_merge.js +7 -4
  237. package/dist/thirdparty/_merge.js.map +1 -0
  238. package/dist/thirdparty/isPlainObject.d.ts +2 -0
  239. package/dist/thirdparty/isPlainObject.js +11 -10
  240. package/dist/thirdparty/isPlainObject.js.map +1 -0
  241. package/dist/thirdparty/merge.d.ts +2 -0
  242. package/dist/thirdparty/merge.js +4 -8
  243. package/dist/thirdparty/merge.js.map +1 -0
  244. package/dist/types/AnimationMode.d.ts +32 -0
  245. package/dist/types/AnimationMode.js +33 -6
  246. package/dist/types/AnimationMode.js.map +1 -0
  247. package/dist/types/CSSColor.d.ts +16 -0
  248. package/dist/types/CSSColor.js +15 -5
  249. package/dist/types/CSSColor.js.map +1 -0
  250. package/dist/types/CalendarType.d.ts +37 -0
  251. package/dist/types/CalendarType.js +35 -18
  252. package/dist/types/CalendarType.js.map +1 -0
  253. package/dist/types/DOMReference.d.ts +17 -0
  254. package/dist/types/DOMReference.js +25 -0
  255. package/dist/types/DOMReference.js.map +1 -0
  256. package/dist/types/DataType.d.ts +25 -0
  257. package/dist/types/DataType.js +32 -25
  258. package/dist/types/DataType.js.map +1 -0
  259. package/dist/types/Float.d.ts +18 -0
  260. package/dist/types/Float.js +18 -10
  261. package/dist/types/Float.js.map +1 -0
  262. package/dist/types/Integer.d.ts +18 -0
  263. package/dist/types/Integer.js +18 -9
  264. package/dist/types/Integer.js.map +1 -0
  265. package/dist/types/InvisibleMessageMode.d.ts +25 -0
  266. package/dist/types/InvisibleMessageMode.js +20 -23
  267. package/dist/types/InvisibleMessageMode.js.map +1 -0
  268. package/dist/types/ItemNavigationBehavior.d.ts +24 -0
  269. package/dist/types/ItemNavigationBehavior.js +22 -12
  270. package/dist/types/ItemNavigationBehavior.js.map +1 -0
  271. package/dist/types/NavigationMode.d.ts +32 -0
  272. package/dist/types/NavigationMode.js +33 -6
  273. package/dist/types/NavigationMode.js.map +1 -0
  274. package/dist/types/ValueState.d.ts +42 -0
  275. package/dist/types/ValueState.js +41 -19
  276. package/dist/types/ValueState.js.map +1 -0
  277. package/dist/types.d.ts +13 -0
  278. package/dist/types.js +2 -0
  279. package/dist/types.js.map +1 -0
  280. package/dist/updateShadowRoot.d.ts +8 -0
  281. package/dist/updateShadowRoot.js +21 -17
  282. package/dist/updateShadowRoot.js.map +1 -0
  283. package/dist/util/AriaLabelHelper.d.ts +6 -0
  284. package/dist/util/AriaLabelHelper.js +37 -34
  285. package/dist/util/AriaLabelHelper.js.map +1 -0
  286. package/dist/util/Caret.d.ts +7 -0
  287. package/dist/util/Caret.js +16 -38
  288. package/dist/util/Caret.js.map +1 -0
  289. package/dist/util/ColorConversion.d.ts +33 -0
  290. package/dist/util/ColorConversion.js +315 -348
  291. package/dist/util/ColorConversion.js.map +1 -0
  292. package/dist/util/FetchHelper.d.ts +3 -0
  293. package/dist/util/FetchHelper.js +19 -25
  294. package/dist/util/FetchHelper.js.map +1 -0
  295. package/dist/util/FocusableElements.d.ts +3 -0
  296. package/dist/util/FocusableElements.js +54 -71
  297. package/dist/util/FocusableElements.js.map +1 -0
  298. package/dist/util/HTMLSanitizer.d.ts +3 -0
  299. package/dist/util/HTMLSanitizer.js +4 -5
  300. package/dist/util/HTMLSanitizer.js.map +1 -0
  301. package/dist/util/InvisibleMessage.d.ts +10 -0
  302. package/dist/util/InvisibleMessage.js +41 -45
  303. package/dist/util/InvisibleMessage.js.map +1 -0
  304. package/dist/util/PopupUtils.d.ts +7 -0
  305. package/dist/util/PopupUtils.js +57 -76
  306. package/dist/util/PopupUtils.js.map +1 -0
  307. package/dist/util/SlotsHelper.d.ts +9 -0
  308. package/dist/util/SlotsHelper.js +22 -35
  309. package/dist/util/SlotsHelper.js.map +1 -0
  310. package/dist/util/StringHelper.d.ts +3 -0
  311. package/dist/util/StringHelper.js +17 -20
  312. package/dist/util/StringHelper.js.map +1 -0
  313. package/dist/util/TabbableElements.d.ts +3 -0
  314. package/dist/util/TabbableElements.js +39 -47
  315. package/dist/util/TabbableElements.js.map +1 -0
  316. package/dist/util/arraysAreEqual.d.ts +2 -0
  317. package/dist/util/arraysAreEqual.js +10 -12
  318. package/dist/util/arraysAreEqual.js.map +1 -0
  319. package/dist/util/clamp.d.ts +9 -0
  320. package/dist/util/clamp.js +2 -2
  321. package/dist/util/clamp.js.map +1 -0
  322. package/dist/util/createLinkInHead.d.ts +7 -0
  323. package/dist/util/createLinkInHead.js +14 -12
  324. package/dist/util/createLinkInHead.js.map +1 -0
  325. package/dist/util/createStyleInHead.d.ts +8 -0
  326. package/dist/util/createStyleInHead.js +10 -10
  327. package/dist/util/createStyleInHead.js.map +1 -0
  328. package/dist/util/debounce.d.ts +2 -0
  329. package/dist/util/debounce.js +6 -8
  330. package/dist/util/debounce.js.map +1 -0
  331. package/dist/util/detectNavigatorLanguage.d.ts +2 -0
  332. package/dist/util/detectNavigatorLanguage.js +7 -10
  333. package/dist/util/detectNavigatorLanguage.js.map +1 -0
  334. package/dist/util/escapeRegex.d.ts +8 -0
  335. package/dist/util/escapeRegex.js +8 -7
  336. package/dist/util/escapeRegex.js.map +1 -0
  337. package/dist/util/formatMessage.d.ts +2 -0
  338. package/dist/util/formatMessage.js +15 -19
  339. package/dist/util/formatMessage.js.map +1 -0
  340. package/dist/util/generateHighlightedMarkup.d.ts +9 -0
  341. package/dist/util/generateHighlightedMarkup.js +26 -27
  342. package/dist/util/generateHighlightedMarkup.js.map +1 -0
  343. package/dist/util/getActiveElement.d.ts +2 -0
  344. package/dist/util/getActiveElement.js +6 -8
  345. package/dist/util/getActiveElement.js.map +1 -0
  346. package/dist/util/getClassCopy.d.ts +398 -0
  347. package/dist/util/getClassCopy.js +7 -7
  348. package/dist/util/getClassCopy.js.map +1 -0
  349. package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
  350. package/dist/util/getDesigntimePropertyAsArray.js +4 -3
  351. package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
  352. package/dist/util/getEffectiveContentDensity.d.ts +2 -0
  353. package/dist/util/getEffectiveContentDensity.js +2 -3
  354. package/dist/util/getEffectiveContentDensity.js.map +1 -0
  355. package/dist/util/getEffectiveScrollbarStyle.d.ts +2 -0
  356. package/dist/util/getEffectiveScrollbarStyle.js +4 -0
  357. package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
  358. package/dist/util/getFastNavigationGroups.d.ts +2 -0
  359. package/dist/util/getFastNavigationGroups.js +51 -0
  360. package/dist/util/getFastNavigationGroups.js.map +1 -0
  361. package/dist/util/getFileExtension.d.ts +12 -0
  362. package/dist/util/getFileExtension.js +9 -11
  363. package/dist/util/getFileExtension.js.map +1 -0
  364. package/dist/util/getNormalizedTarget.d.ts +7 -0
  365. package/dist/util/getNormalizedTarget.js +7 -9
  366. package/dist/util/getNormalizedTarget.js.map +1 -0
  367. package/dist/util/getSingletonElementInstance.d.ts +2 -0
  368. package/dist/util/getSingletonElementInstance.js +7 -10
  369. package/dist/util/getSingletonElementInstance.js.map +1 -0
  370. package/dist/util/isDefaultSlotProvided.d.ts +2 -0
  371. package/dist/util/isDefaultSlotProvided.js +10 -0
  372. package/dist/util/isDefaultSlotProvided.js.map +1 -0
  373. package/dist/util/isElementClickable.d.ts +2 -0
  374. package/dist/util/isElementClickable.js +16 -0
  375. package/dist/util/isElementClickable.js.map +1 -0
  376. package/dist/util/isElementHidden.d.ts +2 -0
  377. package/dist/util/isElementHidden.js +8 -0
  378. package/dist/util/isElementHidden.js.map +1 -0
  379. package/dist/util/isElementInView.d.ts +6 -0
  380. package/dist/util/isElementInView.js +6 -9
  381. package/dist/util/isElementInView.js.map +1 -0
  382. package/dist/util/isElementTabbable.d.ts +2 -0
  383. package/dist/util/isElementTabbable.js +22 -0
  384. package/dist/util/isElementTabbable.js.map +1 -0
  385. package/dist/util/isValidPropertyName.d.ts +8 -0
  386. package/dist/util/isValidPropertyName.js +16 -17
  387. package/dist/util/isValidPropertyName.js.map +1 -0
  388. package/dist/util/whenDOMReady.d.ts +2 -0
  389. package/dist/util/whenDOMReady.js +11 -10
  390. package/dist/util/whenDOMReady.js.map +1 -0
  391. package/dist/validateThemeRoot.d.ts +2 -0
  392. package/dist/validateThemeRoot.js +47 -0
  393. package/dist/validateThemeRoot.js.map +1 -0
  394. package/global.d.ts +44 -0
  395. package/lib/generate-asset-parameters/index.js +8 -4
  396. package/lib/generate-styles/index.js +17 -9
  397. package/lib/generate-version-info/index.js +18 -13
  398. package/package-scripts.js +27 -22
  399. package/package.json +9 -7
  400. package/src/{AssetRegistry.js → AssetRegistry.ts} +0 -0
  401. package/src/Boot.ts +61 -0
  402. package/src/{CSP.js → CSP.ts} +14 -7
  403. package/src/{CustomElementsRegistry.js → CustomElementsRegistry.ts} +20 -17
  404. package/src/{CustomElementsScope.js → CustomElementsScope.ts} +8 -5
  405. package/src/{CustomElementsScopeUtils.js → CustomElementsScopeUtils.ts} +14 -7
  406. package/src/DOMObserver.ts +28 -0
  407. package/src/{Device.js → Device.ts} +8 -3
  408. package/src/{EventProvider.js → EventProvider.ts} +9 -7
  409. package/src/FeaturesRegistry.ts +14 -0
  410. package/src/{FontFace.js → FontFace.ts} +3 -2
  411. package/src/{InitialConfiguration.js → InitialConfiguration.ts} +53 -12
  412. package/src/Keys.ts +295 -0
  413. package/src/ManagedStyles.ts +92 -0
  414. package/src/{MediaRange.js → MediaRange.ts} +14 -14
  415. package/src/{PropertiesFileFormat.js → PropertiesFileFormat.ts} +8 -8
  416. package/src/{Render.js → Render.ts} +25 -20
  417. package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
  418. package/src/{Runtimes.js → Runtimes.ts} +15 -8
  419. package/src/{StaticArea.js → StaticArea.ts} +0 -0
  420. package/src/{StaticAreaItem.js → StaticAreaItem.ts} +30 -18
  421. package/src/{SystemCSSVars.js → SystemCSSVars.ts} +0 -0
  422. package/src/{Theming.js → Theming.ts} +0 -0
  423. package/src/{UI5Element.js → UI5Element.ts} +231 -139
  424. package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +80 -43
  425. package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
  426. package/src/animations/animate.ts +64 -0
  427. package/src/animations/scroll.ts +21 -0
  428. package/src/animations/{slideDown.js → slideDown.ts} +27 -34
  429. package/src/animations/{slideUp.js → slideUp.ts} +28 -32
  430. package/src/asset-registries/{Icons.js → Icons.ts} +63 -37
  431. package/src/asset-registries/Illustrations.ts +73 -0
  432. package/src/asset-registries/{LocaleData.js → LocaleData.ts} +36 -28
  433. package/src/asset-registries/Themes.ts +67 -0
  434. package/src/asset-registries/{i18n.js → i18n.ts} +21 -24
  435. package/src/assets-meta/{IconCollectionsAlias.js → IconCollectionsAlias.ts} +0 -0
  436. package/src/config/AnimationMode.ts +33 -0
  437. package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
  438. package/src/config/FormatSettings.ts +21 -0
  439. package/src/config/{Icons.js → Icons.ts} +19 -12
  440. package/src/config/{Language.js → Language.ts} +22 -18
  441. package/src/config/NoConflict.ts +67 -0
  442. package/src/config/{RTL.js → RTL.ts} +14 -4
  443. package/src/config/Theme.ts +64 -0
  444. package/src/config/ThemeRoots.ts +41 -0
  445. package/src/css/BusyIndicator.css +4 -0
  446. package/src/css/FontFace.css +9 -18
  447. package/src/delegate/{ItemNavigation.js → ItemNavigation.ts} +63 -21
  448. package/src/delegate/{ResizeHandler.js → ResizeHandler.ts} +25 -36
  449. package/src/delegate/ScrollEnablement.ts +215 -0
  450. package/src/features/F6Navigation.ts +141 -0
  451. package/src/features/OpenUI5Element.ts +11 -0
  452. package/src/features/OpenUI5Enablement.ts +117 -0
  453. package/src/features/OpenUI5Support.ts +148 -0
  454. package/src/{getSharedResource.js → getSharedResource.ts} +3 -3
  455. package/src/{i18nBundle.js → i18nBundle.ts} +44 -22
  456. package/src/locale/{Locale.js → Locale.ts} +15 -5
  457. package/src/locale/RTLAwareRegistry.ts +16 -0
  458. package/src/locale/{applyDirection.js → applyDirection.ts} +4 -3
  459. package/src/locale/{directionChange.js → directionChange.ts} +6 -4
  460. package/src/locale/{getEffectiveDir.js → getEffectiveDir.ts} +1 -1
  461. package/src/locale/{getLocale.js → getLocale.ts} +12 -7
  462. package/src/locale/languageChange.ts +24 -0
  463. package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
  464. package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +4 -2
  465. package/src/renderer/LitRenderer.ts +60 -0
  466. package/src/renderer/{executeTemplate.js → executeTemplate.ts} +11 -5
  467. package/src/theming/{CustomStyle.js → CustomStyle.ts} +11 -9
  468. package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
  469. package/src/theming/{applyTheme.js → applyTheme.ts} +22 -11
  470. package/src/theming/{getConstructableStyle.js → getConstructableStyle.ts} +5 -4
  471. package/src/theming/getEffectiveLinksHrefs.ts +24 -0
  472. package/src/theming/{getEffectiveStyle.js → getEffectiveStyle.ts} +9 -7
  473. package/src/theming/getStylesString.ts +13 -0
  474. package/src/theming/{getThemeDesignerTheme.js → getThemeDesignerTheme.ts} +22 -8
  475. package/src/theming/{preloadLinks.js → preloadLinks.ts} +3 -2
  476. package/src/thirdparty/{_merge.js → _merge.ts} +2 -2
  477. package/src/thirdparty/{isPlainObject.js → isPlainObject.ts} +1 -1
  478. package/src/thirdparty/merge.ts +5 -0
  479. package/src/types/AnimationMode.ts +33 -0
  480. package/src/types/{CSSColor.js → CSSColor.ts} +12 -1
  481. package/src/types/CalendarType.ts +38 -0
  482. package/src/types/DOMReference.ts +28 -0
  483. package/src/types/DataType.ts +51 -0
  484. package/src/types/Float.ts +25 -0
  485. package/src/types/Integer.ts +25 -0
  486. package/src/types/InvisibleMessageMode.ts +27 -0
  487. package/src/types/ItemNavigationBehavior.ts +26 -0
  488. package/src/types/NavigationMode.ts +33 -0
  489. package/src/types/ValueState.ts +47 -0
  490. package/src/types.ts +22 -0
  491. package/src/updateShadowRoot.ts +37 -0
  492. package/src/util/AriaLabelHelper.ts +63 -0
  493. package/src/util/Caret.ts +28 -0
  494. package/src/util/ColorConversion.ts +394 -0
  495. package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
  496. package/src/util/FocusableElements.ts +80 -0
  497. package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
  498. package/src/util/{InvisibleMessage.js → InvisibleMessage.ts} +15 -6
  499. package/src/util/PopupUtils.ts +114 -0
  500. package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
  501. package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
  502. package/src/util/TabbableElements.ts +56 -0
  503. package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
  504. package/src/util/{clamp.js → clamp.ts} +1 -1
  505. package/src/util/{createLinkInHead.js → createLinkInHead.ts} +10 -4
  506. package/src/util/{createStyleInHead.js → createStyleInHead.ts} +4 -2
  507. package/src/util/{debounce.js → debounce.ts} +5 -4
  508. package/src/util/{detectNavigatorLanguage.js → detectNavigatorLanguage.ts} +1 -1
  509. package/src/util/escapeRegex.ts +11 -0
  510. package/src/util/{formatMessage.js → formatMessage.ts} +4 -3
  511. package/src/util/{generateHighlightedMarkup.js → generateHighlightedMarkup.ts} +7 -6
  512. package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
  513. package/src/util/{getClassCopy.js → getClassCopy.ts} +3 -1
  514. package/src/util/{getDesigntimePropertyAsArray.js → getDesigntimePropertyAsArray.ts} +1 -1
  515. package/src/util/getEffectiveContentDensity.ts +5 -0
  516. package/src/util/getEffectiveScrollbarStyle.ts +5 -0
  517. package/src/util/getFastNavigationGroups.ts +63 -0
  518. package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
  519. package/src/util/{getNormalizedTarget.js → getNormalizedTarget.ts} +2 -2
  520. package/src/util/{getSingletonElementInstance.js → getSingletonElementInstance.ts} +1 -1
  521. package/src/util/isDefaultSlotProvided.ts +11 -0
  522. package/src/util/isElementClickable.ts +19 -0
  523. package/src/util/isElementHidden.ts +9 -0
  524. package/src/util/{isElementInView.js → isElementInView.ts} +1 -1
  525. package/src/util/isElementTabbable.ts +28 -0
  526. package/src/util/{isValidPropertyName.js → isValidPropertyName.ts} +1 -1
  527. package/src/util/{whenDOMReady.js → whenDOMReady.ts} +1 -1
  528. package/src/validateThemeRoot.ts +58 -0
  529. package/tsconfig.json +13 -0
  530. package/config/.eslintrc.js +0 -3
  531. package/config/rollup.config.js +0 -1
  532. package/dist/RenderScheduler.js +0 -44
  533. package/dist/animations/config.js +0 -5
  534. package/dist/isLegacyBrowser.js +0 -3
  535. package/dist/resources/bundle.esm.js +0 -32
  536. package/dist/resources/bundle.esm.js.map +0 -1
  537. package/dist/test-resources/assets/Themes.js +0 -17
  538. package/dist/test-resources/elements/Child.js +0 -35
  539. package/dist/test-resources/elements/Generic.js +0 -84
  540. package/dist/test-resources/elements/GenericExt.js +0 -26
  541. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  542. package/dist/test-resources/elements/Parent.js +0 -41
  543. package/dist/test-resources/elements/WithStaticArea.js +0 -77
  544. package/dist/test-resources/pages/AllTestElements.html +0 -42
  545. package/dist/test-resources/pages/Configuration.html +0 -18
  546. package/dist/test-resources/pages/ConfigurationScript.html +0 -34
  547. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  548. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  549. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  550. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  551. package/dist/test-resources/pages/i18n.html +0 -33
  552. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -27
  553. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -63
  554. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -93
  555. package/dist/test-resources/specs/CustomTheme.spec.js +0 -27
  556. package/dist/test-resources/specs/EventProvider.spec.js +0 -63
  557. package/dist/test-resources/specs/StaticArea.spec.js +0 -78
  558. package/dist/test-resources/specs/Theming.spec.js +0 -33
  559. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
  560. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
  561. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
  562. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
  563. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
  564. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
  565. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
  566. package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
  567. package/dist/types/CSSSize.js +0 -9
  568. package/dist/types/PopupState.js +0 -37
  569. package/dist/util/findNodeOwner.js +0 -35
  570. package/dist/util/isDescendantOf.js +0 -15
  571. package/dist/util/isNodeClickable.js +0 -19
  572. package/dist/util/isNodeHidden.js +0 -9
  573. package/dist/util/isNodeTabbable.js +0 -28
  574. package/dist/util/setToArray.js +0 -10
  575. package/hash.txt +0 -1
  576. package/src/Boot.js +0 -59
  577. package/src/DOMObserver.js +0 -65
  578. package/src/FeaturesRegistry.js +0 -14
  579. package/src/Keys.js +0 -295
  580. package/src/ManagedStyles.js +0 -83
  581. package/src/RenderScheduler.js +0 -44
  582. package/src/animations/animate.js +0 -53
  583. package/src/animations/config.js +0 -5
  584. package/src/animations/scroll.js +0 -28
  585. package/src/asset-registries/Illustrations.js +0 -30
  586. package/src/asset-registries/Themes.js +0 -78
  587. package/src/config/AnimationMode.js +0 -23
  588. package/src/config/FormatSettings.js +0 -13
  589. package/src/config/NoConflict.js +0 -51
  590. package/src/config/Theme.js +0 -53
  591. package/src/delegate/ScrollEnablement.js +0 -188
  592. package/src/features/F6Navigation.js +0 -108
  593. package/src/features/OpenUI5Enablement.js +0 -119
  594. package/src/features/OpenUI5Support.js +0 -125
  595. package/src/isLegacyBrowser.js +0 -3
  596. package/src/locale/RTLAwareRegistry.js +0 -14
  597. package/src/locale/languageChange.js +0 -22
  598. package/src/renderer/LitRenderer.js +0 -52
  599. package/src/theming/getEffectiveLinksHrefs.js +0 -27
  600. package/src/theming/getStylesString.js +0 -15
  601. package/src/thirdparty/merge.js +0 -10
  602. package/src/types/AnimationMode.js +0 -7
  603. package/src/types/CSSSize.js +0 -9
  604. package/src/types/CalendarType.js +0 -22
  605. package/src/types/DataType.js +0 -37
  606. package/src/types/Float.js +0 -14
  607. package/src/types/Integer.js +0 -13
  608. package/src/types/InvisibleMessageMode.js +0 -30
  609. package/src/types/ItemNavigationBehavior.js +0 -16
  610. package/src/types/NavigationMode.js +0 -7
  611. package/src/types/PopupState.js +0 -37
  612. package/src/types/ValueState.js +0 -22
  613. package/src/updateShadowRoot.js +0 -30
  614. package/src/util/AriaLabelHelper.js +0 -41
  615. package/src/util/Caret.js +0 -45
  616. package/src/util/ColorConversion.js +0 -370
  617. package/src/util/FocusableElements.js +0 -79
  618. package/src/util/PopupUtils.js +0 -93
  619. package/src/util/TabbableElements.js +0 -51
  620. package/src/util/escapeRegex.js +0 -10
  621. package/src/util/findNodeOwner.js +0 -35
  622. package/src/util/getEffectiveContentDensity.js +0 -5
  623. package/src/util/isDescendantOf.js +0 -15
  624. package/src/util/isNodeClickable.js +0 -19
  625. package/src/util/isNodeHidden.js +0 -9
  626. package/src/util/isNodeTabbable.js +0 -28
  627. 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, StyleData } 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
@@ -58,10 +79,32 @@ let metadata = {};
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)
@@ -230,7 +300,7 @@ class UI5Element extends HTMLElement {
230
300
  if (slotData.individualSlots) {
231
301
  const nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;
232
302
  autoIncrementMap.set(slotName, nextIndex);
233
- child._individualSlot = `${slotName}-${nextIndex}`;
303
+ (child as Record<string, any>)._individualSlot = `${slotName}-${nextIndex}`;
234
304
  }
235
305
 
236
306
  // Await for not-yet-defined custom elements
@@ -252,23 +322,26 @@ class UI5Element extends HTMLElement {
252
322
  }
253
323
  }
254
324
 
255
- child = this.constructor.getMetadata().constructor.validateSlotValue(child, slotData);
325
+ child = (ctor.getMetadata().constructor as typeof UI5ElementMetadata).validateSlotValue(child, slotData);
256
326
 
257
327
  // 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));
328
+ if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
329
+ const childChangeListener = this._getChildChangeListener(slotName);
330
+
331
+ if (childChangeListener) {
332
+ child.attachInvalidate.call(child, childChangeListener);
333
+ }
261
334
  }
262
335
 
263
336
  // Listen for the slotchange event if the child is a slot itself
264
- if (isSlot(child)) {
337
+ if (child instanceof HTMLSlotElement) {
265
338
  this._attachSlotChange(child, slotName);
266
339
  }
267
340
 
268
341
  const propertyName = slotData.propertyName || slotName;
269
342
 
270
343
  if (slottedChildrenMap.has(propertyName)) {
271
- slottedChildrenMap.get(propertyName).push({ child, idx });
344
+ slottedChildrenMap.get(propertyName)!.push({ child, idx });
272
345
  } else {
273
346
  slottedChildrenMap.set(propertyName, [{ child, idx }]);
274
347
  }
@@ -286,10 +359,10 @@ class UI5Element extends HTMLElement {
286
359
  let invalidated = false;
287
360
  for (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line
288
361
  const propertyName = slotData.propertyName || slotName;
289
- if (!arraysAreEqual(slotsCachedContentMap.get(propertyName), this._state[propertyName])) {
362
+ if (!arraysAreEqual(slotsCachedContentMap.get(propertyName)!, this._state[propertyName] as Array<SlotValue>)) {
290
363
  _invalidate.call(this, {
291
364
  type: "slot",
292
- name: propertyNameToSlotMap.get(propertyName),
365
+ name: propertyNameToSlotMap.get(propertyName)!,
293
366
  reason: "children",
294
367
  });
295
368
  invalidated = true;
@@ -311,17 +384,20 @@ class UI5Element extends HTMLElement {
311
384
  * Removes all children from the slot and detaches listeners, if any
312
385
  * @private
313
386
  */
314
- _clearSlot(slotName, slotData) {
387
+ _clearSlot(slotName: string, slotData: Slot) {
315
388
  const propertyName = slotData.propertyName || slotName;
316
- const children = this._state[propertyName];
389
+ const children = this._state[propertyName] as Array<SlotValue>;
317
390
 
318
391
  children.forEach(child => {
319
- if (child && child.isUI5Element) {
320
- const method = (child.detachInvalidate || child._detachChange).bind(child);
321
- method(this._getChildChangeListener(slotName));
392
+ if (instanceOfUI5Element(child)) {
393
+ const childChangeListener = this._getChildChangeListener(slotName);
394
+
395
+ if (childChangeListener) {
396
+ child.detachInvalidate.call(child, childChangeListener);
397
+ }
322
398
  }
323
399
 
324
- if (isSlot(child)) {
400
+ if (child instanceof HTMLSlotElement) {
325
401
  this._detachSlotChange(child, slotName);
326
402
  }
327
403
  });
@@ -332,32 +408,32 @@ class UI5Element extends HTMLElement {
332
408
  /**
333
409
  * Attach a callback that will be executed whenever the component is invalidated
334
410
  *
335
- * @param callback
411
+ * @param {InvalidationInfo} callback
336
412
  * @public
337
413
  */
338
- attachInvalidate(callback) {
414
+ attachInvalidate(callback: (param: InvalidationInfo) => void) {
339
415
  this._eventProvider.attachEvent("invalidate", callback);
340
416
  }
341
417
 
342
418
  /**
343
419
  * Detach the callback that is executed whenever the component is invalidated
344
420
  *
345
- * @param callback
421
+ * @param {InvalidationInfo} callback
346
422
  * @public
347
423
  */
348
- detachInvalidate(callback) {
424
+ detachInvalidate(callback: (param: InvalidationInfo) => void) {
349
425
  this._eventProvider.detachEvent("invalidate", callback);
350
426
  }
351
427
 
352
428
  /**
353
429
  * Callback that is executed whenever a monitored child changes its state
354
430
  *
355
- * @param slotName the slot in which a child was invalidated
356
- * @param childChangeInfo the changeInfo object for the child in the given slot
431
+ * @param {sting} slotName the slot in which a child was invalidated
432
+ * @param { ChangeInfo } childChangeInfo the changeInfo object for the child in the given slot
357
433
  * @private
358
434
  */
359
- _onChildChange(slotName, childChangeInfo) {
360
- if (!this.constructor.getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
435
+ _onChildChange(slotName: string, childChangeInfo: ChangeInfo) {
436
+ if (!(this.constructor as typeof UI5Element).getMetadata().shouldInvalidateOnChildChange(slotName, childChangeInfo.type, childChangeInfo.name)) {
361
437
  return;
362
438
  }
363
439
 
@@ -375,29 +451,39 @@ class UI5Element extends HTMLElement {
375
451
  * Do not override this method in derivatives of UI5Element
376
452
  * @private
377
453
  */
378
- attributeChangedCallback(name, oldValue, newValue) {
379
- const properties = this.constructor.getMetadata().getProperties();
454
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
455
+ let newPropertyValue: PropertyValue;
456
+ if (this._doNotSyncAttributes.has(name)) { // This attribute is mutated internally, not by the user
457
+ return;
458
+ }
459
+
460
+ const properties = (this.constructor as typeof UI5Element).getMetadata().getProperties();
380
461
  const realName = name.replace(/^ui5-/, "");
381
462
  const nameInCamelCase = kebabToCamelCase(realName);
382
463
  if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
383
464
  const propertyTypeClass = properties[nameInCamelCase].type;
384
465
  if (propertyTypeClass === Boolean) {
385
- newValue = newValue !== null;
386
- } else if (isDescendantOf(propertyTypeClass, DataType)) {
387
- newValue = propertyTypeClass.attributeToProperty(newValue);
466
+ newPropertyValue = newValue !== null;
467
+ } else if ((propertyTypeClass as typeof DataType).isDataTypeClass) {
468
+ newPropertyValue = (propertyTypeClass as typeof DataType).attributeToProperty(newValue);
469
+ } else {
470
+ newPropertyValue = newValue as string;
388
471
  }
389
- this[nameInCamelCase] = newValue;
472
+
473
+ (this as Record<string, any>)[nameInCamelCase] = newPropertyValue;
390
474
  }
391
475
  }
392
476
 
393
477
  /**
394
478
  * @private
395
479
  */
396
- _updateAttribute(name, newValue) {
397
- if (!this.constructor.getMetadata().hasAttribute(name)) {
480
+ _updateAttribute(name: string, newValue: PropertyValue) {
481
+ const ctor = this.constructor as typeof UI5Element;
482
+
483
+ if (!ctor.getMetadata().hasAttribute(name)) {
398
484
  return;
399
485
  }
400
- const properties = this.constructor.getMetadata().getProperties();
486
+ const properties = ctor.getMetadata().getProperties();
401
487
  const propertyTypeClass = properties[name].type;
402
488
  const attrName = camelToKebabCase(name);
403
489
  const attrValue = this.getAttribute(attrName);
@@ -408,11 +494,18 @@ class UI5Element extends HTMLElement {
408
494
  } else if (newValue === false && attrValue !== null) {
409
495
  this.removeAttribute(attrName);
410
496
  }
411
- } else if (isDescendantOf(propertyTypeClass, DataType)) {
412
- this.setAttribute(attrName, propertyTypeClass.propertyToAttribute(newValue));
497
+ } else if ((propertyTypeClass as typeof DataType).isDataTypeClass) {
498
+ const newAttrValue = (propertyTypeClass as typeof DataType).propertyToAttribute(newValue);
499
+ if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
500
+ this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
501
+ this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
502
+ this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
503
+ } else {
504
+ this.setAttribute(attrName, newAttrValue);
505
+ }
413
506
  } else if (typeof newValue !== "object") {
414
507
  if (attrValue !== newValue) {
415
- this.setAttribute(attrName, newValue);
508
+ this.setAttribute(attrName, newValue as string);
416
509
  }
417
510
  } // else { return; } // old object handling
418
511
  }
@@ -420,11 +513,11 @@ class UI5Element extends HTMLElement {
420
513
  /**
421
514
  * @private
422
515
  */
423
- _upgradeProperty(prop) {
424
- if (this.hasOwnProperty(prop)) { // eslint-disable-line
425
- const value = this[prop];
426
- delete this[prop];
427
- this[prop] = value;
516
+ _upgradeProperty(this: Record<string, any>, propertyName: string) {
517
+ if (this.hasOwnProperty(propertyName)) { // eslint-disable-line
518
+ const value = this[propertyName];
519
+ delete this[propertyName];
520
+ this[propertyName] = value;
428
521
  }
429
522
  }
430
523
 
@@ -432,25 +525,18 @@ class UI5Element extends HTMLElement {
432
525
  * @private
433
526
  */
434
527
  _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() };
528
+ const allProps = (this.constructor as typeof UI5Element).getMetadata().getPropertiesList();
529
+ allProps.forEach(this._upgradeProperty.bind(this));
444
530
  }
445
531
 
446
532
  /**
447
533
  * Returns a singleton event listener for the "change" event of a child in a given slot
448
534
  *
449
535
  * @param slotName the name of the slot, where the child is
450
- * @returns {any}
536
+ * @returns {ChildChangeListener}
451
537
  * @private
452
538
  */
453
- _getChildChangeListener(slotName) {
539
+ _getChildChangeListener(slotName: string) {
454
540
  if (!this._childChangeListeners.has(slotName)) {
455
541
  this._childChangeListeners.set(slotName, this._onChildChange.bind(this, slotName));
456
542
  }
@@ -461,27 +547,30 @@ class UI5Element extends HTMLElement {
461
547
  * Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
462
548
  *
463
549
  * @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
464
- * @returns {any}
550
+ * @returns {SlotChangeListener}
465
551
  * @private
466
552
  */
467
- _getSlotChangeListener(slotName) {
553
+ _getSlotChangeListener(slotName: string) {
468
554
  if (!this._slotChangeListeners.has(slotName)) {
469
555
  this._slotChangeListeners.set(slotName, this._onSlotChange.bind(this, slotName));
470
556
  }
471
- return this._slotChangeListeners.get(slotName);
557
+ return this._slotChangeListeners.get(slotName)!;
472
558
  }
473
559
 
474
560
  /**
475
561
  * @private
476
562
  */
477
- _attachSlotChange(child, slotName) {
478
- child.addEventListener("slotchange", this._getSlotChangeListener(slotName));
563
+ _attachSlotChange(child: HTMLSlotElement, slotName: string) {
564
+ const slotChangeListener = this._getSlotChangeListener(slotName);
565
+ if (slotChangeListener) {
566
+ child.addEventListener("slotchange", slotChangeListener);
567
+ }
479
568
  }
480
569
 
481
570
  /**
482
571
  * @private
483
572
  */
484
- _detachSlotChange(child, slotName) {
573
+ _detachSlotChange(child: HTMLSlotElement, slotName: string) {
485
574
  child.removeEventListener("slotchange", this._getSlotChangeListener(slotName));
486
575
  }
487
576
 
@@ -491,7 +580,7 @@ class UI5Element extends HTMLElement {
491
580
  * @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
492
581
  * @private
493
582
  */
494
- _onSlotChange(slotName) {
583
+ _onSlotChange(slotName: string) {
495
584
  _invalidate.call(this, {
496
585
  type: "slot",
497
586
  name: slotName,
@@ -526,21 +615,20 @@ class UI5Element extends HTMLElement {
526
615
  *
527
616
  * @public
528
617
  */
529
- onInvalidation(changeInfo) {}
618
+ onInvalidation(changeInfo: ChangeInfo) {} // eslint-disable-line
530
619
 
531
620
  /**
532
621
  * Do not call this method directly, only intended to be called by js
533
622
  * @protected
534
623
  */
535
624
  _render() {
536
- const hasIndividualSlots = this.constructor.getMetadata().hasIndividualSlots();
625
+ const ctor = this.constructor as typeof UI5Element;
626
+ const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
537
627
 
538
628
  // suppress invalidation to prevent state changes scheduling another rendering
539
629
  this._suppressInvalidation = true;
540
630
 
541
- if (typeof this.onBeforeRendering === "function") {
542
- this.onBeforeRendering();
543
- }
631
+ this.onBeforeRendering();
544
632
 
545
633
  // Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
546
634
  if (this._onComponentStateFinalized) {
@@ -574,7 +662,7 @@ class UI5Element extends HTMLElement {
574
662
  this._changedState = [];
575
663
 
576
664
  // Update shadow root and static area item
577
- if (this.constructor._needsShadowDOM()) {
665
+ if (ctor._needsShadowDOM()) {
578
666
  updateShadowRoot(this);
579
667
  }
580
668
  if (this.staticAreaItem) {
@@ -587,9 +675,7 @@ class UI5Element extends HTMLElement {
587
675
  }
588
676
 
589
677
  // Call the onAfterRendering hook
590
- if (typeof this.onAfterRendering === "function") {
591
- this.onAfterRendering();
592
- }
678
+ this.onAfterRendering();
593
679
  }
594
680
 
595
681
  /**
@@ -598,7 +684,7 @@ class UI5Element extends HTMLElement {
598
684
  _assignIndividualSlotsToChildren() {
599
685
  const domChildren = Array.from(this.children);
600
686
 
601
- domChildren.forEach(child => {
687
+ domChildren.forEach((child: Record<string, any>) => {
602
688
  if (child._individualSlot) {
603
689
  child.setAttribute("slot", child._individualSlot);
604
690
  }
@@ -631,10 +717,10 @@ class UI5Element extends HTMLElement {
631
717
 
632
718
  const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
633
719
  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
720
+ 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
721
  }
636
722
 
637
- return children[0];
723
+ return children[0] as HTMLElement;
638
724
  }
639
725
 
640
726
  /**
@@ -645,7 +731,7 @@ class UI5Element extends HTMLElement {
645
731
  getFocusDomRef() {
646
732
  const domRef = this.getDomRef();
647
733
  if (domRef) {
648
- const focusRef = domRef.querySelector("[data-sap-focus-ref]");
734
+ const focusRef = domRef.querySelector("[data-sap-focus-ref]") as HTMLElement;
649
735
  return focusRef || domRef;
650
736
  }
651
737
  }
@@ -683,7 +769,7 @@ class UI5Element extends HTMLElement {
683
769
  * @param bubbles - true, if the event bubbles
684
770
  * @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
685
771
  */
686
- fireEvent(name, data, cancelable = false, bubbles = true) {
772
+ fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
687
773
  const eventResult = this._fireEvent(name, data, cancelable, bubbles);
688
774
  const camelCaseEventName = kebabToCamelCase(name);
689
775
 
@@ -694,8 +780,8 @@ class UI5Element extends HTMLElement {
694
780
  return eventResult;
695
781
  }
696
782
 
697
- _fireEvent(name, data, cancelable = false, bubbles = true) {
698
- const noConflictEvent = new CustomEvent(`ui5-${name}`, {
783
+ _fireEvent<T>(name: string, data?: T, cancelable = false, bubbles = true) {
784
+ const noConflictEvent = new CustomEvent<T>(`ui5-${name}`, {
699
785
  detail: data,
700
786
  composed: false,
701
787
  bubbles,
@@ -709,7 +795,7 @@ class UI5Element extends HTMLElement {
709
795
  return noConflictEventResult;
710
796
  }
711
797
 
712
- const normalEvent = new CustomEvent(name, {
798
+ const normalEvent = new CustomEvent<T>(name, {
713
799
  detail: data,
714
800
  composed: false,
715
801
  bubbles,
@@ -728,8 +814,8 @@ class UI5Element extends HTMLElement {
728
814
  * 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
815
  * @public
730
816
  */
731
- getSlottedNodes(slotName) {
732
- return getSlottedElementsList(this[slotName]);
817
+ getSlottedNodes(this: Record<string, Array<SlotValue>>, slotName: string) {
818
+ return getSlottedNodesList(this[slotName]);
733
819
  }
734
820
 
735
821
  /**
@@ -740,7 +826,7 @@ class UI5Element extends HTMLElement {
740
826
  * @returns {String|undefined}
741
827
  */
742
828
  get effectiveDir() {
743
- markAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware
829
+ markAsRtlAware(this.constructor as typeof UI5Element); // if a UI5 Element calls this method, it's considered to be rtl-aware
744
830
  return getEffectiveDir(this);
745
831
  }
746
832
 
@@ -779,7 +865,7 @@ class UI5Element extends HTMLElement {
779
865
  * @public
780
866
  */
781
867
  getStaticAreaItemDomRef() {
782
- if (!this.constructor._needsStaticArea()) {
868
+ if (!(this.constructor as typeof UI5Element)._needsStaticArea()) {
783
869
  throw new Error("This component does not use the static area");
784
870
  }
785
871
 
@@ -825,7 +911,7 @@ class UI5Element extends HTMLElement {
825
911
  }
826
912
 
827
913
  Object.defineProperty(proto, prop, {
828
- get() {
914
+ get(this: UI5Element) {
829
915
  if (this._state[prop] !== undefined) {
830
916
  return this._state[prop];
831
917
  }
@@ -842,15 +928,19 @@ class UI5Element extends HTMLElement {
842
928
  return propDefaultValue;
843
929
  }
844
930
  },
845
- set(value) {
931
+
932
+ set(this: UI5Element, value: PropertyValue) {
846
933
  let isDifferent;
847
- value = this.constructor.getMetadata().constructor.validatePropertyValue(value, propData);
934
+ const ctor = this.constructor as typeof UI5Element;
935
+ const metadataCtor = ctor.getMetadata().constructor as typeof UI5ElementMetadata;
848
936
 
937
+ value = metadataCtor.validatePropertyValue(value, propData);
938
+ const propertyTypeClass = propData.type;
849
939
  const oldState = this._state[prop];
850
- if (propData.multiple && propData.compareValues) {
940
+ if (Array.isArray(oldState) && Array.isArray(value) && propData.multiple && propData.compareValues) { // compareValues is added for IE, test if needed now
851
941
  isDifferent = !arraysAreEqual(oldState, value);
852
- } else if (isDescendantOf(propData.type, DataType)) {
853
- isDifferent = !propData.type.valuesAreEqual(oldState, value);
942
+ } else if ((propertyTypeClass as typeof DataType).isDataTypeClass) {
943
+ isDifferent = !(propertyTypeClass as typeof DataType).valuesAreEqual(oldState, value);
854
944
  } else {
855
945
  isDifferent = oldState !== value;
856
946
  }
@@ -879,7 +969,7 @@ class UI5Element extends HTMLElement {
879
969
 
880
970
  const propertyName = slotData.propertyName || slotName;
881
971
  Object.defineProperty(proto, propertyName, {
882
- get() {
972
+ get(this: UI5Element) {
883
973
  if (this._state[propertyName] !== undefined) {
884
974
  return this._state[propertyName];
885
975
  }
@@ -913,7 +1003,7 @@ class UI5Element extends HTMLElement {
913
1003
  * Returns the CSS for this UI5 Web Component Class
914
1004
  * @protected
915
1005
  */
916
- static get styles() {
1006
+ static get styles(): Array<StyleData> | StyleData {
917
1007
  return "";
918
1008
  }
919
1009
 
@@ -921,7 +1011,7 @@ class UI5Element extends HTMLElement {
921
1011
  * Returns the Static Area CSS for this UI5 Web Component Class
922
1012
  * @protected
923
1013
  */
924
- static get staticAreaStyles() {
1014
+ static get staticAreaStyles(): Array<StyleData> | StyleData {
925
1015
  return "";
926
1016
  }
927
1017
 
@@ -932,7 +1022,7 @@ class UI5Element extends HTMLElement {
932
1022
  *
933
1023
  * @protected
934
1024
  */
935
- static get dependencies() {
1025
+ static get dependencies(): Array<typeof UI5Element> {
936
1026
  return [];
937
1027
  }
938
1028
 
@@ -941,21 +1031,21 @@ class UI5Element extends HTMLElement {
941
1031
  *
942
1032
  * @public
943
1033
  */
944
- static getUniqueDependencies() {
1034
+ static getUniqueDependencies(this: typeof UI5Element) {
945
1035
  if (!uniqueDependenciesCache.has(this)) {
946
1036
  const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
947
1037
  uniqueDependenciesCache.set(this, filtered);
948
1038
  }
949
1039
 
950
- return uniqueDependenciesCache.get(this);
1040
+ return uniqueDependenciesCache.get(this) || [];
951
1041
  }
952
1042
 
953
1043
  /**
954
1044
  * Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
955
1045
  *
956
- * @returns {Promise<any[]>}
1046
+ * @returns {Promise}
957
1047
  */
958
- static whenDependenciesDefined() {
1048
+ static whenDependenciesDefined(): Promise<Array<typeof UI5Element>> {
959
1049
  return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
960
1050
  }
961
1051
 
@@ -983,7 +1073,6 @@ class UI5Element extends HTMLElement {
983
1073
  ]);
984
1074
 
985
1075
  const tag = this.getMetadata().getTag();
986
- const altTag = this.getMetadata().getAltTag();
987
1076
 
988
1077
  const definedLocally = isTagRegistered(tag);
989
1078
  const definedGlobally = customElements.get(tag);
@@ -993,15 +1082,8 @@ class UI5Element extends HTMLElement {
993
1082
  } else if (!definedGlobally) {
994
1083
  this._generateAccessors();
995
1084
  registerTag(tag);
996
- window.customElements.define(tag, this);
1085
+ window.customElements.define(tag, this as unknown as CustomElementConstructor);
997
1086
  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
1087
  }
1006
1088
  return this;
1007
1089
  }
@@ -1023,11 +1105,21 @@ class UI5Element extends HTMLElement {
1023
1105
  klass = Object.getPrototypeOf(klass);
1024
1106
  metadataObjects.unshift(klass.metadata);
1025
1107
  }
1026
- const mergedMetadata = merge({}, ...metadataObjects);
1108
+ const mergedMetadata = merge({}, ...metadataObjects) as Metadata;
1027
1109
 
1028
1110
  this._metadata = new UI5ElementMetadata(mergedMetadata);
1029
1111
  return this._metadata;
1030
1112
  }
1031
1113
  }
1032
1114
 
1115
+ /**
1116
+ * Always use duck-typing to cover all runtimes on the page.
1117
+ * @returns {boolean}
1118
+ */
1119
+ const instanceOfUI5Element = (object: any): object is UI5Element => {
1120
+ return "isUI5Element" in object;
1121
+ };
1122
+
1033
1123
  export default UI5Element;
1124
+ export { instanceOfUI5Element };
1125
+ export type { ChangeInfo };