@ui5/webcomponents-base 0.0.0-9ed6f23c6 → 0.0.0-a3b95fa49

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 (841) hide show
  1. package/CHANGELOG.md +1603 -0
  2. package/README.md +3 -13
  3. package/cypress/specs/Accessor.cy.tsx +79 -0
  4. package/cypress/specs/Boot.cy.tsx +19 -0
  5. package/cypress/specs/ConfigurationChange.cy.tsx +41 -0
  6. package/cypress/specs/ConfigurationScript.cy.tsx +133 -0
  7. package/cypress/specs/ConfigurationURL.cy.tsx +201 -0
  8. package/cypress/specs/CustomMount.cy.tsx +9 -0
  9. package/cypress/specs/CustomTheme.cy.tsx +36 -0
  10. package/cypress/specs/EventProvider.cy.tsx +59 -0
  11. package/cypress/specs/Events.cy.tsx +28 -0
  12. package/cypress/specs/SystemDOMElements.cy.tsx +8 -0
  13. package/cypress/specs/Theming.cy.tsx +74 -0
  14. package/cypress/specs/UI5ElementInvalidation.cy.tsx +252 -0
  15. package/cypress/specs/UI5ElementLifecycle.cy.tsx +82 -0
  16. package/cypress/specs/UI5ElementListenForChildPropChanges.cy.tsx +83 -0
  17. package/cypress/specs/UI5ElementMetadataExt.cy.tsx +42 -0
  18. package/cypress/specs/UI5ElementPropertyValidation.cy.tsx +16 -0
  19. package/cypress/specs/UI5ElementPropsAndAttrs.cy.tsx +113 -0
  20. package/cypress/specs/UI5ElementShadowDOM.cy.tsx +30 -0
  21. package/cypress/specs/UI5ElementSlots.cy.tsx +136 -0
  22. package/cypress/specs/WithComplexTemplate.cy.tsx +32 -0
  23. package/cypress/specs/i18n_texts.cy.tsx +129 -0
  24. package/cypress/specs/util/FocusableElements.cy.tsx +48 -0
  25. package/cypress/support/commands.ts +39 -0
  26. package/cypress/support/component-index.html +12 -0
  27. package/cypress/support/component.ts +36 -0
  28. package/cypress/tsconfig.json +21 -0
  29. package/cypress.config.js +3 -0
  30. package/dist/.tsbuildinfobuild +1 -0
  31. package/dist/AssetRegistry.d.ts +2 -2
  32. package/dist/AssetRegistry.js +2 -2
  33. package/dist/AssetRegistry.js.map +1 -1
  34. package/dist/Boot.d.ts +3 -2
  35. package/dist/Boot.js +11 -7
  36. package/dist/Boot.js.map +1 -1
  37. package/dist/CustomElementsRegistry.d.ts +2 -1
  38. package/dist/CustomElementsRegistry.js +5 -2
  39. package/dist/CustomElementsRegistry.js.map +1 -1
  40. package/dist/CustomElementsScope.d.ts +4 -4
  41. package/dist/CustomElementsScope.js +2 -2
  42. package/dist/CustomElementsScope.js.map +1 -1
  43. package/dist/CustomElementsScopeUtils.d.ts +11 -2
  44. package/dist/CustomElementsScopeUtils.js +21 -2
  45. package/dist/CustomElementsScopeUtils.js.map +1 -1
  46. package/dist/DOMObserver.js.map +1 -1
  47. package/dist/Device.d.ts +17 -2
  48. package/dist/Device.js +19 -14
  49. package/dist/Device.js.map +1 -1
  50. package/dist/EventProvider.js.map +1 -1
  51. package/dist/FontFace.js +6 -1
  52. package/dist/FontFace.js.map +1 -1
  53. package/dist/IgnoreCustomElements.d.ts +3 -5
  54. package/dist/IgnoreCustomElements.js +3 -5
  55. package/dist/IgnoreCustomElements.js.map +1 -1
  56. package/dist/InitialConfiguration.d.ts +10 -3
  57. package/dist/InitialConfiguration.js +31 -8
  58. package/dist/InitialConfiguration.js.map +1 -1
  59. package/dist/Keys.d.ts +4 -1
  60. package/dist/Keys.js +110 -106
  61. package/dist/Keys.js.map +1 -1
  62. package/dist/Location.d.ts +11 -0
  63. package/dist/Location.js +49 -0
  64. package/dist/Location.js.map +1 -0
  65. package/dist/ManagedStyles.d.ts +5 -6
  66. package/dist/ManagedStyles.js +45 -60
  67. package/dist/ManagedStyles.js.map +1 -1
  68. package/dist/MediaRange.d.ts +6 -12
  69. package/dist/MediaRange.js +21 -31
  70. package/dist/MediaRange.js.map +1 -1
  71. package/dist/PropertiesFileFormat.js.map +1 -1
  72. package/dist/Render.js.map +1 -1
  73. package/dist/RenderQueue.js.map +1 -1
  74. package/dist/Runtimes.js +11 -0
  75. package/dist/Runtimes.js.map +1 -1
  76. package/dist/SystemCSSVars.js.map +1 -1
  77. package/dist/UI5Element.d.ts +120 -76
  78. package/dist/UI5Element.js +388 -234
  79. package/dist/UI5Element.js.map +1 -1
  80. package/dist/UI5ElementMetadata.d.ts +36 -27
  81. package/dist/UI5ElementMetadata.js +27 -72
  82. package/dist/UI5ElementMetadata.js.map +1 -1
  83. package/dist/animations/AnimationQueue.js.map +1 -1
  84. package/dist/animations/animate.js.map +1 -1
  85. package/dist/animations/slideUp.js.map +1 -1
  86. package/dist/asset-registries/Icons.d.ts +5 -4
  87. package/dist/asset-registries/Icons.js +28 -17
  88. package/dist/asset-registries/Icons.js.map +1 -1
  89. package/dist/asset-registries/Illustrations.d.ts +2 -0
  90. package/dist/asset-registries/Illustrations.js +51 -20
  91. package/dist/asset-registries/Illustrations.js.map +1 -1
  92. package/dist/asset-registries/LocaleData.js +1 -1
  93. package/dist/asset-registries/LocaleData.js.map +1 -1
  94. package/dist/asset-registries/Themes.d.ts +5 -7
  95. package/dist/asset-registries/Themes.js +27 -12
  96. package/dist/asset-registries/Themes.js.map +1 -1
  97. package/dist/asset-registries/i18n.d.ts +2 -2
  98. package/dist/asset-registries/i18n.js +4 -3
  99. package/dist/asset-registries/i18n.js.map +1 -1
  100. package/dist/{assets-meta → asset-registries/util}/IconCollectionsAlias.d.ts +1 -2
  101. package/dist/{assets-meta → asset-registries/util}/IconCollectionsAlias.js +1 -2
  102. package/dist/asset-registries/util/IconCollectionsAlias.js.map +1 -0
  103. package/dist/asset-registries/util/IconCollectionsByTheme.d.ts +20 -0
  104. package/dist/asset-registries/util/IconCollectionsByTheme.js +42 -0
  105. package/dist/asset-registries/util/IconCollectionsByTheme.js.map +1 -0
  106. package/dist/asset-registries/util/getIconCollectionByTheme.d.ts +13 -0
  107. package/dist/asset-registries/util/getIconCollectionByTheme.js +29 -0
  108. package/dist/asset-registries/util/getIconCollectionByTheme.js.map +1 -0
  109. package/dist/config/AnimationMode.js +6 -1
  110. package/dist/config/AnimationMode.js.map +1 -1
  111. package/dist/config/CalendarType.d.ts +8 -1
  112. package/dist/config/CalendarType.js +23 -2
  113. package/dist/config/CalendarType.js.map +1 -1
  114. package/dist/config/ConfigurationReset.d.ts +4 -0
  115. package/dist/config/ConfigurationReset.js +11 -0
  116. package/dist/config/ConfigurationReset.js.map +1 -0
  117. package/dist/config/Fonts.d.ts +16 -0
  118. package/dist/config/Fonts.js +30 -0
  119. package/dist/config/Fonts.js.map +1 -0
  120. package/dist/config/FormatSettings.js +4 -0
  121. package/dist/config/FormatSettings.js.map +1 -1
  122. package/dist/config/Icons.d.ts +9 -24
  123. package/dist/config/Icons.js +8 -67
  124. package/dist/config/Icons.js.map +1 -1
  125. package/dist/config/Language.d.ts +1 -1
  126. package/dist/config/Language.js +11 -3
  127. package/dist/config/Language.js.map +1 -1
  128. package/dist/config/NoConflict.js +4 -0
  129. package/dist/config/NoConflict.js.map +1 -1
  130. package/dist/config/Theme.d.ts +4 -3
  131. package/dist/config/Theme.js +18 -8
  132. package/dist/config/Theme.js.map +1 -1
  133. package/dist/config/ThemeRoot.d.ts +2 -4
  134. package/dist/config/ThemeRoot.js +6 -4
  135. package/dist/config/ThemeRoot.js.map +1 -1
  136. package/dist/config/Timezone.d.ts +1 -1
  137. package/dist/config/Timezone.js +5 -1
  138. package/dist/config/Timezone.js.map +1 -1
  139. package/dist/config/Tooltips.d.ts +19 -0
  140. package/dist/config/Tooltips.js +29 -0
  141. package/dist/config/Tooltips.js.map +1 -0
  142. package/dist/connectToComponent.d.ts +9 -0
  143. package/dist/connectToComponent.js +59 -0
  144. package/dist/connectToComponent.js.map +1 -0
  145. package/dist/converters/DOMReference.d.ts +5 -0
  146. package/dist/converters/DOMReference.js +13 -0
  147. package/dist/converters/DOMReference.js.map +1 -0
  148. package/dist/css/FontFace.css +18 -1
  149. package/dist/css/SystemCSSVars.css +0 -8
  150. package/dist/custom-elements-internal.json +2803 -0
  151. package/dist/custom-elements.json +2500 -0
  152. package/dist/decorators/bound.d.ts +1 -0
  153. package/dist/decorators/bound.js +34 -0
  154. package/dist/decorators/bound.js.map +1 -0
  155. package/dist/decorators/customElement.d.ts +43 -3
  156. package/dist/decorators/customElement.js +14 -6
  157. package/dist/decorators/customElement.js.map +1 -1
  158. package/dist/decorators/event-strict.d.ts +15 -0
  159. package/dist/decorators/event-strict.js +26 -0
  160. package/dist/decorators/event-strict.js.map +1 -0
  161. package/dist/decorators/event.d.ts +8 -2
  162. package/dist/decorators/event.js +3 -0
  163. package/dist/decorators/event.js.map +1 -1
  164. package/dist/decorators/i18n.d.ts +17 -0
  165. package/dist/decorators/i18n.js +32 -0
  166. package/dist/decorators/i18n.js.map +1 -0
  167. package/dist/decorators/property.d.ts +1 -1
  168. package/dist/decorators/property.js +1 -1
  169. package/dist/decorators/property.js.map +1 -1
  170. package/dist/decorators/query.d.ts +25 -0
  171. package/dist/decorators/query.js +32 -0
  172. package/dist/decorators/query.js.map +1 -0
  173. package/dist/decorators/queryAll.d.ts +27 -0
  174. package/dist/decorators/queryAll.js +34 -0
  175. package/dist/decorators/queryAll.js.map +1 -0
  176. package/dist/decorators/slot.d.ts +1 -1
  177. package/dist/decorators/slot.js.map +1 -1
  178. package/dist/decorators.d.ts +8 -0
  179. package/dist/decorators.js +9 -0
  180. package/dist/decorators.js.map +1 -0
  181. package/dist/delegate/ItemNavigation.d.ts +9 -8
  182. package/dist/delegate/ItemNavigation.js +13 -14
  183. package/dist/delegate/ItemNavigation.js.map +1 -1
  184. package/dist/delegate/ResizeHandler.d.ts +4 -6
  185. package/dist/delegate/ResizeHandler.js +4 -6
  186. package/dist/delegate/ResizeHandler.js.map +1 -1
  187. package/dist/delegate/ScrollEnablement.js +2 -2
  188. package/dist/delegate/ScrollEnablement.js.map +1 -1
  189. package/dist/features/F6Navigation.d.ts +4 -3
  190. package/dist/features/F6Navigation.js +41 -9
  191. package/dist/features/F6Navigation.js.map +1 -1
  192. package/dist/features/InputElementsFormSupport.d.ts +15 -0
  193. package/dist/features/InputElementsFormSupport.js +39 -0
  194. package/dist/features/InputElementsFormSupport.js.map +1 -0
  195. package/dist/features/LegacyDateFormats.js.map +1 -1
  196. package/dist/features/OpenUI5Enablement.d.ts +3 -3
  197. package/dist/features/OpenUI5Enablement.js.map +1 -1
  198. package/dist/features/OpenUI5Support.d.ts +11 -4
  199. package/dist/features/OpenUI5Support.js +13 -21
  200. package/dist/features/OpenUI5Support.js.map +1 -1
  201. package/dist/features/patchPatcher.d.ts +11 -0
  202. package/dist/features/patchPatcher.js +11 -0
  203. package/dist/features/patchPatcher.js.map +1 -0
  204. package/dist/features/patchPopup.d.ts +15 -0
  205. package/dist/features/patchPopup.js +70 -0
  206. package/dist/features/patchPopup.js.map +1 -0
  207. package/dist/generated/AssetParameters.d.ts +6 -0
  208. package/dist/generated/AssetParameters.js +3 -10
  209. package/dist/generated/AssetParameters.js.map +1 -0
  210. package/dist/generated/VersionInfo.d.ts +10 -0
  211. package/dist/generated/VersionInfo.js +9 -8
  212. package/dist/generated/VersionInfo.js.map +1 -0
  213. package/dist/generated/css/BusyIndicator.css.d.ts +2 -3
  214. package/dist/generated/css/BusyIndicator.css.js +1 -6
  215. package/dist/generated/css/BusyIndicator.css.js.map +1 -1
  216. package/dist/generated/css/FontFace.css.d.ts +2 -3
  217. package/dist/generated/css/FontFace.css.js +1 -6
  218. package/dist/generated/css/FontFace.css.js.map +1 -1
  219. package/dist/generated/css/OverrideFontFace.css.d.ts +2 -3
  220. package/dist/generated/css/OverrideFontFace.css.js +1 -6
  221. package/dist/generated/css/OverrideFontFace.css.js.map +1 -1
  222. package/dist/generated/css/SystemCSSVars.css.d.ts +2 -3
  223. package/dist/generated/css/SystemCSSVars.css.js +1 -6
  224. package/dist/generated/css/SystemCSSVars.css.js.map +1 -1
  225. package/dist/getSharedResource.js.map +1 -1
  226. package/dist/i18nBundle.d.ts +2 -4
  227. package/dist/i18nBundle.js +1 -4
  228. package/dist/i18nBundle.js.map +1 -1
  229. package/dist/index.d.ts +48 -0
  230. package/dist/index.js +88 -0
  231. package/dist/index.js.map +1 -0
  232. package/dist/jsx-dev-runtime.d.ts +4 -0
  233. package/dist/jsx-dev-runtime.js +43 -0
  234. package/dist/jsx-dev-runtime.js.map +1 -0
  235. package/dist/jsx-runtime.d.ts +50 -0
  236. package/dist/jsx-runtime.js +27 -0
  237. package/dist/jsx-runtime.js.map +1 -0
  238. package/dist/jsx-utils.d.ts +3 -0
  239. package/dist/jsx-utils.js +48 -0
  240. package/dist/jsx-utils.js.map +1 -0
  241. package/dist/locale/Locale.js.map +1 -1
  242. package/dist/locale/applyDirection.d.ts +3 -2
  243. package/dist/locale/applyDirection.js +3 -2
  244. package/dist/locale/applyDirection.js.map +1 -1
  245. package/dist/locale/getEffectiveDir.d.ts +1 -1
  246. package/dist/locale/getEffectiveDir.js +3 -19
  247. package/dist/locale/getEffectiveDir.js.map +1 -1
  248. package/dist/locale/getLocale.js.map +1 -1
  249. package/dist/locale/nextFallbackLocale.js.map +1 -1
  250. package/dist/locale/normalizeLocale.js.map +1 -1
  251. package/dist/prod/AssetRegistry.js +2 -0
  252. package/dist/prod/AssetRegistry.js.map +7 -0
  253. package/dist/prod/Boot.js +2 -0
  254. package/dist/prod/Boot.js.map +7 -0
  255. package/dist/prod/CustomElementsRegistry.js +10 -0
  256. package/dist/prod/CustomElementsRegistry.js.map +7 -0
  257. package/dist/prod/CustomElementsScope.js +2 -0
  258. package/dist/prod/CustomElementsScope.js.map +7 -0
  259. package/dist/prod/CustomElementsScopeUtils.js +2 -0
  260. package/dist/prod/CustomElementsScopeUtils.js.map +7 -0
  261. package/dist/prod/DOMObserver.js +2 -0
  262. package/dist/prod/DOMObserver.js.map +7 -0
  263. package/dist/prod/Device.js +2 -0
  264. package/dist/prod/Device.js.map +7 -0
  265. package/dist/prod/EventProvider.js +2 -0
  266. package/dist/prod/EventProvider.js.map +7 -0
  267. package/dist/prod/FeaturesRegistry.js +2 -0
  268. package/dist/prod/FeaturesRegistry.js.map +7 -0
  269. package/dist/prod/FontFace.js +2 -0
  270. package/dist/prod/FontFace.js.map +7 -0
  271. package/dist/prod/IgnoreCustomElements.js +2 -0
  272. package/dist/prod/IgnoreCustomElements.js.map +7 -0
  273. package/dist/prod/InitialConfiguration.js +2 -0
  274. package/dist/prod/InitialConfiguration.js.map +7 -0
  275. package/dist/prod/Keys.js +2 -0
  276. package/dist/prod/Keys.js.map +7 -0
  277. package/dist/prod/Location.js +2 -0
  278. package/dist/prod/Location.js.map +7 -0
  279. package/dist/prod/ManagedStyles.js +2 -0
  280. package/dist/prod/ManagedStyles.js.map +7 -0
  281. package/dist/prod/MediaRange.js +2 -0
  282. package/dist/prod/MediaRange.js.map +7 -0
  283. package/dist/prod/PropertiesFileFormat.js +3 -0
  284. package/dist/prod/PropertiesFileFormat.js.map +7 -0
  285. package/dist/prod/Render.js +2 -0
  286. package/dist/prod/Render.js.map +7 -0
  287. package/dist/prod/RenderQueue.js +2 -0
  288. package/dist/prod/RenderQueue.js.map +7 -0
  289. package/dist/prod/Runtimes.js +2 -0
  290. package/dist/prod/Runtimes.js.map +7 -0
  291. package/dist/prod/SystemCSSVars.js +2 -0
  292. package/dist/prod/SystemCSSVars.js.map +7 -0
  293. package/dist/prod/Theming.js +2 -0
  294. package/dist/prod/Theming.js.map +7 -0
  295. package/dist/prod/UI5Element.js +2 -0
  296. package/dist/prod/UI5Element.js.map +7 -0
  297. package/dist/prod/UI5ElementMetadata.js +2 -0
  298. package/dist/prod/UI5ElementMetadata.js.map +7 -0
  299. package/dist/prod/animations/AnimationQueue.js +2 -0
  300. package/dist/prod/animations/AnimationQueue.js.map +7 -0
  301. package/dist/prod/animations/animate.js +2 -0
  302. package/dist/prod/animations/animate.js.map +7 -0
  303. package/dist/prod/animations/scroll.js +2 -0
  304. package/dist/prod/animations/scroll.js.map +7 -0
  305. package/dist/prod/animations/slideDown.js +2 -0
  306. package/dist/prod/animations/slideDown.js.map +7 -0
  307. package/dist/prod/animations/slideUp.js +2 -0
  308. package/dist/prod/animations/slideUp.js.map +7 -0
  309. package/dist/prod/asset-registries/Icons.js +2 -0
  310. package/dist/prod/asset-registries/Icons.js.map +7 -0
  311. package/dist/prod/asset-registries/Illustrations.js +2 -0
  312. package/dist/prod/asset-registries/Illustrations.js.map +7 -0
  313. package/dist/prod/asset-registries/LocaleData.js +2 -0
  314. package/dist/prod/asset-registries/LocaleData.js.map +7 -0
  315. package/dist/prod/asset-registries/Themes.js +2 -0
  316. package/dist/prod/asset-registries/Themes.js.map +7 -0
  317. package/dist/prod/asset-registries/i18n.js +2 -0
  318. package/dist/prod/asset-registries/i18n.js.map +7 -0
  319. package/dist/prod/asset-registries/util/IconCollectionsAlias.js +2 -0
  320. package/dist/prod/asset-registries/util/IconCollectionsAlias.js.map +7 -0
  321. package/dist/prod/asset-registries/util/IconCollectionsByTheme.js +2 -0
  322. package/dist/prod/asset-registries/util/IconCollectionsByTheme.js.map +7 -0
  323. package/dist/prod/asset-registries/util/getIconCollectionByTheme.js +2 -0
  324. package/dist/prod/asset-registries/util/getIconCollectionByTheme.js.map +7 -0
  325. package/dist/prod/config/AnimationMode.js +2 -0
  326. package/dist/prod/config/AnimationMode.js.map +7 -0
  327. package/dist/prod/config/CalendarType.js +2 -0
  328. package/dist/prod/config/CalendarType.js.map +7 -0
  329. package/dist/prod/config/ConfigurationReset.js +2 -0
  330. package/dist/prod/config/ConfigurationReset.js.map +7 -0
  331. package/dist/prod/config/Fonts.js +2 -0
  332. package/dist/prod/config/Fonts.js.map +7 -0
  333. package/dist/prod/config/FormatSettings.js +2 -0
  334. package/dist/prod/config/FormatSettings.js.map +7 -0
  335. package/dist/prod/config/Icons.js +2 -0
  336. package/dist/prod/config/Icons.js.map +7 -0
  337. package/dist/prod/config/Language.js +2 -0
  338. package/dist/prod/config/Language.js.map +7 -0
  339. package/dist/prod/config/NoConflict.js +2 -0
  340. package/dist/prod/config/NoConflict.js.map +7 -0
  341. package/dist/prod/config/Theme.js +2 -0
  342. package/dist/prod/config/Theme.js.map +7 -0
  343. package/dist/prod/config/ThemeRoot.js +2 -0
  344. package/dist/prod/config/ThemeRoot.js.map +7 -0
  345. package/dist/prod/config/Timezone.js +2 -0
  346. package/dist/prod/config/Timezone.js.map +7 -0
  347. package/dist/prod/config/Tooltips.js +2 -0
  348. package/dist/prod/config/Tooltips.js.map +7 -0
  349. package/dist/prod/connectToComponent.js +2 -0
  350. package/dist/prod/connectToComponent.js.map +7 -0
  351. package/dist/prod/converters/DOMReference.js +2 -0
  352. package/dist/prod/converters/DOMReference.js.map +7 -0
  353. package/dist/prod/decorators/bound.js +2 -0
  354. package/dist/prod/decorators/bound.js.map +7 -0
  355. package/dist/prod/decorators/customElement.js +2 -0
  356. package/dist/prod/decorators/customElement.js.map +7 -0
  357. package/dist/prod/decorators/event-strict.js +2 -0
  358. package/dist/prod/decorators/event-strict.js.map +7 -0
  359. package/dist/prod/decorators/event.js +2 -0
  360. package/dist/prod/decorators/event.js.map +7 -0
  361. package/dist/prod/decorators/i18n.js +2 -0
  362. package/dist/prod/decorators/i18n.js.map +7 -0
  363. package/dist/prod/decorators/property.js +2 -0
  364. package/dist/prod/decorators/property.js.map +7 -0
  365. package/dist/prod/decorators/query.js +2 -0
  366. package/dist/prod/decorators/query.js.map +7 -0
  367. package/dist/prod/decorators/queryAll.js +2 -0
  368. package/dist/prod/decorators/queryAll.js.map +7 -0
  369. package/dist/prod/decorators/slot.js +2 -0
  370. package/dist/prod/decorators/slot.js.map +7 -0
  371. package/dist/prod/decorators.js +2 -0
  372. package/dist/prod/decorators.js.map +7 -0
  373. package/dist/prod/delegate/ItemNavigation.js +2 -0
  374. package/dist/prod/delegate/ItemNavigation.js.map +7 -0
  375. package/dist/prod/delegate/ResizeHandler.js +2 -0
  376. package/dist/prod/delegate/ResizeHandler.js.map +7 -0
  377. package/dist/prod/delegate/ScrollEnablement.js +2 -0
  378. package/dist/prod/delegate/ScrollEnablement.js.map +7 -0
  379. package/dist/prod/features/F6Navigation.js +2 -0
  380. package/dist/prod/features/F6Navigation.js.map +7 -0
  381. package/dist/prod/features/InputElementsFormSupport.js +2 -0
  382. package/dist/prod/features/InputElementsFormSupport.js.map +7 -0
  383. package/dist/prod/features/LegacyDateFormats.js +2 -0
  384. package/dist/prod/features/LegacyDateFormats.js.map +7 -0
  385. package/dist/prod/features/OpenUI5Element.js +2 -0
  386. package/dist/prod/features/OpenUI5Element.js.map +7 -0
  387. package/dist/prod/features/OpenUI5Enablement.js +21 -0
  388. package/dist/prod/features/OpenUI5Enablement.js.map +7 -0
  389. package/dist/prod/features/OpenUI5Support.js +2 -0
  390. package/dist/prod/features/OpenUI5Support.js.map +7 -0
  391. package/dist/prod/features/patchPatcher.js +2 -0
  392. package/dist/prod/features/patchPatcher.js.map +7 -0
  393. package/dist/prod/features/patchPopup.js +2 -0
  394. package/dist/prod/features/patchPopup.js.map +7 -0
  395. package/dist/prod/generated/AssetParameters.js +2 -0
  396. package/dist/prod/generated/AssetParameters.js.map +7 -0
  397. package/dist/prod/generated/VersionInfo.js +2 -0
  398. package/dist/prod/generated/VersionInfo.js.map +7 -0
  399. package/dist/prod/generated/css/BusyIndicator.css.js +2 -0
  400. package/dist/prod/generated/css/BusyIndicator.css.js.map +7 -0
  401. package/dist/prod/generated/css/FontFace.css.js +2 -0
  402. package/dist/prod/generated/css/FontFace.css.js.map +7 -0
  403. package/dist/prod/generated/css/OverrideFontFace.css.js +2 -0
  404. package/dist/prod/generated/css/OverrideFontFace.css.js.map +7 -0
  405. package/dist/prod/generated/css/SystemCSSVars.css.js +2 -0
  406. package/dist/prod/generated/css/SystemCSSVars.css.js.map +7 -0
  407. package/dist/prod/getSharedResource.js +2 -0
  408. package/dist/prod/getSharedResource.js.map +7 -0
  409. package/dist/prod/global.d.js +2 -0
  410. package/dist/prod/global.d.js.map +7 -0
  411. package/dist/prod/i18nBundle.js +2 -0
  412. package/dist/prod/i18nBundle.js.map +7 -0
  413. package/dist/prod/index.js +2 -0
  414. package/dist/prod/index.js.map +7 -0
  415. package/dist/prod/jsx-dev-runtime.js +2 -0
  416. package/dist/prod/jsx-dev-runtime.js.map +7 -0
  417. package/dist/prod/jsx-runtime.js +2 -0
  418. package/dist/prod/jsx-runtime.js.map +7 -0
  419. package/dist/prod/jsx-utils.js +2 -0
  420. package/dist/prod/jsx-utils.js.map +7 -0
  421. package/dist/prod/locale/Locale.js +2 -0
  422. package/dist/prod/locale/Locale.js.map +7 -0
  423. package/dist/prod/locale/RTLAwareRegistry.js +2 -0
  424. package/dist/prod/locale/RTLAwareRegistry.js.map +7 -0
  425. package/dist/prod/locale/applyDirection.js +2 -0
  426. package/dist/prod/locale/applyDirection.js.map +7 -0
  427. package/dist/prod/locale/directionChange.js +2 -0
  428. package/dist/prod/locale/directionChange.js.map +7 -0
  429. package/dist/prod/locale/getEffectiveDir.js +2 -0
  430. package/dist/prod/locale/getEffectiveDir.js.map +7 -0
  431. package/dist/prod/locale/getLocale.js +2 -0
  432. package/dist/prod/locale/getLocale.js.map +7 -0
  433. package/dist/prod/locale/languageChange.js +2 -0
  434. package/dist/prod/locale/languageChange.js.map +7 -0
  435. package/dist/prod/locale/nextFallbackLocale.js +2 -0
  436. package/dist/prod/locale/nextFallbackLocale.js.map +7 -0
  437. package/dist/prod/locale/normalizeLocale.js +2 -0
  438. package/dist/prod/locale/normalizeLocale.js.map +7 -0
  439. package/dist/prod/renderer/JsxRenderer.js +2 -0
  440. package/dist/prod/renderer/JsxRenderer.js.map +7 -0
  441. package/dist/prod/renderer/LitRenderer.js +2 -0
  442. package/dist/prod/renderer/LitRenderer.js.map +7 -0
  443. package/dist/prod/renderer/directives/style-map.js +6 -0
  444. package/dist/prod/renderer/directives/style-map.js.map +7 -0
  445. package/dist/prod/renderer/executeTemplate.js +2 -0
  446. package/dist/prod/renderer/executeTemplate.js.map +7 -0
  447. package/dist/prod/sap/base/Log.js +750 -0
  448. package/dist/prod/sap/base/assert.js +34 -0
  449. package/dist/prod/sap/base/config/MemoryConfigurationProvider.js +20 -0
  450. package/dist/prod/sap/base/security/URLListValidator.js +406 -0
  451. package/dist/prod/sap/base/security/encodeCSS.js +40 -0
  452. package/dist/prod/sap/base/security/encodeXML.js +53 -0
  453. package/dist/prod/sap/base/security/sanitizeHTML.js +38 -0
  454. package/dist/prod/sap/base/strings/toHex.js +33 -0
  455. package/dist/prod/sap/base/util/now.js +28 -0
  456. package/dist/prod/sap/base/util/uid.js +27 -0
  457. package/dist/prod/sap/ui/thirdparty/caja-html-sanitizer.js +3600 -0
  458. package/dist/prod/ssr-dom-shim.js +2 -0
  459. package/dist/prod/ssr-dom-shim.js.map +7 -0
  460. package/dist/prod/ssr-dom.js +2 -0
  461. package/dist/prod/ssr-dom.js.map +7 -0
  462. package/dist/prod/theming/CustomStyle.js +2 -0
  463. package/dist/prod/theming/CustomStyle.js.map +7 -0
  464. package/dist/prod/theming/ThemeLoaded.js +2 -0
  465. package/dist/prod/theming/ThemeLoaded.js.map +7 -0
  466. package/dist/prod/theming/ThemeRegistered.js +2 -0
  467. package/dist/prod/theming/ThemeRegistered.js.map +7 -0
  468. package/dist/prod/theming/applyTheme.js +2 -0
  469. package/dist/prod/theming/applyTheme.js.map +7 -0
  470. package/dist/prod/theming/getConstructableStyle.js +2 -0
  471. package/dist/prod/theming/getConstructableStyle.js.map +7 -0
  472. package/dist/prod/theming/getEffectiveStyle.js +2 -0
  473. package/dist/prod/theming/getEffectiveStyle.js.map +7 -0
  474. package/dist/prod/theming/getStylesString.js +2 -0
  475. package/dist/prod/theming/getStylesString.js.map +7 -0
  476. package/dist/prod/theming/getThemeDesignerTheme.js +2 -0
  477. package/dist/prod/theming/getThemeDesignerTheme.js.map +7 -0
  478. package/dist/prod/thirdparty/_merge.js +2 -0
  479. package/dist/prod/thirdparty/_merge.js.map +7 -0
  480. package/dist/prod/thirdparty/isPlainObject.js +2 -0
  481. package/dist/prod/thirdparty/isPlainObject.js.map +7 -0
  482. package/dist/prod/thirdparty/merge.js +2 -0
  483. package/dist/prod/thirdparty/merge.js.map +7 -0
  484. package/dist/prod/thirdparty/preact/jsx.d.js +2 -0
  485. package/dist/prod/thirdparty/preact/jsx.d.js.map +7 -0
  486. package/dist/prod/thirdparty/preact/jsxRuntime.module.d.js +2 -0
  487. package/dist/prod/thirdparty/preact/jsxRuntime.module.d.js.map +7 -0
  488. package/dist/prod/thirdparty/preact/jsxRuntime.module.js +1 -0
  489. package/dist/prod/thirdparty/preact/preact.module.d.js +2 -0
  490. package/dist/prod/thirdparty/preact/preact.module.d.js.map +7 -0
  491. package/dist/prod/thirdparty/preact/preact.module.js +1 -0
  492. package/dist/prod/types/AnimationMode.js +2 -0
  493. package/dist/prod/types/AnimationMode.js.map +7 -0
  494. package/dist/prod/types/CalendarType.js +2 -0
  495. package/dist/prod/types/CalendarType.js.map +7 -0
  496. package/dist/prod/types/InvisibleMessageMode.js +2 -0
  497. package/dist/prod/types/InvisibleMessageMode.js.map +7 -0
  498. package/dist/prod/types/ItemNavigationBehavior.js +2 -0
  499. package/dist/prod/types/ItemNavigationBehavior.js.map +7 -0
  500. package/dist/prod/types/MovePlacement.js +2 -0
  501. package/dist/prod/types/MovePlacement.js.map +7 -0
  502. package/dist/prod/types/NavigationMode.js +2 -0
  503. package/dist/prod/types/NavigationMode.js.map +7 -0
  504. package/dist/prod/types/Orientation.js +2 -0
  505. package/dist/prod/types/Orientation.js.map +7 -0
  506. package/dist/prod/types/SortOrder.js +2 -0
  507. package/dist/prod/types/SortOrder.js.map +7 -0
  508. package/dist/prod/types/ValueState.js +2 -0
  509. package/dist/prod/types/ValueState.js.map +7 -0
  510. package/dist/prod/types.js +2 -0
  511. package/dist/prod/types.js.map +7 -0
  512. package/dist/prod/updateShadowRoot.js +2 -0
  513. package/dist/prod/updateShadowRoot.js.map +7 -0
  514. package/dist/prod/util/AccessibilityTextsHelper.js +2 -0
  515. package/dist/prod/util/AccessibilityTextsHelper.js.map +7 -0
  516. package/dist/prod/util/Caret.js +2 -0
  517. package/dist/prod/util/Caret.js.map +7 -0
  518. package/dist/prod/util/ColorConversion.js +2 -0
  519. package/dist/prod/util/ColorConversion.js.map +7 -0
  520. package/dist/prod/util/FetchHelper.js +2 -0
  521. package/dist/prod/util/FetchHelper.js.map +7 -0
  522. package/dist/prod/util/FocusableElements.js +2 -0
  523. package/dist/prod/util/FocusableElements.js.map +7 -0
  524. package/dist/prod/util/HTMLSanitizer.js +2 -0
  525. package/dist/prod/util/HTMLSanitizer.js.map +7 -0
  526. package/dist/prod/util/InvisibleMessage.js +2 -0
  527. package/dist/prod/util/InvisibleMessage.js.map +7 -0
  528. package/dist/prod/util/PopupUtils.js +2 -0
  529. package/dist/prod/util/PopupUtils.js.map +7 -0
  530. package/dist/prod/util/SelectionAssistant.js +2 -0
  531. package/dist/prod/util/SelectionAssistant.js.map +7 -0
  532. package/dist/prod/util/SlotsHelper.js +2 -0
  533. package/dist/prod/util/SlotsHelper.js.map +7 -0
  534. package/dist/prod/util/StringHelper.js +2 -0
  535. package/dist/prod/util/StringHelper.js.map +7 -0
  536. package/dist/prod/util/TabbableElements.js +2 -0
  537. package/dist/prod/util/TabbableElements.js.map +7 -0
  538. package/dist/prod/util/arraysAreEqual.js +2 -0
  539. package/dist/prod/util/arraysAreEqual.js.map +7 -0
  540. package/dist/prod/util/clamp.js +2 -0
  541. package/dist/prod/util/clamp.js.map +7 -0
  542. package/dist/prod/util/createLinkInHead.js +2 -0
  543. package/dist/prod/util/createLinkInHead.js.map +7 -0
  544. package/dist/prod/util/debounce.js +2 -0
  545. package/dist/prod/util/debounce.js.map +7 -0
  546. package/dist/prod/util/detectNavigatorLanguage.js +2 -0
  547. package/dist/prod/util/detectNavigatorLanguage.js.map +7 -0
  548. package/dist/prod/util/dragAndDrop/DragRegistry.js +2 -0
  549. package/dist/prod/util/dragAndDrop/DragRegistry.js.map +7 -0
  550. package/dist/prod/util/dragAndDrop/findClosestPosition.js +2 -0
  551. package/dist/prod/util/dragAndDrop/findClosestPosition.js.map +7 -0
  552. package/dist/prod/util/dragAndDrop/handleDragOver.js +2 -0
  553. package/dist/prod/util/dragAndDrop/handleDragOver.js.map +7 -0
  554. package/dist/prod/util/dragAndDrop/handleDrop.js +2 -0
  555. package/dist/prod/util/dragAndDrop/handleDrop.js.map +7 -0
  556. package/dist/prod/util/dragAndDrop/longDragOverHandler.js +2 -0
  557. package/dist/prod/util/dragAndDrop/longDragOverHandler.js.map +7 -0
  558. package/dist/prod/util/escapeRegex.js +2 -0
  559. package/dist/prod/util/escapeRegex.js.map +7 -0
  560. package/dist/prod/util/fixSafariActiveState.js +2 -0
  561. package/dist/prod/util/fixSafariActiveState.js.map +7 -0
  562. package/dist/prod/util/formatMessage.js +2 -0
  563. package/dist/prod/util/formatMessage.js.map +7 -0
  564. package/dist/prod/util/generateHighlightedMarkup.js +2 -0
  565. package/dist/prod/util/generateHighlightedMarkup.js.map +7 -0
  566. package/dist/prod/util/getActiveElement.js +2 -0
  567. package/dist/prod/util/getActiveElement.js.map +7 -0
  568. package/dist/prod/util/getClassCopy.js +2 -0
  569. package/dist/prod/util/getClassCopy.js.map +7 -0
  570. package/dist/prod/util/getDesigntimePropertyAsArray.js +2 -0
  571. package/dist/prod/util/getDesigntimePropertyAsArray.js.map +7 -0
  572. package/dist/prod/util/getEffectiveContentDensity.js +2 -0
  573. package/dist/prod/util/getEffectiveContentDensity.js.map +7 -0
  574. package/dist/prod/util/getEffectiveScrollbarStyle.js +26 -0
  575. package/dist/prod/util/getEffectiveScrollbarStyle.js.map +7 -0
  576. package/dist/prod/util/getFastNavigationGroups.js +2 -0
  577. package/dist/prod/util/getFastNavigationGroups.js.map +7 -0
  578. package/dist/prod/util/getFileExtension.js +2 -0
  579. package/dist/prod/util/getFileExtension.js.map +7 -0
  580. package/dist/prod/util/getNormalizedTarget.js +2 -0
  581. package/dist/prod/util/getNormalizedTarget.js.map +7 -0
  582. package/dist/prod/util/getSingletonElementInstance.js +2 -0
  583. package/dist/prod/util/getSingletonElementInstance.js.map +7 -0
  584. package/dist/prod/util/hash2str.js +2 -0
  585. package/dist/prod/util/hash2str.js.map +7 -0
  586. package/dist/prod/util/isElementClickable.js +2 -0
  587. package/dist/prod/util/isElementClickable.js.map +7 -0
  588. package/dist/prod/util/isElementHidden.js +2 -0
  589. package/dist/prod/util/isElementHidden.js.map +7 -0
  590. package/dist/prod/util/isElementInView.js +2 -0
  591. package/dist/prod/util/isElementInView.js.map +7 -0
  592. package/dist/prod/util/isElementTabbable.js +2 -0
  593. package/dist/prod/util/isElementTabbable.js.map +7 -0
  594. package/dist/prod/util/isValidPropertyName.js +2 -0
  595. package/dist/prod/util/isValidPropertyName.js.map +7 -0
  596. package/dist/prod/util/throttle.js +2 -0
  597. package/dist/prod/util/throttle.js.map +7 -0
  598. package/dist/prod/util/toLowercaseEnumValue.js +2 -0
  599. package/dist/prod/util/toLowercaseEnumValue.js.map +7 -0
  600. package/dist/prod/util/whenDOMReady.js +2 -0
  601. package/dist/prod/util/whenDOMReady.js.map +7 -0
  602. package/dist/prod/util/willShowContent.js +2 -0
  603. package/dist/prod/util/willShowContent.js.map +7 -0
  604. package/dist/prod/validateThemeRoot.js +2 -0
  605. package/dist/prod/validateThemeRoot.js.map +7 -0
  606. package/dist/renderer/JsxRenderer.d.ts +3 -0
  607. package/dist/renderer/JsxRenderer.js +16 -0
  608. package/dist/renderer/JsxRenderer.js.map +1 -0
  609. package/dist/renderer/LitRenderer.d.ts +3 -3
  610. package/dist/renderer/LitRenderer.js +5 -10
  611. package/dist/renderer/LitRenderer.js.map +1 -1
  612. package/dist/renderer/directives/style-map.d.ts +13 -0
  613. package/dist/renderer/directives/style-map.js +59 -59
  614. package/dist/renderer/directives/style-map.js.map +1 -0
  615. package/dist/renderer/executeTemplate.d.ts +3 -4
  616. package/dist/renderer/executeTemplate.js +1 -19
  617. package/dist/renderer/executeTemplate.js.map +1 -1
  618. package/dist/sap/base/Log.js +698 -188
  619. package/dist/sap/base/assert.js +28 -1
  620. package/dist/sap/base/config/MemoryConfigurationProvider.js +20 -0
  621. package/dist/sap/base/security/URLListValidator.js +253 -6
  622. package/dist/sap/base/security/encodeCSS.js +34 -8
  623. package/dist/sap/base/security/encodeXML.js +47 -17
  624. package/dist/sap/base/security/sanitizeHTML.js +35 -13
  625. package/dist/sap/base/strings/toHex.js +27 -2
  626. package/dist/sap/base/util/now.js +24 -3
  627. package/dist/sap/base/util/uid.js +27 -0
  628. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +113 -98
  629. package/dist/ssr-dom-shim.d.ts +1 -0
  630. package/dist/ssr-dom-shim.js +62 -0
  631. package/dist/ssr-dom-shim.js.map +1 -0
  632. package/dist/ssr-dom.d.ts +1 -0
  633. package/dist/ssr-dom.js +3 -0
  634. package/dist/ssr-dom.js.map +1 -0
  635. package/dist/theming/CustomStyle.js.map +1 -1
  636. package/dist/theming/applyTheme.js +6 -6
  637. package/dist/theming/applyTheme.js.map +1 -1
  638. package/dist/theming/getConstructableStyle.d.ts +2 -2
  639. package/dist/theming/getConstructableStyle.js +3 -3
  640. package/dist/theming/getConstructableStyle.js.map +1 -1
  641. package/dist/theming/getEffectiveStyle.d.ts +1 -1
  642. package/dist/theming/getEffectiveStyle.js +5 -12
  643. package/dist/theming/getEffectiveStyle.js.map +1 -1
  644. package/dist/theming/getStylesString.js +2 -4
  645. package/dist/theming/getStylesString.js.map +1 -1
  646. package/dist/theming/getThemeDesignerTheme.js +2 -1
  647. package/dist/theming/getThemeDesignerTheme.js.map +1 -1
  648. package/dist/thirdparty/_merge.js.map +1 -1
  649. package/dist/thirdparty/isPlainObject.js.map +1 -1
  650. package/dist/thirdparty/preact/jsx.d.ts +2616 -0
  651. package/dist/thirdparty/preact/jsxRuntime.module.d.ts +62 -0
  652. package/dist/thirdparty/preact/jsxRuntime.module.js +1 -0
  653. package/dist/thirdparty/preact/preact.module.d.ts +398 -0
  654. package/dist/thirdparty/preact/preact.module.js +1 -0
  655. package/dist/types/AnimationMode.d.ts +0 -8
  656. package/dist/types/AnimationMode.js +0 -8
  657. package/dist/types/AnimationMode.js.map +1 -1
  658. package/dist/types/CalendarType.d.ts +0 -9
  659. package/dist/types/CalendarType.js +0 -9
  660. package/dist/types/CalendarType.js.map +1 -1
  661. package/dist/types/InvisibleMessageMode.d.ts +5 -10
  662. package/dist/types/InvisibleMessageMode.js +4 -11
  663. package/dist/types/InvisibleMessageMode.js.map +1 -1
  664. package/dist/types/ItemNavigationBehavior.d.ts +0 -6
  665. package/dist/types/ItemNavigationBehavior.js +0 -6
  666. package/dist/types/ItemNavigationBehavior.js.map +1 -1
  667. package/dist/types/MovePlacement.d.ts +20 -0
  668. package/dist/types/MovePlacement.js +22 -0
  669. package/dist/types/MovePlacement.js.map +1 -0
  670. package/dist/types/NavigationMode.d.ts +0 -8
  671. package/dist/types/NavigationMode.js +0 -8
  672. package/dist/types/NavigationMode.js.map +1 -1
  673. package/dist/types/Orientation.d.ts +16 -0
  674. package/dist/types/Orientation.js +18 -0
  675. package/dist/types/Orientation.js.map +1 -0
  676. package/dist/types/SortOrder.d.ts +24 -0
  677. package/dist/types/SortOrder.js +26 -0
  678. package/dist/types/SortOrder.js.map +1 -0
  679. package/dist/types/ValueState.d.ts +3 -17
  680. package/dist/types/ValueState.js +3 -17
  681. package/dist/types/ValueState.js.map +1 -1
  682. package/dist/types.d.ts +37 -14
  683. package/dist/types.js.map +1 -1
  684. package/dist/updateShadowRoot.d.ts +1 -2
  685. package/dist/updateShadowRoot.js +4 -28
  686. package/dist/updateShadowRoot.js.map +1 -1
  687. package/dist/util/{AriaLabelHelper.d.ts → AccessibilityTextsHelper.d.ts} +4 -2
  688. package/dist/util/{AriaLabelHelper.js → AccessibilityTextsHelper.js} +36 -8
  689. package/dist/util/AccessibilityTextsHelper.js.map +1 -0
  690. package/dist/util/Caret.js.map +1 -1
  691. package/dist/util/ColorConversion.d.ts +2 -1
  692. package/dist/util/ColorConversion.js +233 -216
  693. package/dist/util/ColorConversion.js.map +1 -1
  694. package/dist/util/FetchHelper.js.map +1 -1
  695. package/dist/util/FocusableElements.js +40 -12
  696. package/dist/util/FocusableElements.js.map +1 -1
  697. package/dist/util/HTMLSanitizer.d.ts +2 -0
  698. package/dist/util/HTMLSanitizer.js +2 -2
  699. package/dist/util/HTMLSanitizer.js.map +1 -1
  700. package/dist/util/InvisibleMessage.d.ts +1 -1
  701. package/dist/util/InvisibleMessage.js +2 -2
  702. package/dist/util/InvisibleMessage.js.map +1 -1
  703. package/dist/util/PopupUtils.d.ts +1 -3
  704. package/dist/util/PopupUtils.js +1 -15
  705. package/dist/util/PopupUtils.js.map +1 -1
  706. package/dist/util/SelectionAssistant.d.ts +12 -0
  707. package/dist/util/SelectionAssistant.js +79 -0
  708. package/dist/util/SelectionAssistant.js.map +1 -0
  709. package/dist/util/SlotsHelper.js.map +1 -1
  710. package/dist/util/StringHelper.d.ts +3 -1
  711. package/dist/util/StringHelper.js +15 -1
  712. package/dist/util/StringHelper.js.map +1 -1
  713. package/dist/util/TabbableElements.js +3 -10
  714. package/dist/util/TabbableElements.js.map +1 -1
  715. package/dist/util/arraysAreEqual.js.map +1 -1
  716. package/dist/util/clamp.js +2 -1
  717. package/dist/util/clamp.js.map +1 -1
  718. package/dist/util/createLinkInHead.d.ts +1 -1
  719. package/dist/util/createLinkInHead.js +1 -1
  720. package/dist/util/createLinkInHead.js.map +1 -1
  721. package/dist/util/debounce.js.map +1 -1
  722. package/dist/util/detectNavigatorLanguage.d.ts +2 -2
  723. package/dist/util/detectNavigatorLanguage.js +6 -1
  724. package/dist/util/detectNavigatorLanguage.js.map +1 -1
  725. package/dist/util/dragAndDrop/DragRegistry.d.ts +33 -0
  726. package/dist/util/dragAndDrop/DragRegistry.js +66 -0
  727. package/dist/util/dragAndDrop/DragRegistry.js.map +1 -0
  728. package/dist/util/dragAndDrop/findClosestPosition.d.ts +12 -0
  729. package/dist/util/dragAndDrop/findClosestPosition.js +106 -0
  730. package/dist/util/dragAndDrop/findClosestPosition.js.map +1 -0
  731. package/dist/util/dragAndDrop/handleDragOver.d.ts +16 -0
  732. package/dist/util/dragAndDrop/handleDragOver.js +42 -0
  733. package/dist/util/dragAndDrop/handleDragOver.js.map +1 -0
  734. package/dist/util/dragAndDrop/handleDrop.d.ts +5 -0
  735. package/dist/util/dragAndDrop/handleDrop.js +22 -0
  736. package/dist/util/dragAndDrop/handleDrop.js.map +1 -0
  737. package/dist/util/dragAndDrop/longDragOverHandler.d.ts +2 -0
  738. package/dist/util/dragAndDrop/longDragOverHandler.js +25 -0
  739. package/dist/util/dragAndDrop/longDragOverHandler.js.map +1 -0
  740. package/dist/util/fixSafariActiveState.d.ts +2 -0
  741. package/dist/util/fixSafariActiveState.js +11 -0
  742. package/dist/util/fixSafariActiveState.js.map +1 -0
  743. package/dist/util/formatMessage.js.map +1 -1
  744. package/dist/util/generateHighlightedMarkup.js.map +1 -1
  745. package/dist/util/getActiveElement.js.map +1 -1
  746. package/dist/util/getClassCopy.d.ts +144 -103
  747. package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -2
  748. package/dist/util/getDesigntimePropertyAsArray.js +2 -1
  749. package/dist/util/getDesigntimePropertyAsArray.js.map +1 -1
  750. package/dist/util/getEffectiveScrollbarStyle.d.ts +1 -1
  751. package/dist/util/getEffectiveScrollbarStyle.js +31 -1
  752. package/dist/util/getEffectiveScrollbarStyle.js.map +1 -1
  753. package/dist/util/getFastNavigationGroups.js +6 -1
  754. package/dist/util/getFastNavigationGroups.js.map +1 -1
  755. package/dist/util/getFileExtension.js.map +1 -1
  756. package/dist/util/getNormalizedTarget.js.map +1 -1
  757. package/dist/util/getSingletonElementInstance.js.map +1 -1
  758. package/dist/util/hash2str.d.ts +1 -0
  759. package/dist/util/hash2str.js +14 -0
  760. package/dist/util/hash2str.js.map +1 -0
  761. package/dist/util/isElementClickable.js.map +1 -1
  762. package/dist/util/isElementHidden.js.map +1 -1
  763. package/dist/util/isElementTabbable.js +2 -2
  764. package/dist/util/isElementTabbable.js.map +1 -1
  765. package/dist/util/isValidPropertyName.js.map +1 -1
  766. package/dist/util/throttle.d.ts +2 -0
  767. package/dist/util/throttle.js +20 -0
  768. package/dist/util/throttle.js.map +1 -0
  769. package/dist/util/toLowercaseEnumValue.d.ts +3 -0
  770. package/dist/util/toLowercaseEnumValue.js +4 -0
  771. package/dist/util/toLowercaseEnumValue.js.map +1 -0
  772. package/dist/util/whenDOMReady.js.map +1 -1
  773. package/dist/validateThemeRoot.js +3 -2
  774. package/dist/validateThemeRoot.js.map +1 -1
  775. package/dist/vscode.html-custom-data.json +22 -0
  776. package/package-scripts.cjs +26 -23
  777. package/package.json +37 -11
  778. package/src/css/FontFace.css +18 -1
  779. package/src/css/SystemCSSVars.css +0 -8
  780. package/src/thirdparty/preact/jsxRuntime.module.js +1 -0
  781. package/src/thirdparty/preact/preact.module.js +1 -0
  782. package/src/thirdparty/preact/version.txt +1 -0
  783. package/tsconfig.json +18 -13
  784. package/.eslintignore +0 -16
  785. package/.eslintrc.cjs +0 -3
  786. package/bundle.esm.js +0 -67
  787. package/config/wdio.conf.cjs +0 -400
  788. package/dist/CSP.d.ts +0 -30
  789. package/dist/CSP.js +0 -51
  790. package/dist/CSP.js.map +0 -1
  791. package/dist/MarkedEvents.d.ts +0 -9
  792. package/dist/MarkedEvents.js +0 -15
  793. package/dist/MarkedEvents.js.map +0 -1
  794. package/dist/StaticArea.d.ts +0 -3
  795. package/dist/StaticArea.js +0 -7
  796. package/dist/StaticArea.js.map +0 -1
  797. package/dist/StaticAreaItem.d.ts +0 -37
  798. package/dist/StaticAreaItem.js +0 -105
  799. package/dist/StaticAreaItem.js.map +0 -1
  800. package/dist/api.json +0 -1
  801. package/dist/assets/Boot.2ecd2d52.js +0 -9
  802. package/dist/assets/Boot.34b7cea0.css +0 -1
  803. package/dist/assets/bundle.esm.2bf33218.js +0 -50
  804. package/dist/assets-meta/IconCollectionsAlias.js.map +0 -1
  805. package/dist/config/RTL.d.ts +0 -7
  806. package/dist/config/RTL.js +0 -37
  807. package/dist/config/RTL.js.map +0 -1
  808. package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.d.ts +0 -4
  809. package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +0 -9
  810. package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js.map +0 -1
  811. package/dist/theming/getEffectiveLinksHrefs.d.ts +0 -3
  812. package/dist/theming/getEffectiveLinksHrefs.js +0 -17
  813. package/dist/theming/getEffectiveLinksHrefs.js.map +0 -1
  814. package/dist/theming/preloadLinks.d.ts +0 -3
  815. package/dist/theming/preloadLinks.js +0 -19
  816. package/dist/theming/preloadLinks.js.map +0 -1
  817. package/dist/types/CSSColor.d.ts +0 -15
  818. package/dist/types/CSSColor.js +0 -18
  819. package/dist/types/CSSColor.js.map +0 -1
  820. package/dist/types/DOMReference.d.ts +0 -17
  821. package/dist/types/DOMReference.js +0 -25
  822. package/dist/types/DOMReference.js.map +0 -1
  823. package/dist/types/DataType.d.ts +0 -25
  824. package/dist/types/DataType.js +0 -44
  825. package/dist/types/DataType.js.map +0 -1
  826. package/dist/types/Float.d.ts +0 -17
  827. package/dist/types/Float.js +0 -21
  828. package/dist/types/Float.js.map +0 -1
  829. package/dist/types/Integer.d.ts +0 -17
  830. package/dist/types/Integer.js +0 -21
  831. package/dist/types/Integer.js.map +0 -1
  832. package/dist/util/AriaLabelHelper.js.map +0 -1
  833. package/dist/util/createStyleInHead.d.ts +0 -8
  834. package/dist/util/createStyleInHead.js +0 -18
  835. package/dist/util/createStyleInHead.js.map +0 -1
  836. package/index.js +0 -230
  837. package/lib/generate-asset-parameters/index.js +0 -27
  838. package/lib/generate-styles/index.js +0 -31
  839. package/lib/generate-version-info/index.js +0 -32
  840. package/src/renderer/directives/style-map.js +0 -72
  841. package/used-modules.txt +0 -10
@@ -1,27 +1,56 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
+ import "@ui5/webcomponents-base/dist/ssr-dom.js";
1
3
  import merge from "./thirdparty/merge.js";
2
4
  import { boot } from "./Boot.js";
3
5
  import UI5ElementMetadata from "./UI5ElementMetadata.js";
4
6
  import EventProvider from "./EventProvider.js";
5
- import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
6
- import StaticAreaItem from "./StaticAreaItem.js";
7
7
  import updateShadowRoot from "./updateShadowRoot.js";
8
8
  import { shouldIgnoreCustomElement } from "./IgnoreCustomElements.js";
9
- import { renderDeferred, renderImmediately, cancelRender } from "./Render.js";
9
+ import { renderDeferred, renderImmediately, cancelRender, } from "./Render.js";
10
10
  import { registerTag, isTagRegistered, recordTagRegistrationFailure } from "./CustomElementsRegistry.js";
11
11
  import { observeDOMNode, unobserveDOMNode } from "./DOMObserver.js";
12
12
  import { skipOriginalEvent } from "./config/NoConflict.js";
13
13
  import getEffectiveDir from "./locale/getEffectiveDir.js";
14
- import { kebabToCamelCase, camelToKebabCase } from "./util/StringHelper.js";
14
+ import { kebabToCamelCase, camelToKebabCase, kebabToPascalCase } from "./util/StringHelper.js";
15
15
  import isValidPropertyName from "./util/isValidPropertyName.js";
16
16
  import { getSlotName, getSlottedNodesList } from "./util/SlotsHelper.js";
17
17
  import arraysAreEqual from "./util/arraysAreEqual.js";
18
18
  import { markAsRtlAware } from "./locale/RTLAwareRegistry.js";
19
- import preloadLinks from "./theming/preloadLinks.js";
20
19
  import executeTemplate from "./renderer/executeTemplate.js";
21
- import { getCurrentRuntimeIndex } from "./Runtimes.js";
20
+ import { shouldScopeCustomElement } from "./CustomElementsScopeUtils.js";
21
+ import { updateFormValue, setFormValue } from "./features/InputElementsFormSupport.js";
22
+ import { getI18nBundle } from "./i18nBundle.js";
23
+ import { fetchCldr } from "./asset-registries/LocaleData.js";
24
+ import getLocale from "./locale/getLocale.js";
25
+ const DEV_MODE = true;
22
26
  let autoId = 0;
23
27
  const elementTimeouts = new Map();
24
28
  const uniqueDependenciesCache = new Map();
29
+ const defaultConverter = {
30
+ fromAttribute(value, type) {
31
+ if (type === Boolean) {
32
+ return value !== null;
33
+ }
34
+ if (type === Number) {
35
+ return value === null ? undefined : parseFloat(value);
36
+ }
37
+ return value;
38
+ },
39
+ toAttribute(value, type) {
40
+ if (type === Boolean) {
41
+ return value ? "" : null;
42
+ }
43
+ // don't set attributes for arrays and objects
44
+ if (type === Object || type === Array) {
45
+ return null;
46
+ }
47
+ // object, array, other
48
+ if (value === null || value === undefined) {
49
+ return null;
50
+ }
51
+ return String(value);
52
+ },
53
+ };
25
54
  /**
26
55
  * Triggers re-rendering of a UI5Element instance due to state change.
27
56
  * @param {ChangeInfo} changeInfo An object with information about the change that caused invalidation.
@@ -37,21 +66,38 @@ function _invalidate(changeInfo) {
37
66
  this.onInvalidation(changeInfo);
38
67
  this._changedState.push(changeInfo);
39
68
  renderDeferred(this);
40
- this._eventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
69
+ this._invalidationEventProvider.fireEvent("invalidate", { ...changeInfo, target: this });
70
+ }
71
+ /**
72
+ * looks up a property descsriptor including in the prototype chain
73
+ * @param proto the starting prototype
74
+ * @param name the property to look for
75
+ * @returns the property descriptor if found directly or in the prototype chaing, undefined if not found
76
+ */
77
+ function getPropertyDescriptor(proto, name) {
78
+ do {
79
+ const descriptor = Object.getOwnPropertyDescriptor(proto, name);
80
+ if (descriptor) {
81
+ return descriptor;
82
+ }
83
+ // go up the prototype chain
84
+ proto = Object.getPrototypeOf(proto);
85
+ } while (proto && proto !== HTMLElement.prototype);
41
86
  }
42
87
  /**
88
+ * @class
43
89
  * Base class for all UI5 Web Components
44
90
  *
45
- * @class
46
- * @constructor
47
- * @author SAP SE
48
- * @alias sap.ui.webc.base.UI5Element
49
91
  * @extends HTMLElement
50
92
  * @public
51
93
  */
52
94
  class UI5Element extends HTMLElement {
53
95
  constructor() {
54
96
  super();
97
+ // used to differentiate whether a setter is called from the constructor (from an initializer) or later
98
+ // setters from the constructor should not set attributes, this is delegated after the first rendering but is async
99
+ // setters after the constructor can set attributes synchronously for more convinient development
100
+ this._rendered = false;
55
101
  const ctor = this.constructor;
56
102
  this._changedState = []; // Filled on each invalidation, cleared on re-render (used for debugging)
57
103
  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
@@ -59,17 +105,46 @@ class UI5Element extends HTMLElement {
59
105
  this._fullyConnected = false; // A flag telling whether the UI5Element's onEnterDOM hook was called (since it's possible to have the element removed from DOM before that)
60
106
  this._childChangeListeners = new Map(); // used to store lazy listeners per slot for the child change event of every child inside that slot
61
107
  this._slotChangeListeners = new Map(); // used to store lazy listeners per slot for the slotchange event of all slot children inside that slot
62
- this._eventProvider = new EventProvider(); // used by parent components for listening to changes to child components
108
+ this._invalidationEventProvider = new EventProvider(); // used by parent components for listening to changes to child components
109
+ this._componentStateFinalizedEventProvider = new EventProvider(); // used by friend classes for synchronization
63
110
  let deferredResolve;
64
111
  this._domRefReadyPromise = new Promise(resolve => {
65
112
  deferredResolve = resolve;
66
113
  });
67
114
  this._domRefReadyPromise._deferredResolve = deferredResolve;
68
115
  this._doNotSyncAttributes = new Set(); // attributes that are excluded from attributeChangedCallback synchronization
116
+ this._slotsAssignedNodes = new WeakMap(); // map of all nodes, slotted (directly or transitively) per component slot
69
117
  this._state = { ...ctor.getMetadata().getInitialState() };
70
- this._upgradeAllProperties();
118
+ // save properties set before element is upgraded, as they will be overriden by the field initializers in the constructor
119
+ this.initializedProperties = new Map();
120
+ const allProps = this.constructor.getMetadata().getPropertiesList();
121
+ allProps.forEach(propertyName => {
122
+ if (this.hasOwnProperty(propertyName)) { // eslint-disable-line
123
+ const value = this[propertyName];
124
+ this.initializedProperties.set(propertyName, value);
125
+ }
126
+ });
127
+ this._internals = this.attachInternals();
128
+ this._initShadowRoot();
129
+ }
130
+ _initShadowRoot() {
131
+ const ctor = this.constructor;
71
132
  if (ctor._needsShadowDOM()) {
72
- this.attachShadow({ mode: "open" });
133
+ const defaultOptions = { mode: "open" };
134
+ this.attachShadow({ ...defaultOptions, ...ctor.getMetadata().getShadowRootOptions() });
135
+ const slotsAreManaged = ctor.getMetadata().slotsAreManaged();
136
+ if (slotsAreManaged) {
137
+ this.shadowRoot.addEventListener("slotchange", this._onShadowRootSlotChange.bind(this));
138
+ }
139
+ }
140
+ }
141
+ /**
142
+ * Note: this "slotchange" listener is for slots, rendered in the component's shadow root
143
+ */
144
+ _onShadowRootSlotChange(e) {
145
+ const targetShadowRoot = e.target?.getRootNode(); // the "slotchange" event target is always a slot element
146
+ if (targetShadowRoot === this.shadowRoot) { // only for slotchange events that originate from slots, belonging to the component's shadow root
147
+ this._processChildren();
73
148
  }
74
149
  }
75
150
  /**
@@ -88,18 +163,22 @@ class UI5Element extends HTMLElement {
88
163
  const template = this.constructor.template;
89
164
  return executeTemplate(template, this);
90
165
  }
91
- renderStatic() {
92
- const template = this.constructor.staticAreaTemplate;
93
- return executeTemplate(template, this);
94
- }
95
166
  /**
96
167
  * Do not call this method from derivatives of UI5Element, use "onEnterDOM" only
97
168
  * @private
98
169
  */
99
170
  async connectedCallback() {
171
+ if (DEV_MODE) {
172
+ const props = this.constructor.getMetadata().getProperties();
173
+ for (const [prop, propData] of Object.entries(props)) { // eslint-disable-line
174
+ if (Object.hasOwn(this, prop) && !this.initializedProperties.has(prop)) {
175
+ // initialized properties should not trigger this error as they will be reassigned, only property initializers will trigger this in case unsupported TS mode
176
+ // eslint-disable-next-line no-console
177
+ console.error(`[UI5-FWK] ${this.constructor.getMetadata().getTag()} has a property [${prop}] that is shadowed by the instance. Updates to this property will not invalidate the component. Possible reason is TS target ES2022 or TS useDefineForClassFields`);
178
+ }
179
+ }
180
+ }
100
181
  const ctor = this.constructor;
101
- this.setAttribute(`_ui5rt${getCurrentRuntimeIndex()}`, "");
102
- this.setAttribute("_ui5host", "");
103
182
  this.setAttribute(ctor.getMetadata().getPureTag(), "");
104
183
  if (ctor.getMetadata().supportsF6FastNavigation()) {
105
184
  this.setAttribute("data-sap-ui-fastnavgroup", "true");
@@ -114,6 +193,9 @@ class UI5Element extends HTMLElement {
114
193
  if (!this._inDOM) { // Component removed from DOM while _processChildren was running
115
194
  return;
116
195
  }
196
+ if (!ctor.asyncFinished) {
197
+ await ctor.definePromise;
198
+ }
117
199
  renderImmediately(this);
118
200
  this._domRefReadyPromise._deferredResolve();
119
201
  this._fullyConnected = true;
@@ -134,9 +216,7 @@ class UI5Element extends HTMLElement {
134
216
  this.onExitDOM();
135
217
  this._fullyConnected = false;
136
218
  }
137
- if (this.staticAreaItem && this.staticAreaItem.parentElement) {
138
- this.staticAreaItem.parentElement.removeChild(this.staticAreaItem);
139
- }
219
+ this._domRefReadyPromise._deferredResolve();
140
220
  cancelRender(this);
141
221
  }
142
222
  /**
@@ -164,11 +244,12 @@ class UI5Element extends HTMLElement {
164
244
  */
165
245
  _startObservingDOMChildren() {
166
246
  const ctor = this.constructor;
167
- const shouldObserveChildren = ctor.getMetadata().hasSlots();
247
+ const metadata = ctor.getMetadata();
248
+ const shouldObserveChildren = metadata.hasSlots();
168
249
  if (!shouldObserveChildren) {
169
250
  return;
170
251
  }
171
- const canSlotText = ctor.getMetadata().canSlotText();
252
+ const canSlotText = metadata.canSlotText();
172
253
  const mutationObserverOptions = {
173
254
  childList: true,
174
255
  subtree: canSlotText,
@@ -234,9 +315,9 @@ class UI5Element extends HTMLElement {
234
315
  const localName = child.localName;
235
316
  const shouldWaitForCustomElement = localName.includes("-") && !shouldIgnoreCustomElement(localName);
236
317
  if (shouldWaitForCustomElement) {
237
- const isDefined = window.customElements.get(localName);
318
+ const isDefined = customElements.get(localName);
238
319
  if (!isDefined) {
239
- const whenDefinedPromise = window.customElements.whenDefined(localName); // Class registered, but instances not upgraded yet
320
+ const whenDefinedPromise = customElements.whenDefined(localName); // Class registered, but instances not upgraded yet
240
321
  let timeoutPromise = elementTimeouts.get(localName);
241
322
  if (!timeoutPromise) {
242
323
  timeoutPromise = new Promise(resolve => setTimeout(resolve, 1000));
@@ -244,20 +325,18 @@ class UI5Element extends HTMLElement {
244
325
  }
245
326
  await Promise.race([whenDefinedPromise, timeoutPromise]);
246
327
  }
247
- window.customElements.upgrade(child);
328
+ customElements.upgrade(child);
248
329
  }
249
330
  }
250
331
  child = ctor.getMetadata().constructor.validateSlotValue(child, slotData);
251
332
  // Listen for any invalidation on the child if invalidateOnChildChange is true or an object (ignore when false or not set)
252
333
  if (instanceOfUI5Element(child) && slotData.invalidateOnChildChange) {
253
334
  const childChangeListener = this._getChildChangeListener(slotName);
254
- if (childChangeListener) {
255
- child.attachInvalidate.call(child, childChangeListener);
256
- }
335
+ child.attachInvalidate.call(child, childChangeListener);
257
336
  }
258
337
  // Listen for the slotchange event if the child is a slot itself
259
338
  if (child instanceof HTMLSlotElement) {
260
- this._attachSlotChange(child, slotName);
339
+ this._attachSlotChange(child, slotName, !!slotData.invalidateOnChildChange);
261
340
  }
262
341
  const propertyName = slotData.propertyName || slotName;
263
342
  if (slottedChildrenMap.has(propertyName)) {
@@ -272,6 +351,7 @@ class UI5Element extends HTMLElement {
272
351
  // not the order elements are defined.
273
352
  slottedChildrenMap.forEach((children, propertyName) => {
274
353
  this._state[propertyName] = children.sort((a, b) => a.idx - b.idx).map(_ => _.child);
354
+ this._state[kebabToCamelCase(propertyName)] = this._state[propertyName];
275
355
  });
276
356
  // Compare the content of each slot with the cached values and invalidate for the ones that changed
277
357
  let invalidated = false;
@@ -284,6 +364,9 @@ class UI5Element extends HTMLElement {
284
364
  reason: "children",
285
365
  });
286
366
  invalidated = true;
367
+ if (ctor.getMetadata().isFormAssociated()) {
368
+ setFormValue(this);
369
+ }
287
370
  }
288
371
  }
289
372
  // If none of the slots had an invalidation due to changes to immediate children,
@@ -306,39 +389,38 @@ class UI5Element extends HTMLElement {
306
389
  children.forEach(child => {
307
390
  if (instanceOfUI5Element(child)) {
308
391
  const childChangeListener = this._getChildChangeListener(slotName);
309
- if (childChangeListener) {
310
- child.detachInvalidate.call(child, childChangeListener);
311
- }
392
+ child.detachInvalidate.call(child, childChangeListener);
312
393
  }
313
394
  if (child instanceof HTMLSlotElement) {
314
395
  this._detachSlotChange(child, slotName);
315
396
  }
316
397
  });
317
398
  this._state[propertyName] = [];
399
+ this._state[kebabToCamelCase(propertyName)] = this._state[propertyName];
318
400
  }
319
401
  /**
320
402
  * Attach a callback that will be executed whenever the component is invalidated
321
403
  *
322
- * @param {InvalidationInfo} callback
404
+ * @param callback
323
405
  * @public
324
406
  */
325
407
  attachInvalidate(callback) {
326
- this._eventProvider.attachEvent("invalidate", callback);
408
+ this._invalidationEventProvider.attachEvent("invalidate", callback);
327
409
  }
328
410
  /**
329
411
  * Detach the callback that is executed whenever the component is invalidated
330
412
  *
331
- * @param {InvalidationInfo} callback
413
+ * @param callback
332
414
  * @public
333
415
  */
334
416
  detachInvalidate(callback) {
335
- this._eventProvider.detachEvent("invalidate", callback);
417
+ this._invalidationEventProvider.detachEvent("invalidate", callback);
336
418
  }
337
419
  /**
338
420
  * Callback that is executed whenever a monitored child changes its state
339
421
  *
340
- * @param {sting} slotName the slot in which a child was invalidated
341
- * @param { ChangeInfo } childChangeInfo the changeInfo object for the child in the given slot
422
+ * @param slotName the slot in which a child was invalidated
423
+ * @param childChangeInfo the changeInfo object for the child in the given slot
342
424
  * @private
343
425
  */
344
426
  _onChildChange(slotName, childChangeInfo) {
@@ -368,23 +450,21 @@ class UI5Element extends HTMLElement {
368
450
  const nameInCamelCase = kebabToCamelCase(realName);
369
451
  if (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line
370
452
  const propData = properties[nameInCamelCase];
371
- const propertyType = propData.type;
372
- let propertyValidator = propData.validator;
373
- if (propertyType && propertyType.isDataTypeClass) {
374
- propertyValidator = propertyType;
375
- }
376
- if (propertyValidator) {
377
- newPropertyValue = propertyValidator.attributeToProperty(newValue);
378
- }
379
- else if (propertyType === Boolean) {
380
- newPropertyValue = newValue !== null;
381
- }
382
- else {
383
- newPropertyValue = newValue;
384
- }
453
+ const converter = propData.converter ?? defaultConverter;
454
+ newPropertyValue = converter.fromAttribute(newValue, propData.type);
385
455
  this[nameInCamelCase] = newPropertyValue;
386
456
  }
387
457
  }
458
+ formAssociatedCallback() {
459
+ const ctor = this.constructor;
460
+ if (!ctor.getMetadata().isFormAssociated()) {
461
+ return;
462
+ }
463
+ updateFormValue(this);
464
+ }
465
+ static get formAssociated() {
466
+ return this.getMetadata().isFormAssociated();
467
+ }
388
468
  /**
389
469
  * @private
390
470
  */
@@ -395,60 +475,37 @@ class UI5Element extends HTMLElement {
395
475
  }
396
476
  const properties = ctor.getMetadata().getProperties();
397
477
  const propData = properties[name];
398
- const propertyType = propData.type;
399
- let propertyValidator = propData.validator;
400
478
  const attrName = camelToKebabCase(name);
401
- const attrValue = this.getAttribute(attrName);
402
- if (propertyType && propertyType.isDataTypeClass) {
403
- propertyValidator = propertyType;
404
- }
405
- if (propertyValidator) {
406
- const newAttrValue = propertyValidator.propertyToAttribute(newValue);
407
- if (newAttrValue === null) { // null means there must be no attribute for the current value of the property
408
- this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
409
- this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
410
- this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
479
+ const converter = propData.converter || defaultConverter;
480
+ if (DEV_MODE) {
481
+ const tag = this.constructor.getMetadata().getTag();
482
+ if (typeof newValue === "boolean" && propData.type !== Boolean) {
483
+ // eslint-disable-next-line
484
+ console.error(`[UI5-FWK] boolean value for property [${name}] of component [${tag}] is missing "{ type: Boolean }" in its property decorator. Attribute conversion will treat it as a string. If this is intended, pass the value converted to string, otherwise add the type to the property decorator`);
411
485
  }
412
- else {
413
- this.setAttribute(attrName, newAttrValue);
414
- }
415
- }
416
- else if (propertyType === Boolean) {
417
- if (newValue === true && attrValue === null) {
418
- this.setAttribute(attrName, "");
486
+ if (typeof newValue === "number" && propData.type !== Number) {
487
+ // eslint-disable-next-line
488
+ console.error(`[UI5-FWK] numeric value for property [${name}] of component [${tag}] is missing "{ type: Number }" in its property decorator. Attribute conversion will treat it as a string. If this is intended, pass the value converted to string, otherwise add the type to the property decorator`);
419
489
  }
420
- else if (newValue === false && attrValue !== null) {
421
- this.removeAttribute(attrName);
490
+ if (typeof newValue === "string" && propData.type && propData.type !== String) {
491
+ // eslint-disable-next-line
492
+ console.error(`[UI5-FWK] string value for property [${name}] of component [${tag}] which has a non-string type [${propData.type}] in its property decorator. Attribute conversion will stop and keep the string value in the property.`);
422
493
  }
423
494
  }
424
- else if (typeof newValue !== "object") {
425
- if (attrValue !== newValue) {
426
- this.setAttribute(attrName, newValue);
427
- }
428
- } // else { return; } // old object handling
429
- }
430
- /**
431
- * @private
432
- */
433
- _upgradeProperty(propertyName) {
434
- if (this.hasOwnProperty(propertyName)) { // eslint-disable-line
435
- const value = this[propertyName];
436
- delete this[propertyName];
437
- this[propertyName] = value;
495
+ const newAttrValue = converter.toAttribute(newValue, propData.type);
496
+ this._doNotSyncAttributes.add(attrName); // skip the attributeChangedCallback call for this attribute
497
+ if (newAttrValue === null || newAttrValue === undefined) { // null means there must be no attribute for the current value of the property
498
+ this.removeAttribute(attrName); // remove the attribute safely (will not trigger synchronization to the property value due to the above line)
438
499
  }
439
- }
440
- /**
441
- * @private
442
- */
443
- _upgradeAllProperties() {
444
- const allProps = this.constructor.getMetadata().getPropertiesList();
445
- allProps.forEach(this._upgradeProperty.bind(this));
500
+ else {
501
+ this.setAttribute(attrName, newAttrValue); // setting attributes from properties should not trigger the property setter again
502
+ }
503
+ this._doNotSyncAttributes.delete(attrName); // enable synchronization again for this attribute
446
504
  }
447
505
  /**
448
506
  * Returns a singleton event listener for the "change" event of a child in a given slot
449
507
  *
450
508
  * @param slotName the name of the slot, where the child is
451
- * @returns {ChildChangeListener}
452
509
  * @private
453
510
  */
454
511
  _getChildChangeListener(slotName) {
@@ -461,7 +518,6 @@ class UI5Element extends HTMLElement {
461
518
  * Returns a singleton slotchange event listener that invalidates the component due to changes in the given slot
462
519
  *
463
520
  * @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
464
- * @returns {SlotChangeListener}
465
521
  * @private
466
522
  */
467
523
  _getSlotChangeListener(slotName) {
@@ -473,11 +529,32 @@ class UI5Element extends HTMLElement {
473
529
  /**
474
530
  * @private
475
531
  */
476
- _attachSlotChange(child, slotName) {
532
+ _attachSlotChange(slot, slotName, invalidateOnChildChange) {
477
533
  const slotChangeListener = this._getSlotChangeListener(slotName);
478
- if (slotChangeListener) {
479
- child.addEventListener("slotchange", slotChangeListener);
480
- }
534
+ slot.addEventListener("slotchange", (e) => {
535
+ slotChangeListener.call(slot, e);
536
+ if (invalidateOnChildChange) {
537
+ // Detach listeners for UI5 Elements that used to be in this slot
538
+ const previousChildren = this._slotsAssignedNodes.get(slot);
539
+ if (previousChildren) {
540
+ previousChildren.forEach(child => {
541
+ if (instanceOfUI5Element(child)) {
542
+ const childChangeListener = this._getChildChangeListener(slotName);
543
+ child.detachInvalidate.call(child, childChangeListener);
544
+ }
545
+ });
546
+ }
547
+ // Attach listeners for UI5 Elements that are now in this slot
548
+ const newChildren = getSlottedNodesList([slot]);
549
+ this._slotsAssignedNodes.set(slot, newChildren);
550
+ newChildren.forEach(child => {
551
+ if (instanceOfUI5Element(child)) {
552
+ const childChangeListener = this._getChildChangeListener(slotName);
553
+ child.attachInvalidate.call(child, childChangeListener);
554
+ }
555
+ });
556
+ }
557
+ });
481
558
  }
482
559
  /**
483
560
  * @private
@@ -487,6 +564,7 @@ class UI5Element extends HTMLElement {
487
564
  }
488
565
  /**
489
566
  * Whenever a slot element is slotted inside a UI5 Web Component, its slotchange event invalidates the component
567
+ * Note: this "slotchange" listener is for slots that are children of the component (in the light dom, as opposed to slots rendered by the component in the shadow root)
490
568
  *
491
569
  * @param slotName the name of the slot, where the slot element (whose slotchange event we're listening to) is
492
570
  * @private
@@ -513,9 +591,9 @@ class UI5Element extends HTMLElement {
513
591
  * 1) children: immediate children (HTML elements or text nodes) were added, removed or reordered in the slot
514
592
  * 2) textcontent: text nodes in the slot changed value (or nested text nodes were added or changed value). Can only trigger for slots of "type: Node"
515
593
  * 3) slotchange: a slot element, slotted inside that slot had its "slotchange" event listener called. This practically means that transitively slotted children changed.
516
- * Can only trigger if the child of a slot is a slot element itself.
594
+ * Can only trigger if the child of a slot is a slot element itself.
517
595
  * 4) childchange: indicates that a UI5Element child in that slot was invalidated and in turn invalidated the component.
518
- * Can only trigger for slots with "invalidateOnChildChange" metadata descriptor
596
+ * Can only trigger for slots with "invalidateOnChildChange" metadata descriptor
519
597
  *
520
598
  * - newValue: the new value of the property (for type="property" only)
521
599
  *
@@ -526,6 +604,13 @@ class UI5Element extends HTMLElement {
526
604
  * @public
527
605
  */
528
606
  onInvalidation(changeInfo) { } // eslint-disable-line
607
+ updateAttributes() {
608
+ const ctor = this.constructor;
609
+ const props = ctor.getMetadata().getProperties();
610
+ for (const [prop, propData] of Object.entries(props)) { // eslint-disable-line
611
+ this._updateAttribute(prop, this[prop]);
612
+ }
613
+ }
529
614
  /**
530
615
  * Do not call this method directly, only intended to be called by js
531
616
  * @protected
@@ -533,15 +618,29 @@ class UI5Element extends HTMLElement {
533
618
  _render() {
534
619
  const ctor = this.constructor;
535
620
  const hasIndividualSlots = ctor.getMetadata().hasIndividualSlots();
621
+ // restore properties that were initialized before `define` by calling the setter
622
+ if (this.initializedProperties.size > 0) {
623
+ Array.from(this.initializedProperties.entries()).forEach(([prop, value]) => {
624
+ delete this[prop];
625
+ this[prop] = value;
626
+ });
627
+ this.initializedProperties.clear();
628
+ }
536
629
  // suppress invalidation to prevent state changes scheduling another rendering
537
630
  this._suppressInvalidation = true;
538
- this.onBeforeRendering();
539
- // Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
540
- if (this._onComponentStateFinalized) {
541
- this._onComponentStateFinalized();
631
+ try {
632
+ this.onBeforeRendering();
633
+ if (!this._rendered) {
634
+ // first time rendering, previous setters might have been initializers from the constructor - update attributes here
635
+ this.updateAttributes();
636
+ }
637
+ // Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered
638
+ this._componentStateFinalizedEventProvider.fireEvent("componentStateFinalized");
639
+ }
640
+ finally {
641
+ // always resume normal invalidation handling
642
+ this._suppressInvalidation = false;
542
643
  }
543
- // resume normal invalidation handling
544
- this._suppressInvalidation = false;
545
644
  // Update the shadow root with the render result
546
645
  /*
547
646
  if (this._changedState.length) {
@@ -564,13 +663,11 @@ class UI5Element extends HTMLElement {
564
663
  }
565
664
  */
566
665
  this._changedState = [];
567
- // Update shadow root and static area item
666
+ // Update shadow root
568
667
  if (ctor._needsShadowDOM()) {
569
668
  updateShadowRoot(this);
570
669
  }
571
- if (this.staticAreaItem) {
572
- this.staticAreaItem.update();
573
- }
670
+ this._rendered = true;
574
671
  // Safari requires that children get the slot attribute only after the slot tags have been rendered in the shadow DOM
575
672
  if (hasIndividualSlots) {
576
673
  this._assignIndividualSlotsToChildren();
@@ -610,11 +707,7 @@ class UI5Element extends HTMLElement {
610
707
  if (!this.shadowRoot || this.shadowRoot.children.length === 0) {
611
708
  return;
612
709
  }
613
- const children = [...this.shadowRoot.children].filter(child => !["link", "style"].includes(child.localName));
614
- if (children.length !== 1) {
615
- 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
616
- }
617
- return children[0];
710
+ return this.shadowRoot.children[0];
618
711
  }
619
712
  /**
620
713
  * Returns the DOM Element marked with "data-sap-focus-ref" inside the template.
@@ -639,13 +732,16 @@ class UI5Element extends HTMLElement {
639
732
  }
640
733
  /**
641
734
  * Set the focus to the element, returned by "getFocusDomRef()" (marked by "data-sap-focus-ref")
642
- * @param {FocusOptions} focusOptions additional options for the focus
735
+ * @param focusOptions additional options for the focus
643
736
  * @public
644
737
  */
645
738
  async focus(focusOptions) {
646
739
  await this._waitForDomRef();
647
740
  const focusDomRef = this.getFocusDomRef();
648
- if (focusDomRef && typeof focusDomRef.focus === "function") {
741
+ if (focusDomRef === this) {
742
+ HTMLElement.prototype.focus.call(this, focusOptions);
743
+ }
744
+ else if (focusDomRef && typeof focusDomRef.focus === "function") {
649
745
  focusDomRef.focus(focusOptions);
650
746
  }
651
747
  }
@@ -656,13 +752,40 @@ class UI5Element extends HTMLElement {
656
752
  * @param data - additional data for the event
657
753
  * @param cancelable - true, if the user can call preventDefault on the event object
658
754
  * @param bubbles - true, if the event bubbles
659
- * @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise
755
+ * @returns false, if the event was cancelled (preventDefault called), true otherwise
756
+ * @deprecated use fireDecoratorEvent instead
660
757
  */
661
758
  fireEvent(name, data, cancelable = false, bubbles = true) {
662
759
  const eventResult = this._fireEvent(name, data, cancelable, bubbles);
663
- const camelCaseEventName = kebabToCamelCase(name);
664
- if (camelCaseEventName !== name) {
665
- return eventResult && this._fireEvent(camelCaseEventName, data, cancelable);
760
+ const pascalCaseEventName = kebabToPascalCase(name);
761
+ // pascal events are more convinient for native react usage
762
+ // live-change:
763
+ // Before: onlive-change
764
+ // After: onLiveChange
765
+ if (pascalCaseEventName !== name) {
766
+ return eventResult && this._fireEvent(pascalCaseEventName, data, cancelable, bubbles);
767
+ }
768
+ return eventResult;
769
+ }
770
+ /**
771
+ * Fires a custom event, configured via the "event" decorator.
772
+ * @public
773
+ * @param name - name of the event
774
+ * @param data - additional data for the event
775
+ * @returns false, if the event was cancelled (preventDefault called), true otherwise
776
+ */
777
+ fireDecoratorEvent(name, data) {
778
+ const eventData = this.getEventData(name);
779
+ const cancellable = eventData ? eventData.cancelable : false;
780
+ const bubbles = eventData ? eventData.bubbles : false;
781
+ const eventResult = this._fireEvent(name, data, cancellable, bubbles);
782
+ const pascalCaseEventName = kebabToPascalCase(name);
783
+ // pascal events are more convinient for native react usage
784
+ // live-change:
785
+ // Before: onlive-change
786
+ // After: onLiveChange
787
+ if (pascalCaseEventName !== name) {
788
+ return eventResult && this._fireEvent(pascalCaseEventName, data, cancellable, bubbles);
666
789
  }
667
790
  return eventResult;
668
791
  }
@@ -689,6 +812,11 @@ class UI5Element extends HTMLElement {
689
812
  // Return false if any of the two events was prevented (its result was false).
690
813
  return normalEventResult && noConflictEventResult;
691
814
  }
815
+ getEventData(name) {
816
+ const ctor = this.constructor;
817
+ const eventMap = ctor.getMetadata().getEvents();
818
+ return eventMap[name];
819
+ }
692
820
  /**
693
821
  * Returns the actual children, associated with a slot.
694
822
  * 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.
@@ -697,12 +825,30 @@ class UI5Element extends HTMLElement {
697
825
  getSlottedNodes(slotName) {
698
826
  return getSlottedNodesList(this[slotName]);
699
827
  }
828
+ /**
829
+ * Attach a callback that will be executed whenever the component's state is finalized
830
+ *
831
+ * @param callback
832
+ * @public
833
+ */
834
+ attachComponentStateFinalized(callback) {
835
+ this._componentStateFinalizedEventProvider.attachEvent("componentStateFinalized", callback);
836
+ }
837
+ /**
838
+ * Detach the callback that is executed whenever the component's state is finalized
839
+ *
840
+ * @param callback
841
+ * @public
842
+ */
843
+ detachComponentStateFinalized(callback) {
844
+ this._componentStateFinalizedEventProvider.detachEvent("componentStateFinalized", callback);
845
+ }
700
846
  /**
701
847
  * Determines whether the component should be rendered in RTL mode or not.
702
848
  * Returns: "rtl", "ltr" or undefined
703
849
  *
704
850
  * @public
705
- * @returns {String|undefined}
851
+ * @default undefined
706
852
  */
707
853
  get effectiveDir() {
708
854
  markAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware
@@ -710,49 +856,50 @@ class UI5Element extends HTMLElement {
710
856
  }
711
857
  /**
712
858
  * Used to duck-type UI5 elements without using instanceof
713
- * @returns {boolean}
714
859
  * @public
860
+ * @default true
715
861
  */
716
862
  get isUI5Element() {
717
863
  return true;
718
864
  }
865
+ get isUI5AbstractElement() {
866
+ return !this.constructor._needsShadowDOM();
867
+ }
719
868
  get classes() {
720
869
  return {};
721
870
  }
722
871
  /**
723
- * Do not override this method in derivatives of UI5Element, use metadata properties instead
872
+ * Returns the component accessibility info.
724
873
  * @private
725
874
  */
726
- static get observedAttributes() {
727
- return this.getMetadata().getAttributesList();
875
+ get accessibilityInfo() {
876
+ return {};
728
877
  }
729
878
  /**
879
+ * Do not override this method in derivatives of UI5Element, use metadata properties instead
730
880
  * @private
731
881
  */
732
- static _needsShadowDOM() {
733
- return !!this.template || Object.prototype.hasOwnProperty.call(this.prototype, "render");
882
+ static get observedAttributes() {
883
+ return this.getMetadata().getAttributesList();
734
884
  }
735
885
  /**
886
+ * Returns all tags, used inside component's template subject to scoping.
887
+ * returns {Array[]} // TODO add @
736
888
  * @private
737
889
  */
738
- static _needsStaticArea() {
739
- return !!this.staticAreaTemplate || Object.prototype.hasOwnProperty.call(this.prototype, "renderStatic");
890
+ static get tagsToScope() {
891
+ const componentTag = this.getMetadata().getPureTag();
892
+ const tagsToScope = this.getUniqueDependencies().map((dep) => dep.getMetadata().getPureTag()).filter(shouldScopeCustomElement);
893
+ if (shouldScopeCustomElement(componentTag)) {
894
+ tagsToScope.push(componentTag);
895
+ }
896
+ return tagsToScope;
740
897
  }
741
898
  /**
742
- * @public
899
+ * @private
743
900
  */
744
- getStaticAreaItemDomRef() {
745
- if (!this.constructor._needsStaticArea()) {
746
- throw new Error("This component does not use the static area");
747
- }
748
- if (!this.staticAreaItem) {
749
- this.staticAreaItem = StaticAreaItem.createInstance();
750
- this.staticAreaItem.setOwnerElement(this);
751
- }
752
- if (!this.staticAreaItem.parentElement) {
753
- getSingletonElementInstance("ui5-static-area").appendChild(this.staticAreaItem);
754
- }
755
- return this.staticAreaItem.getDomRef();
901
+ static _needsShadowDOM() {
902
+ return !!this.template || Object.prototype.hasOwnProperty.call(this.prototype, "render");
756
903
  }
757
904
  /**
758
905
  * @private
@@ -766,66 +913,56 @@ class UI5Element extends HTMLElement {
766
913
  if (!isValidPropertyName(prop)) {
767
914
  console.warn(`"${prop}" is not a valid property name. Use a name that does not collide with DOM APIs`); /* eslint-disable-line */
768
915
  }
769
- if (propData.type === Boolean && propData.defaultValue) {
770
- throw new Error(`Cannot set a default value for property "${prop}". All booleans are false by default.`);
771
- }
772
- if (propData.type === Array) {
773
- throw new Error(`Wrong type for property "${prop}". Properties cannot be of type Array - use "multiple: true" and set "type" to the single value type, such as "String", "Object", etc...`);
916
+ const descriptor = getPropertyDescriptor(proto, prop);
917
+ // if the decorator is on a setter, proxy the new setter to it
918
+ let origSet;
919
+ if (descriptor?.set) {
920
+ // eslint-disable-next-line @typescript-eslint/unbound-method
921
+ origSet = descriptor.set;
774
922
  }
775
- if (propData.type === Object && propData.defaultValue) {
776
- throw new Error(`Cannot set a default value for property "${prop}". All properties of type "Object" are empty objects by default.`);
777
- }
778
- if (propData.multiple && propData.defaultValue) {
779
- throw new Error(`Cannot set a default value for property "${prop}". All multiple properties are empty arrays by default.`);
923
+ // if the decorator is on a setter, there will be a corresponding getter - proxy the new getter to it
924
+ let origGet;
925
+ if (descriptor?.get) {
926
+ // eslint-disable-next-line @typescript-eslint/unbound-method
927
+ origGet = descriptor.get;
780
928
  }
781
929
  Object.defineProperty(proto, prop, {
782
930
  get() {
783
- if (this._state[prop] !== undefined) {
784
- return this._state[prop];
785
- }
786
- const propDefaultValue = propData.defaultValue;
787
- if (propData.type === Boolean) {
788
- return false;
789
- }
790
- else if (propData.type === String) { // eslint-disable-line
791
- return propDefaultValue;
792
- }
793
- else if (propData.multiple) { // eslint-disable-line
794
- return [];
795
- }
796
- else {
797
- return propDefaultValue;
931
+ // proxy the getter to the original accessor if there was one
932
+ if (origGet) {
933
+ return origGet.call(this);
798
934
  }
935
+ return this._state[prop];
799
936
  },
800
937
  set(value) {
801
- let isDifferent;
802
938
  const ctor = this.constructor;
803
- const metadataCtor = ctor.getMetadata().constructor;
804
- value = metadataCtor.validatePropertyValue(value, propData);
805
- const propertyType = propData.type;
806
- let propertyValidator = propData.validator;
807
- const oldState = this._state[prop];
808
- if (propertyType && propertyType.isDataTypeClass) {
809
- propertyValidator = propertyType;
810
- }
811
- if (propertyValidator) {
812
- isDifferent = !propertyValidator.valuesAreEqual(oldState, value);
813
- }
814
- else if (Array.isArray(oldState) && Array.isArray(value) && propData.multiple && propData.compareValues) { // compareValues is added for IE, test if needed now
815
- isDifferent = !arraysAreEqual(oldState, value);
816
- }
817
- else {
818
- isDifferent = oldState !== value;
819
- }
939
+ const oldState = origGet ? origGet.call(this) : this._state[prop];
940
+ const isDifferent = oldState !== value;
820
941
  if (isDifferent) {
821
- this._state[prop] = value;
942
+ // if the decorator is on a setter, use it for storage
943
+ if (origSet) {
944
+ origSet.call(this, value);
945
+ }
946
+ else {
947
+ this._state[prop] = value;
948
+ }
822
949
  _invalidate.call(this, {
823
950
  type: "property",
824
951
  name: prop,
825
952
  newValue: value,
826
953
  oldValue: oldState,
827
954
  });
828
- this._updateAttribute(prop, value);
955
+ if (this._rendered) {
956
+ // the component is already rendered, indicating it is not the constructor -
957
+ // therefore the attribute can be set synchronously.
958
+ // get the effective value of the property,
959
+ // as it might differ from the provided value
960
+ const newValue = origGet ? origGet.call(this) : this._state[prop];
961
+ this._updateAttribute(prop, newValue);
962
+ }
963
+ if (ctor.getMetadata().isFormAssociated()) {
964
+ setFormValue(this);
965
+ }
829
966
  }
830
967
  },
831
968
  });
@@ -838,7 +975,7 @@ class UI5Element extends HTMLElement {
838
975
  console.warn(`"${slotName}" is not a valid property name. Use a name that does not collide with DOM APIs`); /* eslint-disable-line */
839
976
  }
840
977
  const propertyName = slotData.propertyName || slotName;
841
- Object.defineProperty(proto, propertyName, {
978
+ const propertyDescriptor = {
842
979
  get() {
843
980
  if (this._state[propertyName] !== undefined) {
844
981
  return this._state[propertyName];
@@ -848,34 +985,29 @@ class UI5Element extends HTMLElement {
848
985
  set() {
849
986
  throw new Error("Cannot set slot content directly, use the DOM APIs (appendChild, removeChild, etc...)");
850
987
  },
851
- });
988
+ };
989
+ Object.defineProperty(proto, propertyName, propertyDescriptor);
990
+ if (propertyName !== kebabToCamelCase(propertyName)) {
991
+ Object.defineProperty(proto, kebabToCamelCase(propertyName), propertyDescriptor);
992
+ }
852
993
  }
853
994
  }
854
995
  }
855
- /**
856
- * Returns the CSS for this UI5 Web Component Class
857
- * @protected
858
- */
859
- static get styles() {
860
- return "";
861
- }
862
- /**
863
- * Returns the Static Area CSS for this UI5 Web Component Class
864
- * @protected
865
- */
866
- static get staticAreaStyles() {
867
- return "";
868
- }
869
996
  /**
870
997
  * Returns an array with the dependencies for this UI5 Web Component, which could be:
871
- * - composed components (used in its shadow root or static area item)
998
+ * - composed components (used in its shadow root)
872
999
  * - slotted components that the component may need to communicate with
873
1000
  *
1001
+ * @deprecated no longer necessary for jsxRenderer-enabled components
874
1002
  * @protected
875
1003
  */
876
1004
  static get dependencies() {
877
1005
  return [];
878
1006
  }
1007
+ static cacheUniqueDependencies() {
1008
+ const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
1009
+ uniqueDependenciesCache.set(this, filtered);
1010
+ }
879
1011
  /**
880
1012
  * Returns a list of the unique dependencies for this UI5 Web Component
881
1013
  *
@@ -883,39 +1015,54 @@ class UI5Element extends HTMLElement {
883
1015
  */
884
1016
  static getUniqueDependencies() {
885
1017
  if (!uniqueDependenciesCache.has(this)) {
886
- const filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);
887
- uniqueDependenciesCache.set(this, filtered);
1018
+ this.cacheUniqueDependencies();
888
1019
  }
889
1020
  return uniqueDependenciesCache.get(this) || [];
890
1021
  }
891
- /**
892
- * Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved
893
- *
894
- * @returns {Promise}
895
- */
896
- static whenDependenciesDefined() {
897
- return Promise.all(this.getUniqueDependencies().map(dep => dep.define()));
898
- }
899
1022
  /**
900
1023
  * Hook that will be called upon custom element definition
901
1024
  *
902
1025
  * @protected
903
- * @returns {Promise<void>}
1026
+ * @deprecated use the "i18n" decorator for fetching message bundles and the "cldr" option in the "customElements" decorator for fetching CLDR
904
1027
  */
905
1028
  static async onDefine() {
906
1029
  return Promise.resolve();
907
1030
  }
1031
+ static fetchI18nBundles() {
1032
+ return Promise.all(Object.entries(this.getMetadata().getI18n()).map(pair => {
1033
+ const { bundleName } = pair[1];
1034
+ return getI18nBundle(bundleName);
1035
+ }));
1036
+ }
1037
+ static fetchCLDR() {
1038
+ if (this.getMetadata().needsCLDR()) {
1039
+ return fetchCldr(getLocale().getLanguage(), getLocale().getRegion(), getLocale().getScript());
1040
+ }
1041
+ return Promise.resolve();
1042
+ }
1043
+ static get i18nBundles() {
1044
+ return this.i18nBundleStorage;
1045
+ }
908
1046
  /**
909
1047
  * Registers a UI5 Web Component in the browser window object
910
1048
  * @public
911
- * @returns {Promise<UI5Element>}
912
- */
913
- static async define() {
914
- await boot();
915
- await Promise.all([
916
- this.whenDependenciesDefined(),
917
- this.onDefine(),
918
- ]);
1049
+ */
1050
+ static define() {
1051
+ const defineSequence = async () => {
1052
+ await boot(); // boot must finish first, because it initializes configuration
1053
+ const result = await Promise.all([
1054
+ this.fetchI18nBundles(), // uses configuration
1055
+ this.fetchCLDR(),
1056
+ this.onDefine(),
1057
+ ]);
1058
+ const [i18nBundles] = result;
1059
+ Object.entries(this.getMetadata().getI18n()).forEach((pair, index) => {
1060
+ const bundleName = pair[1].bundleName;
1061
+ this.i18nBundleStorage[bundleName] = i18nBundles[index];
1062
+ });
1063
+ this.asyncFinished = true;
1064
+ };
1065
+ this.definePromise = defineSequence();
919
1066
  const tag = this.getMetadata().getTag();
920
1067
  const definedLocally = isTagRegistered(tag);
921
1068
  const definedGlobally = customElements.get(tag);
@@ -925,8 +1072,7 @@ class UI5Element extends HTMLElement {
925
1072
  else if (!definedGlobally) {
926
1073
  this._generateAccessors();
927
1074
  registerTag(tag);
928
- window.customElements.define(tag, this);
929
- preloadLinks(this);
1075
+ customElements.define(tag, this);
930
1076
  }
931
1077
  return this;
932
1078
  }
@@ -934,7 +1080,6 @@ class UI5Element extends HTMLElement {
934
1080
  * Returns an instance of UI5ElementMetadata.js representing this UI5 Web Component's full metadata (its and its parents')
935
1081
  * Note: not to be confused with the "get metadata()" method, which returns an object for this class's metadata only
936
1082
  * @public
937
- * @returns {UI5ElementMetadata}
938
1083
  */
939
1084
  static getMetadata() {
940
1085
  if (this.hasOwnProperty("_metadata")) { // eslint-disable-line
@@ -950,19 +1095,28 @@ class UI5Element extends HTMLElement {
950
1095
  this._metadata = new UI5ElementMetadata(mergedMetadata);
951
1096
  return this._metadata;
952
1097
  }
1098
+ get validity() { return this._internals.validity; }
1099
+ get validationMessage() { return this._internals.validationMessage; }
1100
+ checkValidity() { return this._internals.checkValidity(); }
1101
+ reportValidity() { return this._internals.reportValidity(); }
953
1102
  }
954
1103
  /**
955
1104
  * Returns the metadata object for this UI5 Web Component Class
956
1105
  * @protected
957
1106
  */
958
1107
  UI5Element.metadata = {};
1108
+ /**
1109
+ * Returns the CSS for this UI5 Web Component Class
1110
+ * @protected
1111
+ */
1112
+ UI5Element.styles = "";
1113
+ UI5Element.i18nBundleStorage = {};
959
1114
  /**
960
1115
  * Always use duck-typing to cover all runtimes on the page.
961
- * @returns {boolean}
962
1116
  */
963
1117
  const instanceOfUI5Element = (object) => {
964
1118
  return "isUI5Element" in object;
965
1119
  };
966
1120
  export default UI5Element;
967
- export { instanceOfUI5Element };
1121
+ export { instanceOfUI5Element, };
968
1122
  //# sourceMappingURL=UI5Element.js.map