@ui5/webcomponents-base 0.0.0-1b568f22b → 0.0.0-1e08ebdef

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 (330) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +179 -0
  3. package/README.md +26 -2
  4. package/bundle.esm.js +16 -7
  5. package/dist/AssetRegistry.js +8 -7
  6. package/dist/Boot.js +43 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsScope.js +108 -0
  9. package/dist/DOMObserver.js +65 -0
  10. package/dist/Device.js +66 -776
  11. package/dist/EventProvider.js +30 -26
  12. package/dist/FontFace.js +19 -62
  13. package/dist/InitialConfiguration.js +43 -8
  14. package/dist/Keys.js +78 -0
  15. package/dist/ManagedStyles.js +83 -0
  16. package/dist/MediaRange.js +109 -0
  17. package/dist/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  18. package/dist/Render.js +175 -0
  19. package/dist/RenderQueue.js +41 -17
  20. package/dist/RenderScheduler.js +24 -158
  21. package/dist/StaticArea.js +1 -39
  22. package/dist/StaticAreaItem.js +56 -63
  23. package/dist/SystemCSSVars.js +4 -25
  24. package/dist/Theming.js +2 -1
  25. package/dist/UI5Element.js +391 -351
  26. package/dist/UI5ElementMetadata.js +157 -17
  27. package/dist/asset-registries/Icons.js +129 -14
  28. package/dist/asset-registries/Illustrations.js +30 -0
  29. package/dist/asset-registries/LocaleData.js +99 -65
  30. package/dist/asset-registries/Themes.js +23 -32
  31. package/dist/asset-registries/i18n.js +63 -48
  32. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  33. package/dist/config/AnimationMode.js +11 -1
  34. package/dist/config/Language.js +33 -6
  35. package/dist/config/Theme.js +14 -0
  36. package/dist/css/FontFace.css +45 -0
  37. package/dist/css/OverrideFontFace.css +32 -0
  38. package/dist/css/SystemCSSVars.css +17 -0
  39. package/dist/delegate/ItemNavigation.js +239 -170
  40. package/dist/delegate/ResizeHandler.js +78 -37
  41. package/dist/delegate/ScrollEnablement.js +49 -20
  42. package/dist/features/OpenUI5Support.js +42 -7
  43. package/dist/generated/AssetParameters.js +1 -1
  44. package/dist/generated/css/FontFace.css.js +5 -0
  45. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  46. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  47. package/dist/getSharedResource.js +30 -0
  48. package/dist/i18nBundle.js +58 -5
  49. package/dist/isLegacyBrowser.js +3 -0
  50. package/dist/locale/applyDirection.js +6 -4
  51. package/dist/locale/directionChange.js +32 -0
  52. package/dist/locale/getEffectiveDir.js +28 -0
  53. package/dist/locale/getLocale.js +12 -2
  54. package/dist/locale/languageChange.js +1 -1
  55. package/dist/renderer/LitRenderer.js +26 -7
  56. package/dist/renderer/directives/style-map.js +72 -0
  57. package/dist/renderer/executeTemplate.js +17 -0
  58. package/dist/resources/bundle.esm.js +17 -109
  59. package/dist/resources/bundle.esm.js.map +1 -1
  60. package/dist/sap/base/Log.js +241 -0
  61. package/dist/sap/base/assert.js +8 -0
  62. package/dist/sap/base/security/URLListValidator.js +148 -0
  63. package/dist/sap/base/security/encodeCSS.js +14 -0
  64. package/dist/sap/base/security/encodeXML.js +23 -0
  65. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  66. package/dist/sap/base/strings/toHex.js +8 -0
  67. package/dist/sap/base/util/now.js +7 -0
  68. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  69. package/dist/test-resources/assets/Themes.js +10 -6
  70. package/dist/test-resources/elements/Parent.js +6 -2
  71. package/dist/test-resources/elements/WithStaticArea.js +2 -1
  72. package/dist/test-resources/pages/AllTestElements.html +3 -3
  73. package/dist/test-resources/pages/Configuration.html +0 -2
  74. package/dist/test-resources/pages/ConfigurationScript.html +0 -2
  75. package/dist/test-resources/pages/assets/messagebundle_de.properties +1 -0
  76. package/dist/test-resources/pages/assets/messagebundle_en.properties +1 -0
  77. package/dist/test-resources/pages/assets/messagebundle_es.properties +1 -0
  78. package/dist/test-resources/pages/assets/messagebundle_fr.properties +1 -0
  79. package/dist/test-resources/pages/i18n.html +33 -0
  80. package/dist/test-resources/specs/ConfigurationChange.spec.js +10 -8
  81. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  82. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  83. package/dist/test-resources/specs/CustomTheme.spec.js +9 -7
  84. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  85. package/dist/test-resources/specs/StaticArea.spec.js +56 -12
  86. package/dist/test-resources/specs/Theming.spec.js +12 -10
  87. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  88. package/dist/test-resources/specs/UI5ElementLifecycle.js +19 -14
  89. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  90. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  91. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  92. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  93. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  94. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  95. package/dist/theming/CustomStyle.js +47 -6
  96. package/dist/theming/ThemeLoaded.js +22 -0
  97. package/dist/theming/applyTheme.js +13 -15
  98. package/dist/theming/getConstructableStyle.js +15 -10
  99. package/dist/theming/getEffectiveLinksHrefs.js +20 -0
  100. package/dist/theming/getEffectiveStyle.js +23 -8
  101. package/dist/theming/getStylesString.js +15 -0
  102. package/dist/theming/getThemeDesignerTheme.js +25 -5
  103. package/dist/theming/preloadLinks.js +23 -0
  104. package/dist/types/CSSColor.js +9 -0
  105. package/dist/types/CalendarType.js +1 -1
  106. package/dist/types/DataType.js +13 -1
  107. package/dist/types/Float.js +4 -0
  108. package/dist/types/Integer.js +4 -0
  109. package/dist/types/InvisibleMessageMode.js +30 -0
  110. package/dist/types/ItemNavigationBehavior.js +2 -7
  111. package/dist/types/PopupState.js +1 -1
  112. package/dist/types/ValueState.js +1 -1
  113. package/dist/updateShadowRoot.js +30 -0
  114. package/dist/util/AriaLabelHelper.js +41 -0
  115. package/dist/util/Caret.js +45 -0
  116. package/dist/util/ColorConversion.js +370 -0
  117. package/dist/util/FocusableElements.js +25 -7
  118. package/dist/util/HTMLSanitizer.js +7 -0
  119. package/dist/util/InvisibleMessage.js +58 -0
  120. package/dist/util/PopupUtils.js +93 -0
  121. package/dist/util/SlotsHelper.js +43 -0
  122. package/dist/util/TabbableElements.js +1 -1
  123. package/dist/util/arraysAreEqual.js +15 -0
  124. package/dist/util/clamp.js +12 -0
  125. package/dist/util/createLinkInHead.js +19 -0
  126. package/dist/util/debounce.js +17 -0
  127. package/dist/util/escapeRegex.js +10 -0
  128. package/dist/util/generateHighlightedMarkup.js +42 -0
  129. package/dist/util/getActiveElement.js +11 -0
  130. package/dist/util/getClassCopy.js +10 -0
  131. package/dist/util/getEffectiveContentDensity.js +5 -0
  132. package/dist/util/getSingletonElementInstance.js +13 -0
  133. package/dist/util/isElementInView.js +15 -0
  134. package/dist/util/isNodeHidden.js +1 -5
  135. package/dist/util/isNodeTabbable.js +4 -4
  136. package/dist/util/isValidPropertyName.js +9 -3
  137. package/hash.txt +1 -0
  138. package/index.js +1 -1
  139. package/lib/generate-asset-parameters/index.js +0 -1
  140. package/lib/generate-styles/index.js +18 -0
  141. package/package-scripts.js +37 -19
  142. package/package.json +20 -13
  143. package/src/AssetRegistry.js +8 -7
  144. package/src/Boot.js +43 -0
  145. package/src/CSP.js +59 -0
  146. package/src/CustomElementsScope.js +108 -0
  147. package/src/DOMObserver.js +65 -0
  148. package/src/Device.js +66 -776
  149. package/src/EventProvider.js +30 -26
  150. package/src/FontFace.js +19 -62
  151. package/src/InitialConfiguration.js +43 -8
  152. package/src/Keys.js +78 -0
  153. package/src/ManagedStyles.js +83 -0
  154. package/src/MediaRange.js +109 -0
  155. package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  156. package/src/Render.js +175 -0
  157. package/src/RenderQueue.js +41 -17
  158. package/src/RenderScheduler.js +24 -158
  159. package/src/StaticArea.js +1 -39
  160. package/src/StaticAreaItem.js +56 -63
  161. package/src/SystemCSSVars.js +4 -25
  162. package/src/Theming.js +2 -1
  163. package/src/UI5Element.js +391 -351
  164. package/src/UI5ElementMetadata.js +157 -17
  165. package/src/asset-registries/Icons.js +129 -14
  166. package/src/asset-registries/Illustrations.js +30 -0
  167. package/src/asset-registries/LocaleData.js +99 -65
  168. package/src/asset-registries/Themes.js +23 -32
  169. package/src/asset-registries/i18n.js +63 -48
  170. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  171. package/src/config/AnimationMode.js +11 -1
  172. package/src/config/Language.js +33 -6
  173. package/src/config/Theme.js +14 -0
  174. package/src/css/FontFace.css +45 -0
  175. package/src/css/OverrideFontFace.css +32 -0
  176. package/src/css/SystemCSSVars.css +17 -0
  177. package/src/delegate/ItemNavigation.js +239 -170
  178. package/src/delegate/ResizeHandler.js +78 -37
  179. package/src/delegate/ScrollEnablement.js +49 -20
  180. package/src/features/OpenUI5Support.js +42 -7
  181. package/src/getSharedResource.js +30 -0
  182. package/src/i18nBundle.js +58 -5
  183. package/src/isLegacyBrowser.js +3 -0
  184. package/src/locale/applyDirection.js +6 -4
  185. package/src/locale/directionChange.js +32 -0
  186. package/src/locale/getEffectiveDir.js +28 -0
  187. package/src/locale/getLocale.js +12 -2
  188. package/src/locale/languageChange.js +1 -1
  189. package/src/renderer/LitRenderer.js +26 -7
  190. package/src/renderer/directives/style-map.js +72 -0
  191. package/src/renderer/executeTemplate.js +17 -0
  192. package/src/theming/CustomStyle.js +47 -6
  193. package/src/theming/ThemeLoaded.js +22 -0
  194. package/src/theming/applyTheme.js +13 -15
  195. package/src/theming/getConstructableStyle.js +15 -10
  196. package/src/theming/getEffectiveLinksHrefs.js +20 -0
  197. package/src/theming/getEffectiveStyle.js +23 -8
  198. package/src/theming/getStylesString.js +15 -0
  199. package/src/theming/getThemeDesignerTheme.js +25 -5
  200. package/src/theming/preloadLinks.js +23 -0
  201. package/src/types/CSSColor.js +9 -0
  202. package/src/types/CalendarType.js +1 -1
  203. package/src/types/DataType.js +13 -1
  204. package/src/types/Float.js +4 -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/PopupState.js +1 -1
  209. package/src/types/ValueState.js +1 -1
  210. package/src/updateShadowRoot.js +30 -0
  211. package/src/util/AriaLabelHelper.js +41 -0
  212. package/src/util/Caret.js +45 -0
  213. package/src/util/ColorConversion.js +370 -0
  214. package/src/util/FocusableElements.js +25 -7
  215. package/src/util/HTMLSanitizer.js +7 -0
  216. package/src/util/InvisibleMessage.js +58 -0
  217. package/src/util/PopupUtils.js +93 -0
  218. package/src/util/SlotsHelper.js +43 -0
  219. package/src/util/TabbableElements.js +1 -1
  220. package/src/util/arraysAreEqual.js +15 -0
  221. package/src/util/clamp.js +12 -0
  222. package/src/util/createLinkInHead.js +19 -0
  223. package/src/util/debounce.js +17 -0
  224. package/src/util/escapeRegex.js +10 -0
  225. package/src/util/generateHighlightedMarkup.js +42 -0
  226. package/src/util/getActiveElement.js +11 -0
  227. package/src/util/getClassCopy.js +10 -0
  228. package/src/util/getEffectiveContentDensity.js +5 -0
  229. package/src/util/getSingletonElementInstance.js +13 -0
  230. package/src/util/isElementInView.js +15 -0
  231. package/src/util/isNodeHidden.js +1 -5
  232. package/src/util/isNodeTabbable.js +4 -4
  233. package/src/util/isValidPropertyName.js +9 -3
  234. package/used-modules.txt +10 -0
  235. package/bundle.es5.js +0 -28
  236. package/dist/SVGIconRegistry.js +0 -60
  237. package/dist/boot.js +0 -34
  238. package/dist/compatibility/DOMObserver.js +0 -62
  239. package/dist/compatibility/patchNodeValue.js +0 -24
  240. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  241. package/dist/delegate/CustomResize.js +0 -78
  242. package/dist/delegate/NativeResize.js +0 -44
  243. package/dist/features/PropertiesFormatSupport.js +0 -8
  244. package/dist/features/browsersupport/Edge.js +0 -6
  245. package/dist/features/browsersupport/IE11.js +0 -41
  246. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  247. package/dist/renderer/ifDefined.js +0 -21
  248. package/dist/resources/bundle.es5.js +0 -212
  249. package/dist/resources/bundle.es5.js.map +0 -1
  250. package/dist/theming/CSSVarsPonyfill.js +0 -24
  251. package/dist/theming/adaptCSSForIE.js +0 -90
  252. package/dist/theming/createComponentStyleTag.js +0 -49
  253. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  254. package/dist/thirdparty/Array.from.js +0 -16
  255. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  256. package/dist/thirdparty/Array.prototype.find.js +0 -46
  257. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  258. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  259. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  260. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  261. package/dist/thirdparty/Number.isInteger.js +0 -5
  262. package/dist/thirdparty/Number.isNaN.js +0 -1
  263. package/dist/thirdparty/Number.parseInt.js +0 -1
  264. package/dist/thirdparty/Object.assign.js +0 -31
  265. package/dist/thirdparty/Object.entries.js +0 -11
  266. package/dist/thirdparty/Symbol.js +0 -2
  267. package/dist/thirdparty/WeakSet.js +0 -27
  268. package/dist/thirdparty/es6-string-methods.js +0 -182
  269. package/dist/thirdparty/events-polyfills.js +0 -89
  270. package/dist/thirdparty/fetch.js +0 -1
  271. package/dist/thirdparty/template.js +0 -600
  272. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  273. package/dist/util/isSlot.js +0 -3
  274. package/dist/webcomponentsjs/LICENSE.md +0 -19
  275. package/dist/webcomponentsjs/README.md +0 -229
  276. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  277. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  278. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  279. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  280. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  281. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  282. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  283. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  284. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  285. package/dist/webcomponentsjs/package.json +0 -46
  286. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  287. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  288. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  289. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  290. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  291. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  292. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  293. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  294. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  295. package/src/SVGIconRegistry.js +0 -60
  296. package/src/boot.js +0 -34
  297. package/src/compatibility/DOMObserver.js +0 -62
  298. package/src/compatibility/patchNodeValue.js +0 -24
  299. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  300. package/src/delegate/CustomResize.js +0 -78
  301. package/src/delegate/NativeResize.js +0 -44
  302. package/src/features/PropertiesFormatSupport.js +0 -8
  303. package/src/features/browsersupport/Edge.js +0 -6
  304. package/src/features/browsersupport/IE11.js +0 -41
  305. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  306. package/src/renderer/ifDefined.js +0 -21
  307. package/src/theming/CSSVarsPonyfill.js +0 -24
  308. package/src/theming/adaptCSSForIE.js +0 -90
  309. package/src/theming/createComponentStyleTag.js +0 -49
  310. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  311. package/src/thirdparty/Array.from.js +0 -16
  312. package/src/thirdparty/Array.prototype.fill.js +0 -44
  313. package/src/thirdparty/Array.prototype.find.js +0 -46
  314. package/src/thirdparty/Array.prototype.includes.js +0 -51
  315. package/src/thirdparty/Element.prototype.closest.js +0 -11
  316. package/src/thirdparty/Element.prototype.matches.js +0 -6
  317. package/src/thirdparty/Map.prototype.keys.js +0 -9
  318. package/src/thirdparty/Number.isInteger.js +0 -5
  319. package/src/thirdparty/Number.isNaN.js +0 -1
  320. package/src/thirdparty/Number.parseInt.js +0 -1
  321. package/src/thirdparty/Object.assign.js +0 -31
  322. package/src/thirdparty/Object.entries.js +0 -11
  323. package/src/thirdparty/Symbol.js +0 -2
  324. package/src/thirdparty/WeakSet.js +0 -27
  325. package/src/thirdparty/es6-string-methods.js +0 -182
  326. package/src/thirdparty/events-polyfills.js +0 -89
  327. package/src/thirdparty/fetch.js +0 -1
  328. package/src/thirdparty/template.js +0 -600
  329. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  330. package/src/util/isSlot.js +0 -3
@@ -1,9 +1,7 @@
1
- import { fetchJsonOnce, fetchTextOnce } from "../util/FetchHelper.js";
2
1
  import { DEFAULT_THEME } from "../generated/AssetParameters.js";
3
- import getFileExtension from "../util/getFileExtension.js";
4
2
 
5
- const themeURLs = new Map();
6
3
  const themeStyles = new Map();
4
+ const loaders = new Map();
7
5
  const registeredPackages = new Set();
8
6
  const registeredThemes = new Set();
9
7
 
@@ -15,29 +13,19 @@ const registeredThemes = new Set();
15
13
  * Example usage:
16
14
  * 1) Pass the CSS Vars as a string directly.
17
15
  * registerThemeProperties("my-package", "my_theme", ":root{--var1: red;}");
18
- * 2) Pass the CSS Vars as an object directly
19
- * registerThemeProperties("my-package", "my_theme", {"_": ":root{--var1: red;}"});
20
- * 3) Pass a URL to a CSS file, containing the CSS Vars. Will be fetched on demand, not upon registration.
21
- * registerThemeProperties("my-package", "my_theme", "http://url/to/my/theme.css");
22
- * 4) Pass a URL to a JSON file, containing the CSS Vars in its "_" property. Will be fetched on demand, not upon registration.
23
- * registerThemeProperties("my-package", "my_theme", "http://url/to/my/theme.json");
24
16
  *
25
17
  * @public
26
18
  * @param packageName - the NPM package for which CSS Vars are registered
27
19
  * @param themeName - the theme which the CSS Vars implement
28
- * @param style - can be one of four options: a string, an object with a "_" property, URL to a CSS file, or URL to a JSON file with a "_" property
20
+ * @param style - the style content directly
21
+ * @deprecated
29
22
  */
30
- const registerThemeProperties = (packageName, themeName, style) => {
31
- if (style._) {
32
- // JSON object like ({"_": ":root"})
33
- themeStyles.set(`${packageName}_${themeName}`, style._);
34
- } else if (style.includes(":root") || style === "") {
35
- // pure string, including empty string
36
- themeStyles.set(`${packageName}_${themeName}`, style);
37
- } else {
38
- // url for fetching
39
- themeURLs.set(`${packageName}_${themeName}`, style);
40
- }
23
+ const registerThemeProperties = (_packageName, _themeName, _style) => {
24
+ throw new Error("`registerThemeProperties` has been depracated. Use `registerThemePropertiesLoader` instead.");
25
+ };
26
+
27
+ const registerThemePropertiesLoader = (packageName, themeName, loader) => {
28
+ loaders.set(`${packageName}/${themeName}`, loader);
41
29
  registeredPackages.add(packageName);
42
30
  registeredThemes.add(themeName);
43
31
  };
@@ -54,23 +42,25 @@ const getThemeProperties = async (packageName, themeName) => {
54
42
  return themeStyles.get(`${packageName}_${DEFAULT_THEME}`);
55
43
  }
56
44
 
57
- const data = await fetchThemeProperties(packageName, themeName);
45
+ const loader = loaders.get(`${packageName}/${themeName}`);
46
+ if (!loader) {
47
+ // no themes for package
48
+ console.error(`Theme [${themeName}] not registered for package [${packageName}]`); /* eslint-disable-line */
49
+ return;
50
+ }
51
+ let data;
52
+ try {
53
+ data = await loader(themeName);
54
+ } catch (e) {
55
+ console.error(packageName, e.message); /* eslint-disable-line */
56
+ return;
57
+ }
58
58
  const themeProps = data._ || data;
59
59
 
60
60
  themeStyles.set(`${packageName}_${themeName}`, themeProps);
61
61
  return themeProps;
62
62
  };
63
63
 
64
- const fetchThemeProperties = async (packageName, themeName) => {
65
- const url = themeURLs.get(`${packageName}_${themeName}`);
66
-
67
- if (!url) {
68
- throw new Error(`You have to import the ${packageName}/dist/Assets.js module to switch to additional themes`);
69
- }
70
-
71
- return getFileExtension(url) === ".css" ? fetchTextOnce(url) : fetchJsonOnce(url);
72
- };
73
-
74
64
  const getRegisteredPackages = () => {
75
65
  return registeredPackages;
76
66
  };
@@ -80,6 +70,7 @@ const isThemeRegistered = theme => {
80
70
  };
81
71
 
82
72
  export {
73
+ registerThemePropertiesLoader,
83
74
  registerThemeProperties,
84
75
  getThemeProperties,
85
76
  getRegisteredPackages,
@@ -1,21 +1,31 @@
1
- import { getFeature } from "../FeaturesRegistry.js";
2
1
  import getLocale from "../locale/getLocale.js";
3
2
  import { attachLanguageChange } from "../locale/languageChange.js";
4
- import { fetchTextOnce } from "../util/FetchHelper.js";
5
3
  import normalizeLocale from "../locale/normalizeLocale.js";
6
4
  import nextFallbackLocale from "../locale/nextFallbackLocale.js";
7
5
  import { DEFAULT_LANGUAGE } from "../generated/AssetParameters.js";
6
+ import { getFetchDefaultLanguage } from "../config/Language.js";
7
+
8
+ // contains package names for which the warning has been shown
9
+ const warningShown = new Set();
10
+ const reportedErrors = new Set();
8
11
 
9
12
  const bundleData = new Map();
10
- const bundleURLs = new Map();
13
+ const bundlePromises = new Map();
14
+ const loaders = new Map();
11
15
 
12
16
  /**
13
- * Sets a map with texts and ID the are related to.
14
- * @param {string} packageName package ID that the i18n bundle will be related to
15
- * @param {Object} data an object with string locales as keys and text translataions as values
16
- * @public
17
+ *
18
+ * @param {string} packageName for which package this loader can fetch data
19
+ * @param {function} loader async function that will be passed a localeId and should return a JSON object
20
+ * @param {Array} localeIds Array of locale IDs that this loader can handle
17
21
  */
18
- const setI18nBundleData = (packageName, data) => {
22
+ const registerI18nLoader = (packageName, localeId, loader) => {
23
+ // register loader by key
24
+ const bundleKey = `${packageName}/${localeId}`;
25
+ loaders.set(bundleKey, loader);
26
+ };
27
+
28
+ const _setI18nBundleData = (packageName, data) => {
19
29
  bundleData.set(packageName, data);
20
30
  };
21
31
 
@@ -24,18 +34,36 @@ const getI18nBundleData = packageName => {
24
34
  };
25
35
 
26
36
  /**
27
- * Registers a map of locale/url information, to be used by the <code>fetchI18nBundle</code> method.
28
- * Note: In order to be able to register ".properties" files, you must import the following module:
29
- * import "@ui5/webcomponents-base/dist/features/PropertiesFormatSupport.js";
30
- *
31
- * @param {string} packageName package ID that the i18n bundle will be related to
32
- * @param {Object} bundle an object with string locales as keys and the URLs (in .json or .properties format - see the note above) where the corresponding locale can be fetched from, f.e {"en": "path/en.json", ...}
33
- *
34
37
  * @public
38
+ * @deprecated
35
39
  */
36
- const registerI18nBundle = (packageName, bundle) => {
37
- const oldBundle = bundleURLs.get(packageName) || {};
38
- bundleURLs.set(packageName, Object.assign({}, oldBundle, bundle));
40
+ const registerI18nBundle = (_packageName, _bundle) => {
41
+ throw new Error("This method has been removed. Use `registerI18nLoader` instead.");
42
+ };
43
+
44
+ const _hasLoader = (packageName, localeId) => {
45
+ const bundleKey = `${packageName}/${localeId}`;
46
+ return loaders.has(bundleKey);
47
+ };
48
+
49
+ // load bundle over the network once
50
+ const _loadMessageBundleOnce = (packageName, localeId) => {
51
+ const bundleKey = `${packageName}/${localeId}`;
52
+ const loadMessageBundle = loaders.get(bundleKey);
53
+
54
+ if (!bundlePromises.get(bundleKey)) {
55
+ bundlePromises.set(bundleKey, loadMessageBundle(localeId));
56
+ }
57
+
58
+ return bundlePromises.get(bundleKey);
59
+ };
60
+
61
+ const _showAssetsWarningOnce = packageName => {
62
+ if (!warningShown.has(packageName)) {
63
+ console.warn(`[${packageName}]: Message bundle assets are not configured. Falling back to English texts.`, /* eslint-disable-line */
64
+ ` Add \`import "${packageName}/dist/Assets.js"\` in your bundle and make sure your build tool supports dynamic imports and JSON imports. See section "Assets" in the documentation for more information.`); /* eslint-disable-line */
65
+ warningShown.add(packageName);
66
+ }
39
67
  };
40
68
 
41
69
  /**
@@ -48,48 +76,35 @@ const registerI18nBundle = (packageName, bundle) => {
48
76
  * @public
49
77
  */
50
78
  const fetchI18nBundle = async packageName => {
51
- const bundlesForPackage = bundleURLs.get(packageName);
52
-
53
- if (!bundlesForPackage) {
54
- console.warn(`Message bundle assets are not configured. Falling back to English texts.`, /* eslint-disable-line */
55
- ` You need to import ${packageName}/dist/Assets.js with a build tool that supports JSON imports.`); /* eslint-disable-line */
56
- return;
57
- }
58
-
59
79
  const language = getLocale().getLanguage();
80
+ const region = getLocale().getRegion();
81
+ let localeId = normalizeLocale(language + (region ? `-${region}` : ``));
60
82
 
61
- let localeId = normalizeLocale(language);
62
- while (localeId !== DEFAULT_LANGUAGE && !bundlesForPackage[localeId]) {
83
+ while (localeId !== DEFAULT_LANGUAGE && !_hasLoader(packageName, localeId)) {
63
84
  localeId = nextFallbackLocale(localeId);
64
85
  }
65
86
 
66
- if (!bundlesForPackage[localeId]) {
67
- setI18nBundleData(packageName, null); // reset for the default language (if data was set for a previous language)
87
+ // use default language unless configured to always fetch it from the network
88
+ const fetchDefaultLanguage = getFetchDefaultLanguage();
89
+ if (localeId === DEFAULT_LANGUAGE && !fetchDefaultLanguage) {
90
+ _setI18nBundleData(packageName, null); // reset for the default language (if data was set for a previous language)
68
91
  return;
69
92
  }
70
93
 
71
- const bundleURL = bundlesForPackage[localeId];
72
-
73
- if (typeof bundleURL === "object") { // inlined from build
74
- setI18nBundleData(packageName, bundleURL);
94
+ if (!_hasLoader(packageName, localeId)) {
95
+ _showAssetsWarningOnce(packageName);
75
96
  return;
76
97
  }
77
98
 
78
- const content = await fetchTextOnce(bundleURL);
79
- let parser;
80
- if (content.startsWith("{")) {
81
- parser = JSON.parse;
82
- } else {
83
- const PropertiesFormatSupport = getFeature("PropertiesFormatSupport");
84
- if (!PropertiesFormatSupport) {
85
- throw new Error(`In order to support .properties files, please: import "@ui5/webcomponents-base/dist/features/PropertiesFormatSupport.js";`);
99
+ try {
100
+ const data = await _loadMessageBundleOnce(packageName, localeId);
101
+ _setI18nBundleData(packageName, data);
102
+ } catch (e) {
103
+ if (!reportedErrors.has(e.message)) {
104
+ reportedErrors.add(e.message);
105
+ console.error(e.message); /* eslint-disable-line */
86
106
  }
87
- parser = PropertiesFormatSupport.parser;
88
107
  }
89
-
90
- const data = parser(content);
91
-
92
- setI18nBundleData(packageName, data);
93
108
  };
94
109
 
95
110
  // When the language changes dynamically (the user calls setLanguage), re-fetch all previously fetched bundles
@@ -99,8 +114,8 @@ attachLanguageChange(() => {
99
114
  });
100
115
 
101
116
  export {
117
+ registerI18nLoader,
102
118
  fetchI18nBundle,
103
119
  registerI18nBundle,
104
- setI18nBundleData,
105
120
  getI18nBundleData,
106
121
  };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Supported icon collection names and aliases.
3
+ *
4
+ * Users might specify a collection, using both the key and the value in the following key-value pairs,
5
+ * e.g the following pairs are completely exchangeable:
6
+ * "SAP-icons-TNT/actor" and "tnt/actor", "BusinessSuiteInAppSymbols/3d" and "business-suite/3d",
7
+ * "SAP-icons-v5/accept" and "horizon/accept".
8
+ *
9
+ * Note: technically, in the code we maintain the collections under the "value" name - "tnt", "business-suite",
10
+ * SAP-icons-v5" and "SAP-icons"(which does not have an alias).
11
+ */
12
+ const IconCollectionsAlias = {
13
+ "SAP-icons-TNT": "tnt",
14
+ "BusinessSuiteInAppSymbols": "business-suite",
15
+ "horizon": "SAP-icons-v5",
16
+ };
17
+
18
+ export default IconCollectionsAlias;
@@ -1,4 +1,5 @@
1
1
  import { getAnimationMode as getConfiguredAnimationMode } from "../InitialConfiguration.js";
2
+ import AnimationMode from "../types/AnimationMode.js";
2
3
 
3
4
  let animationMode;
4
5
 
@@ -10,4 +11,13 @@ const getAnimationMode = () => {
10
11
  return animationMode;
11
12
  };
12
13
 
13
- export { getAnimationMode }; // eslint-disable-line
14
+ const setAnimationMode = newAnimationMode => {
15
+ if (Object.values(AnimationMode).includes(newAnimationMode)) {
16
+ animationMode = newAnimationMode;
17
+ }
18
+ };
19
+
20
+ export {
21
+ getAnimationMode,
22
+ setAnimationMode,
23
+ };
@@ -1,8 +1,12 @@
1
- import { getLanguage as getConfiguredLanguage } from "../InitialConfiguration.js";
1
+ import {
2
+ getLanguage as getConfiguredLanguage,
3
+ getFetchDefaultLanguage as getConfiguredFetchDefaultLanguage,
4
+ } from "../InitialConfiguration.js";
2
5
  import { fireLanguageChange } from "../locale/languageChange.js";
3
- import RenderScheduler from "../RenderScheduler.js";
6
+ import { reRenderAllUI5Elements } from "../Render.js";
4
7
 
5
8
  let language;
9
+ let fetchDefaultLanguage;
6
10
 
7
11
  /**
8
12
  * Returns the currently configured language, or the browser language as a fallback
@@ -29,13 +33,36 @@ const setLanguage = async newLanguage => {
29
33
 
30
34
  language = newLanguage;
31
35
 
32
- const listenersResults = fireLanguageChange(newLanguage);
33
- await Promise.all(listenersResults);
34
- RenderScheduler.reRenderAllUI5Elements({ languageAware: true });
35
- return RenderScheduler.whenFinished();
36
+ await fireLanguageChange(newLanguage);
37
+ await reRenderAllUI5Elements({ languageAware: true });
38
+ };
39
+
40
+ /**
41
+ * Defines if the default language, that is inlined, should be
42
+ * fetched over the network instead of using the inlined one.
43
+ * <b>Note:</b> By default the language will not be fetched.
44
+ *
45
+ * @param {Boolean} fetchDefaultLanguage
46
+ */
47
+ const setFetchDefaultLanguage = fetchDefaultLang => {
48
+ fetchDefaultLanguage = fetchDefaultLang;
49
+ };
50
+
51
+ /**
52
+ * Returns if the default language, that is inlined, should be fetched over the network.
53
+ * @returns {Boolean}
54
+ */
55
+ const getFetchDefaultLanguage = () => {
56
+ if (fetchDefaultLanguage === undefined) {
57
+ setFetchDefaultLanguage(getConfiguredFetchDefaultLanguage());
58
+ }
59
+
60
+ return fetchDefaultLanguage;
36
61
  };
37
62
 
38
63
  export {
39
64
  getLanguage,
40
65
  setLanguage,
66
+ setFetchDefaultLanguage,
67
+ getFetchDefaultLanguage,
41
68
  };
@@ -1,4 +1,5 @@
1
1
  import { getTheme as getConfiguredTheme } from "../InitialConfiguration.js";
2
+ import { reRenderAllUI5Elements } from "../Render.js";
2
3
  import applyTheme from "../theming/applyTheme.js";
3
4
 
4
5
  let theme;
@@ -20,9 +21,22 @@ const setTheme = async newTheme => {
20
21
 
21
22
  // Update CSS Custom Properties
22
23
  await applyTheme(theme);
24
+ await reRenderAllUI5Elements({ themeAware: true });
25
+ };
26
+
27
+ /**
28
+ * Returns if the given theme name is the one currently applied.
29
+ * @private
30
+ * @param {String}
31
+ * @returns {boolean}
32
+ */
33
+ const isTheme = _theme => {
34
+ const currentTheme = getTheme();
35
+ return currentTheme === _theme || currentTheme === `${_theme}_exp`;
23
36
  };
24
37
 
25
38
  export {
26
39
  getTheme,
27
40
  setTheme,
41
+ isTheme,
28
42
  };
@@ -0,0 +1,45 @@
1
+ @font-face {
2
+ font-family: "72";
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ src: local("72"),
6
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents) format("woff2"),
7
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents) format("woff");
8
+ }
9
+
10
+ @font-face {
11
+ font-family: "72full";
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ src: local('72-full'),
15
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents) format("woff2"),
16
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents) format("woff");
17
+
18
+ }
19
+
20
+ @font-face {
21
+ font-family: "72";
22
+ font-style: normal;
23
+ font-weight: 700;
24
+ src: local('72-Bold'),
25
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents) format("woff2"),
26
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents) format("woff");
27
+ }
28
+
29
+ @font-face {
30
+ font-family: "72full";
31
+ font-style: normal;
32
+ font-weight: 700;
33
+ src: local('72-Bold-full'),
34
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents) format("woff2"),
35
+ url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents) format("woff");
36
+ }
37
+
38
+ @font-face {
39
+ font-family: "72Black";
40
+ font-style: bold;
41
+ font-weight: 900;
42
+ src: local('72Black'),
43
+ url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2?ui5-webcomponents) format("woff2"),
44
+ url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff?ui5-webcomponents) format("woff");
45
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Some diacritics are supported by the 72 font:
3
+ * * Grave
4
+ * * Acute
5
+ * * Circumflex
6
+ * * Tilde
7
+ *
8
+ * However, the following diacritics and the combination of multiple diacritics (including the supported ones) are not supported:
9
+ * * Breve
10
+ * * Horn
11
+ * * Dot below
12
+ * * Hook above
13
+ *
14
+ *
15
+ * Override for the characters that aren't covered by the '72' font to other system fonts
16
+ *
17
+ * U+0102-0103: A and a with Breve
18
+ * U+01A0-01A1: O and o with Horn
19
+ * U+01AF-01B0: U and u with Horn
20
+ * U+1EA0-1EB7: A and a with diacritics that are not supported by the font and combination of multiple diacritics
21
+ * U+1EB8-1EC7: E and e with diacritics that are not supported by the font and combination of multiple diacritics
22
+ * U+1EC8-1ECB: I and i with diacritics that are not supported by the font and combination of multiple diacritics
23
+ * U+1ECC-1EE3: O and o with diacritics that are not supported by the font and combination of multiple diacritics
24
+ * U+1EE4-1EF1: U and u with diacritics that are not supported by the font and combination of multiple diacritics
25
+ * U+1EF4-1EF7: Y and y with diacritics that are not supported by the font and combination of multiple diacritics
26
+ *
27
+ */
28
+ @font-face {
29
+ font-family: '72override';
30
+ unicode-range: U+0102-0103, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, U+1EE4-1EF1, U+1EF4-1EF7;
31
+ src: local('Arial'), local('Helvetica'), local('sans-serif');
32
+ }
@@ -0,0 +1,17 @@
1
+ :root {
2
+ --_ui5_content_density:cozy;
3
+ }
4
+
5
+ [data-ui5-compact-size],
6
+ .ui5-content-density-compact,
7
+ .sapUiSizeCompact {
8
+ --_ui5_content_density:compact;
9
+ }
10
+
11
+ [dir="rtl"] {
12
+ --_ui5_dir:rtl;
13
+ }
14
+
15
+ [dir="ltr"] {
16
+ --_ui5_dir:ltr;
17
+ }