@ui5/webcomponents-base 0.0.0-0742854fd → 0.0.0-11d529e8a

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 (278) hide show
  1. package/.eslintignore +2 -0
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +26 -1
  4. package/bundle.esm.js +13 -10
  5. package/dist/AssetRegistry.js +8 -7
  6. package/dist/Boot.js +43 -0
  7. package/dist/DOMObserver.js +65 -0
  8. package/dist/Device.js +58 -779
  9. package/dist/EventProvider.js +30 -26
  10. package/dist/FontFace.js +52 -7
  11. package/dist/InitialConfiguration.js +26 -21
  12. package/dist/Keys.js +51 -0
  13. package/dist/MediaRange.js +109 -0
  14. package/{src/util/parseProperties.js → dist/PropertiesFileFormat.js} +6 -0
  15. package/dist/Render.js +173 -0
  16. package/dist/RenderScheduler.js +16 -138
  17. package/dist/StaticArea.js +1 -29
  18. package/dist/StaticAreaItem.js +64 -65
  19. package/dist/Theming.js +2 -1
  20. package/dist/UI5Element.js +305 -374
  21. package/dist/UI5ElementMetadata.js +115 -16
  22. package/dist/asset-registries/Icons.js +110 -14
  23. package/dist/asset-registries/Illustrations.js +30 -0
  24. package/dist/asset-registries/LocaleData.js +90 -66
  25. package/dist/asset-registries/Themes.js +23 -33
  26. package/dist/asset-registries/i18n.js +61 -50
  27. package/dist/config/Language.js +18 -20
  28. package/dist/delegate/ItemNavigation.js +233 -201
  29. package/dist/delegate/ResizeHandler.js +78 -37
  30. package/dist/delegate/ScrollEnablement.js +49 -20
  31. package/dist/features/OpenUI5Support.js +41 -6
  32. package/dist/generated/AssetParameters.js +1 -1
  33. package/dist/i18nBundle.js +6 -2
  34. package/dist/isLegacyBrowser.js +3 -0
  35. package/dist/locale/applyDirection.js +6 -4
  36. package/dist/locale/directionChange.js +32 -0
  37. package/dist/locale/getEffectiveDir.js +28 -0
  38. package/dist/locale/getLocale.js +12 -2
  39. package/dist/locale/languageChange.js +1 -1
  40. package/dist/renderer/LitRenderer.js +19 -18
  41. package/dist/resources/bundle.esm.js +17 -109
  42. package/dist/resources/bundle.esm.js.map +1 -1
  43. package/dist/sap/base/Log.js +241 -0
  44. package/dist/sap/base/assert.js +8 -0
  45. package/dist/sap/base/security/URLListValidator.js +148 -0
  46. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  47. package/dist/sap/base/util/now.js +7 -0
  48. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  49. package/dist/test-resources/assets/Themes.js +8 -8
  50. package/dist/test-resources/elements/Parent.js +6 -2
  51. package/dist/test-resources/elements/WithStaticArea.js +2 -1
  52. package/dist/test-resources/pages/AllTestElements.html +3 -3
  53. package/dist/test-resources/pages/Configuration.html +0 -2
  54. package/dist/test-resources/pages/ConfigurationScript.html +0 -2
  55. package/dist/test-resources/pages/i18n.html +1 -6
  56. package/dist/test-resources/specs/ConfigurationChange.spec.js +10 -8
  57. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  58. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  59. package/dist/test-resources/specs/CustomTheme.spec.js +7 -5
  60. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  61. package/dist/test-resources/specs/StaticArea.spec.js +56 -12
  62. package/dist/test-resources/specs/Theming.spec.js +9 -7
  63. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  64. package/dist/test-resources/specs/UI5ElementLifecycle.js +17 -15
  65. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  66. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  67. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  68. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  69. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  70. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  71. package/dist/theming/CustomStyle.js +2 -2
  72. package/dist/theming/ThemeLoaded.js +22 -0
  73. package/dist/theming/applyTheme.js +2 -5
  74. package/dist/theming/getConstructableStyle.js +7 -6
  75. package/dist/theming/getEffectiveStyle.js +15 -8
  76. package/dist/theming/getStylesString.js +1 -1
  77. package/dist/types/CSSColor.js +9 -0
  78. package/dist/types/CalendarType.js +1 -1
  79. package/dist/types/DataType.js +13 -1
  80. package/dist/types/Float.js +4 -0
  81. package/dist/types/Integer.js +4 -0
  82. package/dist/types/InvisibleMessageMode.js +30 -0
  83. package/dist/types/ItemNavigationBehavior.js +2 -7
  84. package/dist/types/PopupState.js +1 -1
  85. package/dist/types/ValueState.js +1 -1
  86. package/dist/updateShadowRoot.js +26 -0
  87. package/dist/util/AriaLabelHelper.js +4 -4
  88. package/dist/util/Caret.js +45 -0
  89. package/dist/util/ColorConversion.js +370 -0
  90. package/dist/util/FocusableElements.js +17 -6
  91. package/dist/util/HTMLSanitizer.js +7 -0
  92. package/dist/util/InvisibleMessage.js +58 -0
  93. package/dist/util/PopupUtils.js +93 -0
  94. package/dist/util/SlotsHelper.js +43 -0
  95. package/dist/util/TabbableElements.js +1 -1
  96. package/dist/util/arraysAreEqual.js +15 -0
  97. package/dist/util/clamp.js +12 -0
  98. package/dist/util/debounce.js +17 -0
  99. package/dist/util/encodeCSS.js +24 -0
  100. package/dist/util/getActiveElement.js +11 -0
  101. package/dist/util/getClassCopy.js +10 -0
  102. package/dist/util/getEffectiveContentDensity.js +5 -0
  103. package/dist/util/isElementInView.js +15 -0
  104. package/dist/util/isNodeTabbable.js +4 -4
  105. package/hash.txt +1 -0
  106. package/index.js +1 -1
  107. package/package-scripts.js +33 -18
  108. package/package.json +20 -12
  109. package/src/AssetRegistry.js +8 -7
  110. package/src/Boot.js +43 -0
  111. package/src/DOMObserver.js +65 -0
  112. package/src/Device.js +58 -779
  113. package/src/EventProvider.js +30 -26
  114. package/src/FontFace.js +52 -7
  115. package/src/InitialConfiguration.js +26 -21
  116. package/src/Keys.js +51 -0
  117. package/src/MediaRange.js +109 -0
  118. package/{dist/util/parseProperties.js → src/PropertiesFileFormat.js} +6 -0
  119. package/src/Render.js +173 -0
  120. package/src/RenderScheduler.js +16 -138
  121. package/src/StaticArea.js +1 -29
  122. package/src/StaticAreaItem.js +64 -65
  123. package/src/Theming.js +2 -1
  124. package/src/UI5Element.js +305 -374
  125. package/src/UI5ElementMetadata.js +115 -16
  126. package/src/asset-registries/Icons.js +110 -14
  127. package/src/asset-registries/Illustrations.js +30 -0
  128. package/src/asset-registries/LocaleData.js +90 -66
  129. package/src/asset-registries/Themes.js +23 -33
  130. package/src/asset-registries/i18n.js +61 -50
  131. package/src/config/Language.js +18 -20
  132. package/src/delegate/ItemNavigation.js +233 -201
  133. package/src/delegate/ResizeHandler.js +78 -37
  134. package/src/delegate/ScrollEnablement.js +49 -20
  135. package/src/features/OpenUI5Support.js +41 -6
  136. package/src/i18nBundle.js +6 -2
  137. package/src/isLegacyBrowser.js +3 -0
  138. package/src/locale/applyDirection.js +6 -4
  139. package/src/locale/directionChange.js +32 -0
  140. package/src/locale/getEffectiveDir.js +28 -0
  141. package/src/locale/getLocale.js +12 -2
  142. package/src/locale/languageChange.js +1 -1
  143. package/src/renderer/LitRenderer.js +19 -18
  144. package/src/theming/CustomStyle.js +2 -2
  145. package/src/theming/ThemeLoaded.js +22 -0
  146. package/src/theming/applyTheme.js +2 -5
  147. package/src/theming/getConstructableStyle.js +7 -6
  148. package/src/theming/getEffectiveStyle.js +15 -8
  149. package/src/theming/getStylesString.js +1 -1
  150. package/src/types/CSSColor.js +9 -0
  151. package/src/types/CalendarType.js +1 -1
  152. package/src/types/DataType.js +13 -1
  153. package/src/types/Float.js +4 -0
  154. package/src/types/Integer.js +4 -0
  155. package/src/types/InvisibleMessageMode.js +30 -0
  156. package/src/types/ItemNavigationBehavior.js +2 -7
  157. package/src/types/PopupState.js +1 -1
  158. package/src/types/ValueState.js +1 -1
  159. package/src/updateShadowRoot.js +26 -0
  160. package/src/util/AriaLabelHelper.js +4 -4
  161. package/src/util/Caret.js +45 -0
  162. package/src/util/ColorConversion.js +370 -0
  163. package/src/util/FocusableElements.js +17 -6
  164. package/src/util/HTMLSanitizer.js +7 -0
  165. package/src/util/InvisibleMessage.js +58 -0
  166. package/src/util/PopupUtils.js +93 -0
  167. package/src/util/SlotsHelper.js +43 -0
  168. package/src/util/TabbableElements.js +1 -1
  169. package/src/util/arraysAreEqual.js +15 -0
  170. package/src/util/clamp.js +12 -0
  171. package/src/util/debounce.js +17 -0
  172. package/src/util/encodeCSS.js +24 -0
  173. package/src/util/getActiveElement.js +11 -0
  174. package/src/util/getClassCopy.js +10 -0
  175. package/src/util/getEffectiveContentDensity.js +5 -0
  176. package/src/util/isElementInView.js +15 -0
  177. package/src/util/isNodeTabbable.js +4 -4
  178. package/used-modules.txt +7 -0
  179. package/bundle.es5.js +0 -28
  180. package/dist/SVGIconRegistry.js +0 -62
  181. package/dist/boot.js +0 -34
  182. package/dist/compatibility/DOMObserver.js +0 -62
  183. package/dist/compatibility/patchNodeValue.js +0 -24
  184. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  185. package/dist/config/AssetsPath.js +0 -17
  186. package/dist/delegate/CustomResize.js +0 -78
  187. package/dist/delegate/NativeResize.js +0 -44
  188. package/dist/features/PropertiesFormatSupport.js +0 -8
  189. package/dist/features/browsersupport/Edge.js +0 -6
  190. package/dist/features/browsersupport/IE11.js +0 -41
  191. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  192. package/dist/renderer/ifDefined.js +0 -21
  193. package/dist/renderer/scopeHTML.js +0 -32
  194. package/dist/resources/bundle.es5.js +0 -212
  195. package/dist/resources/bundle.es5.js.map +0 -1
  196. package/dist/theming/CSSVarsPonyfill.js +0 -48
  197. package/dist/theming/adaptCSSForIE.js +0 -95
  198. package/dist/theming/createComponentStyleTag.js +0 -54
  199. package/dist/thirdparty/Array.from.js +0 -16
  200. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  201. package/dist/thirdparty/Array.prototype.find.js +0 -46
  202. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  203. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  204. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  205. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  206. package/dist/thirdparty/Number.isInteger.js +0 -5
  207. package/dist/thirdparty/Number.isNaN.js +0 -1
  208. package/dist/thirdparty/Number.parseInt.js +0 -1
  209. package/dist/thirdparty/Object.assign.js +0 -31
  210. package/dist/thirdparty/Object.entries.js +0 -11
  211. package/dist/thirdparty/Symbol.js +0 -2
  212. package/dist/thirdparty/WeakSet.js +0 -27
  213. package/dist/thirdparty/es6-string-methods.js +0 -182
  214. package/dist/thirdparty/events-polyfills.js +0 -89
  215. package/dist/thirdparty/fetch.js +0 -1
  216. package/dist/thirdparty/template.js +0 -600
  217. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  218. package/dist/util/getEffectiveAssetPath.js +0 -12
  219. package/dist/util/isSlot.js +0 -3
  220. package/dist/webcomponentsjs/LICENSE.md +0 -19
  221. package/dist/webcomponentsjs/README.md +0 -229
  222. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  223. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  224. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  225. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  226. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  227. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  228. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  229. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  230. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  231. package/dist/webcomponentsjs/package.json +0 -46
  232. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  233. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  234. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  235. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  236. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  237. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  238. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  239. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  240. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  241. package/src/SVGIconRegistry.js +0 -62
  242. package/src/boot.js +0 -34
  243. package/src/compatibility/DOMObserver.js +0 -62
  244. package/src/compatibility/patchNodeValue.js +0 -24
  245. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  246. package/src/config/AssetsPath.js +0 -17
  247. package/src/delegate/CustomResize.js +0 -78
  248. package/src/delegate/NativeResize.js +0 -44
  249. package/src/features/PropertiesFormatSupport.js +0 -8
  250. package/src/features/browsersupport/Edge.js +0 -6
  251. package/src/features/browsersupport/IE11.js +0 -41
  252. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  253. package/src/renderer/ifDefined.js +0 -21
  254. package/src/renderer/scopeHTML.js +0 -32
  255. package/src/theming/CSSVarsPonyfill.js +0 -48
  256. package/src/theming/adaptCSSForIE.js +0 -95
  257. package/src/theming/createComponentStyleTag.js +0 -54
  258. package/src/thirdparty/Array.from.js +0 -16
  259. package/src/thirdparty/Array.prototype.fill.js +0 -44
  260. package/src/thirdparty/Array.prototype.find.js +0 -46
  261. package/src/thirdparty/Array.prototype.includes.js +0 -51
  262. package/src/thirdparty/Element.prototype.closest.js +0 -11
  263. package/src/thirdparty/Element.prototype.matches.js +0 -6
  264. package/src/thirdparty/Map.prototype.keys.js +0 -9
  265. package/src/thirdparty/Number.isInteger.js +0 -5
  266. package/src/thirdparty/Number.isNaN.js +0 -1
  267. package/src/thirdparty/Number.parseInt.js +0 -1
  268. package/src/thirdparty/Object.assign.js +0 -31
  269. package/src/thirdparty/Object.entries.js +0 -11
  270. package/src/thirdparty/Symbol.js +0 -2
  271. package/src/thirdparty/WeakSet.js +0 -27
  272. package/src/thirdparty/es6-string-methods.js +0 -182
  273. package/src/thirdparty/events-polyfills.js +0 -89
  274. package/src/thirdparty/fetch.js +0 -1
  275. package/src/thirdparty/template.js +0 -600
  276. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  277. package/src/util/getEffectiveAssetPath.js +0 -12
  278. package/src/util/isSlot.js +0 -3
@@ -1,65 +1,67 @@
1
1
  const assert = require("chai").assert;
2
2
 
3
3
  describe("Properties and attributes convert to each other", () => {
4
- browser.url("http://localhost:9191/test-resources/pages/AllTestElements.html");
4
+ before(async () => {
5
+ await browser.url("http://localhost:9191/test-resources/pages/AllTestElements.html");
6
+ });
5
7
 
6
- it("Tests that properties with default values are initialized with the default value", () => {
7
- const el = browser.$("#gen");
8
+ it("Tests that properties with default values are initialized with the default value", async () => {
9
+ const el = await browser.$("#gen");
8
10
 
9
- assert.strictEqual(el.getProperty("defaultValueProp"), "Hello", "defaultValueProp is properly initialized");
11
+ assert.strictEqual(await el.getProperty("defaultValueProp"), "Hello", "defaultValueProp is properly initialized");
10
12
  });
11
13
 
12
- it("Tests that prop-attr conversion works for string properties", () => {
13
- const el = browser.$("#gen");
14
+ it("Tests that prop-attr conversion works for string properties", async () => {
15
+ const el = await browser.$("#gen");
14
16
 
15
- el.setProperty("strProp", "test1");
16
- assert.strictEqual(el.getAttribute("str-prop"), "test1", "Attribute affected by property change");
17
+ await el.setProperty("strProp", "test1");
18
+ assert.strictEqual(await el.getAttribute("str-prop"), "test1", "Attribute affected by property change");
17
19
 
18
- el.setAttribute("str-prop", "test2");
19
- assert.strictEqual(el.getProperty("strProp"), "test2", "Property affected by attribute change");
20
+ await el.setAttribute("str-prop", "test2");
21
+ assert.strictEqual(await el.getProperty("strProp"), "test2", "Property affected by attribute change");
20
22
  });
21
23
 
22
- it("Tests that prop-attr conversion works for boolean properties", () => {
23
- const el = browser.$("#gen");
24
+ it("Tests that prop-attr conversion works for boolean properties", async () => {
25
+ const el = await browser.$("#gen");
24
26
 
25
- el.setProperty("boolProp", true);
26
- assert.strictEqual(el.getAttribute("bool-prop"), "", "Attribute affected by property change");
27
+ await el.setProperty("boolProp", true);
28
+ assert.strictEqual(await el.getAttribute("bool-prop"), "", "Attribute affected by property change");
27
29
 
28
- el.setProperty("boolProp", false);
29
- assert.strictEqual(el.getAttribute("bool-prop"), null, "Attribute affected by property change");
30
+ await el.setProperty("boolProp", false);
31
+ assert.strictEqual(await el.getAttribute("bool-prop"), null, "Attribute affected by property change");
30
32
 
31
- el.setAttribute("bool-prop", "");
32
- assert.strictEqual(el.getProperty("boolProp"), true, "Property affected by attribute change");
33
+ await el.setAttribute("bool-prop", "");
34
+ assert.strictEqual(await el.getProperty("boolProp"), true, "Property affected by attribute change");
33
35
 
34
- el.removeAttribute("bool-prop");
35
- assert.strictEqual(el.getProperty("boolProp"), false, "Property affected by attribute change");
36
+ await el.removeAttribute("bool-prop");
37
+ assert.strictEqual(await el.getProperty("boolProp"), false, "Property affected by attribute change");
36
38
  });
37
39
 
38
- it("Tests that object properties have no attributes", () => {
39
- const el = browser.$("#gen");
40
+ it("Tests that object properties have no attributes", async () => {
41
+ const el = await browser.$("#gen");
40
42
 
41
- el.setProperty("objectProp", {});
42
- assert.strictEqual(el.getAttribute("object-prop"), null, "Attribute not there");
43
+ await el.setProperty("objectProp", {});
44
+ assert.strictEqual(await el.getAttribute("object-prop"), null, "Attribute not there");
43
45
  });
44
46
 
45
- it("Tests that array properties have no attributes", () => {
46
- const el = browser.$("#gen");
47
+ it("Tests that array properties have no attributes", async () => {
48
+ const el = await browser.$("#gen");
47
49
 
48
- el.setProperty("multiProp", ["a", "b"]);
49
- assert.strictEqual(el.getAttribute("multi-prop"), null, "Attribute not there");
50
+ await el.setProperty("multiProp", ["a", "b"]);
51
+ assert.strictEqual(await el.getAttribute("multi-prop"), null, "Attribute not there");
50
52
  });
51
53
 
52
- it("Tests that noAttribute properties have no attributes", () => {
53
- const el = browser.$("#gen");
54
+ it("Tests that noAttribute properties have no attributes", async () => {
55
+ const el = await browser.$("#gen");
54
56
 
55
- el.setProperty("noAttributeProp", "some value");
56
- assert.strictEqual(el.getAttribute("no-attribute-prop"), null, "Attribute not there");
57
+ await el.setProperty("noAttributeProp", "some value");
58
+ assert.strictEqual(await el.getAttribute("no-attribute-prop"), null, "Attribute not there");
57
59
  });
58
60
 
59
- it("Tests that properties with default values do not automatically set attributes", () => {
60
- const el = browser.$("#gen");
61
+ it("Tests that properties with default values do not automatically set attributes", async () => {
62
+ const el = await browser.$("#gen");
61
63
 
62
- assert.strictEqual(el.getAttribute("default-value-prop"), null, "Attribute not there for defaultValueProp");
64
+ assert.strictEqual(await el.getAttribute("default-value-prop"), null, "Attribute not there for defaultValueProp");
63
65
  });
64
66
 
65
67
  });
@@ -1,20 +1,22 @@
1
1
  const assert = require("chai").assert;
2
2
 
3
3
  describe("The framework can define web components", () => {
4
- browser.url("http://localhost:9191/test-resources/pages/AllTestElements.html");
4
+ before(async () => {
5
+ await browser.url("http://localhost:9191/test-resources/pages/AllTestElements.html");
6
+ });
5
7
 
6
- it("Tests that element's Shadow DOM is rendered if it has a template", () => {
7
- const res = browser.execute(() => {
8
- return document.getElementById("gen").shadowRoot;
8
+ it("Tests that element's Shadow DOM is rendered if it has a template", async () => {
9
+ const res = await browser.executeAsync(done => {
10
+ done(document.getElementById("gen").shadowRoot);
9
11
  });
10
12
 
11
13
  assert.strictEqual(!!res, true, "Shadow root created");
12
- assert.strictEqual(browser.$("#gen").shadow$("div>p").isExisting(), true, "Shadow root content created");
14
+ assert.strictEqual(await browser.$("#gen").shadow$("div>p").isExisting(), true, "Shadow root content created");
13
15
  });
14
16
 
15
- it("Tests that element's Shadow DOM is not rendered if it has no template", () => {
16
- const res = browser.execute(() => {
17
- return document.getElementById("noShadow").shadowRoot;
17
+ it("Tests that element's Shadow DOM is not rendered if it has no template", async () => {
18
+ const res = await browser.executeAsync(done => {
19
+ done(document.getElementById("noShadow").shadowRoot);
18
20
  });
19
21
 
20
22
  assert.strictEqual(!!res, false, "Shadow root not created");
@@ -1,10 +1,12 @@
1
1
  const assert = require("chai").assert;
2
2
 
3
3
  describe("Slots work properly", () => {
4
- browser.url("http://localhost:9191/test-resources/pages/AllTestElements.html");
4
+ before(async () => {
5
+ await browser.url("http://localhost:9191/test-resources/pages/AllTestElements.html");
6
+ });
5
7
 
6
- it("Tests that properties exist on the element for each slot", () => {
7
- const res = browser.execute(() => {
8
+ it("Tests that properties exist on the element for each slot", async () => {
9
+ const res = await browser.executeAsync(done => {
8
10
  const expectedValues = {};
9
11
 
10
12
  const el = document.getElementById("withContent");
@@ -15,7 +17,7 @@ describe("Slots work properly", () => {
15
17
  expectedValues.items = el.items.length === 2;
16
18
  expectedValues.named = el.named === undefined;
17
19
 
18
- return expectedValues;
20
+ done(expectedValues);
19
21
  });
20
22
 
21
23
  assert.strictEqual(res.default, true, "There are elements in the default property");
@@ -25,10 +27,10 @@ describe("Slots work properly", () => {
25
27
  assert.strictEqual(res.named, true, "There is no named property as propertyName changed it to items");
26
28
  });
27
29
 
28
- it("Tests that individualSlots modifies the slot property of slotted children", () => {
29
- assert.strictEqual(browser.$$("#withContent>[slot=individual]").length, 0, "There are no children with slot=individual");
30
- assert.strictEqual(browser.$$("#withContent>[slot=individual-1]").length, 1, "The slot of the first child became individual-1");
31
- assert.strictEqual(browser.$$("#withContent>[slot=individual-2]").length, 1, "The slot of the second child became individual-2");
30
+ it("Tests that individualSlots modifies the slot property of slotted children", async () => {
31
+ assert.strictEqual((await browser.$$("#withContent>[slot=individual]")).length, 0, "There are no children with slot=individual");
32
+ assert.strictEqual((await browser.$$("#withContent>[slot=individual-1]")).length, 1, "The slot of the first child became individual-1");
33
+ assert.strictEqual((await browser.$$("#withContent>[slot=individual-2]")).length, 1, "The slot of the second child became individual-2");
32
34
  });
33
35
 
34
36
  });
@@ -1,4 +1,4 @@
1
- import RenderScheduler from "../RenderScheduler.js";
1
+ import { reRenderAllUI5Elements } from "../Render.js";
2
2
  import EventProvider from "../EventProvider.js";
3
3
 
4
4
  const eventProvider = new EventProvider();
@@ -25,7 +25,7 @@ const addCustomCSS = (tag, css) => {
25
25
  customCSSFor[tag].push(css);
26
26
  fireCustomCSSChange(tag);
27
27
 
28
- RenderScheduler.reRenderAllUI5Elements({ tag });
28
+ return reRenderAllUI5Elements({ tag });
29
29
  };
30
30
 
31
31
  const getCustomCSS = tag => {
@@ -0,0 +1,22 @@
1
+ import EventProvider from "../EventProvider.js";
2
+
3
+ const eventProvider = new EventProvider();
4
+ const THEME_LOADED = "themeLoaded";
5
+
6
+ const attachThemeLoaded = listener => {
7
+ eventProvider.attachEvent(THEME_LOADED, listener);
8
+ };
9
+
10
+ const detachThemeLoaded = listener => {
11
+ eventProvider.detachEvent(THEME_LOADED, listener);
12
+ };
13
+
14
+ const fireThemeLoaded = theme => {
15
+ return eventProvider.fireEvent(THEME_LOADED, theme);
16
+ };
17
+
18
+ export {
19
+ attachThemeLoaded,
20
+ detachThemeLoaded,
21
+ fireThemeLoaded,
22
+ };
@@ -1,7 +1,7 @@
1
1
  import { getThemeProperties, getRegisteredPackages, isThemeRegistered } from "../asset-registries/Themes.js";
2
2
  import createThemePropertiesStyleTag from "./createThemePropertiesStyleTag.js";
3
3
  import getThemeDesignerTheme from "./getThemeDesignerTheme.js";
4
- import { ponyfillNeeded, runPonyfill } from "./CSSVarsPonyfill.js";
4
+ import { fireThemeLoaded } from "./ThemeLoaded.js";
5
5
  import { getFeature } from "../FeaturesRegistry.js";
6
6
 
7
7
  const BASE_THEME_PACKAGE = "@ui5/webcomponents-theme-base";
@@ -72,10 +72,7 @@ const applyTheme = async theme => {
72
72
  const packagesTheme = isThemeRegistered(theme) ? theme : extTheme && extTheme.baseThemeName;
73
73
  await loadComponentPackages(packagesTheme);
74
74
 
75
- // When changing the theme, run the ponyfill immediately
76
- if (ponyfillNeeded()) {
77
- runPonyfill();
78
- }
75
+ fireThemeLoaded(theme);
79
76
  };
80
77
 
81
78
  export default applyTheme;
@@ -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;
@@ -4,20 +4,27 @@ import getStylesString from "./getStylesString.js";
4
4
  const effectiveStyleMap = new Map();
5
5
 
6
6
  attachCustomCSSChange(tag => {
7
- effectiveStyleMap.delete(tag);
7
+ effectiveStyleMap.delete(`${tag}_normal`); // there is custom CSS only for the component itself, not for its static area part
8
8
  });
9
9
 
10
- const getEffectiveStyle = ElementClass => {
10
+ const getEffectiveStyle = (ElementClass, forStaticArea = false) => {
11
11
  const tag = ElementClass.getMetadata().getTag();
12
+ const key = `${tag}_${forStaticArea ? "static" : "normal"}`;
12
13
 
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);
14
+ if (!effectiveStyleMap.has(key)) {
15
+ let effectiveStyle;
16
+
17
+ if (forStaticArea) {
18
+ effectiveStyle = getStylesString(ElementClass.staticAreaStyles);
19
+ } else {
20
+ const customStyle = getCustomCSS(tag) || "";
21
+ const builtInStyles = getStylesString(ElementClass.styles);
22
+ effectiveStyle = `${builtInStyles} ${customStyle}`;
23
+ }
24
+ effectiveStyleMap.set(key, effectiveStyle);
18
25
  }
19
26
 
20
- return effectiveStyleMap.get(tag);
27
+ return effectiveStyleMap.get(key);
21
28
  };
22
29
 
23
30
  export default getEffectiveStyle;
@@ -1,6 +1,6 @@
1
1
  const getStylesString = styles => {
2
2
  if (Array.isArray(styles)) {
3
- return flatten(styles).join(" ");
3
+ return flatten(styles.filter(style => !!style)).join(" ");
4
4
  }
5
5
 
6
6
  return styles;
@@ -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;
@@ -17,6 +17,6 @@ class CalendarType extends DataType {
17
17
  }
18
18
  }
19
19
 
20
- CalendarType.generataTypeAcessors(CalendarTypes);
20
+ CalendarType.generateTypeAccessors(CalendarTypes);
21
21
 
22
22
  export default CalendarType;
@@ -11,7 +11,19 @@ class DataType {
11
11
  static isValid(value) {
12
12
  }
13
13
 
14
- static generataTypeAcessors(types) {
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
+
26
+ static generateTypeAccessors(types) {
15
27
  Object.keys(types).forEach(type => {
16
28
  Object.defineProperty(this, type, {
17
29
  get() {
@@ -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;
@@ -32,6 +32,6 @@ class PopupState extends DataType {
32
32
  }
33
33
  }
34
34
 
35
- PopupState.generataTypeAcessors(PopupStates);
35
+ PopupState.generateTypeAccessors(PopupStates);
36
36
 
37
37
  export default PopupState;
@@ -17,6 +17,6 @@ class ValueState extends DataType {
17
17
  }
18
18
  }
19
19
 
20
- ValueState.generataTypeAcessors(ValueStates);
20
+ ValueState.generateTypeAccessors(ValueStates);
21
21
 
22
22
  export default ValueState;
@@ -0,0 +1,26 @@
1
+ import executeTemplate from "./renderer/executeTemplate.js";
2
+ import getConstructableStyle from "./theming/getConstructableStyle.js";
3
+ import getEffectiveStyle from "./theming/getEffectiveStyle.js";
4
+ import isLegacyBrowser from "./isLegacyBrowser.js";
5
+
6
+ /**
7
+ * Updates the shadow root of a UI5Element or its static area item
8
+ * @param element
9
+ * @param forStaticArea
10
+ */
11
+ const updateShadowRoot = (element, forStaticArea = false) => {
12
+ let styleToPrepend;
13
+ const template = forStaticArea ? "staticAreaTemplate" : "template";
14
+ const shadowRoot = forStaticArea ? element.staticAreaItem.shadowRoot : element.shadowRoot;
15
+ const renderResult = executeTemplate(element.constructor[template], element);
16
+
17
+ if (document.adoptedStyleSheets) { // Chrome
18
+ shadowRoot.adoptedStyleSheets = getConstructableStyle(element.constructor, forStaticArea);
19
+ } else if (!isLegacyBrowser()) { // FF, Safari
20
+ styleToPrepend = getEffectiveStyle(element.constructor, forStaticArea);
21
+ }
22
+
23
+ element.constructor.render(renderResult, shadowRoot, styleToPrepend, { host: element });
24
+ };
25
+
26
+ export default updateShadowRoot;
@@ -1,9 +1,9 @@
1
1
  import findNodeOwner from "./findNodeOwner.js";
2
2
 
3
3
  const getEffectiveAriaLabelText = el => {
4
- if (!el.ariaLabelledby) {
5
- if (el.ariaLabel) {
6
- return el.ariaLabel;
4
+ if (!el.accessibleNameRef) {
5
+ if (el.accessibleName) {
6
+ return el.accessibleName;
7
7
  }
8
8
 
9
9
  return undefined;
@@ -19,7 +19,7 @@ const getEffectiveAriaLabelText = el => {
19
19
  * @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
20
  */
21
21
  const getAriaLabelledByTexts = (el, ownerDocument, readyIds = "") => {
22
- const ids = (readyIds && readyIds.split(" ")) || el.ariaLabelledby.split(" ");
22
+ const ids = (readyIds && readyIds.split(" ")) || el.accessibleNameRef.split(" ");
23
23
  const owner = ownerDocument || findNodeOwner(el);
24
24
  let result = "";
25
25
 
@@ -0,0 +1,45 @@
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
+ // IE Support
10
+ if (document.selection) {
11
+ // Set focus on the element
12
+ field.focus();
13
+
14
+ // To get cursor position, get empty selection range
15
+ const selection = document.selection.createRange();
16
+
17
+ // Move selection start to 0 position
18
+ selection.moveStart("character", -field.value.length);
19
+
20
+ // The caret position is selection length
21
+ caretPos = selection.text.length;
22
+ } else if (field.selectionStart || field.selectionStart === "0") { // Firefox support
23
+ caretPos = field.selectionDirection === "backward" ? field.selectionStart : field.selectionEnd;
24
+ }
25
+
26
+ return caretPos;
27
+ };
28
+
29
+ const setCaretPosition = (field, caretPos) => {
30
+ if (field.createTextRange) {
31
+ const range = field.createTextRange();
32
+ range.move("character", caretPos);
33
+ range.select();
34
+ } else if (field.selectionStart) {
35
+ field.focus();
36
+ field.setSelectionRange(caretPos, caretPos);
37
+ } else {
38
+ field.focus();
39
+ }
40
+ };
41
+
42
+ export {
43
+ getCaretPosition,
44
+ setCaretPosition,
45
+ };