@ui5/webcomponents-base 0.0.0-a3eca7ade → 0.0.0-a7032d86e

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 (665) hide show
  1. package/.eslintignore +1 -1
  2. package/CHANGELOG.md +219 -0
  3. package/README.md +28 -6
  4. package/bundle.esm.js +12 -10
  5. package/dist/AssetRegistry.d.ts +5 -0
  6. package/dist/AssetRegistry.js +2 -7
  7. package/dist/AssetRegistry.js.map +1 -0
  8. package/dist/Boot.d.ts +8 -0
  9. package/dist/Boot.js +29 -44
  10. package/dist/Boot.js.map +1 -0
  11. package/dist/CSP.d.ts +30 -0
  12. package/dist/CSP.js +16 -24
  13. package/dist/CSP.js.map +1 -0
  14. package/dist/CustomElementsRegistry.d.ts +5 -0
  15. package/dist/CustomElementsRegistry.js +66 -83
  16. package/dist/CustomElementsRegistry.js.map +1 -0
  17. package/dist/CustomElementsScope.d.ts +7 -0
  18. package/dist/CustomElementsScope.js +11 -108
  19. package/dist/CustomElementsScope.js.map +1 -0
  20. package/dist/CustomElementsScopeUtils.d.ts +55 -0
  21. package/dist/CustomElementsScopeUtils.js +90 -0
  22. package/dist/CustomElementsScopeUtils.js.map +1 -0
  23. package/dist/DOMObserver.d.ts +11 -0
  24. package/dist/DOMObserver.js +12 -54
  25. package/dist/DOMObserver.js.map +1 -0
  26. package/dist/Device.d.ts +12 -0
  27. package/dist/Device.js +54 -79
  28. package/dist/Device.js.map +1 -0
  29. package/dist/EventProvider.d.ts +25 -0
  30. package/dist/EventProvider.js +67 -82
  31. package/dist/EventProvider.js.map +1 -0
  32. package/dist/FeaturesRegistry.d.ts +3 -0
  33. package/dist/FeaturesRegistry.js +5 -10
  34. package/dist/FeaturesRegistry.js.map +1 -0
  35. package/dist/FontFace.d.ts +2 -0
  36. package/dist/FontFace.js +14 -19
  37. package/dist/FontFace.js.map +1 -0
  38. package/dist/InitialConfiguration.d.ts +22 -0
  39. package/dist/InitialConfiguration.js +112 -131
  40. package/dist/InitialConfiguration.js.map +1 -0
  41. package/dist/Keys.d.ts +57 -0
  42. package/dist/Keys.js +174 -276
  43. package/dist/Keys.js.map +1 -0
  44. package/dist/ManagedStyles.d.ts +8 -0
  45. package/dist/ManagedStyles.js +62 -68
  46. package/dist/ManagedStyles.js.map +1 -0
  47. package/dist/MarkedEvents.d.ts +9 -0
  48. package/dist/MarkedEvents.js +15 -0
  49. package/dist/MarkedEvents.js.map +1 -0
  50. package/dist/MediaRange.d.ts +37 -0
  51. package/dist/MediaRange.js +54 -65
  52. package/dist/MediaRange.js.map +1 -0
  53. package/dist/PropertiesFileFormat.d.ts +8 -0
  54. package/dist/PropertiesFileFormat.js +72 -82
  55. package/dist/PropertiesFileFormat.js.map +1 -0
  56. package/dist/Render.d.ts +47 -0
  57. package/dist/Render.js +81 -113
  58. package/dist/Render.js.map +1 -0
  59. package/dist/RenderQueue.d.ts +19 -0
  60. package/dist/RenderQueue.js +52 -62
  61. package/dist/RenderQueue.js.map +1 -0
  62. package/dist/Runtimes.d.ts +27 -0
  63. package/dist/Runtimes.js +49 -70
  64. package/dist/Runtimes.js.map +1 -0
  65. package/dist/StaticArea.d.ts +0 -0
  66. package/dist/StaticArea.js +4 -1
  67. package/dist/StaticArea.js.map +1 -0
  68. package/dist/StaticAreaItem.d.ts +36 -0
  69. package/dist/StaticAreaItem.js +85 -87
  70. package/dist/StaticAreaItem.js.map +1 -0
  71. package/dist/SystemCSSVars.d.ts +2 -0
  72. package/dist/SystemCSSVars.js +4 -5
  73. package/dist/SystemCSSVars.js.map +1 -0
  74. package/dist/Theming.d.ts +3 -0
  75. package/dist/Theming.js +1 -1
  76. package/dist/Theming.js.map +1 -0
  77. package/dist/UI5Element.d.ts +373 -0
  78. package/dist/UI5Element.js +929 -985
  79. package/dist/UI5Element.js.map +1 -0
  80. package/dist/UI5ElementMetadata.d.ts +150 -0
  81. package/dist/UI5ElementMetadata.js +278 -314
  82. package/dist/UI5ElementMetadata.js.map +1 -0
  83. package/dist/animations/AnimationQueue.d.ts +8 -0
  84. package/dist/animations/AnimationQueue.js +31 -38
  85. package/dist/animations/AnimationQueue.js.map +1 -0
  86. package/dist/animations/animate.d.ts +14 -0
  87. package/dist/animations/animate.js +46 -51
  88. package/dist/animations/animate.js.map +1 -0
  89. package/dist/animations/scroll.d.ts +5 -0
  90. package/dist/animations/scroll.js +18 -27
  91. package/dist/animations/scroll.js.map +1 -0
  92. package/dist/animations/slideDown.d.ts +5 -0
  93. package/dist/animations/slideDown.js +53 -78
  94. package/dist/animations/slideDown.js.map +1 -0
  95. package/dist/animations/slideUp.d.ts +5 -0
  96. package/dist/animations/slideUp.js +49 -70
  97. package/dist/animations/slideUp.js.map +1 -0
  98. package/dist/api.json +1 -0
  99. package/dist/asset-registries/Icons.d.ts +30 -0
  100. package/dist/asset-registries/Icons.js +86 -121
  101. package/dist/asset-registries/Icons.js.map +1 -0
  102. package/dist/asset-registries/Illustrations.d.ts +17 -0
  103. package/dist/asset-registries/Illustrations.js +41 -25
  104. package/dist/asset-registries/Illustrations.js.map +1 -0
  105. package/dist/asset-registries/LocaleData.d.ts +7 -0
  106. package/dist/asset-registries/LocaleData.js +104 -127
  107. package/dist/asset-registries/LocaleData.js.map +1 -0
  108. package/dist/asset-registries/Themes.d.ts +10 -0
  109. package/dist/asset-registries/Themes.js +38 -66
  110. package/dist/asset-registries/Themes.js.map +1 -0
  111. package/dist/asset-registries/i18n.d.ts +23 -0
  112. package/dist/asset-registries/i18n.js +55 -81
  113. package/dist/asset-registries/i18n.js.map +1 -0
  114. package/dist/assets/bundle.esm.0cfce34f.js +56 -0
  115. package/dist/assets-meta/IconCollectionsAlias.d.ts +17 -0
  116. package/dist/assets-meta/IconCollectionsAlias.js +4 -4
  117. package/dist/assets-meta/IconCollectionsAlias.js.map +1 -0
  118. package/dist/config/AnimationMode.d.ts +14 -0
  119. package/dist/config/AnimationMode.js +21 -18
  120. package/dist/config/AnimationMode.js.map +1 -0
  121. package/dist/config/CalendarType.d.ts +8 -0
  122. package/dist/config/CalendarType.js +13 -12
  123. package/dist/config/CalendarType.js.map +1 -0
  124. package/dist/config/FormatSettings.d.ts +11 -0
  125. package/dist/config/FormatSettings.js +10 -8
  126. package/dist/config/FormatSettings.js.map +1 -0
  127. package/dist/config/Icons.d.ts +30 -0
  128. package/dist/config/Icons.js +48 -0
  129. package/dist/config/Icons.js.map +1 -0
  130. package/dist/config/Language.d.ts +31 -0
  131. package/dist/config/Language.js +31 -43
  132. package/dist/config/Language.js.map +1 -0
  133. package/dist/config/NoConflict.d.ts +20 -0
  134. package/dist/config/NoConflict.js +40 -41
  135. package/dist/config/NoConflict.js.map +1 -0
  136. package/dist/config/RTL.d.ts +7 -0
  137. package/dist/config/RTL.js +23 -20
  138. package/dist/config/RTL.js.map +1 -0
  139. package/dist/config/Theme.d.ts +28 -0
  140. package/dist/config/Theme.js +38 -29
  141. package/dist/config/Theme.js.map +1 -0
  142. package/dist/config/ThemeRoots.d.ts +4 -0
  143. package/dist/config/ThemeRoots.js +28 -0
  144. package/dist/config/ThemeRoots.js.map +1 -0
  145. package/dist/css/BusyIndicator.css +80 -0
  146. package/dist/css/FontFace.css +31 -10
  147. package/dist/decorators/customElement.d.ts +8 -0
  148. package/dist/decorators/customElement.js +16 -0
  149. package/dist/decorators/customElement.js.map +1 -0
  150. package/dist/decorators/event.d.ts +10 -0
  151. package/dist/decorators/event.js +24 -0
  152. package/dist/decorators/event.js.map +1 -0
  153. package/dist/decorators/fastNavigation.d.ts +7 -0
  154. package/dist/decorators/fastNavigation.js +13 -0
  155. package/dist/decorators/fastNavigation.js.map +1 -0
  156. package/dist/decorators/languageAware.d.ts +7 -0
  157. package/dist/decorators/languageAware.js +13 -0
  158. package/dist/decorators/languageAware.js.map +1 -0
  159. package/dist/decorators/property.d.ts +9 -0
  160. package/dist/decorators/property.js +24 -0
  161. package/dist/decorators/property.js.map +1 -0
  162. package/dist/decorators/slot.d.ts +9 -0
  163. package/dist/decorators/slot.js +37 -0
  164. package/dist/decorators/slot.js.map +1 -0
  165. package/dist/decorators/themeAware.d.ts +7 -0
  166. package/dist/decorators/themeAware.js +13 -0
  167. package/dist/decorators/themeAware.js.map +1 -0
  168. package/dist/delegate/ItemNavigation.d.ts +113 -0
  169. package/dist/delegate/ItemNavigation.js +277 -312
  170. package/dist/delegate/ItemNavigation.js.map +1 -0
  171. package/dist/delegate/ResizeHandler.d.ts +24 -0
  172. package/dist/delegate/ResizeHandler.js +68 -91
  173. package/dist/delegate/ResizeHandler.js.map +1 -0
  174. package/dist/delegate/ScrollEnablement.d.ts +48 -0
  175. package/dist/delegate/ScrollEnablement.js +157 -180
  176. package/dist/delegate/ScrollEnablement.js.map +1 -0
  177. package/dist/features/F6Navigation.d.ts +16 -0
  178. package/dist/features/F6Navigation.js +106 -100
  179. package/dist/features/F6Navigation.js.map +1 -0
  180. package/dist/features/OpenUI5Element.d.ts +9 -0
  181. package/dist/features/OpenUI5Element.js +5 -0
  182. package/dist/features/OpenUI5Element.js.map +1 -0
  183. package/dist/features/OpenUI5Enablement.d.ts +11 -0
  184. package/dist/features/OpenUI5Enablement.js +96 -0
  185. package/dist/features/OpenUI5Enablement.js.map +1 -0
  186. package/dist/features/OpenUI5Support.d.ts +23 -0
  187. package/dist/features/OpenUI5Support.js +91 -119
  188. package/dist/features/OpenUI5Support.js.map +1 -0
  189. package/dist/generated/AssetParameters.js +1 -1
  190. package/dist/generated/VersionInfo.js +3 -3
  191. package/dist/generated/css/BusyIndicator.css.js +5 -0
  192. package/dist/generated/css/FontFace.css.js +1 -1
  193. package/dist/generated/templates/elements/WithComplexTemplateTemplate.lit.js +11 -0
  194. package/dist/getSharedResource.d.ts +11 -0
  195. package/dist/getSharedResource.js +12 -16
  196. package/dist/getSharedResource.js.map +1 -0
  197. package/dist/i18nBundle.d.ts +43 -0
  198. package/dist/i18nBundle.js +56 -64
  199. package/dist/i18nBundle.js.map +1 -0
  200. package/dist/locale/Locale.d.ts +22 -0
  201. package/dist/locale/Locale.js +75 -87
  202. package/dist/locale/Locale.js.map +1 -0
  203. package/dist/locale/RTLAwareRegistry.d.ts +4 -0
  204. package/dist/locale/RTLAwareRegistry.js +6 -11
  205. package/dist/locale/RTLAwareRegistry.js.map +1 -0
  206. package/dist/locale/applyDirection.d.ts +10 -0
  207. package/dist/locale/applyDirection.js +7 -7
  208. package/dist/locale/applyDirection.js.map +1 -0
  209. package/dist/locale/directionChange.d.ts +15 -0
  210. package/dist/locale/directionChange.js +7 -15
  211. package/dist/locale/directionChange.js.map +1 -0
  212. package/dist/locale/getEffectiveDir.d.ts +2 -0
  213. package/dist/locale/getEffectiveDir.js +20 -24
  214. package/dist/locale/getEffectiveDir.js.map +1 -0
  215. package/dist/locale/getLocale.d.ts +7 -0
  216. package/dist/locale/getLocale.js +26 -29
  217. package/dist/locale/getLocale.js.map +1 -0
  218. package/dist/locale/languageChange.d.ts +5 -0
  219. package/dist/locale/languageChange.js +8 -16
  220. package/dist/locale/languageChange.js.map +1 -0
  221. package/dist/locale/nextFallbackLocale.d.ts +8 -0
  222. package/dist/locale/nextFallbackLocale.js +15 -19
  223. package/dist/locale/nextFallbackLocale.js.map +1 -0
  224. package/dist/locale/normalizeLocale.d.ts +7 -0
  225. package/dist/locale/normalizeLocale.js +34 -41
  226. package/dist/locale/normalizeLocale.js.map +1 -0
  227. package/dist/renderer/LitRenderer.d.ts +14 -0
  228. package/dist/renderer/LitRenderer.js +31 -24
  229. package/dist/renderer/LitRenderer.js.map +1 -0
  230. package/dist/renderer/executeTemplate.d.ts +13 -0
  231. package/dist/renderer/executeTemplate.js +20 -7
  232. package/dist/renderer/executeTemplate.js.map +1 -0
  233. package/dist/sap/base/Log.js +28 -29
  234. package/dist/sap/base/assert.js +5 -6
  235. package/dist/sap/base/security/URLListValidator.js +13 -2
  236. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
  237. package/dist/theming/CustomStyle.d.ts +6 -0
  238. package/dist/theming/CustomStyle.js +29 -43
  239. package/dist/theming/CustomStyle.js.map +1 -0
  240. package/dist/theming/ThemeLoaded.d.ts +5 -0
  241. package/dist/theming/ThemeLoaded.js +8 -16
  242. package/dist/theming/ThemeLoaded.js.map +1 -0
  243. package/dist/theming/applyTheme.d.ts +2 -0
  244. package/dist/theming/applyTheme.js +60 -64
  245. package/dist/theming/applyTheme.js.map +1 -0
  246. package/dist/theming/getConstructableStyle.d.ts +9 -0
  247. package/dist/theming/getConstructableStyle.js +12 -17
  248. package/dist/theming/getConstructableStyle.js.map +1 -0
  249. package/dist/theming/getEffectiveLinksHrefs.d.ts +3 -0
  250. package/dist/theming/getEffectiveLinksHrefs.js +13 -16
  251. package/dist/theming/getEffectiveLinksHrefs.js.map +1 -0
  252. package/dist/theming/getEffectiveStyle.d.ts +3 -0
  253. package/dist/theming/getEffectiveStyle.js +25 -23
  254. package/dist/theming/getEffectiveStyle.js.map +1 -0
  255. package/dist/theming/getStylesString.d.ts +3 -0
  256. package/dist/theming/getStylesString.js +9 -13
  257. package/dist/theming/getStylesString.js.map +1 -0
  258. package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
  259. package/dist/theming/getThemeDesignerTheme.js +72 -79
  260. package/dist/theming/getThemeDesignerTheme.js.map +1 -0
  261. package/dist/theming/preloadLinks.d.ts +3 -0
  262. package/dist/theming/preloadLinks.js +13 -17
  263. package/dist/theming/preloadLinks.js.map +1 -0
  264. package/dist/thirdparty/_merge.d.ts +2 -0
  265. package/dist/thirdparty/_merge.js +7 -4
  266. package/dist/thirdparty/_merge.js.map +1 -0
  267. package/dist/thirdparty/isPlainObject.d.ts +2 -0
  268. package/dist/thirdparty/isPlainObject.js +11 -10
  269. package/dist/thirdparty/isPlainObject.js.map +1 -0
  270. package/dist/thirdparty/merge.d.ts +2 -0
  271. package/dist/thirdparty/merge.js +4 -8
  272. package/dist/thirdparty/merge.js.map +1 -0
  273. package/dist/types/AnimationMode.d.ts +32 -0
  274. package/dist/types/AnimationMode.js +33 -6
  275. package/dist/types/AnimationMode.js.map +1 -0
  276. package/dist/types/CSSColor.d.ts +16 -0
  277. package/dist/types/CSSColor.js +15 -5
  278. package/dist/types/CSSColor.js.map +1 -0
  279. package/dist/types/CalendarType.d.ts +37 -0
  280. package/dist/types/CalendarType.js +35 -18
  281. package/dist/types/CalendarType.js.map +1 -0
  282. package/dist/types/DOMReference.d.ts +17 -0
  283. package/dist/types/DOMReference.js +25 -0
  284. package/dist/types/DOMReference.js.map +1 -0
  285. package/dist/types/DataType.d.ts +25 -0
  286. package/dist/types/DataType.js +33 -26
  287. package/dist/types/DataType.js.map +1 -0
  288. package/dist/types/Float.d.ts +18 -0
  289. package/dist/types/Float.js +18 -10
  290. package/dist/types/Float.js.map +1 -0
  291. package/dist/types/Integer.d.ts +18 -0
  292. package/dist/types/Integer.js +18 -9
  293. package/dist/types/Integer.js.map +1 -0
  294. package/dist/types/InvisibleMessageMode.d.ts +25 -0
  295. package/dist/types/InvisibleMessageMode.js +20 -23
  296. package/dist/types/InvisibleMessageMode.js.map +1 -0
  297. package/dist/types/ItemNavigationBehavior.d.ts +24 -0
  298. package/dist/types/ItemNavigationBehavior.js +22 -12
  299. package/dist/types/ItemNavigationBehavior.js.map +1 -0
  300. package/dist/types/NavigationMode.d.ts +32 -0
  301. package/dist/types/NavigationMode.js +33 -6
  302. package/dist/types/NavigationMode.js.map +1 -0
  303. package/dist/types/ValueState.d.ts +42 -0
  304. package/dist/types/ValueState.js +41 -19
  305. package/dist/types/ValueState.js.map +1 -0
  306. package/dist/types.d.ts +18 -0
  307. package/dist/types.js +2 -0
  308. package/dist/types.js.map +1 -0
  309. package/dist/updateShadowRoot.d.ts +8 -0
  310. package/dist/updateShadowRoot.js +21 -17
  311. package/dist/updateShadowRoot.js.map +1 -0
  312. package/dist/util/AriaLabelHelper.d.ts +6 -0
  313. package/dist/util/AriaLabelHelper.js +37 -34
  314. package/dist/util/AriaLabelHelper.js.map +1 -0
  315. package/dist/util/Caret.d.ts +7 -0
  316. package/dist/util/Caret.js +16 -38
  317. package/dist/util/Caret.js.map +1 -0
  318. package/dist/util/ColorConversion.d.ts +30 -0
  319. package/dist/util/ColorConversion.js +315 -348
  320. package/dist/util/ColorConversion.js.map +1 -0
  321. package/dist/util/FetchHelper.d.ts +3 -0
  322. package/dist/util/FetchHelper.js +19 -25
  323. package/dist/util/FetchHelper.js.map +1 -0
  324. package/dist/util/FocusableElements.d.ts +4 -0
  325. package/dist/util/FocusableElements.js +54 -71
  326. package/dist/util/FocusableElements.js.map +1 -0
  327. package/dist/util/HTMLSanitizer.d.ts +3 -0
  328. package/dist/util/HTMLSanitizer.js +4 -5
  329. package/dist/util/HTMLSanitizer.js.map +1 -0
  330. package/dist/util/InvisibleMessage.d.ts +10 -0
  331. package/dist/util/InvisibleMessage.js +41 -45
  332. package/dist/util/InvisibleMessage.js.map +1 -0
  333. package/dist/util/PopupUtils.d.ts +7 -0
  334. package/dist/util/PopupUtils.js +58 -77
  335. package/dist/util/PopupUtils.js.map +1 -0
  336. package/dist/util/SlotsHelper.d.ts +9 -0
  337. package/dist/util/SlotsHelper.js +22 -35
  338. package/dist/util/SlotsHelper.js.map +1 -0
  339. package/dist/util/StringHelper.d.ts +3 -0
  340. package/dist/util/StringHelper.js +17 -20
  341. package/dist/util/StringHelper.js.map +1 -0
  342. package/dist/util/TabbableElements.d.ts +17 -0
  343. package/dist/util/TabbableElements.js +53 -47
  344. package/dist/util/TabbableElements.js.map +1 -0
  345. package/dist/util/arraysAreEqual.d.ts +2 -0
  346. package/dist/util/arraysAreEqual.js +10 -12
  347. package/dist/util/arraysAreEqual.js.map +1 -0
  348. package/dist/util/clamp.d.ts +9 -0
  349. package/dist/util/clamp.js +2 -2
  350. package/dist/util/clamp.js.map +1 -0
  351. package/dist/util/createLinkInHead.d.ts +7 -0
  352. package/dist/util/createLinkInHead.js +14 -12
  353. package/dist/util/createLinkInHead.js.map +1 -0
  354. package/dist/util/createStyleInHead.d.ts +8 -0
  355. package/dist/util/createStyleInHead.js +10 -10
  356. package/dist/util/createStyleInHead.js.map +1 -0
  357. package/dist/util/debounce.d.ts +2 -0
  358. package/dist/util/debounce.js +6 -8
  359. package/dist/util/debounce.js.map +1 -0
  360. package/dist/util/detectNavigatorLanguage.d.ts +2 -0
  361. package/dist/util/detectNavigatorLanguage.js +7 -10
  362. package/dist/util/detectNavigatorLanguage.js.map +1 -0
  363. package/dist/util/escapeRegex.d.ts +8 -0
  364. package/dist/util/escapeRegex.js +8 -7
  365. package/dist/util/escapeRegex.js.map +1 -0
  366. package/dist/util/formatMessage.d.ts +2 -0
  367. package/dist/util/formatMessage.js +15 -19
  368. package/dist/util/formatMessage.js.map +1 -0
  369. package/dist/util/generateHighlightedMarkup.d.ts +9 -0
  370. package/dist/util/generateHighlightedMarkup.js +26 -27
  371. package/dist/util/generateHighlightedMarkup.js.map +1 -0
  372. package/dist/util/getActiveElement.d.ts +2 -0
  373. package/dist/util/getActiveElement.js +6 -8
  374. package/dist/util/getActiveElement.js.map +1 -0
  375. package/dist/util/getClassCopy.d.ts +400 -0
  376. package/dist/util/getClassCopy.js +7 -7
  377. package/dist/util/getClassCopy.js.map +1 -0
  378. package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
  379. package/dist/util/getDesigntimePropertyAsArray.js +4 -3
  380. package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
  381. package/dist/util/getEffectiveContentDensity.d.ts +2 -0
  382. package/dist/util/getEffectiveContentDensity.js +2 -3
  383. package/dist/util/getEffectiveContentDensity.js.map +1 -0
  384. package/dist/util/getEffectiveScrollbarStyle.d.ts +2 -0
  385. package/dist/util/getEffectiveScrollbarStyle.js +4 -0
  386. package/dist/util/getEffectiveScrollbarStyle.js.map +1 -0
  387. package/dist/util/getFastNavigationGroups.d.ts +2 -0
  388. package/dist/util/getFastNavigationGroups.js +51 -0
  389. package/dist/util/getFastNavigationGroups.js.map +1 -0
  390. package/dist/util/getFileExtension.d.ts +12 -0
  391. package/dist/util/getFileExtension.js +9 -11
  392. package/dist/util/getFileExtension.js.map +1 -0
  393. package/dist/util/getNormalizedTarget.d.ts +7 -0
  394. package/dist/util/getNormalizedTarget.js +14 -0
  395. package/dist/util/getNormalizedTarget.js.map +1 -0
  396. package/dist/util/getSingletonElementInstance.d.ts +2 -0
  397. package/dist/util/getSingletonElementInstance.js +7 -10
  398. package/dist/util/getSingletonElementInstance.js.map +1 -0
  399. package/dist/util/isElementClickable.d.ts +2 -0
  400. package/dist/util/isElementClickable.js +16 -0
  401. package/dist/util/isElementClickable.js.map +1 -0
  402. package/dist/util/isElementHidden.d.ts +2 -0
  403. package/dist/util/isElementHidden.js +8 -0
  404. package/dist/util/isElementHidden.js.map +1 -0
  405. package/dist/util/isElementInView.d.ts +6 -0
  406. package/dist/util/isElementInView.js +6 -9
  407. package/dist/util/isElementInView.js.map +1 -0
  408. package/dist/util/isElementTabbable.d.ts +9 -0
  409. package/dist/util/isElementTabbable.js +30 -0
  410. package/dist/util/isElementTabbable.js.map +1 -0
  411. package/dist/util/isValidPropertyName.d.ts +8 -0
  412. package/dist/util/isValidPropertyName.js +16 -17
  413. package/dist/util/isValidPropertyName.js.map +1 -0
  414. package/dist/util/whenDOMReady.d.ts +2 -0
  415. package/dist/util/whenDOMReady.js +11 -10
  416. package/dist/util/whenDOMReady.js.map +1 -0
  417. package/dist/util/willShowContent.d.ts +2 -0
  418. package/dist/util/willShowContent.js +7 -0
  419. package/dist/util/willShowContent.js.map +1 -0
  420. package/dist/validateThemeRoot.d.ts +2 -0
  421. package/dist/validateThemeRoot.js +47 -0
  422. package/dist/validateThemeRoot.js.map +1 -0
  423. package/global.d.ts +44 -0
  424. package/lib/generate-asset-parameters/index.js +8 -4
  425. package/lib/generate-styles/index.js +17 -9
  426. package/lib/generate-version-info/index.js +18 -13
  427. package/package-scripts.js +29 -29
  428. package/package.json +7 -6
  429. package/src/{AssetRegistry.js → AssetRegistry.ts} +0 -0
  430. package/src/Boot.ts +61 -0
  431. package/src/{CSP.js → CSP.ts} +14 -7
  432. package/src/{CustomElementsRegistry.js → CustomElementsRegistry.ts} +20 -17
  433. package/src/CustomElementsScope.ts +33 -0
  434. package/src/{CustomElementsScope.js → CustomElementsScopeUtils.ts} +14 -7
  435. package/src/DOMObserver.ts +28 -0
  436. package/src/{Device.js → Device.ts} +21 -13
  437. package/src/{EventProvider.js → EventProvider.ts} +9 -7
  438. package/src/FeaturesRegistry.ts +14 -0
  439. package/src/{FontFace.js → FontFace.ts} +3 -2
  440. package/src/{InitialConfiguration.js → InitialConfiguration.ts} +53 -12
  441. package/src/Keys.ts +295 -0
  442. package/src/ManagedStyles.ts +92 -0
  443. package/src/MarkedEvents.ts +20 -0
  444. package/src/{MediaRange.js → MediaRange.ts} +54 -53
  445. package/src/{PropertiesFileFormat.js → PropertiesFileFormat.ts} +8 -8
  446. package/src/{Render.js → Render.ts} +25 -20
  447. package/src/{RenderQueue.js → RenderQueue.ts} +10 -5
  448. package/src/{Runtimes.js → Runtimes.ts} +15 -8
  449. package/src/{StaticArea.js → StaticArea.ts} +0 -0
  450. package/src/{StaticAreaItem.js → StaticAreaItem.ts} +31 -19
  451. package/src/{SystemCSSVars.js → SystemCSSVars.ts} +0 -0
  452. package/src/{Theming.js → Theming.ts} +0 -0
  453. package/src/{UI5Element.js → UI5Element.ts} +280 -148
  454. package/src/{UI5ElementMetadata.js → UI5ElementMetadata.ts} +121 -59
  455. package/src/animations/{AnimationQueue.js → AnimationQueue.ts} +8 -7
  456. package/src/animations/animate.ts +64 -0
  457. package/src/animations/scroll.ts +21 -0
  458. package/src/animations/{slideDown.js → slideDown.ts} +27 -34
  459. package/src/animations/{slideUp.js → slideUp.ts} +28 -32
  460. package/src/asset-registries/Icons.ts +162 -0
  461. package/src/asset-registries/Illustrations.ts +75 -0
  462. package/src/asset-registries/{LocaleData.js → LocaleData.ts} +42 -29
  463. package/src/asset-registries/Themes.ts +67 -0
  464. package/src/asset-registries/{i18n.js → i18n.ts} +21 -24
  465. package/src/assets-meta/{IconCollectionsAlias.js → IconCollectionsAlias.ts} +0 -0
  466. package/src/config/AnimationMode.ts +33 -0
  467. package/src/config/{CalendarType.js → CalendarType.ts} +8 -3
  468. package/src/config/FormatSettings.ts +21 -0
  469. package/src/config/Icons.ts +59 -0
  470. package/src/config/{Language.js → Language.ts} +22 -18
  471. package/src/config/NoConflict.ts +67 -0
  472. package/src/config/{RTL.js → RTL.ts} +14 -4
  473. package/src/config/Theme.ts +64 -0
  474. package/src/config/ThemeRoots.ts +41 -0
  475. package/src/css/BusyIndicator.css +80 -0
  476. package/src/css/FontFace.css +31 -10
  477. package/src/decorators/customElement.ts +17 -0
  478. package/src/decorators/event.ts +28 -0
  479. package/src/decorators/fastNavigation.ts +14 -0
  480. package/src/decorators/languageAware.ts +14 -0
  481. package/src/decorators/property.ts +30 -0
  482. package/src/decorators/slot.ts +49 -0
  483. package/src/decorators/themeAware.ts +14 -0
  484. package/src/delegate/{ItemNavigation.js → ItemNavigation.ts} +65 -23
  485. package/src/delegate/{ResizeHandler.js → ResizeHandler.ts} +25 -36
  486. package/src/delegate/ScrollEnablement.ts +221 -0
  487. package/src/features/F6Navigation.ts +141 -0
  488. package/src/features/OpenUI5Element.ts +11 -0
  489. package/src/features/OpenUI5Enablement.ts +117 -0
  490. package/src/features/OpenUI5Support.ts +148 -0
  491. package/src/{getSharedResource.js → getSharedResource.ts} +3 -3
  492. package/src/{i18nBundle.js → i18nBundle.ts} +44 -22
  493. package/src/locale/{Locale.js → Locale.ts} +15 -5
  494. package/src/locale/RTLAwareRegistry.ts +16 -0
  495. package/src/locale/{applyDirection.js → applyDirection.ts} +4 -3
  496. package/src/locale/{directionChange.js → directionChange.ts} +6 -4
  497. package/src/locale/{getEffectiveDir.js → getEffectiveDir.ts} +1 -1
  498. package/src/locale/{getLocale.js → getLocale.ts} +12 -7
  499. package/src/locale/languageChange.ts +24 -0
  500. package/src/locale/{nextFallbackLocale.js → nextFallbackLocale.ts} +1 -1
  501. package/src/locale/{normalizeLocale.js → normalizeLocale.ts} +5 -3
  502. package/src/renderer/LitRenderer.ts +60 -0
  503. package/src/renderer/executeTemplate.ts +40 -0
  504. package/src/theming/{CustomStyle.js → CustomStyle.ts} +11 -9
  505. package/src/theming/{ThemeLoaded.js → ThemeLoaded.ts} +6 -4
  506. package/src/theming/{applyTheme.js → applyTheme.ts} +22 -11
  507. package/src/theming/{getConstructableStyle.js → getConstructableStyle.ts} +5 -4
  508. package/src/theming/getEffectiveLinksHrefs.ts +26 -0
  509. package/src/theming/{getEffectiveStyle.js → getEffectiveStyle.ts} +15 -4
  510. package/src/theming/getStylesString.ts +15 -0
  511. package/src/theming/{getThemeDesignerTheme.js → getThemeDesignerTheme.ts} +22 -8
  512. package/src/theming/{preloadLinks.js → preloadLinks.ts} +3 -2
  513. package/src/thirdparty/{_merge.js → _merge.ts} +2 -2
  514. package/src/thirdparty/{isPlainObject.js → isPlainObject.ts} +1 -1
  515. package/src/thirdparty/merge.ts +5 -0
  516. package/src/types/AnimationMode.ts +33 -0
  517. package/src/types/{CSSColor.js → CSSColor.ts} +12 -1
  518. package/src/types/CalendarType.ts +38 -0
  519. package/src/types/DOMReference.ts +28 -0
  520. package/src/types/DataType.ts +51 -0
  521. package/src/types/Float.ts +25 -0
  522. package/src/types/Integer.ts +25 -0
  523. package/src/types/InvisibleMessageMode.ts +27 -0
  524. package/src/types/ItemNavigationBehavior.ts +26 -0
  525. package/src/types/NavigationMode.ts +33 -0
  526. package/src/types/ValueState.ts +47 -0
  527. package/src/types.ts +30 -0
  528. package/src/updateShadowRoot.ts +37 -0
  529. package/src/util/AriaLabelHelper.ts +63 -0
  530. package/src/util/Caret.ts +28 -0
  531. package/src/util/ColorConversion.ts +399 -0
  532. package/src/util/{FetchHelper.js → FetchHelper.ts} +7 -7
  533. package/src/util/FocusableElements.ts +82 -0
  534. package/src/util/{HTMLSanitizer.js → HTMLSanitizer.ts} +2 -0
  535. package/src/util/{InvisibleMessage.js → InvisibleMessage.ts} +15 -6
  536. package/src/util/PopupUtils.ts +112 -0
  537. package/src/util/{SlotsHelper.js → SlotsHelper.ts} +9 -13
  538. package/src/util/{StringHelper.js → StringHelper.ts} +7 -7
  539. package/src/util/TabbableElements.ts +70 -0
  540. package/src/util/{arraysAreEqual.js → arraysAreEqual.ts} +1 -1
  541. package/src/util/{clamp.js → clamp.ts} +1 -1
  542. package/src/util/{createLinkInHead.js → createLinkInHead.ts} +10 -4
  543. package/src/util/{createStyleInHead.js → createStyleInHead.ts} +4 -2
  544. package/src/util/{debounce.js → debounce.ts} +5 -4
  545. package/src/util/{detectNavigatorLanguage.js → detectNavigatorLanguage.ts} +1 -1
  546. package/src/util/escapeRegex.ts +11 -0
  547. package/src/util/{formatMessage.js → formatMessage.ts} +4 -3
  548. package/src/util/{generateHighlightedMarkup.js → generateHighlightedMarkup.ts} +7 -6
  549. package/src/util/{getActiveElement.js → getActiveElement.ts} +0 -0
  550. package/src/util/{getClassCopy.js → getClassCopy.ts} +3 -1
  551. package/src/util/{getDesigntimePropertyAsArray.js → getDesigntimePropertyAsArray.ts} +1 -1
  552. package/src/util/getEffectiveContentDensity.ts +5 -0
  553. package/src/util/getEffectiveScrollbarStyle.ts +5 -0
  554. package/src/util/getFastNavigationGroups.ts +63 -0
  555. package/src/util/{getFileExtension.js → getFileExtension.ts} +3 -3
  556. package/src/util/getNormalizedTarget.ts +16 -0
  557. package/src/util/{getSingletonElementInstance.js → getSingletonElementInstance.ts} +1 -1
  558. package/src/util/isElementClickable.ts +19 -0
  559. package/src/util/isElementHidden.ts +9 -0
  560. package/src/util/{isElementInView.js → isElementInView.ts} +1 -1
  561. package/src/util/isElementTabbable.ts +37 -0
  562. package/src/util/{isValidPropertyName.js → isValidPropertyName.ts} +1 -1
  563. package/src/util/{whenDOMReady.js → whenDOMReady.ts} +1 -1
  564. package/src/util/willShowContent.ts +7 -0
  565. package/src/validateThemeRoot.ts +58 -0
  566. package/tsconfig.json +13 -0
  567. package/config/.eslintrc.js +0 -3
  568. package/config/rollup.config.js +0 -1
  569. package/dist/RenderScheduler.js +0 -44
  570. package/dist/animations/config.js +0 -5
  571. package/dist/isLegacyBrowser.js +0 -3
  572. package/dist/resources/bundle.esm.js +0 -37
  573. package/dist/resources/bundle.esm.js.map +0 -1
  574. package/dist/test-resources/assets/Themes.js +0 -17
  575. package/dist/test-resources/elements/Child.js +0 -35
  576. package/dist/test-resources/elements/Generic.js +0 -84
  577. package/dist/test-resources/elements/GenericExt.js +0 -26
  578. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  579. package/dist/test-resources/elements/Parent.js +0 -41
  580. package/dist/test-resources/elements/WithStaticArea.js +0 -77
  581. package/dist/test-resources/pages/AllTestElements.html +0 -42
  582. package/dist/test-resources/pages/Configuration.html +0 -18
  583. package/dist/test-resources/pages/ConfigurationScript.html +0 -34
  584. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  585. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  586. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  587. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  588. package/dist/test-resources/pages/i18n.html +0 -33
  589. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -27
  590. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -63
  591. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -93
  592. package/dist/test-resources/specs/CustomTheme.spec.js +0 -27
  593. package/dist/test-resources/specs/EventProvider.spec.js +0 -63
  594. package/dist/test-resources/specs/StaticArea.spec.js +0 -78
  595. package/dist/test-resources/specs/Theming.spec.js +0 -33
  596. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
  597. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
  598. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
  599. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
  600. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
  601. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
  602. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
  603. package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
  604. package/dist/types/CSSSize.js +0 -9
  605. package/dist/types/PopupState.js +0 -37
  606. package/dist/util/findNodeOwner.js +0 -35
  607. package/dist/util/isDescendantOf.js +0 -15
  608. package/dist/util/isNodeClickable.js +0 -19
  609. package/dist/util/isNodeHidden.js +0 -9
  610. package/dist/util/isNodeTabbable.js +0 -28
  611. package/dist/util/setToArray.js +0 -10
  612. package/hash.txt +0 -1
  613. package/src/Boot.js +0 -59
  614. package/src/DOMObserver.js +0 -65
  615. package/src/FeaturesRegistry.js +0 -14
  616. package/src/Keys.js +0 -280
  617. package/src/ManagedStyles.js +0 -83
  618. package/src/RenderScheduler.js +0 -44
  619. package/src/animations/animate.js +0 -53
  620. package/src/animations/config.js +0 -5
  621. package/src/animations/scroll.js +0 -28
  622. package/src/asset-registries/Icons.js +0 -139
  623. package/src/asset-registries/Illustrations.js +0 -30
  624. package/src/asset-registries/Themes.js +0 -78
  625. package/src/config/AnimationMode.js +0 -23
  626. package/src/config/FormatSettings.js +0 -13
  627. package/src/config/NoConflict.js +0 -51
  628. package/src/config/Theme.js +0 -42
  629. package/src/delegate/ScrollEnablement.js +0 -188
  630. package/src/features/F6Navigation.js +0 -106
  631. package/src/features/OpenUI5Support.js +0 -125
  632. package/src/isLegacyBrowser.js +0 -3
  633. package/src/locale/RTLAwareRegistry.js +0 -14
  634. package/src/locale/languageChange.js +0 -22
  635. package/src/renderer/LitRenderer.js +0 -34
  636. package/src/renderer/executeTemplate.js +0 -17
  637. package/src/theming/getEffectiveLinksHrefs.js +0 -20
  638. package/src/theming/getStylesString.js +0 -15
  639. package/src/thirdparty/merge.js +0 -10
  640. package/src/types/AnimationMode.js +0 -7
  641. package/src/types/CSSSize.js +0 -9
  642. package/src/types/CalendarType.js +0 -22
  643. package/src/types/DataType.js +0 -37
  644. package/src/types/Float.js +0 -14
  645. package/src/types/Integer.js +0 -13
  646. package/src/types/InvisibleMessageMode.js +0 -30
  647. package/src/types/ItemNavigationBehavior.js +0 -16
  648. package/src/types/NavigationMode.js +0 -7
  649. package/src/types/PopupState.js +0 -37
  650. package/src/types/ValueState.js +0 -22
  651. package/src/updateShadowRoot.js +0 -30
  652. package/src/util/AriaLabelHelper.js +0 -41
  653. package/src/util/Caret.js +0 -45
  654. package/src/util/ColorConversion.js +0 -370
  655. package/src/util/FocusableElements.js +0 -79
  656. package/src/util/PopupUtils.js +0 -93
  657. package/src/util/TabbableElements.js +0 -51
  658. package/src/util/escapeRegex.js +0 -10
  659. package/src/util/findNodeOwner.js +0 -35
  660. package/src/util/getEffectiveContentDensity.js +0 -5
  661. package/src/util/isDescendantOf.js +0 -15
  662. package/src/util/isNodeClickable.js +0 -19
  663. package/src/util/isNodeHidden.js +0 -9
  664. package/src/util/isNodeTabbable.js +0 -28
  665. package/src/util/setToArray.js +0 -10
@@ -13,6 +13,24 @@ import getActiveElement from "../util/getActiveElement.js";
13
13
  import NavigationMode from "../types/NavigationMode.js";
14
14
  import ItemNavigationBehavior from "../types/ItemNavigationBehavior.js";
15
15
 
16
+ import type UI5Element from "../UI5Element.js";
17
+ import { instanceOfUI5Element } from "../UI5Element.js";
18
+
19
+ interface ITabbable {
20
+ id: string,
21
+ _tabIndex: string,
22
+ }
23
+
24
+ type ItemNavigationOptions = {
25
+ currentIndex?: number,
26
+ navigationMode?: NavigationMode,
27
+ rowSize?: number
28
+ skipItemsSize?: number,
29
+ behavior?: ItemNavigationBehavior,
30
+ getItemsCallback: () => Array<ITabbable>,
31
+ affectedPropertiesNames?: Array<string>,
32
+ };
33
+
16
34
  /**
17
35
  * The ItemNavigation class manages the calculations to determine the correct "tabindex" for a group of related items inside a root component.
18
36
  * Important: ItemNavigation only does the calculations and does not change "tabindex" directly, this is a responsibility of the developer.
@@ -47,10 +65,26 @@ import ItemNavigationBehavior from "../types/ItemNavigationBehavior.js";
47
65
  * @public
48
66
  */
49
67
  class ItemNavigation {
68
+ rootWebComponent: UI5Element;
69
+
70
+ _getItems: () => Array<ITabbable>;
71
+
72
+ _currentIndex: number;
73
+
74
+ _rowSize: number;
75
+
76
+ _behavior: ItemNavigationBehavior;
77
+
78
+ _navigationMode: NavigationMode;
79
+
80
+ _affectedPropertiesNames: Array<string>;
81
+
82
+ _skipItemsSize: number | null;
83
+
50
84
  /**
51
85
  *
52
86
  * @param rootWebComponent the component to operate on (component that slots or contains within its shadow root the items the user navigates among)
53
- * @param options Object with configuration options:
87
+ * @param {ItemNavigationOptions} options Object with configuration options:
54
88
  * - currentIndex: the index of the item that will be initially selected (from which navigation will begin)
55
89
  * - navigationMode (Auto|Horizontal|Vertical): whether the items are displayed horizontally (Horizontal), vertically (Vertical) or as a matrix (Auto) meaning the user can navigate in both directions (up/down and left/right)
56
90
  * - rowSize: tells how many items per row there are when the items are not rendered as a flat list but rather as a matrix. Relevant for navigationMode=Auto
@@ -61,23 +95,17 @@ class ItemNavigation {
61
95
  * - getItemsCallback: function that, when called, returns an array with all items the user can navigate among
62
96
  * - affectedPropertiesNames: a list of metadata properties on the root component which, upon user navigation, will be reassigned by address thus causing the root component to invalidate
63
97
  */
64
- constructor(rootWebComponent, options = {}) {
65
- this._setRootComponent(rootWebComponent);
66
- this._initOptions(options);
67
- }
68
-
69
- _setRootComponent(rootWebComponent) {
98
+ constructor(rootWebComponent: UI5Element, options: ItemNavigationOptions) {
70
99
  if (!rootWebComponent.isUI5Element) {
71
100
  throw new Error("The root web component must be a UI5 Element instance");
72
101
  }
102
+
73
103
  this.rootWebComponent = rootWebComponent;
74
104
  this.rootWebComponent.addEventListener("keydown", this._onkeydown.bind(this));
75
105
  this.rootWebComponent._onComponentStateFinalized = () => {
76
106
  this._init();
77
107
  };
78
- }
79
108
 
80
- _initOptions(options) {
81
109
  if (typeof options.getItemsCallback !== "function") {
82
110
  throw new Error("getItemsCallback is required");
83
111
  }
@@ -98,7 +126,7 @@ class ItemNavigation {
98
126
  * @public
99
127
  * @param current the new selected item
100
128
  */
101
- setCurrentItem(current) {
129
+ setCurrentItem(current: ITabbable) {
102
130
  const currentItemIndex = this._getItems().indexOf(current);
103
131
 
104
132
  if (currentItemIndex === -1) {
@@ -116,7 +144,7 @@ class ItemNavigation {
116
144
  * @public
117
145
  * @param newRowSize
118
146
  */
119
- setRowSize(newRowSize) {
147
+ setRowSize(newRowSize: number) {
120
148
  this._rowSize = newRowSize;
121
149
  }
122
150
 
@@ -126,22 +154,27 @@ class ItemNavigation {
126
154
  });
127
155
  }
128
156
 
129
- _onkeydown(event) {
157
+ _onkeydown(event: KeyboardEvent) {
130
158
  if (!this._canNavigate()) {
131
159
  return;
132
160
  }
133
161
 
134
162
  const horizontalNavigationOn = this._navigationMode === NavigationMode.Horizontal || this._navigationMode === NavigationMode.Auto;
135
163
  const verticalNavigationOn = this._navigationMode === NavigationMode.Vertical || this._navigationMode === NavigationMode.Auto;
164
+ const isRTL = this.rootWebComponent.effectiveDir === "rtl";
136
165
 
137
- if (isUp(event) && verticalNavigationOn) {
138
- this._handleUp();
139
- } else if (isDown(event) && verticalNavigationOn) {
140
- this._handleDown();
166
+ if (isRTL && isLeft(event) && horizontalNavigationOn) {
167
+ this._handleRight();
168
+ } else if (isRTL && isRight(event) && horizontalNavigationOn) {
169
+ this._handleLeft();
141
170
  } else if (isLeft(event) && horizontalNavigationOn) {
142
171
  this._handleLeft();
143
172
  } else if (isRight(event) && horizontalNavigationOn) {
144
173
  this._handleRight();
174
+ } else if (isUp(event) && verticalNavigationOn) {
175
+ this._handleUp();
176
+ } else if (isDown(event) && verticalNavigationOn) {
177
+ this._handleDown();
145
178
  } else if (isHome(event)) {
146
179
  this._handleHome();
147
180
  } else if (isEnd(event)) {
@@ -255,6 +288,7 @@ class ItemNavigation {
255
288
  if (this._skipItemsSize === null) {
256
289
  // Move the focus to the very top (as Home).
257
290
  this._currentIndex -= this._currentIndex;
291
+ return;
258
292
  }
259
293
 
260
294
  if (this._currentIndex + 1 > this._skipItemsSize) {
@@ -274,6 +308,7 @@ class ItemNavigation {
274
308
  if (this._skipItemsSize === null) {
275
309
  // Move the focus to the very bottom (as End).
276
310
  this._currentIndex = this._getItems().length - 1;
311
+ return;
277
312
  }
278
313
 
279
314
  const currentToEndRange = this._getItems().length - this._currentIndex - 1;
@@ -295,15 +330,15 @@ class ItemNavigation {
295
330
  }
296
331
 
297
332
  this._affectedPropertiesNames.forEach(propName => {
298
- const prop = this.rootWebComponent[propName];
299
- this.rootWebComponent[propName] = Array.isArray(prop) ? [...prop] : { ...prop };
333
+ const prop = (this.rootWebComponent as Record<string, any>)[propName];
334
+ (this.rootWebComponent as Record<string, any>)[propName] = Array.isArray(prop) ? [...prop] : { ...prop };
300
335
  });
301
336
  }
302
337
 
303
338
  _focusCurrentItem() {
304
339
  const currentItem = this._getCurrentItem();
305
340
  if (currentItem) {
306
- currentItem.focus();
341
+ currentItem.focus({ focusVisible: true } as FocusOptions);
307
342
  }
308
343
  }
309
344
 
@@ -318,7 +353,7 @@ class ItemNavigation {
318
353
  const items = this._getItems();
319
354
 
320
355
  if (!items.length) {
321
- return null;
356
+ return;
322
357
  }
323
358
 
324
359
  // normalize the index
@@ -336,16 +371,23 @@ class ItemNavigation {
336
371
  return;
337
372
  }
338
373
 
339
- if (currentItem.isUI5Element) {
374
+ if (instanceOfUI5Element(currentItem)) {
340
375
  return currentItem.getFocusDomRef();
341
376
  }
342
377
 
343
- if (!this.rootWebComponent.getDomRef()) {
378
+ const currentItemDOMRef = this.rootWebComponent.getDomRef();
379
+ if (!currentItemDOMRef) {
344
380
  return;
345
381
  }
346
382
 
347
- return this.rootWebComponent.getDomRef().querySelector(`#${currentItem.id}`);
383
+ if (currentItem.id) {
384
+ return currentItemDOMRef.querySelector(`#${currentItem.id}`) as HTMLElement;
385
+ }
348
386
  }
349
387
  }
350
388
 
351
389
  export default ItemNavigation;
390
+
391
+ export {
392
+ ITabbable,
393
+ };
@@ -1,19 +1,23 @@
1
- let resizeObserver;
2
- const observedElements = new Map();
1
+ import { instanceOfUI5Element } from "../UI5Element.js";
2
+
3
+ type ResizeObserverCallback = () => void;
4
+
5
+ let resizeObserver: ResizeObserver;
6
+ const observedElements = new Map<HTMLElement, Array<ResizeObserverCallback>>();
3
7
 
4
8
  const getResizeObserver = () => {
5
9
  if (!resizeObserver) {
6
10
  resizeObserver = new window.ResizeObserver(entries => {
7
11
  entries.forEach(entry => {
8
- const callbacks = observedElements.get(entry.target);
9
- callbacks.forEach(callback => callback());
12
+ const callbacks = observedElements.get(entry.target as HTMLElement);
13
+ callbacks?.forEach((callback: ResizeObserverCallback) => callback());
10
14
  });
11
15
  });
12
16
  }
13
17
  return resizeObserver;
14
18
  };
15
19
 
16
- let observe = (element, callback) => {
20
+ const observe = (element: HTMLElement, callback: ResizeObserverCallback) => {
17
21
  const callbacks = observedElements.get(element) || [];
18
22
 
19
23
  // if no callbacks have been added for this element - start observing it
@@ -25,13 +29,13 @@ let observe = (element, callback) => {
25
29
  observedElements.set(element, [...callbacks, callback]);
26
30
  };
27
31
 
28
- let unobserve = (element, callback) => {
32
+ const unobserve = (element: HTMLElement, callback: ResizeObserverCallback) => {
29
33
  const callbacks = observedElements.get(element) || [];
30
34
  if (callbacks.length === 0) {
31
35
  return;
32
36
  }
33
37
 
34
- const filteredCallbacks = callbacks.filter(fn => fn !== callback);
38
+ const filteredCallbacks = callbacks.filter((fn: ResizeObserverCallback) => fn !== callback);
35
39
  if (filteredCallbacks.length === 0) {
36
40
  getResizeObserver().unobserve(element);
37
41
  observedElements.delete(element);
@@ -53,13 +57,15 @@ class ResizeHandler {
53
57
  * @param {*} element UI5 Web Component or DOM Element to be observed
54
58
  * @param {*} callback Callback to be executed
55
59
  */
56
- static register(element, callback) {
57
- if (element.isUI5Element) {
58
- element = element.getDomRef();
60
+ static register(element: HTMLElement, callback: ResizeObserverCallback) {
61
+ let effectiveElement: HTMLElement | undefined = element;
62
+
63
+ if (instanceOfUI5Element(effectiveElement)) {
64
+ effectiveElement = effectiveElement.getDomRef();
59
65
  }
60
66
 
61
- if (element instanceof HTMLElement) {
62
- observe(element, callback);
67
+ if (effectiveElement instanceof HTMLElement) {
68
+ observe(effectiveElement, callback);
63
69
  } else {
64
70
  console.warn("Cannot register ResizeHandler for element", element); // eslint-disable-line
65
71
  }
@@ -71,36 +77,19 @@ class ResizeHandler {
71
77
  * @param {*} element UI5 Web Component or DOM Element to be unobserved
72
78
  * @param {*} callback Callback to be removed
73
79
  */
74
- static deregister(element, callback) {
75
- if (element.isUI5Element) {
76
- element = element.getDomRef();
80
+ static deregister(element: HTMLElement, callback: ResizeObserverCallback) {
81
+ let effectiveElement: HTMLElement | undefined = element;
82
+
83
+ if (instanceOfUI5Element(effectiveElement)) {
84
+ effectiveElement = effectiveElement.getDomRef();
77
85
  }
78
86
 
79
- if (element instanceof HTMLElement) {
80
- unobserve(element, callback);
87
+ if (effectiveElement instanceof HTMLElement) {
88
+ unobserve(effectiveElement, callback);
81
89
  } else {
82
90
  console.warn("Cannot deregister ResizeHandler for element", element); // eslint-disable-line
83
91
  }
84
92
  }
85
93
  }
86
94
 
87
- /**
88
- * Set a function to be executed whenever a DOM node needs to be observed for size change.
89
- * @public
90
- * @param fn
91
- */
92
- const setResizeHandlerObserveFn = fn => {
93
- observe = fn;
94
- };
95
-
96
- /**
97
- * Set a function to be executed whenever a DOM node needs to no longer be observed for size changes
98
- * @public
99
- * @param fn
100
- */
101
- const setResizeHandlerUnobserveFn = fn => {
102
- unobserve = fn;
103
- };
104
-
105
95
  export default ResizeHandler;
106
- export { setResizeHandlerObserveFn, setResizeHandlerUnobserveFn };
@@ -0,0 +1,221 @@
1
+ import { supportsTouch } from "../Device.js";
2
+ import EventProvider from "../EventProvider.js";
3
+ import scroll from "../animations/scroll.js";
4
+ import type UI5Element from "../UI5Element.js";
5
+
6
+ const scrollEventName = "scroll";
7
+ const touchEndEventName = supportsTouch() ? "touchend" : "mouseup";
8
+
9
+ type EventListenerParam = {
10
+ isLeft: boolean;
11
+ isRight: boolean
12
+ }
13
+ type EventListenerReturn = void;
14
+
15
+ class ScrollEnablement extends EventProvider<EventListenerParam, EventListenerReturn> {
16
+ containerComponent: UI5Element;
17
+ mouseMove: (event: MouseEvent | TouchEvent) => void;
18
+ mouseUp: (event: MouseEvent | TouchEvent) => void;
19
+ touchStart: (event: MouseEvent | TouchEvent) => void;
20
+ cachedValue: { dragX: number, dragY: number };
21
+ startX: number;
22
+ startY: number;
23
+ _container?: HTMLElement;
24
+ supportsTouch = supportsTouch();
25
+ _canScroll?: boolean;
26
+ _prevDragX?: number;
27
+ _prevDragY?: number;
28
+
29
+ constructor(containerComponent: UI5Element) {
30
+ super();
31
+ this.containerComponent = containerComponent;
32
+ this.mouseMove = this.ontouchmove.bind(this);
33
+ this.mouseUp = this.ontouchend.bind(this);
34
+ this.touchStart = this.ontouchstart.bind(this);
35
+
36
+ this.supportsTouch = supportsTouch();
37
+
38
+ // On Android devices touchmove is thrown one more time than neccessary (together with touchend)
39
+ // so we have to cache the previus coordinates in order to provide correct parameters in the
40
+ // event for Android
41
+ this.cachedValue = { dragX: 0, dragY: 0 };
42
+
43
+ // In components like Carousel you need to know if the user has clicked on something or swiped
44
+ // in order to throw the needed event or not
45
+ this.startX = 0;
46
+ this.startY = 0;
47
+
48
+ if (this.supportsTouch) {
49
+ containerComponent.addEventListener("touchstart", this.touchStart, { passive: true });
50
+ containerComponent.addEventListener("touchmove", this.mouseMove, { passive: true });
51
+ containerComponent.addEventListener("touchend", this.mouseUp, { passive: true });
52
+ } else {
53
+ containerComponent.addEventListener("mousedown", this.touchStart, { passive: true });
54
+ }
55
+ }
56
+
57
+ set scrollContainer(container: HTMLElement) {
58
+ this._container = container;
59
+ }
60
+
61
+ get scrollContainer() {
62
+ return this._container!;
63
+ }
64
+
65
+ /**
66
+ * Scrolls the container to the left/top position, retrying retryCount times, if the container is not yet painted
67
+ *
68
+ * @param left
69
+ * @param top
70
+ * @param retryCount
71
+ * @param retryInterval
72
+ * @returns {Promise<void>} resolved when scrolled successfully
73
+ */
74
+ async scrollTo(left: number, top: number, retryCount = 0, retryInterval = 0) {
75
+ let containerPainted = this.scrollContainer.clientHeight > 0 && this.scrollContainer.clientWidth > 0;
76
+
77
+ /* eslint-disable no-loop-func, no-await-in-loop */
78
+ while (!containerPainted && retryCount > 0) {
79
+ await new Promise<void>(resolve => {
80
+ setTimeout(() => {
81
+ containerPainted = this.scrollContainer.clientHeight > 0 && this.scrollContainer.clientWidth > 0;
82
+ retryCount--;
83
+ resolve();
84
+ }, retryInterval);
85
+ });
86
+ }
87
+ /* eslint-disable no-loop-func, no-await-in-loop */
88
+
89
+ this._container!.scrollLeft = left;
90
+ this._container!.scrollTop = top;
91
+ }
92
+
93
+ move(dx: number, dy: number, disableAnimation: boolean) {
94
+ if (disableAnimation) {
95
+ this._container!.scrollLeft += dx;
96
+ this._container!.scrollTop += dy;
97
+ return;
98
+ }
99
+
100
+ if (this._container) {
101
+ return scroll(this._container, dx, dy);
102
+ }
103
+ }
104
+
105
+ getScrollLeft() {
106
+ return this._container!.scrollLeft;
107
+ }
108
+
109
+ getScrollTop() {
110
+ return this._container!.scrollTop;
111
+ }
112
+
113
+ _isTouchInside(event: TouchEvent | MouseEvent) {
114
+ let touch = null;
115
+ if (this.supportsTouch && event instanceof TouchEvent) {
116
+ touch = event.touches[0];
117
+ }
118
+
119
+ const rect = this._container!.getBoundingClientRect();
120
+ const x = this.supportsTouch ? (touch as TouchInit).clientX : (event as MouseEvent).x;
121
+ const y = this.supportsTouch ? (touch as TouchInit).clientY : (event as MouseEvent).y;
122
+
123
+ return x! >= rect.left && x! <= rect.right
124
+ && y! >= rect.top && y! <= rect.bottom;
125
+ }
126
+
127
+ ontouchstart(event: TouchEvent | MouseEvent) {
128
+ let touch = null;
129
+ if (this.supportsTouch && event instanceof TouchEvent) {
130
+ touch = event.touches[0];
131
+ }
132
+
133
+ if (!this.supportsTouch) {
134
+ document.addEventListener("mouseup", this.mouseUp, { passive: true });
135
+ document.addEventListener("mousemove", this.mouseMove, { passive: true });
136
+ } else {
137
+ // Needed only on mobile
138
+ this.startX = touch!.pageX;
139
+ this.startY = touch!.pageY;
140
+ }
141
+
142
+ if (this.supportsTouch && event instanceof TouchEvent) {
143
+ this._prevDragX = touch!.pageX;
144
+ this._prevDragY = touch!.pageY;
145
+ }
146
+
147
+ if (event instanceof MouseEvent) {
148
+ this._prevDragX = event.x;
149
+ this._prevDragY = event.y;
150
+ }
151
+
152
+ this._canScroll = this._isTouchInside(event);
153
+ }
154
+
155
+ ontouchmove(event: TouchEvent | MouseEvent) {
156
+ if (!this._canScroll) {
157
+ return;
158
+ }
159
+
160
+ const container = this._container;
161
+ const touch = this.supportsTouch ? (event as TouchEvent).touches[0] : null;
162
+
163
+ const dragX = this.supportsTouch ? (touch as TouchInit).pageX : (event as MouseEvent).x;
164
+ const dragY = this.supportsTouch ? (touch as TouchInit).pageY : (event as MouseEvent).y;
165
+
166
+ container!.scrollLeft += this._prevDragX! - dragX!;
167
+ container!.scrollTop += this._prevDragY! - dragY!;
168
+
169
+ this.fireEvent(scrollEventName, {
170
+ isLeft: dragX! > this._prevDragX!,
171
+ isRight: dragX! < this._prevDragX!,
172
+ });
173
+
174
+ this.cachedValue.dragX = this._prevDragX!;
175
+ this.cachedValue.dragY = this._prevDragY!;
176
+
177
+ this._prevDragX = dragX;
178
+ this._prevDragY = dragY;
179
+ }
180
+
181
+ ontouchend(event: TouchEvent | MouseEvent) {
182
+ if (this.supportsTouch) {
183
+ const deltaX = Math.abs((event as TouchEvent).changedTouches[0].pageX - this.startX);
184
+ const deltaY = Math.abs((event as TouchEvent).changedTouches[0].pageY - this.startY);
185
+
186
+ if (deltaX < 10 && deltaY < 10) {
187
+ return;
188
+ }
189
+ }
190
+
191
+ if (!this._canScroll) {
192
+ return;
193
+ }
194
+
195
+ const container = this._container;
196
+ const dragX = this.supportsTouch ? (event as TouchEvent).changedTouches[0].pageX : (event as MouseEvent).x;
197
+ const dragY = this.supportsTouch ? (event as TouchEvent).changedTouches[0].pageY : (event as MouseEvent).y;
198
+
199
+ container!.scrollLeft += this._prevDragX! - dragX;
200
+ container!.scrollTop += this._prevDragY! - dragY;
201
+
202
+ const useCachedValues = dragX === this._prevDragX;
203
+ const _dragX = useCachedValues ? this.cachedValue.dragX : dragX;
204
+ // const _dragY = useCachedValues ? this.cachedValue.dragY : dragY; add if needed
205
+
206
+ this.fireEvent(touchEndEventName, {
207
+ isLeft: _dragX < this._prevDragX!,
208
+ isRight: _dragX > this._prevDragX!,
209
+ });
210
+
211
+ this._prevDragX = dragX;
212
+ this._prevDragY = dragY;
213
+
214
+ if (!this.supportsTouch) {
215
+ document.removeEventListener("mousemove", this.mouseMove);
216
+ document.removeEventListener("mouseup", this.mouseUp);
217
+ }
218
+ }
219
+ }
220
+
221
+ export default ScrollEnablement;
@@ -0,0 +1,141 @@
1
+ import { registerFeature } from "../FeaturesRegistry.js";
2
+ import { isF6Next, isF6Previous } from "../Keys.js";
3
+ import { instanceOfUI5Element } from "../UI5Element.js";
4
+ import { getFirstFocusableElement } from "../util/FocusableElements.js";
5
+ import getFastNavigationGroups from "../util/getFastNavigationGroups.js";
6
+
7
+ class F6Navigation {
8
+ static _instance: F6Navigation;
9
+ keydownHandler: (event: KeyboardEvent) => void;
10
+ selectedGroup: HTMLElement | null = null;
11
+ groups: Array<HTMLElement> = [];
12
+
13
+ constructor() {
14
+ this.keydownHandler = this._keydownHandler.bind(this) as (event: KeyboardEvent) => void;
15
+ this.attachEventListeners();
16
+ }
17
+
18
+ attachEventListeners() {
19
+ document.addEventListener("keydown", this.keydownHandler);
20
+ }
21
+
22
+ async _keydownHandler(event: KeyboardEvent) {
23
+ if (isF6Next(event)) {
24
+ this.updateGroups();
25
+
26
+ if (this.groups.length < 1) {
27
+ return;
28
+ }
29
+
30
+ event.preventDefault();
31
+
32
+ let nextIndex = -1;
33
+ let nextElement;
34
+ if (this.selectedGroup) {
35
+ nextIndex = this.groups.indexOf(this.selectedGroup);
36
+ }
37
+
38
+ if (nextIndex > -1) {
39
+ if (nextIndex + 1 >= this.groups.length) {
40
+ nextElement = this.groups[0];
41
+ } else {
42
+ nextElement = this.groups[nextIndex + 1];
43
+ }
44
+ } else {
45
+ nextElement = this.groups[0];
46
+ }
47
+
48
+ const nextElementDomRef = instanceOfUI5Element(nextElement) ? nextElement.getDomRef() : nextElement;
49
+
50
+ if (nextElementDomRef) {
51
+ const elementToFocus = await getFirstFocusableElement(nextElementDomRef, true);
52
+ elementToFocus?.focus();
53
+ }
54
+ }
55
+
56
+ if (isF6Previous(event)) {
57
+ this.updateGroups();
58
+
59
+ if (this.groups.length < 1) {
60
+ return;
61
+ }
62
+
63
+ event.preventDefault();
64
+
65
+ let nextIndex = -1;
66
+ let nextElement;
67
+ if (this.selectedGroup) {
68
+ nextIndex = this.groups.indexOf(this.selectedGroup);
69
+ }
70
+
71
+ if (nextIndex > 0) {
72
+ // Handle the situation where the first focusable element of two neighbor groups is the same
73
+ // For example:
74
+ // <ui5-flexible-column-layout>
75
+ // <ui5-list>
76
+ // <ui5-li>List Item</ui5-li>
77
+ // </ui5-list>
78
+ // </ui5-flexible-column-layout>
79
+ // Here for both FCL & List the firstFoccusableElement is the same (the ui5-li)
80
+
81
+ const firstFocusable = await getFirstFocusableElement(this.groups[nextIndex - 1], true);
82
+ const shouldSkipParent = firstFocusable === await getFirstFocusableElement(this.groups[nextIndex], true);
83
+
84
+ nextElement = this.groups[shouldSkipParent ? nextIndex - 2 : nextIndex - 1];
85
+ } else {
86
+ nextElement = this.groups[this.groups.length - 1];
87
+ }
88
+
89
+ const nextElementDomRef = instanceOfUI5Element(nextElement) ? nextElement.getDomRef() : nextElement;
90
+
91
+ if (nextElementDomRef) {
92
+ const elementToFocus = await getFirstFocusableElement(nextElementDomRef, true);
93
+ elementToFocus?.focus();
94
+ }
95
+ }
96
+ }
97
+
98
+ removeEventListeners() {
99
+ document.removeEventListener("keydown", this.keydownHandler);
100
+ }
101
+
102
+ updateGroups() {
103
+ this.setSelectedGroup();
104
+ this.groups = getFastNavigationGroups(document.body);
105
+ }
106
+
107
+ setSelectedGroup(root: DocumentOrShadowRoot = window.document) {
108
+ const htmlElement = window.document.querySelector("html");
109
+ let element: Element | null | ParentNode = this.deepActive(root);
110
+
111
+ while (element && (element as Element).getAttribute("data-sap-ui-fastnavgroup") !== "true" && element !== htmlElement) {
112
+ element = element.parentElement ? element.parentNode : (element.parentNode as ShadowRoot).host;
113
+ }
114
+
115
+ this.selectedGroup = element as HTMLElement;
116
+ }
117
+
118
+ deepActive(root: DocumentOrShadowRoot): Element | null {
119
+ if (root.activeElement && root.activeElement.shadowRoot) {
120
+ return this.deepActive(root.activeElement.shadowRoot);
121
+ }
122
+
123
+ return root.activeElement;
124
+ }
125
+
126
+ destroy() {
127
+ this.removeEventListeners();
128
+ }
129
+
130
+ static init() {
131
+ if (!this._instance) {
132
+ this._instance = new F6Navigation();
133
+ }
134
+
135
+ return this._instance;
136
+ }
137
+ }
138
+
139
+ registerFeature("F6Navigation", F6Navigation);
140
+
141
+ export default F6Navigation;
@@ -0,0 +1,11 @@
1
+ import UI5Element from "../UI5Element.js";
2
+
3
+ class OpenUI5Element extends UI5Element {
4
+ __isBusy?: boolean;
5
+ isOpenUI5Component?: boolean;
6
+ __suppressFocusIn?: () => void;
7
+ __suppressFocusBack?: (e: KeyboardEvent) => void;
8
+ __redirectFocus?: boolean;
9
+ }
10
+
11
+ export default OpenUI5Element;