@ui5/webcomponents-base 0.0.0-dff5837d7 → 0.0.0-ec448881d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +336 -0
  3. package/README.md +26 -2
  4. package/bundle.esm.js +16 -7
  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 +60 -4
  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 +30 -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 +125 -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/RenderQueue.js +41 -17
  23. package/dist/RenderScheduler.js +24 -158
  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 +4 -25
  28. package/dist/Theming.js +2 -1
  29. package/dist/UI5Element.js +391 -350
  30. package/dist/UI5ElementMetadata.js +158 -18
  31. package/dist/asset-registries/Icons.js +117 -13
  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 +63 -48
  36. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  37. package/dist/config/AnimationMode.js +11 -1
  38. package/dist/config/Icons.js +52 -0
  39. package/dist/config/Language.js +33 -6
  40. package/dist/config/Theme.js +25 -0
  41. package/dist/css/BusyIndicator.css +80 -0
  42. package/dist/css/FontFace.css +75 -0
  43. package/dist/css/OverrideFontFace.css +32 -0
  44. package/dist/css/SystemCSSVars.css +17 -0
  45. package/dist/delegate/ItemNavigation.js +239 -170
  46. package/dist/delegate/ResizeHandler.js +78 -37
  47. package/dist/delegate/ScrollEnablement.js +49 -20
  48. package/dist/features/F6Navigation.js +106 -0
  49. package/dist/features/OpenUI5Enablement.js +119 -0
  50. package/dist/features/OpenUI5Support.js +42 -7
  51. package/dist/generated/AssetParameters.js +1 -1
  52. package/dist/generated/VersionInfo.js +10 -0
  53. package/dist/generated/css/BusyIndicator.css.js +5 -0
  54. package/dist/generated/css/FontFace.css.js +5 -0
  55. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  56. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  57. package/dist/getSharedResource.js +30 -0
  58. package/dist/i18nBundle.js +58 -5
  59. package/dist/isLegacyBrowser.js +3 -0
  60. package/dist/locale/applyDirection.js +6 -4
  61. package/dist/locale/directionChange.js +32 -0
  62. package/dist/locale/getEffectiveDir.js +28 -0
  63. package/dist/locale/getLocale.js +12 -2
  64. package/dist/locale/languageChange.js +1 -1
  65. package/dist/renderer/LitRenderer.js +44 -7
  66. package/dist/renderer/directives/style-map.js +72 -0
  67. package/dist/renderer/executeTemplate.js +34 -0
  68. package/dist/resources/bundle.esm.js +15 -112
  69. package/dist/resources/bundle.esm.js.map +1 -1
  70. package/dist/sap/base/Log.js +241 -0
  71. package/dist/sap/base/assert.js +8 -0
  72. package/dist/sap/base/security/URLListValidator.js +148 -0
  73. package/dist/sap/base/security/encodeCSS.js +14 -0
  74. package/dist/sap/base/security/encodeXML.js +23 -0
  75. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  76. package/dist/sap/base/strings/toHex.js +8 -0
  77. package/dist/sap/base/util/now.js +7 -0
  78. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  79. package/dist/test-resources/assets/Themes.js +10 -6
  80. package/dist/test-resources/elements/Parent.js +6 -2
  81. package/dist/test-resources/elements/WithStaticArea.js +2 -1
  82. package/dist/test-resources/pages/AllTestElements.html +3 -3
  83. package/dist/test-resources/pages/Configuration.html +0 -2
  84. package/dist/test-resources/pages/ConfigurationScript.html +0 -2
  85. package/dist/test-resources/pages/assets/messagebundle_de.properties +1 -0
  86. package/dist/test-resources/pages/assets/messagebundle_en.properties +1 -0
  87. package/dist/test-resources/pages/assets/messagebundle_es.properties +1 -0
  88. package/dist/test-resources/pages/assets/messagebundle_fr.properties +1 -0
  89. package/dist/test-resources/pages/i18n.html +33 -0
  90. package/dist/test-resources/specs/ConfigurationChange.spec.js +10 -8
  91. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  92. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  93. package/dist/test-resources/specs/CustomTheme.spec.js +9 -7
  94. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  95. package/dist/test-resources/specs/StaticArea.spec.js +56 -12
  96. package/dist/test-resources/specs/Theming.spec.js +23 -10
  97. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  98. package/dist/test-resources/specs/UI5ElementLifecycle.js +19 -14
  99. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  100. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  101. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  102. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  103. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  104. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  105. package/dist/theming/CustomStyle.js +47 -6
  106. package/dist/theming/ThemeLoaded.js +22 -0
  107. package/dist/theming/applyTheme.js +13 -15
  108. package/dist/theming/getConstructableStyle.js +15 -10
  109. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  110. package/dist/theming/getEffectiveStyle.js +32 -8
  111. package/dist/theming/getStylesString.js +15 -0
  112. package/dist/theming/getThemeDesignerTheme.js +25 -5
  113. package/dist/theming/preloadLinks.js +23 -0
  114. package/dist/types/CSSColor.js +9 -0
  115. package/dist/types/CalendarType.js +1 -1
  116. package/dist/types/DataType.js +13 -1
  117. package/dist/types/Float.js +4 -0
  118. package/dist/types/Integer.js +4 -0
  119. package/dist/types/InvisibleMessageMode.js +30 -0
  120. package/dist/types/ItemNavigationBehavior.js +2 -7
  121. package/dist/types/PopupState.js +1 -1
  122. package/dist/types/ValueState.js +1 -1
  123. package/dist/updateShadowRoot.js +30 -0
  124. package/dist/util/AriaLabelHelper.js +41 -0
  125. package/dist/util/Caret.js +45 -0
  126. package/dist/util/ColorConversion.js +370 -0
  127. package/dist/util/FocusableElements.js +22 -9
  128. package/dist/util/HTMLSanitizer.js +7 -0
  129. package/dist/util/InvisibleMessage.js +60 -0
  130. package/dist/util/PopupUtils.js +93 -0
  131. package/dist/util/SlotsHelper.js +43 -0
  132. package/dist/util/TabbableElements.js +5 -1
  133. package/dist/util/arraysAreEqual.js +15 -0
  134. package/dist/util/clamp.js +12 -0
  135. package/dist/util/createLinkInHead.js +19 -0
  136. package/dist/util/debounce.js +17 -0
  137. package/dist/util/escapeRegex.js +10 -0
  138. package/dist/util/generateHighlightedMarkup.js +42 -0
  139. package/dist/util/getActiveElement.js +11 -0
  140. package/dist/util/getClassCopy.js +10 -0
  141. package/dist/util/getEffectiveContentDensity.js +5 -0
  142. package/dist/util/getNormalizedTarget.js +16 -0
  143. package/dist/util/getSingletonElementInstance.js +13 -0
  144. package/dist/util/isElementInView.js +15 -0
  145. package/dist/util/isNodeHidden.js +1 -1
  146. package/dist/util/isNodeTabbable.js +4 -4
  147. package/dist/util/isValidPropertyName.js +6 -5
  148. package/hash.txt +1 -0
  149. package/index.js +1 -1
  150. package/lib/generate-asset-parameters/index.js +8 -5
  151. package/lib/generate-styles/index.js +26 -0
  152. package/lib/generate-version-info/index.js +32 -0
  153. package/package-scripts.js +30 -19
  154. package/package.json +19 -13
  155. package/src/AssetRegistry.js +8 -7
  156. package/src/Boot.js +59 -0
  157. package/src/CSP.js +59 -0
  158. package/src/CustomElementsRegistry.js +60 -4
  159. package/src/CustomElementsScope.js +30 -0
  160. package/src/CustomElementsScopeUtils.js +108 -0
  161. package/src/DOMObserver.js +65 -0
  162. package/src/Device.js +71 -773
  163. package/src/EventProvider.js +30 -26
  164. package/src/FeaturesRegistry.js +4 -1
  165. package/src/FontFace.js +19 -62
  166. package/src/InitialConfiguration.js +43 -8
  167. package/src/Keys.js +125 -0
  168. package/src/ManagedStyles.js +83 -0
  169. package/src/MediaRange.js +109 -0
  170. package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  171. package/src/Render.js +175 -0
  172. package/src/RenderQueue.js +41 -17
  173. package/src/RenderScheduler.js +24 -158
  174. package/src/Runtimes.js +107 -0
  175. package/src/StaticArea.js +1 -39
  176. package/src/StaticAreaItem.js +58 -62
  177. package/src/SystemCSSVars.js +4 -25
  178. package/src/Theming.js +2 -1
  179. package/src/UI5Element.js +391 -350
  180. package/src/UI5ElementMetadata.js +158 -18
  181. package/src/asset-registries/Icons.js +117 -13
  182. package/src/asset-registries/Illustrations.js +30 -0
  183. package/src/asset-registries/LocaleData.js +105 -66
  184. package/src/asset-registries/Themes.js +29 -34
  185. package/src/asset-registries/i18n.js +63 -48
  186. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  187. package/src/config/AnimationMode.js +11 -1
  188. package/src/config/Icons.js +52 -0
  189. package/src/config/Language.js +33 -6
  190. package/src/config/Theme.js +25 -0
  191. package/src/css/BusyIndicator.css +80 -0
  192. package/src/css/FontFace.css +75 -0
  193. package/src/css/OverrideFontFace.css +32 -0
  194. package/src/css/SystemCSSVars.css +17 -0
  195. package/src/delegate/ItemNavigation.js +239 -170
  196. package/src/delegate/ResizeHandler.js +78 -37
  197. package/src/delegate/ScrollEnablement.js +49 -20
  198. package/src/features/F6Navigation.js +106 -0
  199. package/src/features/OpenUI5Enablement.js +119 -0
  200. package/src/features/OpenUI5Support.js +42 -7
  201. package/src/getSharedResource.js +30 -0
  202. package/src/i18nBundle.js +58 -5
  203. package/src/isLegacyBrowser.js +3 -0
  204. package/src/locale/applyDirection.js +6 -4
  205. package/src/locale/directionChange.js +32 -0
  206. package/src/locale/getEffectiveDir.js +28 -0
  207. package/src/locale/getLocale.js +12 -2
  208. package/src/locale/languageChange.js +1 -1
  209. package/src/renderer/LitRenderer.js +44 -7
  210. package/src/renderer/directives/style-map.js +72 -0
  211. package/src/renderer/executeTemplate.js +34 -0
  212. package/src/theming/CustomStyle.js +47 -6
  213. package/src/theming/ThemeLoaded.js +22 -0
  214. package/src/theming/applyTheme.js +13 -15
  215. package/src/theming/getConstructableStyle.js +15 -10
  216. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  217. package/src/theming/getEffectiveStyle.js +32 -8
  218. package/src/theming/getStylesString.js +15 -0
  219. package/src/theming/getThemeDesignerTheme.js +25 -5
  220. package/src/theming/preloadLinks.js +23 -0
  221. package/src/types/CSSColor.js +9 -0
  222. package/src/types/CalendarType.js +1 -1
  223. package/src/types/DataType.js +13 -1
  224. package/src/types/Float.js +4 -0
  225. package/src/types/Integer.js +4 -0
  226. package/src/types/InvisibleMessageMode.js +30 -0
  227. package/src/types/ItemNavigationBehavior.js +2 -7
  228. package/src/types/PopupState.js +1 -1
  229. package/src/types/ValueState.js +1 -1
  230. package/src/updateShadowRoot.js +30 -0
  231. package/src/util/AriaLabelHelper.js +41 -0
  232. package/src/util/Caret.js +45 -0
  233. package/src/util/ColorConversion.js +370 -0
  234. package/src/util/FocusableElements.js +22 -9
  235. package/src/util/HTMLSanitizer.js +7 -0
  236. package/src/util/InvisibleMessage.js +60 -0
  237. package/src/util/PopupUtils.js +93 -0
  238. package/src/util/SlotsHelper.js +43 -0
  239. package/src/util/TabbableElements.js +5 -1
  240. package/src/util/arraysAreEqual.js +15 -0
  241. package/src/util/clamp.js +12 -0
  242. package/src/util/createLinkInHead.js +19 -0
  243. package/src/util/debounce.js +17 -0
  244. package/src/util/escapeRegex.js +10 -0
  245. package/src/util/generateHighlightedMarkup.js +42 -0
  246. package/src/util/getActiveElement.js +11 -0
  247. package/src/util/getClassCopy.js +10 -0
  248. package/src/util/getEffectiveContentDensity.js +5 -0
  249. package/src/util/getNormalizedTarget.js +16 -0
  250. package/src/util/getSingletonElementInstance.js +13 -0
  251. package/src/util/isElementInView.js +15 -0
  252. package/src/util/isNodeHidden.js +1 -1
  253. package/src/util/isNodeTabbable.js +4 -4
  254. package/src/util/isValidPropertyName.js +6 -5
  255. package/used-modules.txt +10 -0
  256. package/bundle.es5.js +0 -28
  257. package/dist/SVGIconRegistry.js +0 -60
  258. package/dist/boot.js +0 -34
  259. package/dist/compatibility/DOMObserver.js +0 -62
  260. package/dist/compatibility/patchNodeValue.js +0 -24
  261. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  262. package/dist/delegate/CustomResize.js +0 -78
  263. package/dist/delegate/NativeResize.js +0 -44
  264. package/dist/features/PropertiesFormatSupport.js +0 -8
  265. package/dist/features/browsersupport/Edge.js +0 -6
  266. package/dist/features/browsersupport/IE11.js +0 -41
  267. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  268. package/dist/renderer/ifDefined.js +0 -21
  269. package/dist/resources/bundle.es5.js +0 -212
  270. package/dist/resources/bundle.es5.js.map +0 -1
  271. package/dist/theming/CSSVarsPonyfill.js +0 -24
  272. package/dist/theming/adaptCSSForIE.js +0 -90
  273. package/dist/theming/createComponentStyleTag.js +0 -49
  274. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  275. package/dist/thirdparty/Array.from.js +0 -16
  276. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  277. package/dist/thirdparty/Array.prototype.find.js +0 -46
  278. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  279. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  280. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  281. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  282. package/dist/thirdparty/Number.isInteger.js +0 -5
  283. package/dist/thirdparty/Number.isNaN.js +0 -1
  284. package/dist/thirdparty/Number.parseInt.js +0 -1
  285. package/dist/thirdparty/Object.assign.js +0 -31
  286. package/dist/thirdparty/Object.entries.js +0 -11
  287. package/dist/thirdparty/Symbol.js +0 -2
  288. package/dist/thirdparty/WeakSet.js +0 -27
  289. package/dist/thirdparty/es6-string-methods.js +0 -182
  290. package/dist/thirdparty/events-polyfills.js +0 -89
  291. package/dist/thirdparty/fetch.js +0 -1
  292. package/dist/thirdparty/template.js +0 -600
  293. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  294. package/dist/util/isSlot.js +0 -3
  295. package/dist/webcomponentsjs/LICENSE.md +0 -19
  296. package/dist/webcomponentsjs/README.md +0 -229
  297. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  298. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  299. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  300. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  301. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  302. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  303. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  304. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  305. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  306. package/dist/webcomponentsjs/package.json +0 -46
  307. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  308. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  309. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  310. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  311. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  312. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  313. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  314. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  315. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  316. package/src/SVGIconRegistry.js +0 -60
  317. package/src/boot.js +0 -34
  318. package/src/compatibility/DOMObserver.js +0 -62
  319. package/src/compatibility/patchNodeValue.js +0 -24
  320. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  321. package/src/delegate/CustomResize.js +0 -78
  322. package/src/delegate/NativeResize.js +0 -44
  323. package/src/features/PropertiesFormatSupport.js +0 -8
  324. package/src/features/browsersupport/Edge.js +0 -6
  325. package/src/features/browsersupport/IE11.js +0 -41
  326. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  327. package/src/renderer/ifDefined.js +0 -21
  328. package/src/theming/CSSVarsPonyfill.js +0 -24
  329. package/src/theming/adaptCSSForIE.js +0 -90
  330. package/src/theming/createComponentStyleTag.js +0 -49
  331. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  332. package/src/thirdparty/Array.from.js +0 -16
  333. package/src/thirdparty/Array.prototype.fill.js +0 -44
  334. package/src/thirdparty/Array.prototype.find.js +0 -46
  335. package/src/thirdparty/Array.prototype.includes.js +0 -51
  336. package/src/thirdparty/Element.prototype.closest.js +0 -11
  337. package/src/thirdparty/Element.prototype.matches.js +0 -6
  338. package/src/thirdparty/Map.prototype.keys.js +0 -9
  339. package/src/thirdparty/Number.isInteger.js +0 -5
  340. package/src/thirdparty/Number.isNaN.js +0 -1
  341. package/src/thirdparty/Number.parseInt.js +0 -1
  342. package/src/thirdparty/Object.assign.js +0 -31
  343. package/src/thirdparty/Object.entries.js +0 -11
  344. package/src/thirdparty/Symbol.js +0 -2
  345. package/src/thirdparty/WeakSet.js +0 -27
  346. package/src/thirdparty/es6-string-methods.js +0 -182
  347. package/src/thirdparty/events-polyfills.js +0 -89
  348. package/src/thirdparty/fetch.js +0 -1
  349. package/src/thirdparty/template.js +0 -600
  350. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  351. 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,19 +1,60 @@
1
- const customCSSFor = {};
1
+ import { reRenderAllUI5Elements } from "../Render.js";
2
+ import getSharedResource from "../getSharedResource.js";
3
+ import EventProvider from "../EventProvider.js";
2
4
 
3
- const addCustomCSS = (tag, css, ...rest) => {
4
- if (rest.length) {
5
- throw new Error("addCustomCSS no longer accepts theme specific CSS. new signature is `addCustomCSS(tag, css)`");
5
+ const eventProvider = getSharedResource("CustomStyle.eventProvider", new EventProvider());
6
+ const CUSTOM_CSS_CHANGE = "CustomCSSChange";
7
+
8
+ const attachCustomCSSChange = listener => {
9
+ eventProvider.attachEvent(CUSTOM_CSS_CHANGE, listener);
10
+ };
11
+
12
+ const detachCustomCSSChange = listener => {
13
+ eventProvider.detachEvent(CUSTOM_CSS_CHANGE, listener);
14
+ };
15
+
16
+ const fireCustomCSSChange = tag => {
17
+ return eventProvider.fireEvent(CUSTOM_CSS_CHANGE, tag);
18
+ };
19
+
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 });
6
29
  }
30
+ });
7
31
 
32
+ const addCustomCSS = (tag, css) => {
8
33
  if (!customCSSFor[tag]) {
9
34
  customCSSFor[tag] = [];
10
35
  }
11
-
12
36
  customCSSFor[tag].push(css);
37
+
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 });
13
49
  };
14
50
 
15
51
  const getCustomCSS = tag => {
16
52
  return customCSSFor[tag] ? customCSSFor[tag].join("") : "";
17
53
  };
18
54
 
19
- export { addCustomCSS, getCustomCSS };
55
+ export {
56
+ addCustomCSS,
57
+ getCustomCSS,
58
+ attachCustomCSSChange,
59
+ detachCustomCSSChange,
60
+ };
@@ -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,10 +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";
4
+ import { fireThemeLoaded } from "./ThemeLoaded.js";
5
5
  import { getFeature } from "../FeaturesRegistry.js";
6
6
 
7
- const BASE_THEME_PACKAGE = "@ui5/webcomponents-theme-base";
7
+ const BASE_THEME_PACKAGE = "@ui5/webcomponents-theming";
8
8
 
9
9
  const isThemeBaseRegistered = () => {
10
10
  const registeredPackages = getRegisteredPackages();
@@ -16,15 +16,14 @@ const loadThemeBase = async theme => {
16
16
  return;
17
17
  }
18
18
 
19
- const cssText = await getThemeProperties(BASE_THEME_PACKAGE, theme);
20
- 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
+ }
21
23
  };
22
24
 
23
25
  const deleteThemeBase = () => {
24
- const styleElement = document.head.querySelector(`style[data-ui5-theme-properties="${BASE_THEME_PACKAGE}"]`);
25
- if (styleElement) {
26
- styleElement.parentElement.removeChild(styleElement);
27
- }
26
+ removeStyle("data-ui5-theme-properties", BASE_THEME_PACKAGE);
28
27
  };
29
28
 
30
29
  const loadComponentPackages = async theme => {
@@ -34,8 +33,10 @@ const loadComponentPackages = async theme => {
34
33
  return;
35
34
  }
36
35
 
37
- const cssText = await getThemeProperties(packageName, theme);
38
- createThemePropertiesStyleTag(cssText, packageName);
36
+ const cssData = await getThemeProperties(packageName, theme);
37
+ if (cssData) {
38
+ createOrUpdateStyle(cssData, "data-ui5-theme-properties", packageName);
39
+ }
39
40
  });
40
41
  };
41
42
 
@@ -72,10 +73,7 @@ const applyTheme = async theme => {
72
73
  const packagesTheme = isThemeRegistered(theme) ? theme : extTheme && extTheme.baseThemeName;
73
74
  await loadComponentPackages(packagesTheme);
74
75
 
75
- // When changing the theme, run the ponyfill immediately
76
- if (ponyfillNeeded()) {
77
- runPonyfill();
78
- }
76
+ fireThemeLoaded(theme);
79
77
  };
80
78
 
81
79
  export default applyTheme;
@@ -1,25 +1,30 @@
1
1
  import getEffectiveStyle from "./getEffectiveStyle.js";
2
+ import { attachCustomCSSChange } from "./CustomStyle.js";
2
3
 
3
4
  const constructableStyleMap = new Map();
4
5
 
6
+ attachCustomCSSChange(tag => {
7
+ constructableStyleMap.delete(`${tag}_normal`); // there is custom CSS only for the component itself, not for its static area part
8
+ });
9
+
5
10
  /**
6
11
  * Returns (and caches) a constructable style sheet for a web component class
7
12
  * Note: Chrome
8
13
  * @param ElementClass
9
14
  * @returns {*}
10
15
  */
11
- const getConstructableStyle = ElementClass => {
12
- const tagName = ElementClass.getMetadata().getTag();
13
- const styleContent = getEffectiveStyle(ElementClass);
14
- if (constructableStyleMap.has(tagName)) {
15
- return constructableStyleMap.get(tagName);
16
- }
16
+ const getConstructableStyle = (ElementClass, forStaticArea = false) => {
17
+ const tag = ElementClass.getMetadata().getTag();
18
+ const key = `${tag}_${forStaticArea ? "static" : "normal"}`;
17
19
 
18
- const style = new CSSStyleSheet();
19
- style.replaceSync(styleContent);
20
+ if (!constructableStyleMap.has(key)) {
21
+ const styleContent = getEffectiveStyle(ElementClass, forStaticArea);
22
+ const style = new CSSStyleSheet();
23
+ style.replaceSync(styleContent);
24
+ constructableStyleMap.set(key, [style]);
25
+ }
20
26
 
21
- constructableStyleMap.set(tagName, style);
22
- return style;
27
+ return constructableStyleMap.get(key);
23
28
  };
24
29
 
25
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,15 +1,39 @@
1
- import { getCustomCSS } from "./CustomStyle.js";
1
+ import { getCustomCSS, attachCustomCSSChange } from "./CustomStyle.js";
2
+ import getStylesString from "./getStylesString.js";
3
+ import { getFeature } from "../FeaturesRegistry.js";
2
4
 
3
- const getEffectiveStyle = ElementClass => {
5
+ const effectiveStyleMap = new Map();
6
+
7
+ attachCustomCSSChange(tag => {
8
+ effectiveStyleMap.delete(`${tag}_normal`); // there is custom CSS only for the component itself, not for its static area part
9
+ });
10
+
11
+ const getEffectiveStyle = (ElementClass, forStaticArea = false) => {
4
12
  const tag = ElementClass.getMetadata().getTag();
5
- const customStyle = getCustomCSS(tag) || "";
6
- let componentStyles = ElementClass.styles;
13
+ const key = `${tag}_${forStaticArea ? "static" : "normal"}`;
14
+ const OpenUI5Enablement = getFeature("OpenUI5Enablement");
15
+
16
+ if (!effectiveStyleMap.has(key)) {
17
+ let effectiveStyle;
18
+ let busyIndicatorStyles = "";
19
+
20
+ if (OpenUI5Enablement) {
21
+ busyIndicatorStyles = getStylesString(OpenUI5Enablement.getBusyIndicatorStyles());
22
+ }
7
23
 
8
- if (Array.isArray(componentStyles)) {
9
- componentStyles = componentStyles.join(" ");
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);
10
34
  }
11
- return `${componentStyles} ${customStyle}`;
12
- };
13
35
 
36
+ return effectiveStyleMap.get(key);
37
+ };
14
38
 
15
39
  export default getEffectiveStyle;
@@ -0,0 +1,15 @@
1
+ const getStylesString = styles => {
2
+ if (Array.isArray(styles)) {
3
+ return flatten(styles.filter(style => !!style)).map(style => {
4
+ return typeof style === "string" ? style : style.content;
5
+ }).join(" ");
6
+ }
7
+
8
+ return typeof styles === "string" ? styles : styles.content;
9
+ };
10
+
11
+ const flatten = arr => {
12
+ return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);
13
+ };
14
+
15
+ export default getStylesString;
@@ -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;
@@ -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;