@ui5/webcomponents-base 0.0.0-934b4df24 → 0.0.0-9c26e8e4f

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 (356) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +362 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +23 -16
  5. package/dist/AssetRegistry.js +8 -7
  6. package/dist/Boot.js +59 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsRegistry.js +79 -7
  9. package/dist/CustomElementsScope.js +30 -0
  10. package/dist/CustomElementsScopeUtils.js +108 -0
  11. package/dist/DOMObserver.js +65 -0
  12. package/dist/Device.js +71 -773
  13. package/dist/EventProvider.js +38 -26
  14. package/dist/FeaturesRegistry.js +4 -1
  15. package/dist/FontFace.js +19 -62
  16. package/dist/InitialConfiguration.js +43 -8
  17. package/dist/Keys.js +136 -2
  18. package/dist/ManagedStyles.js +83 -0
  19. package/dist/MediaRange.js +109 -0
  20. package/dist/PropertiesFileFormat.js +95 -0
  21. package/dist/Render.js +175 -0
  22. package/dist/RenderQueue.js +41 -17
  23. package/dist/RenderScheduler.js +24 -126
  24. package/dist/Runtimes.js +107 -0
  25. package/dist/StaticArea.js +1 -39
  26. package/dist/StaticAreaItem.js +58 -62
  27. package/dist/SystemCSSVars.js +10 -0
  28. package/dist/Theming.js +2 -1
  29. package/dist/UI5Element.js +425 -318
  30. package/dist/UI5ElementMetadata.js +173 -17
  31. package/dist/asset-registries/Icons.js +125 -14
  32. package/dist/asset-registries/Illustrations.js +30 -0
  33. package/dist/asset-registries/LocaleData.js +105 -66
  34. package/dist/asset-registries/Themes.js +29 -34
  35. package/dist/asset-registries/i18n.js +73 -29
  36. package/dist/assets/bundle.esm.eb35c35a.js +43 -0
  37. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  38. package/dist/config/AnimationMode.js +11 -1
  39. package/dist/config/Icons.js +52 -0
  40. package/dist/config/Language.js +58 -2
  41. package/dist/config/Theme.js +25 -0
  42. package/dist/css/BusyIndicator.css +80 -0
  43. package/dist/css/FontFace.css +75 -0
  44. package/dist/css/OverrideFontFace.css +32 -0
  45. package/dist/css/SystemCSSVars.css +17 -0
  46. package/dist/delegate/ItemNavigation.js +249 -171
  47. package/dist/delegate/ResizeHandler.js +78 -38
  48. package/dist/delegate/ScrollEnablement.js +49 -20
  49. package/dist/features/F6Navigation.js +110 -0
  50. package/dist/features/OpenUI5Enablement.js +119 -0
  51. package/dist/features/OpenUI5Support.js +42 -7
  52. package/dist/generated/AssetParameters.js +1 -1
  53. package/dist/generated/VersionInfo.js +10 -0
  54. package/dist/generated/css/BusyIndicator.css.js +5 -0
  55. package/dist/generated/css/FontFace.css.js +5 -0
  56. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  57. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  58. package/dist/getSharedResource.js +30 -0
  59. package/dist/i18nBundle.js +58 -5
  60. package/dist/locale/RTLAwareRegistry.js +14 -0
  61. package/dist/locale/applyDirection.js +17 -0
  62. package/dist/locale/directionChange.js +32 -0
  63. package/dist/locale/getEffectiveDir.js +28 -0
  64. package/dist/locale/getLocale.js +12 -2
  65. package/dist/locale/languageChange.js +22 -0
  66. package/dist/renderer/LitRenderer.js +44 -7
  67. package/dist/renderer/directives/style-map.js +72 -0
  68. package/dist/renderer/executeTemplate.js +34 -0
  69. package/dist/sap/base/Log.js +241 -0
  70. package/dist/sap/base/assert.js +8 -0
  71. package/dist/sap/base/security/URLListValidator.js +148 -0
  72. package/dist/sap/base/security/encodeCSS.js +14 -0
  73. package/dist/sap/base/security/encodeXML.js +23 -0
  74. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  75. package/dist/sap/base/strings/toHex.js +8 -0
  76. package/dist/sap/base/util/now.js +7 -0
  77. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  78. package/dist/theming/CustomStyle.js +47 -6
  79. package/dist/theming/ThemeLoaded.js +22 -0
  80. package/dist/theming/applyTheme.js +13 -15
  81. package/dist/theming/getConstructableStyle.js +15 -10
  82. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  83. package/dist/theming/getEffectiveStyle.js +32 -8
  84. package/dist/theming/getStylesString.js +15 -0
  85. package/dist/theming/getThemeDesignerTheme.js +25 -5
  86. package/dist/theming/preloadLinks.js +23 -0
  87. package/dist/types/CSSColor.js +9 -0
  88. package/dist/types/CalendarType.js +1 -1
  89. package/dist/types/DataType.js +13 -1
  90. package/dist/types/Float.js +14 -0
  91. package/dist/types/Integer.js +4 -0
  92. package/dist/types/InvisibleMessageMode.js +30 -0
  93. package/dist/types/ItemNavigationBehavior.js +2 -7
  94. package/dist/types/NavigationMode.js +1 -0
  95. package/dist/types/PopupState.js +1 -1
  96. package/dist/types/ValueState.js +1 -1
  97. package/dist/updateShadowRoot.js +29 -0
  98. package/dist/util/AriaLabelHelper.js +41 -0
  99. package/dist/util/Caret.js +32 -0
  100. package/dist/util/ColorConversion.js +398 -0
  101. package/dist/util/FocusableElements.js +30 -11
  102. package/dist/util/HTMLSanitizer.js +7 -0
  103. package/dist/util/InvisibleMessage.js +69 -0
  104. package/dist/util/PopupUtils.js +93 -0
  105. package/dist/util/SlotsHelper.js +43 -0
  106. package/dist/util/TabbableElements.js +5 -1
  107. package/dist/util/arraysAreEqual.js +15 -0
  108. package/dist/util/clamp.js +12 -0
  109. package/dist/util/createLinkInHead.js +19 -0
  110. package/dist/util/debounce.js +17 -0
  111. package/dist/util/escapeRegex.js +10 -0
  112. package/dist/util/generateHighlightedMarkup.js +42 -0
  113. package/dist/util/getActiveElement.js +11 -0
  114. package/dist/util/getClassCopy.js +10 -0
  115. package/dist/util/getEffectiveContentDensity.js +5 -0
  116. package/dist/util/getNormalizedTarget.js +16 -0
  117. package/dist/util/getSingletonElementInstance.js +13 -0
  118. package/dist/util/isDefaultSlotProvided.js +11 -0
  119. package/dist/util/isElementInView.js +15 -0
  120. package/dist/util/isNodeHidden.js +1 -5
  121. package/dist/util/isNodeTabbable.js +4 -4
  122. package/dist/util/isValidPropertyName.js +9 -3
  123. package/dist/util/setToArray.js +10 -0
  124. package/hash.txt +1 -0
  125. package/index.js +1 -1
  126. package/lib/generate-asset-parameters/index.js +8 -5
  127. package/lib/generate-styles/index.js +26 -0
  128. package/lib/generate-version-info/index.js +32 -0
  129. package/package-scripts.js +37 -28
  130. package/package.json +20 -13
  131. package/src/AssetRegistry.js +8 -7
  132. package/src/Boot.js +59 -0
  133. package/src/CSP.js +59 -0
  134. package/src/CustomElementsRegistry.js +79 -7
  135. package/src/CustomElementsScope.js +30 -0
  136. package/src/CustomElementsScopeUtils.js +108 -0
  137. package/src/DOMObserver.js +65 -0
  138. package/src/Device.js +71 -773
  139. package/src/EventProvider.js +38 -26
  140. package/src/FeaturesRegistry.js +4 -1
  141. package/src/FontFace.js +19 -62
  142. package/src/InitialConfiguration.js +43 -8
  143. package/src/Keys.js +136 -2
  144. package/src/ManagedStyles.js +83 -0
  145. package/src/MediaRange.js +109 -0
  146. package/src/PropertiesFileFormat.js +95 -0
  147. package/src/Render.js +175 -0
  148. package/src/RenderQueue.js +41 -17
  149. package/src/RenderScheduler.js +24 -126
  150. package/src/Runtimes.js +107 -0
  151. package/src/StaticArea.js +1 -39
  152. package/src/StaticAreaItem.js +58 -62
  153. package/src/SystemCSSVars.js +10 -0
  154. package/src/Theming.js +2 -1
  155. package/src/UI5Element.js +425 -318
  156. package/src/UI5ElementMetadata.js +173 -17
  157. package/src/asset-registries/Icons.js +125 -14
  158. package/src/asset-registries/Illustrations.js +30 -0
  159. package/src/asset-registries/LocaleData.js +105 -66
  160. package/src/asset-registries/Themes.js +29 -34
  161. package/src/asset-registries/i18n.js +73 -29
  162. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  163. package/src/config/AnimationMode.js +11 -1
  164. package/src/config/Icons.js +52 -0
  165. package/src/config/Language.js +58 -2
  166. package/src/config/Theme.js +25 -0
  167. package/src/css/BusyIndicator.css +80 -0
  168. package/src/css/FontFace.css +75 -0
  169. package/src/css/OverrideFontFace.css +32 -0
  170. package/src/css/SystemCSSVars.css +17 -0
  171. package/src/delegate/ItemNavigation.js +249 -171
  172. package/src/delegate/ResizeHandler.js +78 -38
  173. package/src/delegate/ScrollEnablement.js +49 -20
  174. package/src/features/F6Navigation.js +110 -0
  175. package/src/features/OpenUI5Enablement.js +119 -0
  176. package/src/features/OpenUI5Support.js +42 -7
  177. package/src/getSharedResource.js +30 -0
  178. package/src/i18nBundle.js +58 -5
  179. package/src/locale/RTLAwareRegistry.js +14 -0
  180. package/src/locale/applyDirection.js +17 -0
  181. package/src/locale/directionChange.js +32 -0
  182. package/src/locale/getEffectiveDir.js +28 -0
  183. package/src/locale/getLocale.js +12 -2
  184. package/src/locale/languageChange.js +22 -0
  185. package/src/renderer/LitRenderer.js +44 -7
  186. package/src/renderer/directives/style-map.js +72 -0
  187. package/src/renderer/executeTemplate.js +34 -0
  188. package/src/theming/CustomStyle.js +47 -6
  189. package/src/theming/ThemeLoaded.js +22 -0
  190. package/src/theming/applyTheme.js +13 -15
  191. package/src/theming/getConstructableStyle.js +15 -10
  192. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  193. package/src/theming/getEffectiveStyle.js +32 -8
  194. package/src/theming/getStylesString.js +15 -0
  195. package/src/theming/getThemeDesignerTheme.js +25 -5
  196. package/src/theming/preloadLinks.js +23 -0
  197. package/src/types/CSSColor.js +9 -0
  198. package/src/types/CalendarType.js +1 -1
  199. package/src/types/DataType.js +13 -1
  200. package/src/types/Float.js +14 -0
  201. package/src/types/Integer.js +4 -0
  202. package/src/types/InvisibleMessageMode.js +30 -0
  203. package/src/types/ItemNavigationBehavior.js +2 -7
  204. package/src/types/NavigationMode.js +1 -0
  205. package/src/types/PopupState.js +1 -1
  206. package/src/types/ValueState.js +1 -1
  207. package/src/updateShadowRoot.js +29 -0
  208. package/src/util/AriaLabelHelper.js +41 -0
  209. package/src/util/Caret.js +32 -0
  210. package/src/util/ColorConversion.js +398 -0
  211. package/src/util/FocusableElements.js +30 -11
  212. package/src/util/HTMLSanitizer.js +7 -0
  213. package/src/util/InvisibleMessage.js +69 -0
  214. package/src/util/PopupUtils.js +93 -0
  215. package/src/util/SlotsHelper.js +43 -0
  216. package/src/util/TabbableElements.js +5 -1
  217. package/src/util/arraysAreEqual.js +15 -0
  218. package/src/util/clamp.js +12 -0
  219. package/src/util/createLinkInHead.js +19 -0
  220. package/src/util/debounce.js +17 -0
  221. package/src/util/escapeRegex.js +10 -0
  222. package/src/util/generateHighlightedMarkup.js +42 -0
  223. package/src/util/getActiveElement.js +11 -0
  224. package/src/util/getClassCopy.js +10 -0
  225. package/src/util/getEffectiveContentDensity.js +5 -0
  226. package/src/util/getNormalizedTarget.js +16 -0
  227. package/src/util/getSingletonElementInstance.js +13 -0
  228. package/src/util/isDefaultSlotProvided.js +11 -0
  229. package/src/util/isElementInView.js +15 -0
  230. package/src/util/isNodeHidden.js +1 -5
  231. package/src/util/isNodeTabbable.js +4 -4
  232. package/src/util/isValidPropertyName.js +9 -3
  233. package/src/util/setToArray.js +10 -0
  234. package/used-modules.txt +10 -0
  235. package/bundle.es5.js +0 -28
  236. package/config/.eslintrc.js +0 -3
  237. package/config/rollup.config.js +0 -1
  238. package/dist/SVGIconRegistry.js +0 -60
  239. package/dist/boot.js +0 -32
  240. package/dist/compatibility/DOMObserver.js +0 -62
  241. package/dist/compatibility/patchNodeValue.js +0 -24
  242. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  243. package/dist/delegate/CustomResize.js +0 -78
  244. package/dist/delegate/NativeResize.js +0 -44
  245. package/dist/features/browsersupport/Edge.js +0 -6
  246. package/dist/features/browsersupport/IE11.js +0 -41
  247. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  248. package/dist/renderer/ifDefined.js +0 -21
  249. package/dist/resources/bundle.es5.js +0 -212
  250. package/dist/resources/bundle.es5.js.map +0 -1
  251. package/dist/resources/bundle.esm.js +0 -129
  252. package/dist/resources/bundle.esm.js.map +0 -1
  253. package/dist/test-resources/assets/Themes.js +0 -13
  254. package/dist/test-resources/elements/Child.js +0 -35
  255. package/dist/test-resources/elements/Generic.js +0 -84
  256. package/dist/test-resources/elements/GenericExt.js +0 -26
  257. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  258. package/dist/test-resources/elements/Parent.js +0 -37
  259. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  260. package/dist/test-resources/pages/AllTestElements.html +0 -42
  261. package/dist/test-resources/pages/Configuration.html +0 -20
  262. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  263. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  264. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  265. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  266. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  267. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  268. package/dist/test-resources/specs/Theming.spec.js +0 -31
  269. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -258
  270. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -93
  271. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -101
  272. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  273. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  274. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  275. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  276. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  277. package/dist/theming/CSSVarsPonyfill.js +0 -24
  278. package/dist/theming/adaptCSSForIE.js +0 -90
  279. package/dist/theming/createComponentStyleTag.js +0 -49
  280. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  281. package/dist/thirdparty/Array.from.js +0 -16
  282. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  283. package/dist/thirdparty/Array.prototype.find.js +0 -46
  284. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  285. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  286. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  287. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  288. package/dist/thirdparty/Number.isInteger.js +0 -5
  289. package/dist/thirdparty/Number.isNaN.js +0 -1
  290. package/dist/thirdparty/Number.parseInt.js +0 -1
  291. package/dist/thirdparty/Object.assign.js +0 -31
  292. package/dist/thirdparty/Object.entries.js +0 -11
  293. package/dist/thirdparty/Symbol.js +0 -2
  294. package/dist/thirdparty/WeakSet.js +0 -27
  295. package/dist/thirdparty/es6-string-methods.js +0 -182
  296. package/dist/thirdparty/events-polyfills.js +0 -89
  297. package/dist/thirdparty/fetch.js +0 -1
  298. package/dist/thirdparty/template.js +0 -600
  299. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  300. package/dist/util/isSlot.js +0 -3
  301. package/dist/webcomponentsjs/LICENSE.md +0 -19
  302. package/dist/webcomponentsjs/README.md +0 -229
  303. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  304. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  305. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  306. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  307. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  308. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  309. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  310. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  311. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  312. package/dist/webcomponentsjs/package.json +0 -46
  313. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  314. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  315. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  316. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  317. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  318. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  319. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  320. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  321. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  322. package/src/SVGIconRegistry.js +0 -60
  323. package/src/boot.js +0 -32
  324. package/src/compatibility/DOMObserver.js +0 -62
  325. package/src/compatibility/patchNodeValue.js +0 -24
  326. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  327. package/src/delegate/CustomResize.js +0 -78
  328. package/src/delegate/NativeResize.js +0 -44
  329. package/src/features/browsersupport/Edge.js +0 -6
  330. package/src/features/browsersupport/IE11.js +0 -41
  331. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  332. package/src/renderer/ifDefined.js +0 -21
  333. package/src/theming/CSSVarsPonyfill.js +0 -24
  334. package/src/theming/adaptCSSForIE.js +0 -90
  335. package/src/theming/createComponentStyleTag.js +0 -49
  336. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  337. package/src/thirdparty/Array.from.js +0 -16
  338. package/src/thirdparty/Array.prototype.fill.js +0 -44
  339. package/src/thirdparty/Array.prototype.find.js +0 -46
  340. package/src/thirdparty/Array.prototype.includes.js +0 -51
  341. package/src/thirdparty/Element.prototype.closest.js +0 -11
  342. package/src/thirdparty/Element.prototype.matches.js +0 -6
  343. package/src/thirdparty/Map.prototype.keys.js +0 -9
  344. package/src/thirdparty/Number.isInteger.js +0 -5
  345. package/src/thirdparty/Number.isNaN.js +0 -1
  346. package/src/thirdparty/Number.parseInt.js +0 -1
  347. package/src/thirdparty/Object.assign.js +0 -31
  348. package/src/thirdparty/Object.entries.js +0 -11
  349. package/src/thirdparty/Symbol.js +0 -2
  350. package/src/thirdparty/WeakSet.js +0 -27
  351. package/src/thirdparty/es6-string-methods.js +0 -182
  352. package/src/thirdparty/events-polyfills.js +0 -89
  353. package/src/thirdparty/fetch.js +0 -1
  354. package/src/thirdparty/template.js +0 -600
  355. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  356. package/src/util/isSlot.js +0 -3
@@ -1,72 +1,84 @@
1
1
  class EventProvider {
2
2
  constructor() {
3
- this._eventRegistry = {};
3
+ this._eventRegistry = new Map();
4
4
  }
5
5
 
6
6
  attachEvent(eventName, fnFunction) {
7
7
  const eventRegistry = this._eventRegistry;
8
- let eventListeners = eventRegistry[eventName];
8
+ const eventListeners = eventRegistry.get(eventName);
9
9
 
10
10
  if (!Array.isArray(eventListeners)) {
11
- eventRegistry[eventName] = [];
12
- eventListeners = eventRegistry[eventName];
11
+ eventRegistry.set(eventName, [fnFunction]);
12
+ return;
13
13
  }
14
14
 
15
- eventListeners.push({
16
- "function": fnFunction,
17
- });
15
+ if (!eventListeners.includes(fnFunction)) {
16
+ eventListeners.push(fnFunction);
17
+ }
18
18
  }
19
19
 
20
20
  detachEvent(eventName, fnFunction) {
21
21
  const eventRegistry = this._eventRegistry;
22
- let eventListeners = eventRegistry[eventName];
22
+ const eventListeners = eventRegistry.get(eventName);
23
23
 
24
24
  if (!eventListeners) {
25
25
  return;
26
26
  }
27
+ const indexOfFnToDetach = eventListeners.indexOf(fnFunction);
27
28
 
28
- eventListeners = eventListeners.filter(event => {
29
- return event["function"] !== fnFunction; // eslint-disable-line
30
- });
29
+ if (indexOfFnToDetach !== -1) {
30
+ eventListeners.splice(indexOfFnToDetach, 1);
31
+ }
31
32
 
32
33
  if (eventListeners.length === 0) {
33
- delete eventRegistry[eventName];
34
+ eventRegistry.delete(eventName);
34
35
  }
35
36
  }
36
37
 
38
+ /**
39
+ * Fires an event and returns the results of all event listeners as an array.
40
+ *
41
+ * @param eventName the event to fire
42
+ * @param data optional data to pass to each event listener
43
+ * @returns {Array} an array with the results of all event listeners
44
+ */
37
45
  fireEvent(eventName, data) {
38
46
  const eventRegistry = this._eventRegistry;
39
- const eventListeners = eventRegistry[eventName];
47
+ const eventListeners = eventRegistry.get(eventName);
40
48
 
41
49
  if (!eventListeners) {
42
- return;
50
+ return [];
43
51
  }
44
52
 
45
- eventListeners.forEach(event => {
46
- event["function"].call(this, data); // eslint-disable-line
53
+ return eventListeners.map(fn => {
54
+ return fn.call(this, data); // eslint-disable-line
47
55
  });
48
56
  }
49
57
 
58
+ /**
59
+ * Fires an event and returns a promise that will resolve once all listeners have resolved.
60
+ *
61
+ * @param eventName the event to fire
62
+ * @param data optional data to pass to each event listener
63
+ * @returns {Promise} a promise that will resolve when all listeners have resolved
64
+ */
65
+ fireEventAsync(eventName, data) {
66
+ return Promise.all(this.fireEvent(eventName, data));
67
+ }
68
+
50
69
  isHandlerAttached(eventName, fnFunction) {
51
70
  const eventRegistry = this._eventRegistry;
52
- const eventListeners = eventRegistry[eventName];
71
+ const eventListeners = eventRegistry.get(eventName);
53
72
 
54
73
  if (!eventListeners) {
55
74
  return false;
56
75
  }
57
76
 
58
- for (let i = 0; i < eventListeners.length; i++) {
59
- const event = eventListeners[i];
60
- if (event["function"] === fnFunction) { // eslint-disable-line
61
- return true;
62
- }
63
- }
64
-
65
- return false;
77
+ return eventListeners.includes(fnFunction);
66
78
  }
67
79
 
68
80
  hasListeners(eventName) {
69
- return !!this._eventRegistry[eventName];
81
+ return !!this._eventRegistry.get(eventName);
70
82
  }
71
83
  }
72
84
 
@@ -8,4 +8,7 @@ const getFeature = name => {
8
8
  return features.get(name);
9
9
  };
10
10
 
11
- export { registerFeature, getFeature };
11
+ export {
12
+ registerFeature,
13
+ getFeature,
14
+ };
package/dist/FontFace.js CHANGED
@@ -1,73 +1,30 @@
1
- /**
2
- * CSS font face used for the texts provided by SAP.
3
- */
4
- import createStyleInHead from "./util/createStyleInHead.js";
1
+ import { hasStyle, createStyle } from "./ManagedStyles.js";
5
2
  import { getFeature } from "./FeaturesRegistry.js";
3
+ import fontFaceCSS from "./generated/css/FontFace.css.js";
4
+ import overrideFontFaceCSS from "./generated/css/OverrideFontFace.css.js";
6
5
 
7
- /* CDN Locations */
8
- const font72RegularWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents`;
9
- const font72RegularWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents`;
10
-
11
- const font72RegularFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents`;
12
- const font72RegularFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents`;
13
-
14
- const font72BoldWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents`;
15
- const font72BoldWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents`;
16
-
17
- const font72BoldFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents`;
18
- const font72BoldFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents`;
6
+ const insertFontFace = () => {
7
+ const OpenUI5Support = getFeature("OpenUI5Support");
19
8
 
20
- const fontFaceCSS = `
21
- @font-face {
22
- font-family: "72";
23
- font-style: normal;
24
- font-weight: 400;
25
- src: local("72"),
26
- url(${font72RegularWoff2}) format("woff2"),
27
- url(${font72RegularWoff}) format("woff");
28
- }
29
-
30
- @font-face {
31
- font-family: "72full";
32
- font-style: normal;
33
- font-weight: 400;
34
- src: local('72-full'),
35
- url(${font72RegularFullWoff2}) format("woff2"),
36
- url(${font72RegularFullWoff}) format("woff");
37
-
38
- }
39
-
40
- @font-face {
41
- font-family: "72";
42
- font-style: normal;
43
- font-weight: 700;
44
- src: local('72-Bold'),
45
- url(${font72BoldWoff2}) format("woff2"),
46
- url(${font72BoldWoff}) format("woff");
9
+ // Only set the main font if there is no OpenUI5 support, or there is, but OpenUI5 is not loaded
10
+ if (!OpenUI5Support || !OpenUI5Support.isLoaded()) {
11
+ insertMainFontFace();
47
12
  }
48
-
49
- @font-face {
50
- font-family: "72full";
51
- font-style: normal;
52
- font-weight: 700;
53
- src: local('72-Bold-full'),
54
- url(${font72BoldFullWoff2}) format("woff2"),
55
- url(${font72BoldFullWoff}) format("woff");
56
- }
57
- `;
58
13
 
59
- const insertFontFace = () => {
60
- if (document.querySelector(`head>style[data-ui5-font-face]`)) {
61
- return;
62
- }
14
+ // Always set the override font - OpenUI5 in CSS Vars mode does not set it, unlike the main font
15
+ insertOverrideFontFace();
16
+ };
63
17
 
64
- // If OpenUI5 is found, let it set the font
65
- const OpenUI5Support = getFeature("OpenUI5Support");
66
- if (OpenUI5Support && OpenUI5Support.isLoaded()) {
67
- return;
18
+ const insertMainFontFace = () => {
19
+ if (!hasStyle("data-ui5-font-face")) {
20
+ createStyle(fontFaceCSS, "data-ui5-font-face");
68
21
  }
22
+ };
69
23
 
70
- createStyleInHead(fontFaceCSS, { "data-ui5-font-face": "" });
24
+ const insertOverrideFontFace = () => {
25
+ if (!hasStyle("data-ui5-font-face-override")) {
26
+ createStyle(overrideFontFaceCSS, "data-ui5-font-face-override");
27
+ }
71
28
  };
72
29
 
73
30
  export default insertFontFace;
@@ -12,6 +12,7 @@ let initialConfig = {
12
12
  calendarType: null,
13
13
  noConflict: false, // no URL
14
14
  formatSettings: {},
15
+ fetchDefaultLanguage: false,
15
16
  };
16
17
 
17
18
  /* General settings */
@@ -35,6 +36,16 @@ const getLanguage = () => {
35
36
  return initialConfig.language;
36
37
  };
37
38
 
39
+ /**
40
+ * Returns if the default language, that is inlined at build time,
41
+ * should be fetched over the network instead.
42
+ * @returns {Boolean}
43
+ */
44
+ const getFetchDefaultLanguage = () => {
45
+ initConfiguration();
46
+ return initialConfig.fetchDefaultLanguage;
47
+ };
48
+
38
49
  const getNoConflict = () => {
39
50
  initConfiguration();
40
51
  return initialConfig.noConflict;
@@ -75,23 +86,47 @@ const parseConfigurationScript = () => {
75
86
  const parseURLParameters = () => {
76
87
  const params = new URLSearchParams(window.location.search);
77
88
 
89
+ // Process "sap-*" params first
78
90
  params.forEach((value, key) => {
79
- if (!key.startsWith("sap-ui")) {
91
+ const parts = key.split("sap-").length;
92
+ if (parts === 0 || parts === key.split("sap-ui-").length) {
80
93
  return;
81
94
  }
82
95
 
83
- const lowerCaseValue = value.toLowerCase();
84
-
85
- const param = key.split("sap-ui-")[1];
96
+ applyURLParam(key, value, "sap");
97
+ });
86
98
 
87
- if (booleanMapping.has(value)) {
88
- value = booleanMapping.get(lowerCaseValue);
99
+ // Process "sap-ui-*" params
100
+ params.forEach((value, key) => {
101
+ if (!key.startsWith("sap-ui")) {
102
+ return;
89
103
  }
90
104
 
91
- initialConfig[param] = value;
105
+ applyURLParam(key, value, "sap-ui");
92
106
  });
93
107
  };
94
108
 
109
+ const normalizeParamValue = (param, value) => {
110
+ if (param === "theme" && value.includes("@")) { // the theme parameter might have @<URL-TO-THEME> in the value - strip this
111
+ return value.split("@")[0];
112
+ }
113
+
114
+ return value;
115
+ };
116
+
117
+ const applyURLParam = (key, value, paramType) => {
118
+ const lowerCaseValue = value.toLowerCase();
119
+ const param = key.split(`${paramType}-`)[1];
120
+
121
+ if (booleanMapping.has(value)) {
122
+ value = booleanMapping.get(lowerCaseValue);
123
+ }
124
+
125
+ value = normalizeParamValue(param, value);
126
+
127
+ initialConfig[param] = value;
128
+ };
129
+
95
130
  const applyOpenUI5Configuration = () => {
96
131
  const OpenUI5Support = getFeature("OpenUI5Support");
97
132
  if (!OpenUI5Support || !OpenUI5Support.isLoaded()) {
@@ -102,7 +137,6 @@ const applyOpenUI5Configuration = () => {
102
137
  initialConfig = merge(initialConfig, OpenUI5Config);
103
138
  };
104
139
 
105
-
106
140
  const initConfiguration = () => {
107
141
  if (initialized) {
108
142
  return;
@@ -125,6 +159,7 @@ export {
125
159
  getTheme,
126
160
  getRTL,
127
161
  getLanguage,
162
+ getFetchDefaultLanguage,
128
163
  getNoConflict,
129
164
  getCalendarType,
130
165
  getFormatSettings,
package/dist/Keys.js CHANGED
@@ -105,8 +105,14 @@ const KeyCodes = {
105
105
 
106
106
  const isEnter = event => (event.key ? event.key === "Enter" : event.keyCode === KeyCodes.ENTER) && !hasModifierKeys(event);
107
107
 
108
+ const isEnterShift = event => (event.key ? event.key === "Enter" : event.keyCode === KeyCodes.ENTER) && checkModifierKeys(event, false, false, true);
109
+
108
110
  const isSpace = event => (event.key ? (event.key === "Spacebar" || event.key === " ") : event.keyCode === KeyCodes.SPACE) && !hasModifierKeys(event);
109
111
 
112
+ const isSpaceShift = event => (event.key ? (event.key === "Spacebar" || event.key === " ") : event.keyCode === KeyCodes.SPACE) && checkModifierKeys(event, false, false, true);
113
+
114
+ const isSpaceCtrl = event => (event.key ? (event.key === "Spacebar" || event.key === " ") : event.keyCode === KeyCodes.SPACE) && checkModifierKeys(event, true, false, false);
115
+
110
116
  const isLeft = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && !hasModifierKeys(event);
111
117
 
112
118
  const isRight = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && !hasModifierKeys(event);
@@ -115,10 +121,46 @@ const isUp = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up
115
121
 
116
122
  const isDown = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && !hasModifierKeys(event);
117
123
 
124
+ const isLeftCtrl = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && checkModifierKeys(event, true, false, false);
125
+
126
+ const isRightCtrl = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && checkModifierKeys(event, true, false, false);
127
+
128
+ const isUpCtrl = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, true, false, false);
129
+
130
+ const isDownCtrl = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, true, false, false);
131
+
132
+ const isUpShift = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, false, false, true);
133
+
134
+ const isDownShift = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, false, false, true);
135
+
136
+ const isUpAlt = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, false, true, false);
137
+
138
+ const isDownAlt = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, false, true, false);
139
+
140
+ const isLeftShift = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && checkModifierKeys(event, false, false, true);
141
+
142
+ const isRightShift = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && checkModifierKeys(event, false, false, true);
143
+
144
+ const isLeftShiftCtrl = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && checkModifierKeys(event, true, false, true);
145
+
146
+ const isRightShiftCtrl = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && checkModifierKeys(event, true, false, true);
147
+
148
+ const isUpShiftCtrl = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, true, false, true);
149
+
150
+ const isDownShiftCtrl = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, true, false, true);
151
+
118
152
  const isHome = event => (event.key ? event.key === "Home" : event.keyCode === KeyCodes.HOME) && !hasModifierKeys(event);
119
153
 
120
154
  const isEnd = event => (event.key ? event.key === "End" : event.keyCode === KeyCodes.END) && !hasModifierKeys(event);
121
155
 
156
+ const isHomeCtrl = event => (event.key ? event.key === "Home" : event.keyCode === KeyCodes.HOME) && checkModifierKeys(event, true, false, false);
157
+
158
+ const isHomeShift = event => (event.key ? event.key === "Home" : event.keyCode === KeyCodes.HOME) && checkModifierKeys(event, false, false, true);
159
+
160
+ const isEndCtrl = event => (event.key ? event.key === "End" : event.keyCode === KeyCodes.END) && checkModifierKeys(event, true, false, false);
161
+
162
+ const isEndShift = event => (event.key ? event.key === "End" : event.keyCode === KeyCodes.END) && checkModifierKeys(event, false, false, true);
163
+
122
164
  const isEscape = event => (event.key ? event.key === "Escape" || event.key === "Esc" : event.keyCode === KeyCodes.ESCAPE) && !hasModifierKeys(event);
123
165
 
124
166
  const isTabNext = event => (event.key ? event.key === "Tab" : event.keyCode === KeyCodes.TAB) && !hasModifierKeys(event);
@@ -129,33 +171,125 @@ const isBackSpace = event => (event.key ? event.key === "Backspace" : event.keyC
129
171
 
130
172
  const isDelete = event => (event.key ? event.key === "Delete" : event.keyCode === KeyCodes.DELETE) && !hasModifierKeys(event);
131
173
 
174
+ const isDeleteShift = event => (event.key ? event.key === "Delete" : event.keyCode === KeyCodes.DELETE) && checkModifierKeys(event, false, false, true);
175
+
176
+ const isInsertShift = event => (event.key ? event.key === "Insert" : event.keyCode === KeyCodes.DELETE) && checkModifierKeys(event, false, false, true);
177
+
178
+ const isInsertCtrl = event => (event.key ? event.key === "Insert" : event.keyCode === KeyCodes.DELETE) && checkModifierKeys(event, true, false, false);
179
+
180
+ const isPageUp = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && !hasModifierKeys(event);
181
+
182
+ const isPageDown = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && !hasModifierKeys(event);
183
+
184
+ const isPageUpShift = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, false, false, true);
185
+
186
+ const isPageUpAlt = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, false, true, false);
187
+
188
+ const isPageDownShift = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, false, false, true);
189
+
190
+ const isPageDownAlt = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, false, true, false);
191
+
192
+ const isPageUpShiftCtrl = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, true, false, true);
193
+
194
+ const isPageDownShiftCtrl = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, true, false, true);
195
+
196
+ const isPlus = event => (event.key ? event.key === "+" : event.keyCode === KeyCodes.PLUS) || (event.keyCode === KeyCodes.NUMPAD_PLUS && !hasModifierKeys(event));
197
+
198
+ const isMinus = event => (event.key ? event.key === "-" : event.keyCode === KeyCodes.MINUS) || (event.keyCode === KeyCodes.NUMPAD_MINUS && !hasModifierKeys(event));
199
+
132
200
  const isShow = event => {
133
201
  if (event.key) {
134
- return (event.key === "F4" && !hasModifierKeys(event)) || (((event.key === "ArrowDown" || event.key === "Down") || (event.key === "ArrowUp" || event.key === "Up")) && checkModifierKeys(event, /* Ctrl */ false, /* Alt */ true, /* Shift */ false));
202
+ return isF4(event) || isShowByArrows(event);
135
203
  }
136
204
 
137
205
  return (event.keyCode === KeyCodes.F4 && !hasModifierKeys(event)) || (event.keyCode === KeyCodes.ARROW_DOWN && checkModifierKeys(event, /* Ctrl */ false, /* Alt */ true, /* Shift */ false));
138
206
  };
139
207
 
208
+ const isF4 = event => {
209
+ return event.key === "F4" && !hasModifierKeys(event);
210
+ };
211
+
212
+ const isF4Shift = event => (event.key ? event.key === "F4" : event.keyCode === KeyCodes.F4) && checkModifierKeys(event, false, false, true);
213
+
214
+ const isF6Next = event => ((event.key ? event.key === "F6" : event.keyCode === KeyCodes.F6) && checkModifierKeys(event, false, false, false))
215
+ || ((event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, true, true, false));
216
+
217
+ const isF6Previous = event => ((event.key ? event.key === "F6" : event.keyCode === KeyCodes.F6) && checkModifierKeys(event, false, false, true))
218
+ || ((event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_Up) && checkModifierKeys(event, true, true, false));
219
+
220
+ const isF7 = event => (event.key ? event.key === "F7" : event.keyCode === KeyCodes.F7) && !hasModifierKeys(event);
221
+
222
+ const isShowByArrows = event => {
223
+ return ((event.key === "ArrowDown" || event.key === "Down") || (event.key === "ArrowUp" || event.key === "Up")) && checkModifierKeys(event, /* Ctrl */ false, /* Alt */ true, /* Shift */ false);
224
+ };
225
+
226
+ const isShift = event => event.key === "Shift" || event.keyCode === KeyCodes.SHIFT;
227
+
228
+ const isCtrlA = event => ((event.key === "A" || event.key === "a") || event.which === KeyCodes.A) && checkModifierKeys(event, true, false, false);
229
+
230
+ const isCtrlV = event => ((event.key === "V" || event.key === "v") || event.which === KeyCodes.V) && checkModifierKeys(event, true, false, false);
231
+
140
232
  const hasModifierKeys = event => event.shiftKey || event.altKey || getCtrlKey(event);
141
233
 
142
234
  const getCtrlKey = event => !!(event.metaKey || event.ctrlKey); // double negation doesn't have effect on boolean but ensures null and undefined are equivalent to false.
143
235
 
144
- const checkModifierKeys = (oEvent, bCtrlKey, bAltKey, bShiftKey) => oEvent.shiftKey === bShiftKey && oEvent.altKey === bAltKey && getCtrlKey(oEvent) === bCtrlKey;
236
+ const checkModifierKeys = (event, bCtrlKey, bAltKey, bShiftKey) => event.shiftKey === bShiftKey && event.altKey === bAltKey && getCtrlKey(event) === bCtrlKey;
145
237
 
146
238
  export {
147
239
  isEnter,
240
+ isEnterShift,
148
241
  isSpace,
242
+ isSpaceShift,
243
+ isSpaceCtrl,
149
244
  isLeft,
150
245
  isRight,
151
246
  isUp,
152
247
  isDown,
248
+ isLeftCtrl,
249
+ isRightCtrl,
250
+ isUpCtrl,
251
+ isDownCtrl,
252
+ isUpShift,
253
+ isDownShift,
254
+ isUpAlt,
255
+ isDownAlt,
256
+ isLeftShift,
257
+ isRightShift,
258
+ isLeftShiftCtrl,
259
+ isRightShiftCtrl,
260
+ isUpShiftCtrl,
261
+ isDownShiftCtrl,
153
262
  isHome,
154
263
  isEnd,
264
+ isPlus,
265
+ isMinus,
266
+ isHomeCtrl,
267
+ isEndCtrl,
268
+ isHomeShift,
269
+ isEndShift,
155
270
  isEscape,
156
271
  isTabNext,
157
272
  isTabPrevious,
158
273
  isBackSpace,
159
274
  isDelete,
160
275
  isShow,
276
+ isF4,
277
+ isF4Shift,
278
+ isF6Previous,
279
+ isF6Next,
280
+ isF7,
281
+ isPageUp,
282
+ isPageDown,
283
+ isPageUpShift,
284
+ isPageUpAlt,
285
+ isPageDownShift,
286
+ isPageDownAlt,
287
+ isPageUpShiftCtrl,
288
+ isPageDownShiftCtrl,
289
+ isShift,
290
+ isCtrlA,
291
+ isCtrlV,
292
+ isDeleteShift,
293
+ isInsertShift,
294
+ isInsertCtrl,
161
295
  };
@@ -0,0 +1,83 @@
1
+ import createStyleInHead from "./util/createStyleInHead.js";
2
+ import createLinkInHead from "./util/createLinkInHead.js";
3
+ import { shouldUseLinks, getUrl } from "./CSP.js";
4
+
5
+ const getStyleId = (name, value) => {
6
+ return value ? `${name}|${value}` : name;
7
+ };
8
+
9
+ const createStyle = (data, name, value = "") => {
10
+ const content = typeof data === "string" ? data : data.content;
11
+
12
+ if (shouldUseLinks()) {
13
+ const attributes = {};
14
+ attributes[name] = value;
15
+ const href = getUrl(data.packageName, data.fileName);
16
+ createLinkInHead(href, attributes);
17
+ } else if (document.adoptedStyleSheets) {
18
+ const stylesheet = new CSSStyleSheet();
19
+ stylesheet.replaceSync(content);
20
+ stylesheet._ui5StyleId = getStyleId(name, value); // set an id so that we can find the style later
21
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, stylesheet];
22
+ } else {
23
+ const attributes = {};
24
+ attributes[name] = value;
25
+ createStyleInHead(content, attributes);
26
+ }
27
+ };
28
+
29
+ const updateStyle = (data, name, value = "") => {
30
+ const content = typeof data === "string" ? data : data.content;
31
+
32
+ if (shouldUseLinks()) {
33
+ document.querySelector(`head>link[${name}="${value}"]`).href = getUrl(data.packageName, data.fileName);
34
+ } else if (document.adoptedStyleSheets) {
35
+ document.adoptedStyleSheets.find(sh => sh._ui5StyleId === getStyleId(name, value)).replaceSync(content || "");
36
+ } else {
37
+ document.querySelector(`head>style[${name}="${value}"]`).textContent = content || "";
38
+ }
39
+ };
40
+
41
+ const hasStyle = (name, value = "") => {
42
+ if (shouldUseLinks()) {
43
+ return !!document.querySelector(`head>link[${name}="${value}"]`);
44
+ }
45
+
46
+ if (document.adoptedStyleSheets) {
47
+ return !!document.adoptedStyleSheets.find(sh => sh._ui5StyleId === getStyleId(name, value));
48
+ }
49
+
50
+ return !!document.querySelector(`head>style[${name}="${value}"]`);
51
+ };
52
+
53
+ const removeStyle = (name, value = "") => {
54
+ if (shouldUseLinks()) {
55
+ const linkElement = document.querySelector(`head>link[${name}="${value}"]`);
56
+ if (linkElement) {
57
+ linkElement.parentElement.removeChild(linkElement);
58
+ }
59
+ } else if (document.adoptedStyleSheets) {
60
+ document.adoptedStyleSheets = document.adoptedStyleSheets.filter(sh => sh._ui5StyleId !== getStyleId(name, value));
61
+ } else {
62
+ const styleElement = document.querySelector(`head > style[${name}="${value}"]`);
63
+ if (styleElement) {
64
+ styleElement.parentElement.removeChild(styleElement);
65
+ }
66
+ }
67
+ };
68
+
69
+ const createOrUpdateStyle = (data, name, value = "") => {
70
+ if (hasStyle(name, value)) {
71
+ updateStyle(data, name, value);
72
+ } else {
73
+ createStyle(data, name, value);
74
+ }
75
+ };
76
+
77
+ export {
78
+ createStyle,
79
+ hasStyle,
80
+ updateStyle,
81
+ removeStyle,
82
+ createOrUpdateStyle,
83
+ };