@ui5/webcomponents-base 0.0.0-aeb93167c → 0.0.0-b053ad005

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 (305) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +84 -0
  3. package/README.md +26 -2
  4. package/bundle.esm.js +13 -11
  5. package/dist/AssetRegistry.js +8 -9
  6. package/dist/Boot.js +43 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/DOMObserver.js +65 -0
  9. package/dist/Device.js +62 -778
  10. package/dist/EventProvider.js +30 -26
  11. package/dist/FontFace.js +7 -95
  12. package/dist/InitialConfiguration.js +37 -21
  13. package/dist/Keys.js +51 -0
  14. package/dist/ManagedStyles.js +83 -0
  15. package/dist/MediaRange.js +109 -0
  16. package/{src/util/parseProperties.js → dist/PropertiesFileFormat.js} +6 -0
  17. package/dist/Render.js +175 -0
  18. package/dist/RenderScheduler.js +16 -138
  19. package/dist/StaticArea.js +1 -29
  20. package/dist/StaticAreaItem.js +56 -66
  21. package/dist/SystemCSSVars.js +4 -25
  22. package/dist/UI5Element.js +301 -383
  23. package/dist/UI5ElementMetadata.js +123 -16
  24. package/dist/asset-registries/Icons.js +121 -14
  25. package/dist/asset-registries/Illustrations.js +30 -0
  26. package/dist/asset-registries/LocaleData.js +91 -67
  27. package/dist/asset-registries/Themes.js +23 -33
  28. package/dist/asset-registries/i18n.js +61 -50
  29. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  30. package/dist/config/Language.js +18 -20
  31. package/dist/config/Theme.js +14 -0
  32. package/dist/css/FontFace.css +45 -0
  33. package/dist/css/OverrideFontFace.css +32 -0
  34. package/dist/css/SystemCSSVars.css +17 -0
  35. package/dist/delegate/ItemNavigation.js +233 -201
  36. package/dist/delegate/ResizeHandler.js +78 -37
  37. package/dist/delegate/ScrollEnablement.js +49 -20
  38. package/dist/features/OpenUI5Support.js +41 -6
  39. package/dist/generated/AssetParameters.js +1 -1
  40. package/dist/generated/css/FontFace.css.js +5 -0
  41. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  42. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  43. package/dist/i18nBundle.js +38 -4
  44. package/dist/isLegacyBrowser.js +3 -0
  45. package/dist/locale/applyDirection.js +6 -4
  46. package/dist/locale/directionChange.js +32 -0
  47. package/dist/locale/getEffectiveDir.js +28 -0
  48. package/dist/locale/languageChange.js +1 -1
  49. package/dist/renderer/LitRenderer.js +24 -21
  50. package/dist/renderer/directives/style-map.js +72 -0
  51. package/dist/resources/bundle.esm.js +17 -109
  52. package/dist/resources/bundle.esm.js.map +1 -1
  53. package/dist/sap/base/Log.js +241 -0
  54. package/dist/sap/base/assert.js +8 -0
  55. package/dist/sap/base/security/URLListValidator.js +148 -0
  56. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  57. package/dist/sap/base/util/now.js +7 -0
  58. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  59. package/dist/test-resources/assets/Themes.js +8 -8
  60. package/dist/test-resources/elements/Parent.js +6 -2
  61. package/dist/test-resources/elements/WithStaticArea.js +2 -1
  62. package/dist/test-resources/pages/AllTestElements.html +3 -3
  63. package/dist/test-resources/pages/Configuration.html +0 -2
  64. package/dist/test-resources/pages/ConfigurationScript.html +0 -2
  65. package/dist/test-resources/pages/i18n.html +2 -9
  66. package/dist/test-resources/specs/ConfigurationChange.spec.js +10 -8
  67. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  68. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  69. package/dist/test-resources/specs/CustomTheme.spec.js +9 -7
  70. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  71. package/dist/test-resources/specs/StaticArea.spec.js +56 -12
  72. package/dist/test-resources/specs/Theming.spec.js +12 -10
  73. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  74. package/dist/test-resources/specs/UI5ElementLifecycle.js +17 -15
  75. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  76. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  77. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  78. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  79. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  80. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  81. package/dist/theming/CustomStyle.js +2 -2
  82. package/dist/theming/applyTheme.js +5 -14
  83. package/dist/theming/getConstructableStyle.js +7 -6
  84. package/dist/theming/getEffectiveLinksHrefs.js +20 -0
  85. package/dist/theming/getEffectiveStyle.js +15 -8
  86. package/dist/theming/getStylesString.js +4 -2
  87. package/dist/theming/getThemeDesignerTheme.js +2 -1
  88. package/dist/theming/preloadLinks.js +23 -0
  89. package/dist/types/CSSColor.js +9 -0
  90. package/dist/types/CalendarType.js +1 -1
  91. package/dist/types/DataType.js +13 -1
  92. package/dist/types/Float.js +4 -0
  93. package/dist/types/Integer.js +4 -0
  94. package/dist/types/InvisibleMessageMode.js +30 -0
  95. package/dist/types/ItemNavigationBehavior.js +2 -7
  96. package/dist/types/PopupState.js +1 -1
  97. package/dist/types/ValueState.js +1 -1
  98. package/dist/updateShadowRoot.js +30 -0
  99. package/dist/util/AriaLabelHelper.js +4 -4
  100. package/dist/util/Caret.js +45 -0
  101. package/dist/util/ColorConversion.js +370 -0
  102. package/dist/util/FocusableElements.js +17 -6
  103. package/dist/util/HTMLSanitizer.js +7 -0
  104. package/dist/util/InvisibleMessage.js +58 -0
  105. package/dist/util/PopupUtils.js +93 -0
  106. package/dist/util/SlotsHelper.js +43 -0
  107. package/dist/util/TabbableElements.js +1 -1
  108. package/dist/util/arraysAreEqual.js +15 -0
  109. package/dist/util/clamp.js +12 -0
  110. package/dist/util/createLinkInHead.js +19 -0
  111. package/dist/util/debounce.js +17 -0
  112. package/dist/util/getActiveElement.js +11 -0
  113. package/dist/util/getClassCopy.js +10 -0
  114. package/dist/util/getEffectiveContentDensity.js +5 -0
  115. package/dist/util/isElementInView.js +15 -0
  116. package/dist/util/isNodeTabbable.js +4 -4
  117. package/hash.txt +1 -0
  118. package/index.js +1 -1
  119. package/lib/generate-asset-parameters/index.js +0 -1
  120. package/lib/generate-styles/index.js +18 -0
  121. package/package-scripts.js +37 -19
  122. package/package.json +19 -13
  123. package/src/AssetRegistry.js +8 -9
  124. package/src/Boot.js +43 -0
  125. package/src/CSP.js +59 -0
  126. package/src/DOMObserver.js +65 -0
  127. package/src/Device.js +62 -778
  128. package/src/EventProvider.js +30 -26
  129. package/src/FontFace.js +7 -95
  130. package/src/InitialConfiguration.js +37 -21
  131. package/src/Keys.js +51 -0
  132. package/src/ManagedStyles.js +83 -0
  133. package/src/MediaRange.js +109 -0
  134. package/{dist/util/parseProperties.js → src/PropertiesFileFormat.js} +6 -0
  135. package/src/Render.js +175 -0
  136. package/src/RenderScheduler.js +16 -138
  137. package/src/StaticArea.js +1 -29
  138. package/src/StaticAreaItem.js +56 -66
  139. package/src/SystemCSSVars.js +4 -25
  140. package/src/UI5Element.js +301 -383
  141. package/src/UI5ElementMetadata.js +123 -16
  142. package/src/asset-registries/Icons.js +121 -14
  143. package/src/asset-registries/Illustrations.js +30 -0
  144. package/src/asset-registries/LocaleData.js +91 -67
  145. package/src/asset-registries/Themes.js +23 -33
  146. package/src/asset-registries/i18n.js +61 -50
  147. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  148. package/src/config/Language.js +18 -20
  149. package/src/config/Theme.js +14 -0
  150. package/src/css/FontFace.css +45 -0
  151. package/src/css/OverrideFontFace.css +32 -0
  152. package/src/css/SystemCSSVars.css +17 -0
  153. package/src/delegate/ItemNavigation.js +233 -201
  154. package/src/delegate/ResizeHandler.js +78 -37
  155. package/src/delegate/ScrollEnablement.js +49 -20
  156. package/src/features/OpenUI5Support.js +41 -6
  157. package/src/i18nBundle.js +38 -4
  158. package/src/isLegacyBrowser.js +3 -0
  159. package/src/locale/applyDirection.js +6 -4
  160. package/src/locale/directionChange.js +32 -0
  161. package/src/locale/getEffectiveDir.js +28 -0
  162. package/src/locale/languageChange.js +1 -1
  163. package/src/renderer/LitRenderer.js +24 -21
  164. package/src/renderer/directives/style-map.js +72 -0
  165. package/src/theming/CustomStyle.js +2 -2
  166. package/src/theming/applyTheme.js +5 -14
  167. package/src/theming/getConstructableStyle.js +7 -6
  168. package/src/theming/getEffectiveLinksHrefs.js +20 -0
  169. package/src/theming/getEffectiveStyle.js +15 -8
  170. package/src/theming/getStylesString.js +4 -2
  171. package/src/theming/getThemeDesignerTheme.js +2 -1
  172. package/src/theming/preloadLinks.js +23 -0
  173. package/src/types/CSSColor.js +9 -0
  174. package/src/types/CalendarType.js +1 -1
  175. package/src/types/DataType.js +13 -1
  176. package/src/types/Float.js +4 -0
  177. package/src/types/Integer.js +4 -0
  178. package/src/types/InvisibleMessageMode.js +30 -0
  179. package/src/types/ItemNavigationBehavior.js +2 -7
  180. package/src/types/PopupState.js +1 -1
  181. package/src/types/ValueState.js +1 -1
  182. package/src/updateShadowRoot.js +30 -0
  183. package/src/util/AriaLabelHelper.js +4 -4
  184. package/src/util/Caret.js +45 -0
  185. package/src/util/ColorConversion.js +370 -0
  186. package/src/util/FocusableElements.js +17 -6
  187. package/src/util/HTMLSanitizer.js +7 -0
  188. package/src/util/InvisibleMessage.js +58 -0
  189. package/src/util/PopupUtils.js +93 -0
  190. package/src/util/SlotsHelper.js +43 -0
  191. package/src/util/TabbableElements.js +1 -1
  192. package/src/util/arraysAreEqual.js +15 -0
  193. package/src/util/clamp.js +12 -0
  194. package/src/util/createLinkInHead.js +19 -0
  195. package/src/util/debounce.js +17 -0
  196. package/src/util/getActiveElement.js +11 -0
  197. package/src/util/getClassCopy.js +10 -0
  198. package/src/util/getEffectiveContentDensity.js +5 -0
  199. package/src/util/isElementInView.js +15 -0
  200. package/src/util/isNodeTabbable.js +4 -4
  201. package/used-modules.txt +7 -0
  202. package/bundle.es5.js +0 -28
  203. package/dist/SVGIconRegistry.js +0 -73
  204. package/dist/boot.js +0 -34
  205. package/dist/compatibility/DOMObserver.js +0 -62
  206. package/dist/compatibility/patchNodeValue.js +0 -24
  207. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  208. package/dist/config/AssetsPath.js +0 -17
  209. package/dist/delegate/CustomResize.js +0 -78
  210. package/dist/delegate/NativeResize.js +0 -45
  211. package/dist/features/PropertiesFormatSupport.js +0 -8
  212. package/dist/features/browsersupport/Edge.js +0 -6
  213. package/dist/features/browsersupport/IE11.js +0 -42
  214. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  215. package/dist/renderer/ifDefined.js +0 -21
  216. package/dist/renderer/scopeHTML.js +0 -32
  217. package/dist/resources/bundle.es5.js +0 -212
  218. package/dist/resources/bundle.es5.js.map +0 -1
  219. package/dist/theming/CSSVarsPonyfill.js +0 -68
  220. package/dist/theming/adaptCSSForIE.js +0 -95
  221. package/dist/theming/createComponentStyleTag.js +0 -54
  222. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  223. package/dist/thirdparty/Array.from.js +0 -16
  224. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  225. package/dist/thirdparty/Array.prototype.find.js +0 -46
  226. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  227. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  228. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  229. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  230. package/dist/thirdparty/Number.isInteger.js +0 -5
  231. package/dist/thirdparty/Number.isNaN.js +0 -1
  232. package/dist/thirdparty/Number.parseFloat.js +0 -1
  233. package/dist/thirdparty/Number.parseInt.js +0 -1
  234. package/dist/thirdparty/Object.assign.js +0 -31
  235. package/dist/thirdparty/Object.entries.js +0 -11
  236. package/dist/thirdparty/Symbol.js +0 -2
  237. package/dist/thirdparty/WeakSet.js +0 -27
  238. package/dist/thirdparty/es6-string-methods.js +0 -182
  239. package/dist/thirdparty/events-polyfills.js +0 -89
  240. package/dist/thirdparty/fetch.js +0 -1
  241. package/dist/thirdparty/template.js +0 -600
  242. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  243. package/dist/util/EffectiveAssetPath.js +0 -27
  244. package/dist/util/isSlot.js +0 -3
  245. package/dist/webcomponentsjs/LICENSE.md +0 -19
  246. package/dist/webcomponentsjs/README.md +0 -229
  247. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  248. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  249. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  250. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  251. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  252. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  253. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  254. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  255. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  256. package/dist/webcomponentsjs/package.json +0 -46
  257. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  258. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  259. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  260. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  261. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  262. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  263. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  264. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  265. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  266. package/src/SVGIconRegistry.js +0 -73
  267. package/src/boot.js +0 -34
  268. package/src/compatibility/DOMObserver.js +0 -62
  269. package/src/compatibility/patchNodeValue.js +0 -24
  270. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  271. package/src/config/AssetsPath.js +0 -17
  272. package/src/delegate/CustomResize.js +0 -78
  273. package/src/delegate/NativeResize.js +0 -45
  274. package/src/features/PropertiesFormatSupport.js +0 -8
  275. package/src/features/browsersupport/Edge.js +0 -6
  276. package/src/features/browsersupport/IE11.js +0 -42
  277. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  278. package/src/renderer/ifDefined.js +0 -21
  279. package/src/renderer/scopeHTML.js +0 -32
  280. package/src/theming/CSSVarsPonyfill.js +0 -68
  281. package/src/theming/adaptCSSForIE.js +0 -95
  282. package/src/theming/createComponentStyleTag.js +0 -54
  283. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  284. package/src/thirdparty/Array.from.js +0 -16
  285. package/src/thirdparty/Array.prototype.fill.js +0 -44
  286. package/src/thirdparty/Array.prototype.find.js +0 -46
  287. package/src/thirdparty/Array.prototype.includes.js +0 -51
  288. package/src/thirdparty/Element.prototype.closest.js +0 -11
  289. package/src/thirdparty/Element.prototype.matches.js +0 -6
  290. package/src/thirdparty/Map.prototype.keys.js +0 -9
  291. package/src/thirdparty/Number.isInteger.js +0 -5
  292. package/src/thirdparty/Number.isNaN.js +0 -1
  293. package/src/thirdparty/Number.parseFloat.js +0 -1
  294. package/src/thirdparty/Number.parseInt.js +0 -1
  295. package/src/thirdparty/Object.assign.js +0 -31
  296. package/src/thirdparty/Object.entries.js +0 -11
  297. package/src/thirdparty/Symbol.js +0 -2
  298. package/src/thirdparty/WeakSet.js +0 -27
  299. package/src/thirdparty/es6-string-methods.js +0 -182
  300. package/src/thirdparty/events-polyfills.js +0 -89
  301. package/src/thirdparty/fetch.js +0 -1
  302. package/src/thirdparty/template.js +0 -600
  303. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  304. package/src/util/EffectiveAssetPath.js +0 -27
  305. package/src/util/isSlot.js +0 -3
@@ -1,9 +1,9 @@
1
- import { isPhone } from "../Device.js";
1
+ import { supportsTouch } from "../Device.js";
2
2
  import EventProvider from "../EventProvider.js";
3
3
  import scroll from "../animations/scroll.js";
4
4
 
5
5
  const scrollEventName = "scroll";
6
- const touchEndEventName = isPhone() ? "touchend" : "mouseup";
6
+ const touchEndEventName = supportsTouch() ? "touchend" : "mouseup";
7
7
 
8
8
  class ScrollEnablement extends EventProvider {
9
9
  constructor(containerComponent) {
@@ -13,7 +13,7 @@ class ScrollEnablement extends EventProvider {
13
13
  this.mouseUp = this.ontouchend.bind(this);
14
14
  this.touchStart = this.ontouchstart.bind(this);
15
15
 
16
- this.isPhone = isPhone();
16
+ this.supportsTouch = supportsTouch();
17
17
 
18
18
  // On Android devices touchmove is thrown one more time than neccessary (together with touchend)
19
19
  // so we have to cache the previus coordinates in order to provide correct parameters in the
@@ -25,7 +25,7 @@ class ScrollEnablement extends EventProvider {
25
25
  this.startX = 0;
26
26
  this.startY = 0;
27
27
 
28
- if (this.isPhone) {
28
+ if (this.supportsTouch) {
29
29
  containerComponent.addEventListener("touchstart", this.touchStart, { passive: true });
30
30
  containerComponent.addEventListener("touchmove", this.mouseMove, { passive: true });
31
31
  containerComponent.addEventListener("touchend", this.mouseUp, { passive: true });
@@ -42,12 +42,41 @@ class ScrollEnablement extends EventProvider {
42
42
  return this._container;
43
43
  }
44
44
 
45
- 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
+
46
69
  this._container.scrollLeft = left;
47
70
  this._container.scrollTop = top;
48
71
  }
49
72
 
50
- 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
+
51
80
  return scroll({
52
81
  element: this._container,
53
82
  dx,
@@ -65,17 +94,17 @@ class ScrollEnablement extends EventProvider {
65
94
 
66
95
  _isTouchInside(touch) {
67
96
  const rect = this._container.getBoundingClientRect();
68
- const x = this.isPhone ? touch.clientX : touch.x;
69
- const y = this.isPhone ? touch.clientY : touch.y;
97
+ const x = this.supportsTouch ? touch.clientX : touch.x;
98
+ const y = this.supportsTouch ? touch.clientY : touch.y;
70
99
 
71
100
  return x >= rect.left && x <= rect.right
72
101
  && y >= rect.top && y <= rect.bottom;
73
102
  }
74
103
 
75
104
  ontouchstart(event) {
76
- const touch = this.isPhone ? event.touches[0] : null;
105
+ const touch = this.supportsTouch ? event.touches[0] : null;
77
106
 
78
- if (!this.isPhone) {
107
+ if (!this.supportsTouch) {
79
108
  document.addEventListener("mouseup", this.mouseUp, { passive: true });
80
109
  document.addEventListener("mousemove", this.mouseMove, { passive: true });
81
110
  } else {
@@ -84,10 +113,10 @@ class ScrollEnablement extends EventProvider {
84
113
  this.startY = touch.pageY;
85
114
  }
86
115
 
87
- this._prevDragX = this.isPhone ? touch.pageX : event.x;
88
- this._prevDragY = this.isPhone ? touch.pageY : event.y;
116
+ this._prevDragX = this.supportsTouch ? touch.pageX : event.x;
117
+ this._prevDragY = this.supportsTouch ? touch.pageY : event.y;
89
118
 
90
- this._canScroll = this._isTouchInside(this.isPhone ? touch : event);
119
+ this._canScroll = this._isTouchInside(this.supportsTouch ? touch : event);
91
120
  }
92
121
 
93
122
  ontouchmove(event) {
@@ -96,10 +125,10 @@ class ScrollEnablement extends EventProvider {
96
125
  }
97
126
 
98
127
  const container = this._container;
99
- const touch = this.isPhone ? event.touches[0] : null;
128
+ const touch = this.supportsTouch ? event.touches[0] : null;
100
129
 
101
- const dragX = this.isPhone ? touch.pageX : event.x;
102
- const dragY = this.isPhone ? touch.pageY : event.y;
130
+ const dragX = this.supportsTouch ? touch.pageX : event.x;
131
+ const dragY = this.supportsTouch ? touch.pageY : event.y;
103
132
 
104
133
  container.scrollLeft += this._prevDragX - dragX;
105
134
  container.scrollTop += this._prevDragY - dragY;
@@ -117,7 +146,7 @@ class ScrollEnablement extends EventProvider {
117
146
  }
118
147
 
119
148
  ontouchend(event) {
120
- if (this.isPhone) {
149
+ if (this.supportsTouch) {
121
150
  const deltaX = Math.abs(event.changedTouches[0].pageX - this.startX);
122
151
  const deltaY = Math.abs(event.changedTouches[0].pageY - this.startY);
123
152
 
@@ -131,8 +160,8 @@ class ScrollEnablement extends EventProvider {
131
160
  }
132
161
 
133
162
  const container = this._container;
134
- const dragX = this.isPhone ? event.changedTouches[0].pageX : event.x;
135
- const dragY = this.isPhone ? event.changedTouches[0].pageY : event.y;
163
+ const dragX = this.supportsTouch ? event.changedTouches[0].pageX : event.x;
164
+ const dragY = this.supportsTouch ? event.changedTouches[0].pageY : event.y;
136
165
 
137
166
  container.scrollLeft += this._prevDragX - dragX;
138
167
  container.scrollTop += this._prevDragY - dragY;
@@ -149,7 +178,7 @@ class ScrollEnablement extends EventProvider {
149
178
  this._prevDragX = dragX;
150
179
  this._prevDragY = dragY;
151
180
 
152
- if (!this.isPhone) {
181
+ if (!this.supportsTouch) {
153
182
  document.removeEventListener("mousemove", this.mouseMove, { passive: true });
154
183
  document.removeEventListener("mouseup", this.mouseUp);
155
184
  }
@@ -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(),
@@ -41,16 +50,18 @@ const getConfigurationSettingsObject = () => {
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");
59
+ const LocaleData = window.sap.ui.require("sap/ui/core/LocaleData");
50
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
  }
@@ -66,6 +78,7 @@ const attachListeners = () => {
66
78
  };
67
79
 
68
80
  const cssVariablesLoaded = () => {
81
+ const core = getCore();
69
82
  if (!core) {
70
83
  return;
71
84
  }
@@ -78,6 +91,26 @@ const cssVariablesLoaded = () => {
78
91
  return !!link.href.match(/\/css(-|_)variables\.css/);
79
92
  };
80
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
+
81
114
  const OpenUI5Support = {
82
115
  isLoaded,
83
116
  init,
@@ -85,6 +118,8 @@ const OpenUI5Support = {
85
118
  getLocaleDataObject,
86
119
  attachListeners,
87
120
  cssVariablesLoaded,
121
+ getNextZIndex,
122
+ setInitialZIndex,
88
123
  };
89
124
 
90
125
  registerFeature("OpenUI5Support", OpenUI5Support);
@@ -1,4 +1,4 @@
1
- const assetParameters = {"themes":{"default":"sap_fiori_3","all":["sap_fiori_3","sap_fiori_3_dark","sap_belize","sap_belize_hcb","sap_belize_hcw","sap_fiori_3_hcb","sap_fiori_3_hcw"]},"languages":{"default":"en","all":["ar","bg","ca","cs","da","de","el","en","es","et","fi","fr","hi","hr","hu","it","iw","ja","kk","ko","lt","lv","ms","nl","no","pl","pt","ro","ru","sh","sk","sl","sv","th","tr","uk","vi","zh_CN","zh_TW"]},"locales":{"default":"en","all":["ar","ar_EG","ar_SA","bg","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","pl","pt","pt_PT","ro","ru","ru_UA","sk","sl","sr","sv","th","tr","uk","vi","zh_CN","zh_HK","zh_SG","zh_TW"]}};
1
+ const assetParameters = {"themes":{"default":"sap_fiori_3","all":["sap_fiori_3","sap_fiori_3_dark","sap_belize","sap_belize_hcb","sap_belize_hcw","sap_fiori_3_hcb","sap_fiori_3_hcw","sap_horizon","sap_horizon_exp"]},"languages":{"default":"en","all":["ar","bg","ca","cs","cy","da","de","el","en","en_GB","en_US_sappsd","en_US_saprigi","en_US_saptrc","es","es_MX","et","fi","fr","fr_CA","hi","hr","hu","in","it","iw","ja","kk","ko","lt","lv","ms","nl","no","pl","pt_PT","pt","ro","ru","sh","sk","sl","sv","th","tr","uk","vi","zh_CN","zh_TW"]},"locales":{"default":"en","all":["ar","ar_EG","ar_SA","bg","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","pl","pt","pt_PT","ro","ru","ru_UA","sk","sl","sr","sv","th","tr","uk","vi","zh_CN","zh_HK","zh_SG","zh_TW"]}};
2
2
 
3
3
  const DEFAULT_THEME = assetParameters.themes.default;
4
4
  const DEFAULT_LANGUAGE = assetParameters.languages.default;
@@ -0,0 +1,5 @@
1
+ export default {
2
+ packageName: "@ui5/webcomponents-base",
3
+ fileName: "FontFace.css",
4
+ content: `@font-face{font-family:"72";font-style:normal;font-weight:400;src:local("72"),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents) format("woff")}@font-face{font-family:"72full";font-style:normal;font-weight:400;src:local('72-full'),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents) format("woff")}@font-face{font-family:"72";font-style:normal;font-weight:700;src:local('72-Bold'),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents) format("woff")}@font-face{font-family:"72full";font-style:normal;font-weight:700;src:local('72-Bold-full'),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents) format("woff")}@font-face{font-family:"72Black";font-style:bold;font-weight:900;src:local('72Black'),url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff?ui5-webcomponents) format("woff2"),url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2?ui5-webcomponents) format("woff")}`
5
+ };
@@ -0,0 +1,5 @@
1
+ export default {
2
+ packageName: "@ui5/webcomponents-base",
3
+ fileName: "OverrideFontFace.css",
4
+ content: `@font-face{font-family:'72override';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;src:local('Arial'),local('Helvetica'),local('sans-serif')}`
5
+ };
@@ -0,0 +1,5 @@
1
+ export default {
2
+ packageName: "@ui5/webcomponents-base",
3
+ fileName: "SystemCSSVars.css",
4
+ content: `:root{--_ui5_content_density:cozy}.sapUiSizeCompact,.ui5-content-density-compact,[data-ui5-compact-size]{--_ui5_content_density:compact}[dir=rtl]{--_ui5_dir:rtl}[dir=ltr]{--_ui5_dir:ltr}`
5
+ };
@@ -1,8 +1,10 @@
1
- import { registerI18nBundle, 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
+ let customGetI18nBundle;
7
+
6
8
  /**
7
9
  * @class
8
10
  * @public
@@ -15,6 +17,7 @@ class I18nBundle {
15
17
  /**
16
18
  * Returns a text in the currently loaded language
17
19
  *
20
+ * @public
18
21
  * @param {Object|String} textObj key/defaultText pair or just the key
19
22
  * @param params Values for the placeholders
20
23
  * @returns {*}
@@ -29,13 +32,16 @@ class I18nBundle {
29
32
  }
30
33
 
31
34
  const bundle = getI18nBundleData(this.packageName);
35
+ if (bundle && !bundle[textObj.key]) {
36
+ console.warn(`Key ${textObj.key} not found in the i18n bundle, the default text will be used`); // eslint-disable-line
37
+ }
32
38
  const messageText = bundle && bundle[textObj.key] ? bundle[textObj.key] : (textObj.defaultText || textObj.key);
33
39
 
34
40
  return formatMessage(messageText, params);
35
41
  }
36
42
  }
37
43
 
38
- const getI18nBundle = packageName => {
44
+ const getI18nBundleSync = packageName => {
39
45
  if (I18nBundleInstances.has(packageName)) {
40
46
  return I18nBundleInstances.get(packageName);
41
47
  }
@@ -45,8 +51,36 @@ const getI18nBundle = packageName => {
45
51
  return i18nBundle;
46
52
  };
47
53
 
54
+ /**
55
+ * Allows developers to provide a custom getI18nBundle implementation
56
+ * If this function is called, the custom implementation will be used for all components and will completely
57
+ * replace the default implementation.
58
+ *
59
+ * @public
60
+ * @param customGet the function to use instead of the standard getI18nBundle implementation
61
+ */
62
+ const registerCustomI18nBundleGetter = customGet => {
63
+ customGetI18nBundle = customGet;
64
+ };
65
+
66
+ /**
67
+ * Fetches and returns the I18nBundle instance for the given package
68
+ *
69
+ * @public
70
+ * @param packageName
71
+ * @returns {Promise<I18nBundle>}
72
+ */
73
+ const getI18nBundle = async packageName => {
74
+ if (customGetI18nBundle) {
75
+ return customGetI18nBundle(packageName);
76
+ }
77
+
78
+ await fetchI18nBundle(packageName);
79
+ return getI18nBundleSync(packageName);
80
+ };
81
+
48
82
  export {
49
- registerI18nBundle,
50
- fetchI18nBundle,
83
+ registerI18nLoader,
51
84
  getI18nBundle,
85
+ registerCustomI18nBundleGetter,
52
86
  };
@@ -0,0 +1,3 @@
1
+ const isLegacyBrowser = () => !!window.ShadyDOM;
2
+
3
+ export default isLegacyBrowser;
@@ -1,4 +1,5 @@
1
- import RenderScheduler from "../RenderScheduler.js";
1
+ import { reRenderAllUI5Elements } from "../Render.js";
2
+ import { fireDirectionChange } from "./directionChange.js";
2
3
 
3
4
  /**
4
5
  * Re-renders all RTL-aware UI5 Elements.
@@ -7,9 +8,10 @@ import RenderScheduler from "../RenderScheduler.js";
7
8
  *
8
9
  * @returns {Promise<void>}
9
10
  */
10
- const applyDirection = () => {
11
- RenderScheduler.reRenderAllUI5Elements({ rtlAware: true });
12
- return RenderScheduler.whenFinished();
11
+ const applyDirection = async () => {
12
+ const listenersResults = fireDirectionChange();
13
+ await Promise.all(listenersResults);
14
+ await reRenderAllUI5Elements({ rtlAware: true });
13
15
  };
14
16
 
15
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;
@@ -12,7 +12,7 @@ const detachLanguageChange = listener => {
12
12
  };
13
13
 
14
14
  const fireLanguageChange = lang => {
15
- return eventProvider.fireEvent(LANG_CHANGE, lang);
15
+ return eventProvider.fireEventAsync(LANG_CHANGE, lang);
16
16
  };
17
17
 
18
18
  export {
@@ -1,31 +1,34 @@
1
- import { html, svg, render } from "lit-html/lit-html.js";
2
- import scopeHTML from "./scopeHTML.js";
1
+ import { render } from "lit-html";
2
+ import {
3
+ html,
4
+ svg,
5
+ unsafeStatic,
6
+ } from "lit-html/static.js";
3
7
 
4
- let tags;
5
- let suffix;
6
-
7
- const setTags = t => {
8
- tags = t;
9
- };
10
- const setSuffix = s => {
11
- suffix = s;
12
- };
13
-
14
- const litRender = (templateResult, domNode, styles, { eventContext } = {}) => {
15
- if (styles) {
16
- 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}`;
17
13
  }
18
- render(templateResult, domNode, { eventContext });
14
+ render(templateResult, domNode, { host });
19
15
  };
20
16
 
21
- const scopedHtml = (strings, ...values) => html(scopeHTML(strings, tags, suffix), ...values);
22
- const scopedSvg = (strings, ...values) => svg(scopeHTML(strings, tags, suffix), ...values);
17
+ const scopeTag = (tag, tags, suffix) => {
18
+ const resultTag = suffix && (tags || []).includes(tag) ? `${tag}-${suffix}` : tag;
19
+ return unsafeStatic(resultTag);
20
+ };
23
21
 
24
- export { setTags, setSuffix };
25
- export { scopedHtml as html, scopedSvg as svg };
22
+ export {
23
+ html,
24
+ svg,
25
+ unsafeStatic,
26
+ };
27
+ export { scopeTag };
26
28
  export { repeat } from "lit-html/directives/repeat.js";
27
29
  export { classMap } from "lit-html/directives/class-map.js";
28
- 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";
29
32
  export { unsafeHTML } from "lit-html/directives/unsafe-html.js";
30
33
 
31
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);