@ui5/webcomponents-base 0.0.0-5f8ce9393 → 0.0.0-6cb3eb0db

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 (424) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +196 -0
  3. package/README.md +26 -1
  4. package/bundle.esm.js +18 -12
  5. package/dist/AssetRegistry.js +8 -6
  6. package/dist/Boot.js +43 -0
  7. package/dist/CustomElementsRegistry.js +39 -0
  8. package/dist/CustomElementsScope.js +108 -0
  9. package/dist/DOMObserver.js +65 -0
  10. package/dist/Device.js +58 -779
  11. package/dist/EventProvider.js +38 -26
  12. package/dist/FontFace.js +52 -7
  13. package/dist/InitialConfiguration.js +35 -10
  14. package/dist/Keys.js +248 -0
  15. package/dist/MediaRange.js +109 -0
  16. package/dist/PropertiesFileFormat.js +95 -0
  17. package/dist/Render.js +173 -0
  18. package/dist/RenderQueue.js +41 -17
  19. package/dist/RenderScheduler.js +24 -145
  20. package/dist/StaticArea.js +1 -39
  21. package/dist/StaticAreaItem.js +67 -50
  22. package/dist/SystemCSSVars.js +31 -0
  23. package/dist/Theming.js +3 -54
  24. package/dist/UI5Element.js +486 -318
  25. package/dist/UI5ElementMetadata.js +182 -19
  26. package/dist/asset-registries/Icons.js +118 -14
  27. package/dist/asset-registries/Illustrations.js +30 -0
  28. package/dist/asset-registries/LocaleData.js +97 -55
  29. package/dist/asset-registries/Themes.js +35 -32
  30. package/dist/asset-registries/i18n.js +80 -34
  31. package/dist/config/AnimationMode.js +11 -1
  32. package/dist/config/CalendarType.js +3 -7
  33. package/dist/config/Language.js +58 -2
  34. package/dist/config/Theme.js +2 -2
  35. package/dist/delegate/ItemNavigation.js +245 -172
  36. package/dist/delegate/ResizeHandler.js +78 -38
  37. package/dist/delegate/ScrollEnablement.js +101 -19
  38. package/dist/features/OpenUI5Support.js +57 -8
  39. package/dist/generated/AssetParameters.js +13 -0
  40. package/dist/getSharedResource.js +30 -0
  41. package/dist/i18nBundle.js +31 -10
  42. package/dist/isLegacyBrowser.js +3 -0
  43. package/dist/{Locale.js → locale/Locale.js} +0 -10
  44. package/dist/locale/RTLAwareRegistry.js +14 -0
  45. package/dist/locale/applyDirection.js +17 -0
  46. package/dist/locale/directionChange.js +32 -0
  47. package/dist/locale/getEffectiveDir.js +28 -0
  48. package/dist/locale/getLocale.js +41 -0
  49. package/dist/locale/languageChange.js +22 -0
  50. package/dist/locale/nextFallbackLocale.js +28 -0
  51. package/{src/util → dist/locale}/normalizeLocale.js +8 -31
  52. package/dist/renderer/LitRenderer.js +21 -4
  53. package/dist/renderer/executeTemplate.js +17 -0
  54. package/dist/resources/bundle.esm.js +20 -106
  55. package/dist/resources/bundle.esm.js.map +1 -1
  56. package/dist/sap/base/Log.js +241 -0
  57. package/dist/sap/base/assert.js +8 -0
  58. package/dist/sap/base/security/URLListValidator.js +148 -0
  59. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  60. package/dist/sap/base/util/now.js +7 -0
  61. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  62. package/dist/test-resources/assets/Themes.js +11 -5
  63. package/dist/test-resources/elements/Generic.js +1 -0
  64. package/dist/test-resources/elements/Parent.js +7 -2
  65. package/dist/test-resources/elements/WithStaticArea.js +77 -0
  66. package/dist/test-resources/pages/AllTestElements.html +5 -5
  67. package/dist/test-resources/pages/Configuration.html +0 -2
  68. package/dist/test-resources/pages/ConfigurationScript.html +1 -3
  69. package/dist/test-resources/pages/assets/messagebundle_de.properties +1 -0
  70. package/dist/test-resources/pages/assets/messagebundle_en.properties +1 -0
  71. package/dist/test-resources/pages/assets/messagebundle_es.properties +1 -0
  72. package/dist/test-resources/pages/assets/messagebundle_fr.properties +1 -0
  73. package/dist/test-resources/pages/i18n.html +35 -0
  74. package/dist/test-resources/specs/ConfigurationChange.spec.js +11 -9
  75. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  76. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  77. package/dist/test-resources/specs/CustomTheme.spec.js +7 -5
  78. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  79. package/dist/test-resources/specs/StaticArea.spec.js +78 -0
  80. package/dist/test-resources/specs/Theming.spec.js +9 -7
  81. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  82. package/dist/test-resources/specs/UI5ElementLifecycle.js +19 -14
  83. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  84. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  85. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  86. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  87. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  88. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  89. package/dist/theming/CustomStyle.js +28 -7
  90. package/dist/theming/ThemeLoaded.js +22 -0
  91. package/dist/theming/applyTheme.js +78 -0
  92. package/dist/theming/createThemePropertiesStyleTag.js +20 -0
  93. package/dist/theming/getConstructableStyle.js +30 -0
  94. package/dist/theming/getEffectiveStyle.js +30 -0
  95. package/dist/theming/getStylesString.js +13 -0
  96. package/dist/theming/getThemeDesignerTheme.js +67 -0
  97. package/dist/thirdparty/_merge.js +32 -0
  98. package/dist/thirdparty/isPlainObject.js +18 -0
  99. package/dist/thirdparty/merge.js +10 -0
  100. package/dist/types/CSSColor.js +9 -0
  101. package/{src/dates → dist/types}/CalendarType.js +2 -2
  102. package/dist/types/DataType.js +13 -1
  103. package/dist/types/Float.js +14 -0
  104. package/dist/types/Integer.js +4 -0
  105. package/dist/types/InvisibleMessageMode.js +30 -0
  106. package/dist/types/ItemNavigationBehavior.js +2 -7
  107. package/dist/types/NavigationMode.js +1 -0
  108. package/dist/types/PopupState.js +1 -1
  109. package/dist/types/ValueState.js +2 -1
  110. package/dist/updateShadowRoot.js +26 -0
  111. package/dist/util/AriaLabelHelper.js +41 -0
  112. package/dist/util/Caret.js +45 -0
  113. package/dist/util/ColorConversion.js +370 -0
  114. package/dist/util/FocusableElements.js +25 -8
  115. package/dist/util/HTMLSanitizer.js +7 -0
  116. package/dist/util/InvisibleMessage.js +58 -0
  117. package/dist/util/PopupUtils.js +93 -0
  118. package/dist/util/SlotsHelper.js +43 -0
  119. package/dist/util/StringHelper.js +17 -2
  120. package/dist/util/TabbableElements.js +5 -2
  121. package/dist/util/arraysAreEqual.js +15 -0
  122. package/dist/util/clamp.js +12 -0
  123. package/dist/util/debounce.js +17 -0
  124. package/dist/util/detectNavigatorLanguage.js +3 -1
  125. package/dist/util/encodeCSS.js +24 -0
  126. package/dist/util/findNodeOwner.js +35 -0
  127. package/dist/util/getActiveElement.js +11 -0
  128. package/dist/util/getClassCopy.js +10 -0
  129. package/dist/util/getEffectiveContentDensity.js +5 -0
  130. package/dist/util/getFileExtension.js +21 -0
  131. package/dist/util/getSingletonElementInstance.js +13 -0
  132. package/dist/util/isElementInView.js +15 -0
  133. package/dist/util/isNodeHidden.js +1 -5
  134. package/dist/util/isNodeTabbable.js +4 -4
  135. package/dist/util/isValidPropertyName.js +11 -2
  136. package/dist/util/setToArray.js +10 -0
  137. package/hash.txt +1 -0
  138. package/index.js +1 -1
  139. package/lib/generate-asset-parameters/index.js +22 -0
  140. package/package-scripts.js +37 -17
  141. package/package.json +20 -12
  142. package/src/AssetRegistry.js +8 -6
  143. package/src/Boot.js +43 -0
  144. package/src/CustomElementsRegistry.js +39 -0
  145. package/src/CustomElementsScope.js +108 -0
  146. package/src/DOMObserver.js +65 -0
  147. package/src/Device.js +58 -779
  148. package/src/EventProvider.js +38 -26
  149. package/src/FontFace.js +52 -7
  150. package/src/InitialConfiguration.js +35 -10
  151. package/src/Keys.js +248 -0
  152. package/src/MediaRange.js +109 -0
  153. package/src/PropertiesFileFormat.js +95 -0
  154. package/src/Render.js +173 -0
  155. package/src/RenderQueue.js +41 -17
  156. package/src/RenderScheduler.js +24 -145
  157. package/src/StaticArea.js +1 -39
  158. package/src/StaticAreaItem.js +67 -50
  159. package/src/SystemCSSVars.js +31 -0
  160. package/src/Theming.js +3 -54
  161. package/src/UI5Element.js +486 -318
  162. package/src/UI5ElementMetadata.js +182 -19
  163. package/src/asset-registries/Icons.js +118 -14
  164. package/src/asset-registries/Illustrations.js +30 -0
  165. package/src/asset-registries/LocaleData.js +97 -55
  166. package/src/asset-registries/Themes.js +35 -32
  167. package/src/asset-registries/i18n.js +80 -34
  168. package/src/config/AnimationMode.js +11 -1
  169. package/src/config/CalendarType.js +3 -7
  170. package/src/config/Language.js +58 -2
  171. package/src/config/Theme.js +2 -2
  172. package/src/delegate/ItemNavigation.js +245 -172
  173. package/src/delegate/ResizeHandler.js +78 -38
  174. package/src/delegate/ScrollEnablement.js +101 -19
  175. package/src/features/OpenUI5Support.js +57 -8
  176. package/src/getSharedResource.js +30 -0
  177. package/src/i18nBundle.js +31 -10
  178. package/src/isLegacyBrowser.js +3 -0
  179. package/src/{Locale.js → locale/Locale.js} +0 -10
  180. package/src/locale/RTLAwareRegistry.js +14 -0
  181. package/src/locale/applyDirection.js +17 -0
  182. package/src/locale/directionChange.js +32 -0
  183. package/src/locale/getEffectiveDir.js +28 -0
  184. package/src/locale/getLocale.js +41 -0
  185. package/src/locale/languageChange.js +22 -0
  186. package/src/locale/nextFallbackLocale.js +28 -0
  187. package/{dist/util → src/locale}/normalizeLocale.js +8 -31
  188. package/src/renderer/LitRenderer.js +21 -4
  189. package/src/renderer/executeTemplate.js +17 -0
  190. package/src/theming/CustomStyle.js +28 -7
  191. package/src/theming/ThemeLoaded.js +22 -0
  192. package/src/theming/applyTheme.js +78 -0
  193. package/src/theming/createThemePropertiesStyleTag.js +20 -0
  194. package/src/theming/getConstructableStyle.js +30 -0
  195. package/src/theming/getEffectiveStyle.js +30 -0
  196. package/src/theming/getStylesString.js +13 -0
  197. package/src/theming/getThemeDesignerTheme.js +67 -0
  198. package/src/thirdparty/_merge.js +32 -0
  199. package/src/thirdparty/isPlainObject.js +18 -0
  200. package/src/thirdparty/merge.js +10 -0
  201. package/src/types/CSSColor.js +9 -0
  202. package/{dist/dates → src/types}/CalendarType.js +2 -2
  203. package/src/types/DataType.js +13 -1
  204. package/src/types/Float.js +14 -0
  205. package/src/types/Integer.js +4 -0
  206. package/src/types/InvisibleMessageMode.js +30 -0
  207. package/src/types/ItemNavigationBehavior.js +2 -7
  208. package/src/types/NavigationMode.js +1 -0
  209. package/src/types/PopupState.js +1 -1
  210. package/src/types/ValueState.js +2 -1
  211. package/src/updateShadowRoot.js +26 -0
  212. package/src/util/AriaLabelHelper.js +41 -0
  213. package/src/util/Caret.js +45 -0
  214. package/src/util/ColorConversion.js +370 -0
  215. package/src/util/FocusableElements.js +25 -8
  216. package/src/util/HTMLSanitizer.js +7 -0
  217. package/src/util/InvisibleMessage.js +58 -0
  218. package/src/util/PopupUtils.js +93 -0
  219. package/src/util/SlotsHelper.js +43 -0
  220. package/src/util/StringHelper.js +17 -2
  221. package/src/util/TabbableElements.js +5 -2
  222. package/src/util/arraysAreEqual.js +15 -0
  223. package/src/util/clamp.js +12 -0
  224. package/src/util/debounce.js +17 -0
  225. package/src/util/detectNavigatorLanguage.js +3 -1
  226. package/src/util/encodeCSS.js +24 -0
  227. package/src/util/findNodeOwner.js +35 -0
  228. package/src/util/getActiveElement.js +11 -0
  229. package/src/util/getClassCopy.js +10 -0
  230. package/src/util/getEffectiveContentDensity.js +5 -0
  231. package/src/util/getFileExtension.js +21 -0
  232. package/src/util/getSingletonElementInstance.js +13 -0
  233. package/src/util/isElementInView.js +15 -0
  234. package/src/util/isNodeHidden.js +1 -5
  235. package/src/util/isNodeTabbable.js +4 -4
  236. package/src/util/isValidPropertyName.js +11 -2
  237. package/src/util/setToArray.js +10 -0
  238. package/used-modules.txt +7 -0
  239. package/bundle.es5.js +0 -28
  240. package/dist/Assets.js +0 -2
  241. package/dist/CSS.js +0 -48
  242. package/dist/FormatSettings.js +0 -31
  243. package/dist/LocaleProvider.js +0 -34
  244. package/dist/ResourceLoaderOverrides.js +0 -38
  245. package/dist/SVGIconRegistry.js +0 -54
  246. package/dist/boot.js +0 -32
  247. package/dist/compatibility/DOMObserver.js +0 -62
  248. package/dist/compatibility/patchNodeValue.js +0 -24
  249. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  250. package/dist/dates/CalendarDate.js +0 -203
  251. package/dist/dates/CalendarUtils.js +0 -99
  252. package/dist/delegate/CustomResize.js +0 -78
  253. package/dist/delegate/NativeResize.js +0 -44
  254. package/dist/events/PseudoEvents.js +0 -58
  255. package/dist/features/browsersupport/Edge.js +0 -6
  256. package/dist/features/browsersupport/IE11.js +0 -41
  257. package/dist/features/calendar/Buddhist.js +0 -1
  258. package/dist/features/calendar/Islamic.js +0 -1
  259. package/dist/features/calendar/Japanese.js +0 -1
  260. package/dist/features/calendar/Persian.js +0 -1
  261. package/dist/generated/assets/cldr/sap/ui/core/cldr/ar.json +0 -5598
  262. package/dist/generated/assets/cldr/sap/ui/core/cldr/ar_EG.json +0 -5598
  263. package/dist/generated/assets/cldr/sap/ui/core/cldr/ar_SA.json +0 -5598
  264. package/dist/generated/assets/cldr/sap/ui/core/cldr/bg.json +0 -4789
  265. package/dist/generated/assets/cldr/sap/ui/core/cldr/ca.json +0 -4801
  266. package/dist/generated/assets/cldr/sap/ui/core/cldr/cs.json +0 -5245
  267. package/dist/generated/assets/cldr/sap/ui/core/cldr/da.json +0 -4696
  268. package/dist/generated/assets/cldr/sap/ui/core/cldr/de.json +0 -4797
  269. package/dist/generated/assets/cldr/sap/ui/core/cldr/de_AT.json +0 -4798
  270. package/dist/generated/assets/cldr/sap/ui/core/cldr/de_CH.json +0 -4796
  271. package/dist/generated/assets/cldr/sap/ui/core/cldr/el.json +0 -4694
  272. package/dist/generated/assets/cldr/sap/ui/core/cldr/el_CY.json +0 -4694
  273. package/dist/generated/assets/cldr/sap/ui/core/cldr/en.json +0 -4777
  274. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_AU.json +0 -4769
  275. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_GB.json +0 -4778
  276. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_HK.json +0 -4784
  277. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_IE.json +0 -4778
  278. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_IN.json +0 -4779
  279. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_NZ.json +0 -4778
  280. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_PG.json +0 -4779
  281. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_SG.json +0 -4780
  282. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_ZA.json +0 -4779
  283. package/dist/generated/assets/cldr/sap/ui/core/cldr/es.json +0 -4719
  284. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_AR.json +0 -4721
  285. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_BO.json +0 -4720
  286. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_CL.json +0 -4721
  287. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_CO.json +0 -4721
  288. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_MX.json +0 -4722
  289. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_PE.json +0 -4720
  290. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_UY.json +0 -4722
  291. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_VE.json +0 -4721
  292. package/dist/generated/assets/cldr/sap/ui/core/cldr/et.json +0 -4776
  293. package/dist/generated/assets/cldr/sap/ui/core/cldr/fa.json +0 -4704
  294. package/dist/generated/assets/cldr/sap/ui/core/cldr/fi.json +0 -4816
  295. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr.json +0 -4788
  296. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_BE.json +0 -4788
  297. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_CA.json +0 -4782
  298. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_CH.json +0 -4806
  299. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_LU.json +0 -4788
  300. package/dist/generated/assets/cldr/sap/ui/core/cldr/he.json +0 -5133
  301. package/dist/generated/assets/cldr/sap/ui/core/cldr/hi.json +0 -4680
  302. package/dist/generated/assets/cldr/sap/ui/core/cldr/hr.json +0 -4910
  303. package/dist/generated/assets/cldr/sap/ui/core/cldr/hu.json +0 -4664
  304. package/dist/generated/assets/cldr/sap/ui/core/cldr/id.json +0 -4500
  305. package/dist/generated/assets/cldr/sap/ui/core/cldr/it.json +0 -4757
  306. package/dist/generated/assets/cldr/sap/ui/core/cldr/it_CH.json +0 -4757
  307. package/dist/generated/assets/cldr/sap/ui/core/cldr/ja.json +0 -4599
  308. package/dist/generated/assets/cldr/sap/ui/core/cldr/kk.json +0 -4537
  309. package/dist/generated/assets/cldr/sap/ui/core/cldr/ko.json +0 -4574
  310. package/dist/generated/assets/cldr/sap/ui/core/cldr/lt.json +0 -5234
  311. package/dist/generated/assets/cldr/sap/ui/core/cldr/lv.json +0 -4902
  312. package/dist/generated/assets/cldr/sap/ui/core/cldr/ms.json +0 -4352
  313. package/dist/generated/assets/cldr/sap/ui/core/cldr/nb.json +0 -4784
  314. package/dist/generated/assets/cldr/sap/ui/core/cldr/nl.json +0 -4790
  315. package/dist/generated/assets/cldr/sap/ui/core/cldr/nl_BE.json +0 -4790
  316. package/dist/generated/assets/cldr/sap/ui/core/cldr/pl.json +0 -5223
  317. package/dist/generated/assets/cldr/sap/ui/core/cldr/pt.json +0 -4703
  318. package/dist/generated/assets/cldr/sap/ui/core/cldr/pt_PT.json +0 -4753
  319. package/dist/generated/assets/cldr/sap/ui/core/cldr/ro.json +0 -4881
  320. package/dist/generated/assets/cldr/sap/ui/core/cldr/ru.json +0 -5157
  321. package/dist/generated/assets/cldr/sap/ui/core/cldr/ru_UA.json +0 -5157
  322. package/dist/generated/assets/cldr/sap/ui/core/cldr/sk.json +0 -5125
  323. package/dist/generated/assets/cldr/sap/ui/core/cldr/sl.json +0 -5105
  324. package/dist/generated/assets/cldr/sap/ui/core/cldr/sr.json +0 -4908
  325. package/dist/generated/assets/cldr/sap/ui/core/cldr/sv.json +0 -4818
  326. package/dist/generated/assets/cldr/sap/ui/core/cldr/th.json +0 -4633
  327. package/dist/generated/assets/cldr/sap/ui/core/cldr/tr.json +0 -4791
  328. package/dist/generated/assets/cldr/sap/ui/core/cldr/uk.json +0 -5126
  329. package/dist/generated/assets/cldr/sap/ui/core/cldr/vi.json +0 -4510
  330. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_CN.json +0 -4469
  331. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_HK.json +0 -4479
  332. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_SG.json +0 -4479
  333. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_TW.json +0 -4565
  334. package/dist/json-imports/LocaleData.js +0 -171
  335. package/dist/renderer/ifDefined.js +0 -21
  336. package/dist/resources/bundle.es5.js +0 -212
  337. package/dist/resources/bundle.es5.js.map +0 -1
  338. package/dist/shims/Core-shim.js +0 -52
  339. package/dist/shims/jquery-shim.js +0 -89
  340. package/dist/test-resources/dev-helpers/ExternalThemePresent.js +0 -3
  341. package/dist/theming/StyleInjection.js +0 -67
  342. package/dist/thirdparty/Array.from.js +0 -16
  343. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  344. package/dist/thirdparty/Array.prototype.find.js +0 -46
  345. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  346. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  347. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  348. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  349. package/dist/thirdparty/Number.isInteger.js +0 -5
  350. package/dist/thirdparty/Number.isNaN.js +0 -1
  351. package/dist/thirdparty/Number.parseInt.js +0 -1
  352. package/dist/thirdparty/Object.assign.js +0 -31
  353. package/dist/thirdparty/Object.entries.js +0 -11
  354. package/dist/thirdparty/Symbol.js +0 -2
  355. package/dist/thirdparty/WeakSet.js +0 -27
  356. package/dist/thirdparty/events-polyfills.js +0 -89
  357. package/dist/thirdparty/fetch.js +0 -1
  358. package/dist/thirdparty/template.js +0 -600
  359. package/dist/util/CSSTransformUtils.js +0 -90
  360. package/dist/webcomponentsjs/LICENSE.md +0 -19
  361. package/dist/webcomponentsjs/README.md +0 -229
  362. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  363. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  364. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  365. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  366. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  367. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  368. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  369. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  370. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  371. package/dist/webcomponentsjs/package.json +0 -46
  372. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  373. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  374. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  375. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  376. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  377. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  378. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  379. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  380. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  381. package/src/Assets.js +0 -2
  382. package/src/CSS.js +0 -48
  383. package/src/FormatSettings.js +0 -31
  384. package/src/LocaleProvider.js +0 -34
  385. package/src/ResourceLoaderOverrides.js +0 -38
  386. package/src/SVGIconRegistry.js +0 -54
  387. package/src/boot.js +0 -32
  388. package/src/compatibility/DOMObserver.js +0 -62
  389. package/src/compatibility/patchNodeValue.js +0 -24
  390. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  391. package/src/dates/CalendarDate.js +0 -203
  392. package/src/dates/CalendarUtils.js +0 -99
  393. package/src/delegate/CustomResize.js +0 -78
  394. package/src/delegate/NativeResize.js +0 -44
  395. package/src/events/PseudoEvents.js +0 -58
  396. package/src/features/browsersupport/Edge.js +0 -6
  397. package/src/features/browsersupport/IE11.js +0 -41
  398. package/src/features/calendar/Buddhist.js +0 -1
  399. package/src/features/calendar/Islamic.js +0 -1
  400. package/src/features/calendar/Japanese.js +0 -1
  401. package/src/features/calendar/Persian.js +0 -1
  402. package/src/json-imports/LocaleData.js +0 -171
  403. package/src/renderer/ifDefined.js +0 -21
  404. package/src/shims/Core-shim.js +0 -52
  405. package/src/shims/jquery-shim.js +0 -89
  406. package/src/theming/StyleInjection.js +0 -67
  407. package/src/thirdparty/Array.from.js +0 -16
  408. package/src/thirdparty/Array.prototype.fill.js +0 -44
  409. package/src/thirdparty/Array.prototype.find.js +0 -46
  410. package/src/thirdparty/Array.prototype.includes.js +0 -51
  411. package/src/thirdparty/Element.prototype.closest.js +0 -11
  412. package/src/thirdparty/Element.prototype.matches.js +0 -6
  413. package/src/thirdparty/Map.prototype.keys.js +0 -9
  414. package/src/thirdparty/Number.isInteger.js +0 -5
  415. package/src/thirdparty/Number.isNaN.js +0 -1
  416. package/src/thirdparty/Number.parseInt.js +0 -1
  417. package/src/thirdparty/Object.assign.js +0 -31
  418. package/src/thirdparty/Object.entries.js +0 -11
  419. package/src/thirdparty/Symbol.js +0 -2
  420. package/src/thirdparty/WeakSet.js +0 -27
  421. package/src/thirdparty/events-polyfills.js +0 -89
  422. package/src/thirdparty/fetch.js +0 -1
  423. package/src/thirdparty/template.js +0 -600
  424. package/src/util/CSSTransformUtils.js +0 -90
@@ -1,15 +1,37 @@
1
+ import { supportsTouch } from "../Device.js";
1
2
  import EventProvider from "../EventProvider.js";
2
3
  import scroll from "../animations/scroll.js";
3
4
 
4
5
  const scrollEventName = "scroll";
5
- const touchEndEventName = "touchend";
6
+ const touchEndEventName = supportsTouch() ? "touchend" : "mouseup";
6
7
 
7
8
  class ScrollEnablement extends EventProvider {
8
9
  constructor(containerComponent) {
9
10
  super();
10
- containerComponent.addEventListener("touchstart", this.ontouchstart.bind(this), { passive: true });
11
- containerComponent.addEventListener("touchmove", this.ontouchmove.bind(this), { passive: true });
12
- containerComponent.addEventListener("touchend", this.ontouchend.bind(this), { passive: true });
11
+ this.containerComponent = containerComponent;
12
+ this.mouseMove = this.ontouchmove.bind(this);
13
+ this.mouseUp = this.ontouchend.bind(this);
14
+ this.touchStart = this.ontouchstart.bind(this);
15
+
16
+ this.supportsTouch = supportsTouch();
17
+
18
+ // On Android devices touchmove is thrown one more time than neccessary (together with touchend)
19
+ // so we have to cache the previus coordinates in order to provide correct parameters in the
20
+ // event for Android
21
+ this.cachedValue = {};
22
+
23
+ // In components like Carousel you need to know if the user has clicked on something or swiped
24
+ // in order to throw the needed event or not
25
+ this.startX = 0;
26
+ this.startY = 0;
27
+
28
+ if (this.supportsTouch) {
29
+ containerComponent.addEventListener("touchstart", this.touchStart, { passive: true });
30
+ containerComponent.addEventListener("touchmove", this.mouseMove, { passive: true });
31
+ containerComponent.addEventListener("touchend", this.mouseUp, { passive: true });
32
+ } else {
33
+ containerComponent.addEventListener("mousedown", this.touchStart, { passive: true });
34
+ }
13
35
  }
14
36
 
15
37
  set scrollContainer(container) {
@@ -20,12 +42,41 @@ class ScrollEnablement extends EventProvider {
20
42
  return this._container;
21
43
  }
22
44
 
23
- scrollTo(left, top) {
45
+ /**
46
+ * Scrolls the container to the left/top position, retrying retryCount times, if the container is not yet painted
47
+ *
48
+ * @param left
49
+ * @param top
50
+ * @param retryCount
51
+ * @param retryInterval
52
+ * @returns {Promise<void>} resolved when scrolled successfully
53
+ */
54
+ async scrollTo(left, top, retryCount = 0, retryInterval = 0) {
55
+ let containerPainted = this.scrollContainer.clientHeight > 0 && this.scrollContainer.clientWidth > 0;
56
+
57
+ /* eslint-disable no-loop-func, no-await-in-loop */
58
+ while (!containerPainted && retryCount > 0) {
59
+ await new Promise(resolve => {
60
+ setTimeout(() => {
61
+ containerPainted = this.scrollContainer.clientHeight > 0 && this.scrollContainer.clientWidth > 0;
62
+ retryCount--;
63
+ resolve();
64
+ }, retryInterval);
65
+ });
66
+ }
67
+ /* eslint-disable no-loop-func, no-await-in-loop */
68
+
24
69
  this._container.scrollLeft = left;
25
70
  this._container.scrollTop = top;
26
71
  }
27
72
 
28
- move(dx, dy) {
73
+ move(dx, dy, disableAnimation) {
74
+ if (disableAnimation) {
75
+ this._container.scrollLeft += dx;
76
+ this._container.scrollTop += dy;
77
+ return;
78
+ }
79
+
29
80
  return scroll({
30
81
  element: this._container,
31
82
  dx,
@@ -43,19 +94,29 @@ class ScrollEnablement extends EventProvider {
43
94
 
44
95
  _isTouchInside(touch) {
45
96
  const rect = this._container.getBoundingClientRect();
46
- const x = touch.clientX;
47
- const y = touch.clientY;
97
+ const x = this.supportsTouch ? touch.clientX : touch.x;
98
+ const y = this.supportsTouch ? touch.clientY : touch.y;
48
99
 
49
100
  return x >= rect.left && x <= rect.right
50
101
  && y >= rect.top && y <= rect.bottom;
51
102
  }
52
103
 
53
104
  ontouchstart(event) {
54
- const touch = event.touches[0];
55
- this._prevDragX = touch.pageX;
56
- this._prevDragY = touch.pageY;
105
+ const touch = this.supportsTouch ? event.touches[0] : null;
106
+
107
+ if (!this.supportsTouch) {
108
+ document.addEventListener("mouseup", this.mouseUp, { passive: true });
109
+ document.addEventListener("mousemove", this.mouseMove, { passive: true });
110
+ } else {
111
+ // Needed only on mobile
112
+ this.startX = touch.pageX;
113
+ this.startY = touch.pageY;
114
+ }
57
115
 
58
- this._canScroll = this._isTouchInside(touch);
116
+ this._prevDragX = this.supportsTouch ? touch.pageX : event.x;
117
+ this._prevDragY = this.supportsTouch ? touch.pageY : event.y;
118
+
119
+ this._canScroll = this._isTouchInside(this.supportsTouch ? touch : event);
59
120
  }
60
121
 
61
122
  ontouchmove(event) {
@@ -64,10 +125,10 @@ class ScrollEnablement extends EventProvider {
64
125
  }
65
126
 
66
127
  const container = this._container;
67
- const touch = event.touches[0];
128
+ const touch = this.supportsTouch ? event.touches[0] : null;
68
129
 
69
- const dragX = touch.pageX;
70
- const dragY = touch.pageY;
130
+ const dragX = this.supportsTouch ? touch.pageX : event.x;
131
+ const dragY = this.supportsTouch ? touch.pageY : event.y;
71
132
 
72
133
  container.scrollLeft += this._prevDragX - dragX;
73
134
  container.scrollTop += this._prevDragY - dragY;
@@ -77,29 +138,50 @@ class ScrollEnablement extends EventProvider {
77
138
  isRight: dragX < this._prevDragX,
78
139
  });
79
140
 
141
+ this.cachedValue.dragX = this._prevDragX;
142
+ this.cachedValue.dragY = this._prevDragY;
143
+
80
144
  this._prevDragX = dragX;
81
145
  this._prevDragY = dragY;
82
146
  }
83
147
 
84
148
  ontouchend(event) {
149
+ if (this.supportsTouch) {
150
+ const deltaX = Math.abs(event.changedTouches[0].pageX - this.startX);
151
+ const deltaY = Math.abs(event.changedTouches[0].pageY - this.startY);
152
+
153
+ if (deltaX < 10 && deltaY < 10) {
154
+ return;
155
+ }
156
+ }
157
+
85
158
  if (!this._canScroll) {
86
159
  return;
87
160
  }
88
161
 
89
162
  const container = this._container;
90
- const dragX = event.pageX;
91
- const dragY = event.pageY;
163
+ const dragX = this.supportsTouch ? event.changedTouches[0].pageX : event.x;
164
+ const dragY = this.supportsTouch ? event.changedTouches[0].pageY : event.y;
92
165
 
93
166
  container.scrollLeft += this._prevDragX - dragX;
94
167
  container.scrollTop += this._prevDragY - dragY;
95
168
 
169
+ const useCachedValues = dragX === this._prevDragX;
170
+ const _dragX = useCachedValues ? this.cachedValue.dragX : dragX;
171
+ // const _dragY = useCachedValues ? this.cachedValue.dragY : dragY; add if needed
172
+
96
173
  this.fireEvent(touchEndEventName, {
97
- isLeft: dragX > this._prevDragX,
98
- isRight: dragX < this._prevDragX,
174
+ isLeft: _dragX < this._prevDragX,
175
+ isRight: _dragX > this._prevDragX,
99
176
  });
100
177
 
101
178
  this._prevDragX = dragX;
102
179
  this._prevDragY = dragY;
180
+
181
+ if (!this.supportsTouch) {
182
+ document.removeEventListener("mousemove", this.mouseMove, { passive: true });
183
+ document.removeEventListener("mouseup", this.mouseUp);
184
+ }
103
185
  }
104
186
  }
105
187
 
@@ -1,32 +1,41 @@
1
1
  import { registerFeature } from "../FeaturesRegistry.js";
2
2
  import { setTheme } from "../config/Theme.js";
3
+ import { getCurrentZIndex } from "../util/PopupUtils.js";
3
4
 
4
- const sap = window.sap;
5
- const core = sap && sap.ui && typeof sap.ui.getCore === "function" && sap.ui.getCore();
5
+ const getCore = () => {
6
+ const sap = window.sap;
7
+ const core = sap && sap.ui && typeof sap.ui.getCore === "function" && sap.ui.getCore();
8
+ return core;
9
+ };
6
10
 
7
11
  const isLoaded = () => {
8
- return !!core;
12
+ return !!getCore();
9
13
  };
10
14
 
11
15
  const init = () => {
16
+ const core = getCore();
12
17
  if (!core) {
13
18
  return Promise.resolve();
14
19
  }
15
20
 
16
21
  return new Promise(resolve => {
17
22
  core.attachInit(() => {
18
- sap.ui.require(["sap/ui/core/LocaleData"], resolve);
23
+ window.sap.ui.require(["sap/ui/core/LocaleData", "sap/ui/core/Popup"], (LocaleData, Popup) => {
24
+ Popup.setInitialZIndex(getCurrentZIndex());
25
+ resolve();
26
+ });
19
27
  });
20
28
  });
21
29
  };
22
30
 
23
31
  const getConfigurationSettingsObject = () => {
32
+ const core = getCore();
24
33
  if (!core) {
25
34
  return;
26
35
  }
27
36
 
28
37
  const config = core.getConfiguration();
29
- const LocaleData = sap.ui.require("sap/ui/core/LocaleData");
38
+ const LocaleData = window.sap.ui.require("sap/ui/core/LocaleData");
30
39
 
31
40
  return {
32
41
  animationMode: config.getAnimationMode(),
@@ -35,22 +44,24 @@ const getConfigurationSettingsObject = () => {
35
44
  rtl: config.getRTL(),
36
45
  calendarType: config.getCalendarType(),
37
46
  formatSettings: {
38
- firstDayOfWeek: LocaleData.getInstance(config.getLocale()).getFirstDayOfWeek(),
47
+ firstDayOfWeek: LocaleData ? LocaleData.getInstance(config.getLocale()).getFirstDayOfWeek() : undefined,
39
48
  },
40
49
  };
41
50
  };
42
51
 
43
52
  const getLocaleDataObject = () => {
53
+ const core = getCore();
44
54
  if (!core) {
45
55
  return;
46
56
  }
47
57
 
48
58
  const config = core.getConfiguration();
49
- const LocaleData = sap.ui.require("sap/ui/core/LocaleData");
50
- return LocaleData.getInstance(config.getLocale()).mData;
59
+ const LocaleData = window.sap.ui.require("sap/ui/core/LocaleData");
60
+ return LocaleData.getInstance(config.getLocale())._get();
51
61
  };
52
62
 
53
63
  const listenForThemeChange = () => {
64
+ const core = getCore();
54
65
  const config = core.getConfiguration();
55
66
  core.attachThemeChanged(async () => {
56
67
  await setTheme(config.getTheme());
@@ -58,6 +69,7 @@ const listenForThemeChange = () => {
58
69
  };
59
70
 
60
71
  const attachListeners = () => {
72
+ const core = getCore();
61
73
  if (!core) {
62
74
  return;
63
75
  }
@@ -65,12 +77,49 @@ const attachListeners = () => {
65
77
  listenForThemeChange();
66
78
  };
67
79
 
80
+ const cssVariablesLoaded = () => {
81
+ const core = getCore();
82
+ if (!core) {
83
+ return;
84
+ }
85
+
86
+ const link = [...document.head.children].find(el => el.id === "sap-ui-theme-sap.ui.core"); // more reliable than querySelector early
87
+ if (!link) {
88
+ return;
89
+ }
90
+
91
+ return !!link.href.match(/\/css(-|_)variables\.css/);
92
+ };
93
+
94
+ const getNextZIndex = () => {
95
+ const core = getCore();
96
+ if (!core) {
97
+ return;
98
+ }
99
+
100
+ const Popup = window.sap.ui.require("sap/ui/core/Popup");
101
+ return Popup.getNextZIndex();
102
+ };
103
+
104
+ const setInitialZIndex = () => {
105
+ const core = getCore();
106
+ if (!core) {
107
+ return;
108
+ }
109
+
110
+ const Popup = window.sap.ui.require("sap/ui/core/Popup");
111
+ Popup.setInitialZIndex(getCurrentZIndex());
112
+ };
113
+
68
114
  const OpenUI5Support = {
69
115
  isLoaded,
70
116
  init,
71
117
  getConfigurationSettingsObject,
72
118
  getLocaleDataObject,
73
119
  attachListeners,
120
+ cssVariablesLoaded,
121
+ getNextZIndex,
122
+ setInitialZIndex,
74
123
  };
75
124
 
76
125
  registerFeature("OpenUI5Support", OpenUI5Support);
@@ -0,0 +1,30 @@
1
+ import getSingletonElementInstance from "./util/getSingletonElementInstance.js";
2
+
3
+ const getSharedResourcesInstance = () => getSingletonElementInstance("ui5-shared-resources", document.head);
4
+
5
+ /**
6
+ * Use this method to initialize/get resources that you would like to be shared among UI5 Web Components runtime instances.
7
+ * The data will be accessed via a singleton "ui5-shared-resources" HTML element in the "head" element of the page.
8
+ *
9
+ * @public
10
+ * @param namespace Unique ID of the resource, may contain "." to denote hierarchy
11
+ * @param initialValue Object or primitive that will be used as an initial value if the resource does not exist
12
+ * @returns {*}
13
+ */
14
+ const getSharedResource = (namespace, initialValue) => {
15
+ const parts = namespace.split(".");
16
+ let current = getSharedResourcesInstance();
17
+
18
+ for (let i = 0; i < parts.length; i++) {
19
+ const part = parts[i];
20
+ const lastPart = i === parts.length - 1;
21
+ if (!Object.prototype.hasOwnProperty.call(current, part)) {
22
+ current[part] = lastPart ? initialValue : {};
23
+ }
24
+ current = current[part];
25
+ }
26
+
27
+ return current;
28
+ };
29
+
30
+ export default getSharedResource;
package/src/i18nBundle.js CHANGED
@@ -1,24 +1,41 @@
1
- import { fetchI18nBundle, getI18nBundleData } from "./asset-registries/i18n.js";
1
+ import { registerI18nLoader, fetchI18nBundle, getI18nBundleData } from "./asset-registries/i18n.js";
2
2
  import formatMessage from "./util/formatMessage.js";
3
3
 
4
4
  const I18nBundleInstances = new Map();
5
5
 
6
+ /**
7
+ * @class
8
+ * @public
9
+ */
6
10
  class I18nBundle {
7
11
  constructor(packageName) {
8
12
  this.packageName = packageName;
9
13
  }
10
14
 
15
+ /**
16
+ * Returns a text in the currently loaded language
17
+ *
18
+ * @public
19
+ * @param {Object|String} textObj key/defaultText pair or just the key
20
+ * @param params Values for the placeholders
21
+ * @returns {*}
22
+ */
11
23
  getText(textObj, ...params) {
12
- if (!textObj || !textObj.key || !textObj.defaultText) {
24
+ if (typeof textObj === "string") {
25
+ textObj = { key: textObj, defaultText: textObj };
26
+ }
27
+
28
+ if (!textObj || !textObj.key) {
13
29
  return "";
14
30
  }
15
- const bundle = getI18nBundleData(this.packageName);
16
31
 
17
- if (!bundle || !bundle[textObj.key]) {
18
- return formatMessage(textObj.defaultText, params); // Fallback to "en"
32
+ const bundle = getI18nBundleData(this.packageName);
33
+ if (bundle && !bundle[textObj.key]) {
34
+ console.warn(`Key ${textObj.key} not found in the i18n bundle, the default text will be used`); // eslint-disable-line
19
35
  }
36
+ const messageText = bundle && bundle[textObj.key] ? bundle[textObj.key] : (textObj.defaultText || textObj.key);
20
37
 
21
- return formatMessage(bundle[textObj.key], params);
38
+ return formatMessage(messageText, params);
22
39
  }
23
40
  }
24
41
 
@@ -27,9 +44,13 @@ const getI18nBundle = packageName => {
27
44
  return I18nBundleInstances.get(packageName);
28
45
  }
29
46
 
30
- const i18nBunle = new I18nBundle(packageName);
31
- I18nBundleInstances.set(packageName, i18nBunle);
32
- return i18nBunle;
47
+ const i18nBundle = new I18nBundle(packageName);
48
+ I18nBundleInstances.set(packageName, i18nBundle);
49
+ return i18nBundle;
33
50
  };
34
51
 
35
- export { fetchI18nBundle, getI18nBundle };
52
+ export {
53
+ registerI18nLoader,
54
+ fetchI18nBundle,
55
+ getI18nBundle,
56
+ };
@@ -0,0 +1,3 @@
1
+ const isLegacyBrowser = () => !!window.ShadyDOM;
2
+
3
+ export default isLegacyBrowser;
@@ -1,5 +1,3 @@
1
- import getDesigntimePropertyAsArray from "./util/getDesigntimePropertyAsArray.js";
2
-
3
1
  const rLocale = /^((?:[A-Z]{2,3}(?:-[A-Z]{3}){0,3})|[A-Z]{4}|[A-Z]{5,8})(?:-([A-Z]{4}))?(?:-([A-Z]{2}|[0-9]{3}))?((?:-[0-9A-Z]{5,8}|-[0-9][0-9A-Z]{3})*)((?:-[0-9A-WYZ](?:-[0-9A-Z]{2,8})+)*)(?:-(X(?:-[0-9A-Z]{1,8})+))?$/i;
4
2
 
5
3
  class Locale {
@@ -88,14 +86,6 @@ class Locale {
88
86
  }
89
87
  return r.join("-");
90
88
  }
91
-
92
- static get _cldrLocales() {
93
- return getDesigntimePropertyAsArray("$cldr-locales:ar,ar_EG,ar_SA,bg,br,ca,cs,da,de,de_AT,de_CH,el,el_CY,en,en_AU,en_GB,en_HK,en_IE,en_IN,en_NZ,en_PG,en_SG,en_ZA,es,es_AR,es_BO,es_CL,es_CO,es_MX,es_PE,es_UY,es_VE,et,fa,fi,fr,fr_BE,fr_CA,fr_CH,fr_LU,he,hi,hr,hu,id,it,it_CH,ja,kk,ko,lt,lv,ms,nb,nl,nl_BE,nn,pl,pt,pt_PT,ro,ru,ru_UA,sk,sl,sr,sv,th,tr,uk,vi,zh_CN,zh_HK,zh_SG,zh_TW$");
94
- }
95
-
96
- static get _coreI18nLocales() {
97
- return getDesigntimePropertyAsArray("$core-i18n-locales:,ar,bg,ca,cs,da,de,el,en,es,et,fi,fr,hi,hr,hu,it,iw,ja,ko,lt,lv,nl,no,pl,pt,ro,ru,sh,sk,sl,sv,th,tr,uk,vi,zh_CN,zh_TW$");
98
- }
99
89
  }
100
90
 
101
91
  export default Locale;
@@ -0,0 +1,14 @@
1
+ const rtlAwareSet = new Set();
2
+
3
+ const markAsRtlAware = klass => {
4
+ rtlAwareSet.add(klass);
5
+ };
6
+
7
+ const isRtlAware = klass => {
8
+ return rtlAwareSet.has(klass);
9
+ };
10
+
11
+ export {
12
+ markAsRtlAware,
13
+ isRtlAware,
14
+ };
@@ -0,0 +1,17 @@
1
+ import { reRenderAllUI5Elements } from "../Render.js";
2
+ import { fireDirectionChange } from "./directionChange.js";
3
+
4
+ /**
5
+ * Re-renders all RTL-aware UI5 Elements.
6
+ * Call this method whenever you change the "dir" property anywhere in your HTML page
7
+ * Example: document.body.dir = "rtl"; applyDirection();
8
+ *
9
+ * @returns {Promise<void>}
10
+ */
11
+ const applyDirection = async () => {
12
+ const listenersResults = fireDirectionChange();
13
+ await Promise.all(listenersResults);
14
+ await reRenderAllUI5Elements({ rtlAware: true });
15
+ };
16
+
17
+ export default applyDirection;
@@ -0,0 +1,32 @@
1
+ import EventProvider from "../EventProvider.js";
2
+
3
+ const eventProvider = new EventProvider();
4
+ const DIR_CHANGE = "directionChange";
5
+
6
+ /**
7
+ * Attach a callback that will be executed whenever the application calls the "applyDirection" function
8
+ * @public
9
+ * @param listener
10
+ */
11
+ const attachDirectionChange = listener => {
12
+ eventProvider.attachEvent(DIR_CHANGE, listener);
13
+ };
14
+
15
+ /**
16
+ * Detach a callback that was passed with "attachDirectionChange"
17
+ * @public
18
+ * @param listener
19
+ */
20
+ const detachDirectionChange = listener => {
21
+ eventProvider.detachEvent(DIR_CHANGE, listener);
22
+ };
23
+
24
+ const fireDirectionChange = () => {
25
+ return eventProvider.fireEvent(DIR_CHANGE);
26
+ };
27
+
28
+ export {
29
+ attachDirectionChange,
30
+ detachDirectionChange,
31
+ fireDirectionChange,
32
+ };
@@ -0,0 +1,28 @@
1
+ import { getRTL } from "../config/RTL.js";
2
+
3
+ const GLOBAL_DIR_CSS_VAR = "--_ui5_dir";
4
+
5
+ const getEffectiveDir = element => {
6
+ const doc = window.document;
7
+ const dirValues = ["ltr", "rtl"]; // exclude "auto" and "" from all calculations
8
+ const locallyAppliedDir = getComputedStyle(element).getPropertyValue(GLOBAL_DIR_CSS_VAR);
9
+
10
+ // In that order, inspect the CSS Var (for modern browsers), the element itself, html and body (for IE fallback)
11
+ if (dirValues.includes(locallyAppliedDir)) {
12
+ return locallyAppliedDir;
13
+ }
14
+ if (dirValues.includes(element.dir)) {
15
+ return element.dir;
16
+ }
17
+ if (dirValues.includes(doc.documentElement.dir)) {
18
+ return doc.documentElement.dir;
19
+ }
20
+ if (dirValues.includes(doc.body.dir)) {
21
+ return doc.body.dir;
22
+ }
23
+
24
+ // Finally, check the configuration for explicitly set RTL or language-implied RTL
25
+ return getRTL() ? "rtl" : undefined;
26
+ };
27
+
28
+ export default getEffectiveDir;
@@ -0,0 +1,41 @@
1
+ import detectNavigatorLanguage from "../util/detectNavigatorLanguage.js";
2
+ import { getLanguage as getConfigLanguage } from "../config/Language.js";
3
+ import Locale from "./Locale.js";
4
+
5
+ const cache = new Map();
6
+
7
+ const getLocaleInstance = lang => {
8
+ if (!cache.has(lang)) {
9
+ cache.set(lang, new Locale(lang));
10
+ }
11
+
12
+ return cache.get(lang);
13
+ };
14
+
15
+ const convertToLocaleOrNull = lang => {
16
+ try {
17
+ if (lang && typeof lang === "string") {
18
+ return getLocaleInstance(lang);
19
+ }
20
+ } catch (e) {
21
+ // ignore
22
+ }
23
+ };
24
+
25
+ /**
26
+ * Returns the locale based on the parameter or configured language Configuration#getLanguage
27
+ * If no language has been configured - a new locale based on browser language is returned
28
+ */
29
+ const getLocale = lang => {
30
+ if (lang) {
31
+ return convertToLocaleOrNull(lang);
32
+ }
33
+
34
+ if (getConfigLanguage()) {
35
+ return getLocaleInstance(getConfigLanguage());
36
+ }
37
+
38
+ return convertToLocaleOrNull(detectNavigatorLanguage());
39
+ };
40
+
41
+ export default getLocale;
@@ -0,0 +1,22 @@
1
+ import EventProvider from "../EventProvider.js";
2
+
3
+ const eventProvider = new EventProvider();
4
+ const LANG_CHANGE = "languageChange";
5
+
6
+ const attachLanguageChange = listener => {
7
+ eventProvider.attachEvent(LANG_CHANGE, listener);
8
+ };
9
+
10
+ const detachLanguageChange = listener => {
11
+ eventProvider.detachEvent(LANG_CHANGE, listener);
12
+ };
13
+
14
+ const fireLanguageChange = lang => {
15
+ return eventProvider.fireEventAsync(LANG_CHANGE, lang);
16
+ };
17
+
18
+ export {
19
+ attachLanguageChange,
20
+ detachLanguageChange,
21
+ fireLanguageChange,
22
+ };
@@ -0,0 +1,28 @@
1
+ import { DEFAULT_LOCALE } from "../generated/AssetParameters.js";
2
+
3
+ /**
4
+ * Calculates the next fallback locale for the given locale.
5
+ *
6
+ * @param {string} locale Locale string in Java format (underscores) or null
7
+ * @returns {string} Next fallback Locale or "en" if no fallbacks found.
8
+ */
9
+ const nextFallbackLocale = locale => {
10
+ if (!locale) {
11
+ return DEFAULT_LOCALE;
12
+ }
13
+
14
+ if (locale === "zh_HK") {
15
+ return "zh_TW";
16
+ }
17
+
18
+ // if there are multiple segments (separated by underscores), remove the last one
19
+ const p = locale.lastIndexOf("_");
20
+ if (p >= 0) {
21
+ return locale.slice(0, p);
22
+ }
23
+
24
+ // for any language but the default, fallback to the default first before falling back to the 'raw' language (empty string)
25
+ return locale !== DEFAULT_LOCALE ? DEFAULT_LOCALE : "";
26
+ };
27
+
28
+ export default nextFallbackLocale;