@ui5/webcomponents-base 0.0.0-2647941ee → 0.0.0-274170508

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 (353) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +314 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +20 -20
  5. package/dist/AssetRegistry.js +8 -9
  6. package/dist/Boot.js +59 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsRegistry.js +60 -4
  9. package/dist/CustomElementsScope.js +20 -98
  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 +30 -26
  14. package/dist/FeaturesRegistry.js +4 -1
  15. package/dist/FontFace.js +7 -95
  16. package/dist/InitialConfiguration.js +37 -21
  17. package/dist/Keys.js +98 -0
  18. package/dist/ManagedStyles.js +83 -0
  19. package/dist/MediaRange.js +109 -0
  20. package/dist/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  21. package/dist/Render.js +175 -0
  22. package/dist/RenderScheduler.js +16 -138
  23. package/dist/Runtimes.js +107 -0
  24. package/dist/StaticArea.js +1 -29
  25. package/dist/StaticAreaItem.js +58 -65
  26. package/dist/SystemCSSVars.js +4 -25
  27. package/dist/UI5Element.js +322 -387
  28. package/dist/UI5ElementMetadata.js +132 -17
  29. package/dist/asset-registries/Icons.js +118 -15
  30. package/dist/asset-registries/Illustrations.js +30 -0
  31. package/dist/asset-registries/LocaleData.js +97 -68
  32. package/dist/asset-registries/Themes.js +29 -35
  33. package/dist/asset-registries/i18n.js +62 -49
  34. package/dist/assets/bundle.esm.3bc98648.js +43 -0
  35. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  36. package/dist/config/Icons.js +52 -0
  37. package/dist/config/Language.js +18 -20
  38. package/dist/config/Theme.js +25 -0
  39. package/dist/css/BusyIndicator.css +80 -0
  40. package/dist/css/FontFace.css +66 -0
  41. package/dist/css/OverrideFontFace.css +32 -0
  42. package/dist/css/SystemCSSVars.css +17 -0
  43. package/dist/delegate/ItemNavigation.js +238 -201
  44. package/dist/delegate/ResizeHandler.js +78 -37
  45. package/dist/delegate/ScrollEnablement.js +49 -20
  46. package/dist/features/F6Navigation.js +110 -0
  47. package/dist/features/OpenUI5Enablement.js +119 -0
  48. package/dist/features/OpenUI5Support.js +41 -6
  49. package/dist/generated/AssetParameters.js +1 -1
  50. package/dist/generated/VersionInfo.js +10 -0
  51. package/dist/generated/css/BusyIndicator.css.js +5 -0
  52. package/dist/generated/css/FontFace.css.js +5 -0
  53. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  54. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  55. package/dist/i18nBundle.js +39 -5
  56. package/dist/locale/applyDirection.js +6 -4
  57. package/dist/locale/directionChange.js +32 -0
  58. package/dist/locale/getEffectiveDir.js +28 -0
  59. package/dist/locale/languageChange.js +1 -1
  60. package/dist/renderer/LitRenderer.js +39 -18
  61. package/dist/renderer/directives/style-map.js +72 -0
  62. package/dist/renderer/executeTemplate.js +19 -2
  63. package/dist/sap/base/Log.js +241 -0
  64. package/dist/sap/base/assert.js +8 -0
  65. package/dist/sap/base/security/URLListValidator.js +148 -0
  66. package/dist/sap/base/security/encodeCSS.js +14 -0
  67. package/dist/sap/base/security/encodeXML.js +23 -0
  68. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  69. package/dist/sap/base/strings/toHex.js +8 -0
  70. package/dist/sap/base/util/now.js +7 -0
  71. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  72. package/dist/theming/CustomStyle.js +25 -5
  73. package/dist/theming/applyTheme.js +11 -16
  74. package/dist/theming/getConstructableStyle.js +7 -6
  75. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  76. package/dist/theming/getEffectiveStyle.js +24 -8
  77. package/dist/theming/getStylesString.js +4 -2
  78. package/dist/theming/getThemeDesignerTheme.js +25 -5
  79. package/dist/theming/preloadLinks.js +23 -0
  80. package/dist/types/CSSColor.js +9 -0
  81. package/dist/types/DOMReference.js +24 -0
  82. package/dist/types/DataType.js +12 -0
  83. package/dist/types/Float.js +4 -0
  84. package/dist/types/Integer.js +4 -0
  85. package/dist/types/InvisibleMessageMode.js +30 -0
  86. package/dist/types/ItemNavigationBehavior.js +2 -7
  87. package/dist/updateShadowRoot.js +29 -0
  88. package/dist/util/AriaLabelHelper.js +6 -8
  89. package/dist/util/Caret.js +32 -0
  90. package/dist/util/ColorConversion.js +398 -0
  91. package/dist/util/FocusableElements.js +13 -7
  92. package/dist/util/HTMLSanitizer.js +7 -0
  93. package/dist/util/InvisibleMessage.js +69 -0
  94. package/dist/util/PopupUtils.js +93 -0
  95. package/dist/util/SlotsHelper.js +43 -0
  96. package/dist/util/TabbableElements.js +5 -1
  97. package/dist/util/arraysAreEqual.js +15 -0
  98. package/dist/util/clamp.js +12 -0
  99. package/dist/util/createLinkInHead.js +19 -0
  100. package/dist/util/debounce.js +17 -0
  101. package/dist/util/escapeRegex.js +10 -0
  102. package/dist/util/generateHighlightedMarkup.js +42 -0
  103. package/dist/util/getActiveElement.js +11 -0
  104. package/dist/util/getClassCopy.js +10 -0
  105. package/dist/util/getEffectiveContentDensity.js +5 -0
  106. package/dist/util/getEffectiveScrollbarStyle.js +5 -0
  107. package/dist/util/getNormalizedTarget.js +16 -0
  108. package/dist/util/isDefaultSlotProvided.js +11 -0
  109. package/dist/util/isElementInView.js +15 -0
  110. package/dist/util/isNodeHidden.js +1 -1
  111. package/dist/util/isNodeTabbable.js +4 -4
  112. package/hash.txt +1 -0
  113. package/index.js +1 -1
  114. package/lib/generate-asset-parameters/index.js +8 -5
  115. package/lib/generate-styles/index.js +26 -0
  116. package/lib/generate-version-info/index.js +32 -0
  117. package/package-scripts.js +37 -28
  118. package/package.json +20 -13
  119. package/src/AssetRegistry.js +8 -9
  120. package/src/Boot.js +59 -0
  121. package/src/CSP.js +59 -0
  122. package/src/CustomElementsRegistry.js +60 -4
  123. package/src/CustomElementsScope.js +20 -98
  124. package/src/CustomElementsScopeUtils.js +108 -0
  125. package/src/DOMObserver.js +65 -0
  126. package/src/Device.js +71 -773
  127. package/src/EventProvider.js +30 -26
  128. package/src/FeaturesRegistry.js +4 -1
  129. package/src/FontFace.js +7 -95
  130. package/src/InitialConfiguration.js +37 -21
  131. package/src/Keys.js +98 -0
  132. package/src/ManagedStyles.js +83 -0
  133. package/src/MediaRange.js +109 -0
  134. package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  135. package/src/Render.js +175 -0
  136. package/src/RenderScheduler.js +16 -138
  137. package/src/Runtimes.js +107 -0
  138. package/src/StaticArea.js +1 -29
  139. package/src/StaticAreaItem.js +58 -65
  140. package/src/SystemCSSVars.js +4 -25
  141. package/src/UI5Element.js +322 -387
  142. package/src/UI5ElementMetadata.js +132 -17
  143. package/src/asset-registries/Icons.js +118 -15
  144. package/src/asset-registries/Illustrations.js +30 -0
  145. package/src/asset-registries/LocaleData.js +97 -68
  146. package/src/asset-registries/Themes.js +29 -35
  147. package/src/asset-registries/i18n.js +62 -49
  148. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  149. package/src/config/Icons.js +52 -0
  150. package/src/config/Language.js +18 -20
  151. package/src/config/Theme.js +25 -0
  152. package/src/css/BusyIndicator.css +80 -0
  153. package/src/css/FontFace.css +66 -0
  154. package/src/css/OverrideFontFace.css +32 -0
  155. package/src/css/SystemCSSVars.css +17 -0
  156. package/src/delegate/ItemNavigation.js +238 -201
  157. package/src/delegate/ResizeHandler.js +78 -37
  158. package/src/delegate/ScrollEnablement.js +49 -20
  159. package/src/features/F6Navigation.js +110 -0
  160. package/src/features/OpenUI5Enablement.js +119 -0
  161. package/src/features/OpenUI5Support.js +41 -6
  162. package/src/i18nBundle.js +39 -5
  163. package/src/locale/applyDirection.js +6 -4
  164. package/src/locale/directionChange.js +32 -0
  165. package/src/locale/getEffectiveDir.js +28 -0
  166. package/src/locale/languageChange.js +1 -1
  167. package/src/renderer/LitRenderer.js +39 -18
  168. package/src/renderer/directives/style-map.js +72 -0
  169. package/src/renderer/executeTemplate.js +19 -2
  170. package/src/theming/CustomStyle.js +25 -5
  171. package/src/theming/applyTheme.js +11 -16
  172. package/src/theming/getConstructableStyle.js +7 -6
  173. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  174. package/src/theming/getEffectiveStyle.js +24 -8
  175. package/src/theming/getStylesString.js +4 -2
  176. package/src/theming/getThemeDesignerTheme.js +25 -5
  177. package/src/theming/preloadLinks.js +23 -0
  178. package/src/types/CSSColor.js +9 -0
  179. package/src/types/DOMReference.js +24 -0
  180. package/src/types/DataType.js +12 -0
  181. package/src/types/Float.js +4 -0
  182. package/src/types/Integer.js +4 -0
  183. package/src/types/InvisibleMessageMode.js +30 -0
  184. package/src/types/ItemNavigationBehavior.js +2 -7
  185. package/src/updateShadowRoot.js +29 -0
  186. package/src/util/AriaLabelHelper.js +6 -8
  187. package/src/util/Caret.js +32 -0
  188. package/src/util/ColorConversion.js +398 -0
  189. package/src/util/FocusableElements.js +13 -7
  190. package/src/util/HTMLSanitizer.js +7 -0
  191. package/src/util/InvisibleMessage.js +69 -0
  192. package/src/util/PopupUtils.js +93 -0
  193. package/src/util/SlotsHelper.js +43 -0
  194. package/src/util/TabbableElements.js +5 -1
  195. package/src/util/arraysAreEqual.js +15 -0
  196. package/src/util/clamp.js +12 -0
  197. package/src/util/createLinkInHead.js +19 -0
  198. package/src/util/debounce.js +17 -0
  199. package/src/util/escapeRegex.js +10 -0
  200. package/src/util/generateHighlightedMarkup.js +42 -0
  201. package/src/util/getActiveElement.js +11 -0
  202. package/src/util/getClassCopy.js +10 -0
  203. package/src/util/getEffectiveContentDensity.js +5 -0
  204. package/src/util/getEffectiveScrollbarStyle.js +5 -0
  205. package/src/util/getNormalizedTarget.js +16 -0
  206. package/src/util/isDefaultSlotProvided.js +11 -0
  207. package/src/util/isElementInView.js +15 -0
  208. package/src/util/isNodeHidden.js +1 -1
  209. package/src/util/isNodeTabbable.js +4 -4
  210. package/used-modules.txt +10 -0
  211. package/bundle.es5.js +0 -28
  212. package/config/.eslintrc.js +0 -3
  213. package/config/rollup.config.js +0 -1
  214. package/dist/SVGIconRegistry.js +0 -73
  215. package/dist/boot.js +0 -34
  216. package/dist/compatibility/DOMObserver.js +0 -62
  217. package/dist/compatibility/patchNodeValue.js +0 -24
  218. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  219. package/dist/config/AssetsPath.js +0 -17
  220. package/dist/delegate/CustomResize.js +0 -78
  221. package/dist/delegate/NativeResize.js +0 -45
  222. package/dist/features/PropertiesFormatSupport.js +0 -8
  223. package/dist/features/browsersupport/Edge.js +0 -6
  224. package/dist/features/browsersupport/IE11.js +0 -42
  225. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  226. package/dist/renderer/ifDefined.js +0 -21
  227. package/dist/renderer/scopeHTML.js +0 -32
  228. package/dist/resources/bundle.es5.js +0 -212
  229. package/dist/resources/bundle.es5.js.map +0 -1
  230. package/dist/resources/bundle.esm.js +0 -129
  231. package/dist/resources/bundle.esm.js.map +0 -1
  232. package/dist/test-resources/assets/Themes.js +0 -17
  233. package/dist/test-resources/elements/Child.js +0 -35
  234. package/dist/test-resources/elements/Generic.js +0 -84
  235. package/dist/test-resources/elements/GenericExt.js +0 -26
  236. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  237. package/dist/test-resources/elements/Parent.js +0 -37
  238. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  239. package/dist/test-resources/pages/AllTestElements.html +0 -42
  240. package/dist/test-resources/pages/Configuration.html +0 -20
  241. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  242. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  243. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  244. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  245. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  246. package/dist/test-resources/pages/i18n.html +0 -40
  247. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  248. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  249. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  250. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  251. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  252. package/dist/test-resources/specs/Theming.spec.js +0 -31
  253. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -258
  254. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -96
  255. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -101
  256. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  257. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  258. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  259. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  260. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  261. package/dist/theming/CSSVarsPonyfill.js +0 -68
  262. package/dist/theming/adaptCSSForIE.js +0 -95
  263. package/dist/theming/createComponentStyleTag.js +0 -54
  264. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  265. package/dist/thirdparty/Array.from.js +0 -16
  266. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  267. package/dist/thirdparty/Array.prototype.find.js +0 -46
  268. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  269. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  270. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  271. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  272. package/dist/thirdparty/Number.isInteger.js +0 -5
  273. package/dist/thirdparty/Number.isNaN.js +0 -1
  274. package/dist/thirdparty/Number.parseFloat.js +0 -1
  275. package/dist/thirdparty/Number.parseInt.js +0 -1
  276. package/dist/thirdparty/Object.assign.js +0 -31
  277. package/dist/thirdparty/Object.entries.js +0 -11
  278. package/dist/thirdparty/Symbol.js +0 -2
  279. package/dist/thirdparty/WeakSet.js +0 -27
  280. package/dist/thirdparty/es6-string-methods.js +0 -182
  281. package/dist/thirdparty/events-polyfills.js +0 -89
  282. package/dist/thirdparty/fetch.js +0 -1
  283. package/dist/thirdparty/template.js +0 -600
  284. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  285. package/dist/types/CalendarSelection.js +0 -17
  286. package/dist/util/EffectiveAssetPath.js +0 -27
  287. package/dist/util/encodeCSS.js +0 -24
  288. package/dist/util/findNodeOwner.js +0 -35
  289. package/dist/util/isSlot.js +0 -3
  290. package/dist/webcomponentsjs/LICENSE.md +0 -19
  291. package/dist/webcomponentsjs/README.md +0 -229
  292. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  293. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  294. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  295. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  296. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  297. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  298. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  299. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  300. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  301. package/dist/webcomponentsjs/package.json +0 -46
  302. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  303. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  304. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  305. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  306. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  307. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  308. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  309. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  310. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  311. package/src/SVGIconRegistry.js +0 -73
  312. package/src/boot.js +0 -34
  313. package/src/compatibility/DOMObserver.js +0 -62
  314. package/src/compatibility/patchNodeValue.js +0 -24
  315. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  316. package/src/config/AssetsPath.js +0 -17
  317. package/src/delegate/CustomResize.js +0 -78
  318. package/src/delegate/NativeResize.js +0 -45
  319. package/src/features/PropertiesFormatSupport.js +0 -8
  320. package/src/features/browsersupport/Edge.js +0 -6
  321. package/src/features/browsersupport/IE11.js +0 -42
  322. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  323. package/src/renderer/ifDefined.js +0 -21
  324. package/src/renderer/scopeHTML.js +0 -32
  325. package/src/theming/CSSVarsPonyfill.js +0 -68
  326. package/src/theming/adaptCSSForIE.js +0 -95
  327. package/src/theming/createComponentStyleTag.js +0 -54
  328. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  329. package/src/thirdparty/Array.from.js +0 -16
  330. package/src/thirdparty/Array.prototype.fill.js +0 -44
  331. package/src/thirdparty/Array.prototype.find.js +0 -46
  332. package/src/thirdparty/Array.prototype.includes.js +0 -51
  333. package/src/thirdparty/Element.prototype.closest.js +0 -11
  334. package/src/thirdparty/Element.prototype.matches.js +0 -6
  335. package/src/thirdparty/Map.prototype.keys.js +0 -9
  336. package/src/thirdparty/Number.isInteger.js +0 -5
  337. package/src/thirdparty/Number.isNaN.js +0 -1
  338. package/src/thirdparty/Number.parseFloat.js +0 -1
  339. package/src/thirdparty/Number.parseInt.js +0 -1
  340. package/src/thirdparty/Object.assign.js +0 -31
  341. package/src/thirdparty/Object.entries.js +0 -11
  342. package/src/thirdparty/Symbol.js +0 -2
  343. package/src/thirdparty/WeakSet.js +0 -27
  344. package/src/thirdparty/es6-string-methods.js +0 -182
  345. package/src/thirdparty/events-polyfills.js +0 -89
  346. package/src/thirdparty/fetch.js +0 -1
  347. package/src/thirdparty/template.js +0 -600
  348. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  349. package/src/types/CalendarSelection.js +0 -17
  350. package/src/util/EffectiveAssetPath.js +0 -27
  351. package/src/util/encodeCSS.js +0 -24
  352. package/src/util/findNodeOwner.js +0 -35
  353. package/src/util/isSlot.js +0 -3
@@ -1,7 +1,8 @@
1
- import RenderScheduler from "../RenderScheduler.js";
1
+ import { reRenderAllUI5Elements } from "../Render.js";
2
+ import getSharedResource from "../getSharedResource.js";
2
3
  import EventProvider from "../EventProvider.js";
3
4
 
4
- const eventProvider = new EventProvider();
5
+ const eventProvider = getSharedResource("CustomStyle.eventProvider", new EventProvider());
5
6
  const CUSTOM_CSS_CHANGE = "CustomCSSChange";
6
7
 
7
8
  const attachCustomCSSChange = listener => {
@@ -16,16 +17,35 @@ const fireCustomCSSChange = tag => {
16
17
  return eventProvider.fireEvent(CUSTOM_CSS_CHANGE, tag);
17
18
  };
18
19
 
19
- const customCSSFor = {};
20
+ const customCSSFor = getSharedResource("CustomStyle.customCSSFor", {});
21
+
22
+ // Listen to the eventProvider, in case other copies of this CustomStyle module fire this
23
+ // event, and this copy would therefore need to reRender the ui5 webcomponents; but
24
+ // don't reRender if it was this copy that fired the event to begin with.
25
+ let skipRerender;
26
+ attachCustomCSSChange(tag => {
27
+ if (!skipRerender) {
28
+ reRenderAllUI5Elements({ tag });
29
+ }
30
+ });
20
31
 
21
32
  const addCustomCSS = (tag, css) => {
22
33
  if (!customCSSFor[tag]) {
23
34
  customCSSFor[tag] = [];
24
35
  }
25
36
  customCSSFor[tag].push(css);
26
- fireCustomCSSChange(tag);
27
37
 
28
- RenderScheduler.reRenderAllUI5Elements({ tag });
38
+ skipRerender = true;
39
+ try {
40
+ // The event is fired and the attached event listeners are all called synchronously
41
+ // The skipRerender flag will be used to avoid calling reRenderAllUI5Elements twice when it is this copy
42
+ // of CustomStyle.js which is firing the `CustomCSSChange` event.
43
+ fireCustomCSSChange(tag);
44
+ } finally {
45
+ skipRerender = false;
46
+ }
47
+
48
+ return reRenderAllUI5Elements({ tag });
29
49
  };
30
50
 
31
51
  const getCustomCSS = tag => {
@@ -1,11 +1,10 @@
1
1
  import { getThemeProperties, getRegisteredPackages, isThemeRegistered } from "../asset-registries/Themes.js";
2
- import createThemePropertiesStyleTag from "./createThemePropertiesStyleTag.js";
2
+ import { removeStyle, createOrUpdateStyle } from "../ManagedStyles.js";
3
3
  import getThemeDesignerTheme from "./getThemeDesignerTheme.js";
4
- import { ponyfillNeeded, runPonyfill } from "./CSSVarsPonyfill.js";
5
4
  import { fireThemeLoaded } from "./ThemeLoaded.js";
6
5
  import { getFeature } from "../FeaturesRegistry.js";
7
6
 
8
- const BASE_THEME_PACKAGE = "@ui5/webcomponents-theme-base";
7
+ const BASE_THEME_PACKAGE = "@ui5/webcomponents-theming";
9
8
 
10
9
  const isThemeBaseRegistered = () => {
11
10
  const registeredPackages = getRegisteredPackages();
@@ -17,15 +16,14 @@ const loadThemeBase = async theme => {
17
16
  return;
18
17
  }
19
18
 
20
- const cssText = await getThemeProperties(BASE_THEME_PACKAGE, theme);
21
- createThemePropertiesStyleTag(cssText, BASE_THEME_PACKAGE);
19
+ const cssData = await getThemeProperties(BASE_THEME_PACKAGE, theme);
20
+ if (cssData) {
21
+ createOrUpdateStyle(cssData, "data-ui5-theme-properties", BASE_THEME_PACKAGE);
22
+ }
22
23
  };
23
24
 
24
25
  const deleteThemeBase = () => {
25
- const styleElement = document.head.querySelector(`style[data-ui5-theme-properties="${BASE_THEME_PACKAGE}"]`);
26
- if (styleElement) {
27
- styleElement.parentElement.removeChild(styleElement);
28
- }
26
+ removeStyle("data-ui5-theme-properties", BASE_THEME_PACKAGE);
29
27
  };
30
28
 
31
29
  const loadComponentPackages = async theme => {
@@ -35,8 +33,10 @@ const loadComponentPackages = async theme => {
35
33
  return;
36
34
  }
37
35
 
38
- const cssText = await getThemeProperties(packageName, theme);
39
- createThemePropertiesStyleTag(cssText, packageName);
36
+ const cssData = await getThemeProperties(packageName, theme);
37
+ if (cssData) {
38
+ createOrUpdateStyle(cssData, "data-ui5-theme-properties", packageName);
39
+ }
40
40
  });
41
41
  };
42
42
 
@@ -73,11 +73,6 @@ const applyTheme = async theme => {
73
73
  const packagesTheme = isThemeRegistered(theme) ? theme : extTheme && extTheme.baseThemeName;
74
74
  await loadComponentPackages(packagesTheme);
75
75
 
76
- // When changing the theme, run the ponyfill immediately
77
- if (ponyfillNeeded()) {
78
- runPonyfill();
79
- }
80
-
81
76
  fireThemeLoaded(theme);
82
77
  };
83
78
 
@@ -4,7 +4,7 @@ import { attachCustomCSSChange } from "./CustomStyle.js";
4
4
  const constructableStyleMap = new Map();
5
5
 
6
6
  attachCustomCSSChange(tag => {
7
- constructableStyleMap.delete(tag);
7
+ constructableStyleMap.delete(`${tag}_normal`); // there is custom CSS only for the component itself, not for its static area part
8
8
  });
9
9
 
10
10
  /**
@@ -13,17 +13,18 @@ attachCustomCSSChange(tag => {
13
13
  * @param ElementClass
14
14
  * @returns {*}
15
15
  */
16
- const getConstructableStyle = ElementClass => {
16
+ const getConstructableStyle = (ElementClass, forStaticArea = false) => {
17
17
  const tag = ElementClass.getMetadata().getTag();
18
+ const key = `${tag}_${forStaticArea ? "static" : "normal"}`;
18
19
 
19
- if (!constructableStyleMap.has(tag)) {
20
- const styleContent = getEffectiveStyle(ElementClass);
20
+ if (!constructableStyleMap.has(key)) {
21
+ const styleContent = getEffectiveStyle(ElementClass, forStaticArea);
21
22
  const style = new CSSStyleSheet();
22
23
  style.replaceSync(styleContent);
23
- constructableStyleMap.set(tag, [style]);
24
+ constructableStyleMap.set(key, [style]);
24
25
  }
25
26
 
26
- return constructableStyleMap.get(tag);
27
+ return constructableStyleMap.get(key);
27
28
  };
28
29
 
29
30
  export default getConstructableStyle;
@@ -0,0 +1,27 @@
1
+ import { getUrl } from "../CSP.js";
2
+ import { getFeature } from "../FeaturesRegistry.js";
3
+
4
+ const flatten = arr => {
5
+ return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);
6
+ };
7
+
8
+ const getEffectiveLinksHrefs = (ElementClass, forStaticArea = false) => {
9
+ let stylesData = ElementClass[forStaticArea ? "staticAreaStyles" : "styles"];
10
+ const OpenUI5Enablement = getFeature("OpenUI5Enablement");
11
+
12
+ if (!stylesData) {
13
+ return;
14
+ }
15
+
16
+ if (!Array.isArray(stylesData)) {
17
+ stylesData = [stylesData];
18
+ }
19
+
20
+ if (OpenUI5Enablement) {
21
+ stylesData.push(OpenUI5Enablement.getBusyIndicatorStyles());
22
+ }
23
+
24
+ return flatten(stylesData).filter(data => !!data).map(data => getUrl(data.packageName, data.fileName));
25
+ };
26
+
27
+ export default getEffectiveLinksHrefs;
@@ -1,23 +1,39 @@
1
1
  import { getCustomCSS, attachCustomCSSChange } from "./CustomStyle.js";
2
2
  import getStylesString from "./getStylesString.js";
3
+ import { getFeature } from "../FeaturesRegistry.js";
3
4
 
4
5
  const effectiveStyleMap = new Map();
5
6
 
6
7
  attachCustomCSSChange(tag => {
7
- effectiveStyleMap.delete(tag);
8
+ effectiveStyleMap.delete(`${tag}_normal`); // there is custom CSS only for the component itself, not for its static area part
8
9
  });
9
10
 
10
- const getEffectiveStyle = ElementClass => {
11
+ const getEffectiveStyle = (ElementClass, forStaticArea = false) => {
11
12
  const tag = ElementClass.getMetadata().getTag();
13
+ const key = `${tag}_${forStaticArea ? "static" : "normal"}`;
14
+ const OpenUI5Enablement = getFeature("OpenUI5Enablement");
12
15
 
13
- if (!effectiveStyleMap.has(tag)) {
14
- const customStyle = getCustomCSS(tag) || "";
15
- const builtInStyles = getStylesString(ElementClass.styles);
16
- const effectiveStyle = `${builtInStyles} ${customStyle}`;
17
- effectiveStyleMap.set(tag, effectiveStyle);
16
+ if (!effectiveStyleMap.has(key)) {
17
+ let effectiveStyle;
18
+ let busyIndicatorStyles = "";
19
+
20
+ if (OpenUI5Enablement) {
21
+ busyIndicatorStyles = getStylesString(OpenUI5Enablement.getBusyIndicatorStyles());
22
+ }
23
+
24
+ if (forStaticArea) {
25
+ effectiveStyle = getStylesString(ElementClass.staticAreaStyles);
26
+ } else {
27
+ const customStyle = getCustomCSS(tag) || "";
28
+ const builtInStyles = getStylesString(ElementClass.styles);
29
+ effectiveStyle = `${builtInStyles} ${customStyle}`;
30
+ }
31
+
32
+ effectiveStyle = `${effectiveStyle} ${busyIndicatorStyles}`;
33
+ effectiveStyleMap.set(key, effectiveStyle);
18
34
  }
19
35
 
20
- return effectiveStyleMap.get(tag);
36
+ return effectiveStyleMap.get(key);
21
37
  };
22
38
 
23
39
  export default getEffectiveStyle;
@@ -1,9 +1,11 @@
1
1
  const getStylesString = styles => {
2
2
  if (Array.isArray(styles)) {
3
- return flatten(styles).join(" ");
3
+ return flatten(styles.filter(style => !!style)).map(style => {
4
+ return typeof style === "string" ? style : style.content;
5
+ }).join(" ");
4
6
  }
5
7
 
6
- return styles;
8
+ return typeof styles === "string" ? styles : styles.content;
7
9
  };
8
10
 
9
11
  const flatten = arr => {
@@ -1,15 +1,26 @@
1
+ const warnings = new Set();
2
+
1
3
  const getThemeMetadata = () => {
2
4
  // Check if the class was already applied, most commonly to the link/style tag with the CSS Variables
3
- let el = document.querySelector(".sapThemeMetaData-Base-baseLib");
5
+ let el = document.querySelector(".sapThemeMetaData-Base-baseLib") || document.querySelector(".sapThemeMetaData-UI5-sap-ui-core");
4
6
  if (el) {
5
7
  return getComputedStyle(el).backgroundImage;
6
8
  }
7
9
 
8
10
  el = document.createElement("span");
9
11
  el.style.display = "none";
12
+
13
+ // Try with sapThemeMetaData-Base-baseLib first
10
14
  el.classList.add("sapThemeMetaData-Base-baseLib");
11
15
  document.body.appendChild(el);
12
- const metadata = getComputedStyle(el).backgroundImage;
16
+ let metadata = getComputedStyle(el).backgroundImage;
17
+
18
+ // Try with sapThemeMetaData-UI5-sap-ui-core only if the previous selector was not found
19
+ if (metadata === "none") {
20
+ el.classList.add("sapThemeMetaData-UI5-sap-ui-core");
21
+ metadata = getComputedStyle(el).backgroundImage;
22
+ }
23
+
13
24
  document.body.removeChild(el);
14
25
 
15
26
  return metadata;
@@ -24,14 +35,20 @@ const parseThemeMetadata = metadataString => {
24
35
  try {
25
36
  paramsString = decodeURIComponent(paramsString);
26
37
  } catch (ex) {
27
- console.warn("Malformed theme metadata string, unable to decodeURIComponent"); // eslint-disable-line
38
+ if (!warnings.has("decode")) {
39
+ console.warn("Malformed theme metadata string, unable to decodeURIComponent"); // eslint-disable-line
40
+ warnings.add("decode");
41
+ }
28
42
  return;
29
43
  }
30
44
  }
31
45
  try {
32
46
  return JSON.parse(paramsString);
33
47
  } catch (ex) {
34
- console.warn("Malformed theme metadata string, unable to parse JSON"); // eslint-disable-line
48
+ if (!warnings.has("parse")) {
49
+ console.warn("Malformed theme metadata string, unable to parse JSON"); // eslint-disable-line
50
+ warnings.add("parse");
51
+ }
35
52
  }
36
53
  }
37
54
  };
@@ -44,7 +61,10 @@ const processThemeMetadata = metadata => {
44
61
  themeName = metadata.Path.match(/\.([^.]+)\.css_variables$/)[1];
45
62
  baseThemeName = metadata.Extends[0];
46
63
  } catch (ex) {
47
- console.warn("Malformed theme metadata Object", metadata); // eslint-disable-line
64
+ if (!warnings.has("object")) {
65
+ console.warn("Malformed theme metadata Object", metadata); // eslint-disable-line
66
+ warnings.add("object");
67
+ }
48
68
  return;
49
69
  }
50
70
 
@@ -0,0 +1,23 @@
1
+ import getEffectiveLinksHrefs from "./getEffectiveLinksHrefs.js";
2
+ import createLinkInHead from "../util/createLinkInHead.js";
3
+ import { shouldUseLinks, shouldPreloadLinks } from "../CSP.js";
4
+
5
+ const preloaded = new Set();
6
+
7
+ const preloadLinks = ElementClass => {
8
+ if (!shouldUseLinks() || !shouldPreloadLinks()) {
9
+ return;
10
+ }
11
+
12
+ const linksHrefs = getEffectiveLinksHrefs(ElementClass, false) || [];
13
+ const staticAreaLinksHrefs = getEffectiveLinksHrefs(ElementClass, true) || [];
14
+
15
+ [...linksHrefs, ...staticAreaLinksHrefs].forEach(href => {
16
+ if (!preloaded.has(href)) {
17
+ createLinkInHead(href, { rel: "preload", as: "style" });
18
+ preloaded.add(href);
19
+ }
20
+ });
21
+ };
22
+
23
+ export default preloadLinks;
@@ -0,0 +1,9 @@
1
+ import DataType from "./DataType.js";
2
+
3
+ class CSSColor extends DataType {
4
+ static isValid(value) {
5
+ return /^(#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})|rgb\(\s*((1?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))|([0-9]?[0-9](\.[0-9]+)?|100(\.0+)?)%)\s*(,\s*((1?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))|([0-9]?[0-9](\.[0-9]+)?|100(\.0+)?)%)\s*){2}\)|rgba\((\s*((1?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))|([0-9]?[0-9](\.[0-9]+)?|100(\.0+)?)%)\s*,){3}\s*(0(\.[0-9]+)?|1(\.0+)?)\s*\)|hsl\(\s*([0-2]?[0-9]?[0-9]|3([0-5][0-9]|60))\s*(,\s*(([0-9]?[0-9](\.[0-9]+)?|100(\.0+)?)%)\s*){2}\)|hsla\(\s*([0-2]?[0-9]?[0-9]|3([0-5][0-9]|60))\s*,(\s*(([0-9]?[0-9](\.[0-9]+)?|100(\.0+)?)%)\s*,){2}\s*(0(\.[0-9]+)?|1(\.0+)?)\s*\)|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgrey|darkgreen|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|grey|green|greenyellow|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgrey|lightgreen|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silverskyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|transparent|inherit|)$/.test(value ); // eslint-disable-line
6
+ }
7
+ }
8
+
9
+ export default CSSColor;
@@ -0,0 +1,24 @@
1
+ import DataType from "./DataType.js";
2
+
3
+ /**
4
+ * @class
5
+ * DOM Element reference or ID.
6
+ * <b>Note:</b> If an ID is passed, it is expected to be part of the same <code>document</code> element as the consuming component.
7
+ *
8
+ * @public
9
+ */
10
+ class DOMReference extends DataType {
11
+ static isValid(value) {
12
+ return (typeof value === "string" || value instanceof HTMLElement);
13
+ }
14
+
15
+ static propertyToAttribute(propertyValue) {
16
+ if (propertyValue instanceof HTMLElement) {
17
+ return null;
18
+ }
19
+
20
+ return propertyValue;
21
+ }
22
+ }
23
+
24
+ export default DOMReference;
@@ -11,6 +11,18 @@ class DataType {
11
11
  static isValid(value) {
12
12
  }
13
13
 
14
+ static attributeToProperty(attributeValue) {
15
+ return attributeValue;
16
+ }
17
+
18
+ static propertyToAttribute(propertyValue) {
19
+ return `${propertyValue}`;
20
+ }
21
+
22
+ static valuesAreEqual(value1, value2) {
23
+ return value1 === value2;
24
+ }
25
+
14
26
  static generateTypeAccessors(types) {
15
27
  Object.keys(types).forEach(type => {
16
28
  Object.defineProperty(this, type, {
@@ -5,6 +5,10 @@ class Float extends DataType {
5
5
  // Assuming that integers are floats as well!
6
6
  return Number(value) === value;
7
7
  }
8
+
9
+ static attributeToProperty(attributeValue) {
10
+ return parseFloat(attributeValue);
11
+ }
8
12
  }
9
13
 
10
14
  export default Float;
@@ -4,6 +4,10 @@ class Integer extends DataType {
4
4
  static isValid(value) {
5
5
  return Number.isInteger(value);
6
6
  }
7
+
8
+ static attributeToProperty(attributeValue) {
9
+ return parseInt(attributeValue);
10
+ }
7
11
  }
8
12
 
9
13
  export default Integer;
@@ -0,0 +1,30 @@
1
+ import DataType from "./DataType.js";
2
+
3
+ /**
4
+ * Enumeration for different mode behaviors of the <code>InvisibleMessage</code>.
5
+ * @private
6
+ */
7
+ const InvisibleMessageModes = {
8
+
9
+ /**
10
+ * Indicates that updates to the region should be presented at the next graceful opportunity,
11
+ * such as at the end of reading the current sentence, or when the user pauses typing.
12
+ */
13
+ Polite: "Polite",
14
+
15
+ /**
16
+ * Indicates that updates to the region have the highest priority and should be presented to the user immediately.
17
+ */
18
+ Assertive: "Assertive",
19
+
20
+ };
21
+
22
+ class InvisibleMessageMode extends DataType {
23
+ static isValid(value) {
24
+ return !!InvisibleMessageModes[value];
25
+ }
26
+ }
27
+
28
+ InvisibleMessageMode.generateTypeAccessors(InvisibleMessageModes);
29
+
30
+ export default InvisibleMessageModes;
@@ -4,18 +4,13 @@
4
4
  */
5
5
  const ItemNavigationBehavior = {
6
6
  /**
7
- * Static behavior: when border of the items is reached, you can't go out of the cage.
7
+ * Static behavior: navigations stops at the first or last item.
8
8
  */
9
9
  Static: "Static",
10
10
 
11
11
  /**
12
- * Cycling behavior: when border of the items is reached, you can cycle through the items.
12
+ * Cycling behavior: navigating past the last item continues with the first and vice versa.
13
13
  */
14
14
  Cyclic: "Cyclic",
15
-
16
- /**
17
- * Paging behavior: when border of the items is reached, tou can go up/down based on the rowsize(e.g. DayPicker)
18
- */
19
- Paging: "Paging",
20
15
  };
21
16
  export default ItemNavigationBehavior;
@@ -0,0 +1,29 @@
1
+ import executeTemplate from "./renderer/executeTemplate.js";
2
+ import getConstructableStyle from "./theming/getConstructableStyle.js";
3
+ import getEffectiveStyle from "./theming/getEffectiveStyle.js";
4
+ import getEffectiveLinksHrefs from "./theming/getEffectiveLinksHrefs.js";
5
+ import { shouldUseLinks } from "./CSP.js";
6
+
7
+ /**
8
+ * Updates the shadow root of a UI5Element or its static area item
9
+ * @param element
10
+ * @param forStaticArea
11
+ */
12
+ const updateShadowRoot = (element, forStaticArea = false) => {
13
+ let styleStrOrHrefsArr;
14
+ const template = forStaticArea ? "staticAreaTemplate" : "template";
15
+ const shadowRoot = forStaticArea ? element.staticAreaItem.shadowRoot : element.shadowRoot;
16
+ const renderResult = executeTemplate(element.constructor[template], element);
17
+
18
+ if (shouldUseLinks()) {
19
+ styleStrOrHrefsArr = getEffectiveLinksHrefs(element.constructor, forStaticArea);
20
+ } else if (document.adoptedStyleSheets) { // Chrome
21
+ shadowRoot.adoptedStyleSheets = getConstructableStyle(element.constructor, forStaticArea);
22
+ } else { // FF, Safari
23
+ styleStrOrHrefsArr = getEffectiveStyle(element.constructor, forStaticArea);
24
+ }
25
+
26
+ element.constructor.render(renderResult, shadowRoot, styleStrOrHrefsArr, forStaticArea, { host: element });
27
+ };
28
+
29
+ export default updateShadowRoot;
@@ -1,9 +1,7 @@
1
- import findNodeOwner from "./findNodeOwner.js";
2
-
3
1
  const getEffectiveAriaLabelText = el => {
4
- if (!el.ariaLabelledby) {
5
- if (el.ariaLabel) {
6
- return el.ariaLabel;
2
+ if (!el.accessibleNameRef) {
3
+ if (el.accessibleName) {
4
+ return el.accessibleName;
7
5
  }
8
6
 
9
7
  return undefined;
@@ -15,12 +13,12 @@ const getEffectiveAriaLabelText = el => {
15
13
  /**
16
14
  *
17
15
  * @param {HTMLElement} el Defines the HTMLElement, for which you need to get all related texts
18
- * @param {HTMLElement} ownerDocument (Optional) Defines the HTMLElement(might document or custom element) where the you want to search for the texts.
16
+ * @param {Document|HTMLElement} ownerDocument (Optional) Defines the document or element where you want to search for the texts
19
17
  * @param {String} readyIds (Optional) Defines a string of elements ids. The text of these elements will be returned. If used you should provide either el or ownerDocument
20
18
  */
21
19
  const getAriaLabelledByTexts = (el, ownerDocument, readyIds = "") => {
22
- const ids = (readyIds && readyIds.split(" ")) || el.ariaLabelledby.split(" ");
23
- const owner = ownerDocument || findNodeOwner(el);
20
+ const ids = (readyIds && readyIds.split(" ")) || el.accessibleNameRef.split(" ");
21
+ const owner = ownerDocument || el.getRootNode();
24
22
  let result = "";
25
23
 
26
24
  ids.forEach((elementId, index) => {
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Returns the caret (cursor) position of the specified text field (field).
3
+ * Return value range is 0-field.value.length.
4
+ */
5
+ const getCaretPosition = field => {
6
+ // Initialize
7
+ let caretPos = 0;
8
+
9
+ if (field.selectionStart || field.selectionStart === "0") { // Firefox support
10
+ caretPos = field.selectionDirection === "backward" ? field.selectionStart : field.selectionEnd;
11
+ }
12
+
13
+ return caretPos;
14
+ };
15
+
16
+ const setCaretPosition = (field, caretPos) => {
17
+ if (field.createTextRange) {
18
+ const range = field.createTextRange();
19
+ range.move("character", caretPos);
20
+ range.select();
21
+ } else if (field.selectionStart) {
22
+ field.focus();
23
+ field.setSelectionRange(caretPos, caretPos);
24
+ } else {
25
+ field.focus();
26
+ }
27
+ };
28
+
29
+ export {
30
+ getCaretPosition,
31
+ setCaretPosition,
32
+ };