@ui5/webcomponents-base 0.0.0-c6d8872f3 → 0.0.0-cf069fb29

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 (351) hide show
  1. package/.eslintignore +5 -0
  2. package/CHANGELOG.md +293 -0
  3. package/README.md +26 -2
  4. package/bundle.esm.js +17 -7
  5. package/dist/AssetRegistry.js +8 -6
  6. package/dist/Boot.js +61 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsRegistry.js +95 -0
  9. package/dist/CustomElementsScope.js +108 -0
  10. package/dist/DOMObserver.js +65 -0
  11. package/dist/Device.js +69 -776
  12. package/dist/EventProvider.js +38 -26
  13. package/dist/FeaturesRegistry.js +4 -1
  14. package/dist/FontFace.js +19 -62
  15. package/dist/InitialConfiguration.js +45 -9
  16. package/dist/Keys.js +112 -2
  17. package/dist/ManagedStyles.js +83 -0
  18. package/dist/MediaRange.js +109 -0
  19. package/dist/PropertiesFileFormat.js +95 -0
  20. package/dist/Render.js +175 -0
  21. package/dist/RenderQueue.js +41 -17
  22. package/dist/RenderScheduler.js +24 -145
  23. package/dist/Runtimes.js +107 -0
  24. package/dist/StaticArea.js +1 -39
  25. package/dist/StaticAreaItem.js +61 -50
  26. package/dist/SystemCSSVars.js +10 -0
  27. package/dist/Theming.js +2 -5
  28. package/dist/UI5Element.js +448 -297
  29. package/dist/UI5ElementMetadata.js +173 -19
  30. package/dist/asset-registries/Icons.js +129 -14
  31. package/dist/asset-registries/Illustrations.js +30 -0
  32. package/dist/asset-registries/LocaleData.js +100 -68
  33. package/dist/asset-registries/Themes.js +35 -32
  34. package/dist/asset-registries/i18n.js +76 -29
  35. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  36. package/dist/config/AnimationMode.js +11 -1
  37. package/dist/config/Language.js +58 -2
  38. package/dist/config/Theme.js +14 -0
  39. package/dist/css/FontFace.css +45 -0
  40. package/dist/css/OverrideFontFace.css +32 -0
  41. package/dist/css/SystemCSSVars.css +17 -0
  42. package/dist/delegate/ItemNavigation.js +244 -171
  43. package/dist/delegate/ResizeHandler.js +78 -38
  44. package/dist/delegate/ScrollEnablement.js +101 -19
  45. package/dist/features/F6Navigation.js +106 -0
  46. package/dist/features/OpenUI5Support.js +56 -7
  47. package/dist/generated/AssetParameters.js +13 -0
  48. package/dist/generated/VersionInfo.js +10 -0
  49. package/dist/generated/css/FontFace.css.js +5 -0
  50. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  51. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  52. package/dist/getSharedResource.js +30 -0
  53. package/dist/i18nBundle.js +59 -8
  54. package/dist/isLegacyBrowser.js +3 -0
  55. package/dist/locale/RTLAwareRegistry.js +14 -0
  56. package/dist/locale/applyDirection.js +17 -0
  57. package/dist/locale/directionChange.js +32 -0
  58. package/dist/locale/getEffectiveDir.js +28 -0
  59. package/dist/locale/getLocale.js +12 -2
  60. package/dist/locale/languageChange.js +22 -0
  61. package/dist/locale/nextFallbackLocale.js +6 -4
  62. package/dist/locale/normalizeLocale.js +7 -1
  63. package/dist/renderer/LitRenderer.js +26 -7
  64. package/dist/renderer/directives/style-map.js +72 -0
  65. package/dist/renderer/executeTemplate.js +17 -0
  66. package/dist/resources/bundle.esm.js +20 -106
  67. package/dist/resources/bundle.esm.js.map +1 -1
  68. package/dist/sap/base/Log.js +241 -0
  69. package/dist/sap/base/assert.js +8 -0
  70. package/dist/sap/base/security/URLListValidator.js +148 -0
  71. package/dist/sap/base/security/encodeCSS.js +14 -0
  72. package/dist/sap/base/security/encodeXML.js +23 -0
  73. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  74. package/dist/sap/base/strings/toHex.js +8 -0
  75. package/dist/sap/base/util/now.js +7 -0
  76. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  77. package/dist/test-resources/assets/Themes.js +10 -6
  78. package/dist/test-resources/elements/Parent.js +6 -2
  79. package/dist/test-resources/elements/WithStaticArea.js +77 -0
  80. package/dist/test-resources/pages/AllTestElements.html +5 -3
  81. package/dist/test-resources/pages/Configuration.html +0 -2
  82. package/dist/test-resources/pages/ConfigurationScript.html +1 -3
  83. package/dist/test-resources/pages/assets/messagebundle_de.properties +1 -0
  84. package/dist/test-resources/pages/assets/messagebundle_en.properties +1 -0
  85. package/dist/test-resources/pages/assets/messagebundle_es.properties +1 -0
  86. package/dist/test-resources/pages/assets/messagebundle_fr.properties +1 -0
  87. package/dist/test-resources/pages/i18n.html +33 -0
  88. package/dist/test-resources/specs/ConfigurationChange.spec.js +11 -9
  89. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  90. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  91. package/dist/test-resources/specs/CustomTheme.spec.js +9 -7
  92. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  93. package/dist/test-resources/specs/StaticArea.spec.js +78 -0
  94. package/dist/test-resources/specs/Theming.spec.js +12 -10
  95. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  96. package/dist/test-resources/specs/UI5ElementLifecycle.js +19 -14
  97. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  98. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  99. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  100. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  101. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  102. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  103. package/dist/theming/CustomStyle.js +47 -6
  104. package/dist/theming/ThemeLoaded.js +22 -0
  105. package/dist/theming/applyTheme.js +69 -9
  106. package/dist/theming/getConstructableStyle.js +15 -10
  107. package/dist/theming/getEffectiveLinksHrefs.js +20 -0
  108. package/dist/theming/getEffectiveStyle.js +23 -8
  109. package/dist/theming/getStylesString.js +15 -0
  110. package/dist/theming/getThemeDesignerTheme.js +87 -0
  111. package/dist/theming/preloadLinks.js +23 -0
  112. package/dist/types/CSSColor.js +9 -0
  113. package/dist/types/CalendarType.js +1 -1
  114. package/dist/types/DataType.js +13 -1
  115. package/dist/types/Float.js +14 -0
  116. package/dist/types/Integer.js +4 -0
  117. package/dist/types/InvisibleMessageMode.js +30 -0
  118. package/dist/types/ItemNavigationBehavior.js +2 -7
  119. package/dist/types/NavigationMode.js +1 -0
  120. package/dist/types/PopupState.js +1 -1
  121. package/dist/types/ValueState.js +1 -1
  122. package/dist/updateShadowRoot.js +30 -0
  123. package/dist/util/AriaLabelHelper.js +41 -0
  124. package/dist/util/Caret.js +45 -0
  125. package/dist/util/ColorConversion.js +370 -0
  126. package/dist/util/FocusableElements.js +30 -11
  127. package/dist/util/HTMLSanitizer.js +7 -0
  128. package/dist/util/InvisibleMessage.js +58 -0
  129. package/dist/util/PopupUtils.js +93 -0
  130. package/dist/util/SlotsHelper.js +43 -0
  131. package/dist/util/TabbableElements.js +5 -1
  132. package/dist/util/arraysAreEqual.js +15 -0
  133. package/dist/util/clamp.js +12 -0
  134. package/dist/util/createLinkInHead.js +19 -0
  135. package/dist/util/debounce.js +17 -0
  136. package/dist/util/detectNavigatorLanguage.js +3 -1
  137. package/dist/util/escapeRegex.js +10 -0
  138. package/dist/util/findNodeOwner.js +35 -0
  139. package/dist/util/generateHighlightedMarkup.js +42 -0
  140. package/dist/util/getActiveElement.js +11 -0
  141. package/dist/util/getClassCopy.js +10 -0
  142. package/dist/util/getEffectiveContentDensity.js +5 -0
  143. package/dist/util/getFileExtension.js +21 -0
  144. package/dist/util/getSingletonElementInstance.js +13 -0
  145. package/dist/util/isElementInView.js +15 -0
  146. package/dist/util/isNodeHidden.js +1 -5
  147. package/dist/util/isNodeTabbable.js +4 -4
  148. package/dist/util/isValidPropertyName.js +11 -2
  149. package/dist/util/setToArray.js +10 -0
  150. package/hash.txt +1 -0
  151. package/index.js +1 -1
  152. package/lib/generate-asset-parameters/index.js +21 -0
  153. package/lib/generate-styles/index.js +18 -0
  154. package/lib/generate-version-info/index.js +27 -0
  155. package/package-scripts.js +43 -17
  156. package/package.json +19 -12
  157. package/src/AssetRegistry.js +8 -6
  158. package/src/Boot.js +61 -0
  159. package/src/CSP.js +59 -0
  160. package/src/CustomElementsRegistry.js +95 -0
  161. package/src/CustomElementsScope.js +108 -0
  162. package/src/DOMObserver.js +65 -0
  163. package/src/Device.js +69 -776
  164. package/src/EventProvider.js +38 -26
  165. package/src/FeaturesRegistry.js +4 -1
  166. package/src/FontFace.js +19 -62
  167. package/src/InitialConfiguration.js +45 -9
  168. package/src/Keys.js +112 -2
  169. package/src/ManagedStyles.js +83 -0
  170. package/src/MediaRange.js +109 -0
  171. package/src/PropertiesFileFormat.js +95 -0
  172. package/src/Render.js +175 -0
  173. package/src/RenderQueue.js +41 -17
  174. package/src/RenderScheduler.js +24 -145
  175. package/src/Runtimes.js +107 -0
  176. package/src/StaticArea.js +1 -39
  177. package/src/StaticAreaItem.js +61 -50
  178. package/src/SystemCSSVars.js +10 -0
  179. package/src/Theming.js +2 -5
  180. package/src/UI5Element.js +448 -297
  181. package/src/UI5ElementMetadata.js +173 -19
  182. package/src/asset-registries/Icons.js +129 -14
  183. package/src/asset-registries/Illustrations.js +30 -0
  184. package/src/asset-registries/LocaleData.js +100 -68
  185. package/src/asset-registries/Themes.js +35 -32
  186. package/src/asset-registries/i18n.js +76 -29
  187. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  188. package/src/config/AnimationMode.js +11 -1
  189. package/src/config/Language.js +58 -2
  190. package/src/config/Theme.js +14 -0
  191. package/src/css/FontFace.css +45 -0
  192. package/src/css/OverrideFontFace.css +32 -0
  193. package/src/css/SystemCSSVars.css +17 -0
  194. package/src/delegate/ItemNavigation.js +244 -171
  195. package/src/delegate/ResizeHandler.js +78 -38
  196. package/src/delegate/ScrollEnablement.js +101 -19
  197. package/src/features/F6Navigation.js +106 -0
  198. package/src/features/OpenUI5Support.js +56 -7
  199. package/src/getSharedResource.js +30 -0
  200. package/src/i18nBundle.js +59 -8
  201. package/src/isLegacyBrowser.js +3 -0
  202. package/src/locale/RTLAwareRegistry.js +14 -0
  203. package/src/locale/applyDirection.js +17 -0
  204. package/src/locale/directionChange.js +32 -0
  205. package/src/locale/getEffectiveDir.js +28 -0
  206. package/src/locale/getLocale.js +12 -2
  207. package/src/locale/languageChange.js +22 -0
  208. package/src/locale/nextFallbackLocale.js +6 -4
  209. package/src/locale/normalizeLocale.js +7 -1
  210. package/src/renderer/LitRenderer.js +26 -7
  211. package/src/renderer/directives/style-map.js +72 -0
  212. package/src/renderer/executeTemplate.js +17 -0
  213. package/src/theming/CustomStyle.js +47 -6
  214. package/src/theming/ThemeLoaded.js +22 -0
  215. package/src/theming/applyTheme.js +69 -9
  216. package/src/theming/getConstructableStyle.js +15 -10
  217. package/src/theming/getEffectiveLinksHrefs.js +20 -0
  218. package/src/theming/getEffectiveStyle.js +23 -8
  219. package/src/theming/getStylesString.js +15 -0
  220. package/src/theming/getThemeDesignerTheme.js +87 -0
  221. package/src/theming/preloadLinks.js +23 -0
  222. package/src/types/CSSColor.js +9 -0
  223. package/src/types/CalendarType.js +1 -1
  224. package/src/types/DataType.js +13 -1
  225. package/src/types/Float.js +14 -0
  226. package/src/types/Integer.js +4 -0
  227. package/src/types/InvisibleMessageMode.js +30 -0
  228. package/src/types/ItemNavigationBehavior.js +2 -7
  229. package/src/types/NavigationMode.js +1 -0
  230. package/src/types/PopupState.js +1 -1
  231. package/src/types/ValueState.js +1 -1
  232. package/src/updateShadowRoot.js +30 -0
  233. package/src/util/AriaLabelHelper.js +41 -0
  234. package/src/util/Caret.js +45 -0
  235. package/src/util/ColorConversion.js +370 -0
  236. package/src/util/FocusableElements.js +30 -11
  237. package/src/util/HTMLSanitizer.js +7 -0
  238. package/src/util/InvisibleMessage.js +58 -0
  239. package/src/util/PopupUtils.js +93 -0
  240. package/src/util/SlotsHelper.js +43 -0
  241. package/src/util/TabbableElements.js +5 -1
  242. package/src/util/arraysAreEqual.js +15 -0
  243. package/src/util/clamp.js +12 -0
  244. package/src/util/createLinkInHead.js +19 -0
  245. package/src/util/debounce.js +17 -0
  246. package/src/util/detectNavigatorLanguage.js +3 -1
  247. package/src/util/escapeRegex.js +10 -0
  248. package/src/util/findNodeOwner.js +35 -0
  249. package/src/util/generateHighlightedMarkup.js +42 -0
  250. package/src/util/getActiveElement.js +11 -0
  251. package/src/util/getClassCopy.js +10 -0
  252. package/src/util/getEffectiveContentDensity.js +5 -0
  253. package/src/util/getFileExtension.js +21 -0
  254. package/src/util/getSingletonElementInstance.js +13 -0
  255. package/src/util/isElementInView.js +15 -0
  256. package/src/util/isNodeHidden.js +1 -5
  257. package/src/util/isNodeTabbable.js +4 -4
  258. package/src/util/isValidPropertyName.js +11 -2
  259. package/src/util/setToArray.js +10 -0
  260. package/used-modules.txt +10 -0
  261. package/bundle.es5.js +0 -28
  262. package/dist/SVGIconRegistry.js +0 -60
  263. package/dist/boot.js +0 -32
  264. package/dist/compatibility/DOMObserver.js +0 -62
  265. package/dist/compatibility/patchNodeValue.js +0 -24
  266. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  267. package/dist/delegate/CustomResize.js +0 -78
  268. package/dist/delegate/NativeResize.js +0 -44
  269. package/dist/features/browsersupport/Edge.js +0 -6
  270. package/dist/features/browsersupport/IE11.js +0 -41
  271. package/dist/renderer/ifDefined.js +0 -21
  272. package/dist/resources/bundle.es5.js +0 -212
  273. package/dist/resources/bundle.es5.js.map +0 -1
  274. package/dist/test-resources/dev-helpers/ExternalThemePresent.js +0 -3
  275. package/dist/theming/CSSVarsPonyfill.js +0 -25
  276. package/dist/theming/ExternalThemePresent.js +0 -12
  277. package/dist/theming/adaptCSSForIE.js +0 -90
  278. package/dist/theming/createComponentStyleTag.js +0 -32
  279. package/dist/theming/createThemePropertiesStyleTag.js +0 -27
  280. package/dist/thirdparty/Array.from.js +0 -16
  281. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  282. package/dist/thirdparty/Array.prototype.find.js +0 -46
  283. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  284. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  285. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  286. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  287. package/dist/thirdparty/Number.isInteger.js +0 -5
  288. package/dist/thirdparty/Number.isNaN.js +0 -1
  289. package/dist/thirdparty/Number.parseInt.js +0 -1
  290. package/dist/thirdparty/Object.assign.js +0 -31
  291. package/dist/thirdparty/Object.entries.js +0 -11
  292. package/dist/thirdparty/Symbol.js +0 -2
  293. package/dist/thirdparty/WeakSet.js +0 -27
  294. package/dist/thirdparty/es6-string-methods.js +0 -182
  295. package/dist/thirdparty/events-polyfills.js +0 -89
  296. package/dist/thirdparty/fetch.js +0 -1
  297. package/dist/thirdparty/template.js +0 -600
  298. package/dist/webcomponentsjs/LICENSE.md +0 -19
  299. package/dist/webcomponentsjs/README.md +0 -229
  300. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  301. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  302. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  303. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  304. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  305. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  306. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  307. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  308. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  309. package/dist/webcomponentsjs/package.json +0 -46
  310. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  311. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  312. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  313. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  314. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  315. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  316. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  317. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  318. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  319. package/src/SVGIconRegistry.js +0 -60
  320. package/src/boot.js +0 -32
  321. package/src/compatibility/DOMObserver.js +0 -62
  322. package/src/compatibility/patchNodeValue.js +0 -24
  323. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  324. package/src/delegate/CustomResize.js +0 -78
  325. package/src/delegate/NativeResize.js +0 -44
  326. package/src/features/browsersupport/Edge.js +0 -6
  327. package/src/features/browsersupport/IE11.js +0 -41
  328. package/src/renderer/ifDefined.js +0 -21
  329. package/src/theming/CSSVarsPonyfill.js +0 -25
  330. package/src/theming/ExternalThemePresent.js +0 -12
  331. package/src/theming/adaptCSSForIE.js +0 -90
  332. package/src/theming/createComponentStyleTag.js +0 -32
  333. package/src/theming/createThemePropertiesStyleTag.js +0 -27
  334. package/src/thirdparty/Array.from.js +0 -16
  335. package/src/thirdparty/Array.prototype.fill.js +0 -44
  336. package/src/thirdparty/Array.prototype.find.js +0 -46
  337. package/src/thirdparty/Array.prototype.includes.js +0 -51
  338. package/src/thirdparty/Element.prototype.closest.js +0 -11
  339. package/src/thirdparty/Element.prototype.matches.js +0 -6
  340. package/src/thirdparty/Map.prototype.keys.js +0 -9
  341. package/src/thirdparty/Number.isInteger.js +0 -5
  342. package/src/thirdparty/Number.isNaN.js +0 -1
  343. package/src/thirdparty/Number.parseInt.js +0 -1
  344. package/src/thirdparty/Object.assign.js +0 -31
  345. package/src/thirdparty/Object.entries.js +0 -11
  346. package/src/thirdparty/Symbol.js +0 -2
  347. package/src/thirdparty/WeakSet.js +0 -27
  348. package/src/thirdparty/es6-string-methods.js +0 -182
  349. package/src/thirdparty/events-polyfills.js +0 -89
  350. package/src/thirdparty/fetch.js +0 -1
  351. package/src/thirdparty/template.js +0 -600
@@ -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;
@@ -2,10 +2,20 @@ import detectNavigatorLanguage from "../util/detectNavigatorLanguage.js";
2
2
  import { getLanguage as getConfigLanguage } from "../config/Language.js";
3
3
  import Locale from "./Locale.js";
4
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
+
5
15
  const convertToLocaleOrNull = lang => {
6
16
  try {
7
17
  if (lang && typeof lang === "string") {
8
- return new Locale(lang);
18
+ return getLocaleInstance(lang);
9
19
  }
10
20
  } catch (e) {
11
21
  // ignore
@@ -22,7 +32,7 @@ const getLocale = lang => {
22
32
  }
23
33
 
24
34
  if (getConfigLanguage()) {
25
- return new Locale(getConfigLanguage());
35
+ return getLocaleInstance(getConfigLanguage());
26
36
  }
27
37
 
28
38
  return convertToLocaleOrNull(detectNavigatorLanguage());
@@ -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
+ };
@@ -1,12 +1,14 @@
1
+ import { DEFAULT_LOCALE } from "../generated/AssetParameters.js";
2
+
1
3
  /**
2
4
  * Calculates the next fallback locale for the given locale.
3
5
  *
4
6
  * @param {string} locale Locale string in Java format (underscores) or null
5
- * @returns {string|null} Next fallback Locale or null if there is no more fallback
7
+ * @returns {string} Next fallback Locale or "en" if no fallbacks found.
6
8
  */
7
9
  const nextFallbackLocale = locale => {
8
10
  if (!locale) {
9
- return null;
11
+ return DEFAULT_LOCALE;
10
12
  }
11
13
 
12
14
  if (locale === "zh_HK") {
@@ -19,8 +21,8 @@ const nextFallbackLocale = locale => {
19
21
  return locale.slice(0, p);
20
22
  }
21
23
 
22
- // for any language but 'en', fallback to 'en' first before falling back to the 'raw' language (empty string)
23
- return locale !== "en" ? "en" : "";
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 : "";
24
26
  };
25
27
 
26
28
  export default nextFallbackLocale;
@@ -1,3 +1,5 @@
1
+ import { DEFAULT_LOCALE } from "../generated/AssetParameters.js";
2
+
1
3
  const localeRegEX = /^((?:[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;
2
4
  const SAPSupportabilityLocales = /(?:^|-)(saptrc|sappsd)(?:-|$)/i;
3
5
 
@@ -12,11 +14,15 @@ const M_ISO639_NEW_TO_OLD = {
12
14
  /**
13
15
  * Normalizes the given locale in BCP-47 syntax.
14
16
  * @param {string} locale locale to normalize
15
- * @returns {string} Normalized locale or undefined if the locale can't be normalized
17
+ * @returns {string} Normalized locale, "undefined" if the locale can't be normalized or the default locale, if no locale provided.
16
18
  */
17
19
  const normalizeLocale = locale => {
18
20
  let m;
19
21
 
22
+ if (!locale) {
23
+ return DEFAULT_LOCALE;
24
+ }
25
+
20
26
  if (typeof locale === "string" && (m = localeRegEX.exec(locale.replace(/_/g, "-")))) {/* eslint-disable-line */
21
27
  let language = m[1].toLowerCase();
22
28
  let region = m[3] ? m[3].toUpperCase() : undefined;
@@ -1,15 +1,34 @@
1
- import { html, render } from "lit-html/lit-html.js";
1
+ import { render } from "lit-html";
2
+ import {
3
+ html,
4
+ svg,
5
+ unsafeStatic,
6
+ } from "lit-html/static.js";
2
7
 
3
- const litRender = (templateResult, domNode, styles, { eventContext } = {}) => {
4
- if (styles) {
5
- templateResult = html`<style>${styles}</style>${templateResult}`;
8
+ const litRender = (templateResult, domNode, styleStrOrHrefsArr, { host } = {}) => {
9
+ if (typeof styleStrOrHrefsArr === "string") {
10
+ templateResult = html`<style>${styleStrOrHrefsArr}</style>${templateResult}`;
11
+ } else if (Array.isArray(styleStrOrHrefsArr) && styleStrOrHrefsArr.length) {
12
+ templateResult = html`${styleStrOrHrefsArr.map(href => html`<link type="text/css" rel="stylesheet" href="${href}">`)}${templateResult}`;
6
13
  }
7
- render(templateResult, domNode, { eventContext });
14
+ render(templateResult, domNode, { host });
8
15
  };
9
16
 
10
- export { html, svg } from "lit-html/lit-html.js";
17
+ const scopeTag = (tag, tags, suffix) => {
18
+ const resultTag = suffix && (tags || []).includes(tag) ? `${tag}-${suffix}` : tag;
19
+ return unsafeStatic(resultTag);
20
+ };
21
+
22
+ export {
23
+ html,
24
+ svg,
25
+ unsafeStatic,
26
+ };
27
+ export { scopeTag };
11
28
  export { repeat } from "lit-html/directives/repeat.js";
12
29
  export { classMap } from "lit-html/directives/class-map.js";
13
- export { styleMap } from "lit-html/directives/style-map.js";
30
+ export { styleMap } from "./directives/style-map.js";
31
+ export { ifDefined } from "lit-html/directives/if-defined.js";
32
+ export { unsafeHTML } from "lit-html/directives/unsafe-html.js";
14
33
 
15
34
  export default litRender;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2018 Google LLC
4
+ * SPDX-License-Identifier: BSD-3-Clause
5
+ */
6
+
7
+ /**
8
+ * This is the original style-map.js directive from lit-html 2 with the only difference that "render" is not called even for the first rendering (update is used instead)
9
+ */
10
+
11
+ import { noChange } from 'lit-html';
12
+ import { directive, Directive, PartType, } from 'lit-html/directive.js';
13
+ class StyleMapDirective extends Directive {
14
+ constructor(partInfo) {
15
+ var _a;
16
+ super(partInfo);
17
+ if (partInfo.type !== PartType.ATTRIBUTE ||
18
+ partInfo.name !== 'style' ||
19
+ ((_a = partInfo.strings) === null || _a === void 0 ? void 0 : _a.length) > 2) {
20
+ throw new Error('The `styleMap` directive must be used in the `style` attribute ' +
21
+ 'and must be the only part in the attribute.');
22
+ }
23
+ }
24
+ render(styleInfo) {
25
+ return "";
26
+ }
27
+ update(part, [styleInfo]) {
28
+ const { style } = part.element;
29
+ if (this._previousStyleProperties === undefined) {
30
+ this._previousStyleProperties = new Set();
31
+ for (const name in styleInfo) {
32
+ this._previousStyleProperties.add(name);
33
+ }
34
+ // return this.render(styleInfo);
35
+ }
36
+ // Remove old properties that no longer exist in styleInfo
37
+ // We use forEach() instead of for-of so that re don't require down-level
38
+ // iteration.
39
+ this._previousStyleProperties.forEach((name) => {
40
+ // If the name isn't in styleInfo or it's null/undefined
41
+ if (styleInfo[name] == null) {
42
+ this._previousStyleProperties.delete(name);
43
+ if (name.includes('-')) {
44
+ style.removeProperty(name);
45
+ }
46
+ else {
47
+ // Note reset using empty string (vs null) as IE11 does not always
48
+ // reset via null (https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style#setting_styles)
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ style[name] = '';
51
+ }
52
+ }
53
+ });
54
+ // Add or update properties
55
+ for (const name in styleInfo) {
56
+ const value = styleInfo[name];
57
+ if (value != null) {
58
+ this._previousStyleProperties.add(name);
59
+ if (name.includes('-')) {
60
+ style.setProperty(name, value);
61
+ }
62
+ else {
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ style[name] = value;
65
+ }
66
+ }
67
+ }
68
+ return noChange;
69
+ }
70
+ }
71
+
72
+ export const styleMap = directive(StyleMapDirective);
@@ -0,0 +1,17 @@
1
+ import { getCustomElementsScopingSuffix, shouldScopeCustomElement } from "../CustomElementsScope.js";
2
+
3
+ /**
4
+ * Runs a component's template with the component's current state, while also scoping HTML
5
+ *
6
+ * @param template - the template to execute
7
+ * @param component - the component
8
+ * @public
9
+ * @returns {*}
10
+ */
11
+ const executeTemplate = (template, component) => {
12
+ const tagsToScope = component.constructor.getUniqueDependencies().map(dep => dep.getMetadata().getPureTag()).filter(shouldScopeCustomElement);
13
+ const scope = getCustomElementsScopingSuffix();
14
+ return template(component, tagsToScope, scope);
15
+ };
16
+
17
+ export default executeTemplate;