@ui5/webcomponents-base 0.0.0-78035f8e7 → 0.0.0-7e7d9ea6f

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 (355) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +362 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +20 -20
  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 -29
  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 +386 -354
  30. package/dist/UI5ElementMetadata.js +187 -22
  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 +64 -47
  36. package/dist/assets/bundle.esm.691f93f5.js +43 -0
  37. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  38. package/dist/config/AnimationMode.js +11 -1
  39. package/dist/config/Icons.js +52 -0
  40. package/dist/config/Language.js +33 -6
  41. package/dist/config/Theme.js +25 -0
  42. package/dist/css/BusyIndicator.css +80 -0
  43. package/dist/css/FontFace.css +75 -0
  44. package/dist/css/OverrideFontFace.css +32 -0
  45. package/dist/css/SystemCSSVars.css +17 -0
  46. package/dist/delegate/ItemNavigation.js +244 -170
  47. package/dist/delegate/ResizeHandler.js +78 -37
  48. package/dist/delegate/ScrollEnablement.js +49 -20
  49. package/dist/features/F6Navigation.js +110 -0
  50. package/dist/features/OpenUI5Enablement.js +119 -0
  51. package/dist/features/OpenUI5Support.js +42 -7
  52. package/dist/generated/AssetParameters.js +1 -1
  53. package/dist/generated/VersionInfo.js +10 -0
  54. package/dist/generated/css/BusyIndicator.css.js +5 -0
  55. package/dist/generated/css/FontFace.css.js +5 -0
  56. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  57. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  58. package/dist/i18nBundle.js +38 -4
  59. package/dist/locale/applyDirection.js +6 -4
  60. package/dist/locale/directionChange.js +32 -0
  61. package/dist/locale/getEffectiveDir.js +28 -0
  62. package/dist/locale/getLocale.js +12 -2
  63. package/dist/locale/languageChange.js +1 -1
  64. package/dist/renderer/LitRenderer.js +43 -7
  65. package/dist/renderer/directives/style-map.js +72 -0
  66. package/dist/renderer/executeTemplate.js +34 -0
  67. package/dist/sap/base/Log.js +241 -0
  68. package/dist/sap/base/assert.js +8 -0
  69. package/dist/sap/base/security/URLListValidator.js +148 -0
  70. package/dist/sap/base/security/encodeCSS.js +14 -0
  71. package/dist/sap/base/security/encodeXML.js +23 -0
  72. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  73. package/dist/sap/base/strings/toHex.js +8 -0
  74. package/dist/sap/base/util/now.js +7 -0
  75. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  76. package/dist/theming/CustomStyle.js +47 -6
  77. package/dist/theming/ThemeLoaded.js +22 -0
  78. package/dist/theming/applyTheme.js +13 -15
  79. package/dist/theming/getConstructableStyle.js +15 -10
  80. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  81. package/dist/theming/getEffectiveStyle.js +32 -8
  82. package/dist/theming/getStylesString.js +15 -0
  83. package/dist/theming/getThemeDesignerTheme.js +25 -5
  84. package/dist/theming/preloadLinks.js +23 -0
  85. package/dist/types/CSSColor.js +9 -0
  86. package/dist/types/CalendarType.js +1 -1
  87. package/dist/types/DataType.js +13 -1
  88. package/dist/types/Float.js +4 -0
  89. package/dist/types/Integer.js +4 -0
  90. package/dist/types/InvisibleMessageMode.js +30 -0
  91. package/dist/types/ItemNavigationBehavior.js +2 -7
  92. package/dist/types/PopupState.js +1 -1
  93. package/dist/types/ValueState.js +1 -1
  94. package/dist/updateShadowRoot.js +29 -0
  95. package/dist/util/AriaLabelHelper.js +41 -0
  96. package/dist/util/Caret.js +32 -0
  97. package/dist/util/ColorConversion.js +398 -0
  98. package/dist/util/FocusableElements.js +22 -9
  99. package/dist/util/HTMLSanitizer.js +7 -0
  100. package/dist/util/InvisibleMessage.js +69 -0
  101. package/dist/util/PopupUtils.js +93 -0
  102. package/dist/util/SlotsHelper.js +43 -0
  103. package/dist/util/TabbableElements.js +5 -1
  104. package/dist/util/arraysAreEqual.js +15 -0
  105. package/dist/util/clamp.js +12 -0
  106. package/dist/util/createLinkInHead.js +19 -0
  107. package/dist/util/debounce.js +17 -0
  108. package/dist/util/escapeRegex.js +10 -0
  109. package/dist/util/generateHighlightedMarkup.js +42 -0
  110. package/dist/util/getActiveElement.js +11 -0
  111. package/dist/util/getClassCopy.js +10 -0
  112. package/dist/util/getEffectiveContentDensity.js +5 -0
  113. package/dist/util/getNormalizedTarget.js +16 -0
  114. package/dist/util/isDefaultSlotProvided.js +11 -0
  115. package/dist/util/isElementInView.js +15 -0
  116. package/dist/util/isNodeHidden.js +1 -1
  117. package/dist/util/isNodeTabbable.js +4 -4
  118. package/dist/util/isValidPropertyName.js +6 -5
  119. package/hash.txt +1 -0
  120. package/index.js +1 -1
  121. package/lib/generate-asset-parameters/index.js +8 -5
  122. package/lib/generate-styles/index.js +26 -0
  123. package/lib/generate-version-info/index.js +32 -0
  124. package/package-scripts.js +37 -28
  125. package/package.json +20 -13
  126. package/src/AssetRegistry.js +8 -7
  127. package/src/Boot.js +59 -0
  128. package/src/CSP.js +59 -0
  129. package/src/CustomElementsRegistry.js +60 -4
  130. package/src/CustomElementsScope.js +30 -0
  131. package/src/CustomElementsScopeUtils.js +108 -0
  132. package/src/DOMObserver.js +65 -0
  133. package/src/Device.js +71 -773
  134. package/src/EventProvider.js +30 -26
  135. package/src/FeaturesRegistry.js +4 -1
  136. package/src/FontFace.js +19 -62
  137. package/src/InitialConfiguration.js +43 -8
  138. package/src/Keys.js +125 -0
  139. package/src/ManagedStyles.js +83 -0
  140. package/src/MediaRange.js +109 -0
  141. package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  142. package/src/Render.js +175 -0
  143. package/src/RenderQueue.js +41 -17
  144. package/src/RenderScheduler.js +24 -158
  145. package/src/Runtimes.js +107 -0
  146. package/src/StaticArea.js +1 -29
  147. package/src/StaticAreaItem.js +58 -62
  148. package/src/SystemCSSVars.js +4 -25
  149. package/src/Theming.js +2 -1
  150. package/src/UI5Element.js +386 -354
  151. package/src/UI5ElementMetadata.js +187 -22
  152. package/src/asset-registries/Icons.js +117 -13
  153. package/src/asset-registries/Illustrations.js +30 -0
  154. package/src/asset-registries/LocaleData.js +105 -66
  155. package/src/asset-registries/Themes.js +29 -34
  156. package/src/asset-registries/i18n.js +64 -47
  157. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  158. package/src/config/AnimationMode.js +11 -1
  159. package/src/config/Icons.js +52 -0
  160. package/src/config/Language.js +33 -6
  161. package/src/config/Theme.js +25 -0
  162. package/src/css/BusyIndicator.css +80 -0
  163. package/src/css/FontFace.css +75 -0
  164. package/src/css/OverrideFontFace.css +32 -0
  165. package/src/css/SystemCSSVars.css +17 -0
  166. package/src/delegate/ItemNavigation.js +244 -170
  167. package/src/delegate/ResizeHandler.js +78 -37
  168. package/src/delegate/ScrollEnablement.js +49 -20
  169. package/src/features/F6Navigation.js +110 -0
  170. package/src/features/OpenUI5Enablement.js +119 -0
  171. package/src/features/OpenUI5Support.js +42 -7
  172. package/src/i18nBundle.js +38 -4
  173. package/src/locale/applyDirection.js +6 -4
  174. package/src/locale/directionChange.js +32 -0
  175. package/src/locale/getEffectiveDir.js +28 -0
  176. package/src/locale/getLocale.js +12 -2
  177. package/src/locale/languageChange.js +1 -1
  178. package/src/renderer/LitRenderer.js +43 -7
  179. package/src/renderer/directives/style-map.js +72 -0
  180. package/src/renderer/executeTemplate.js +34 -0
  181. package/src/theming/CustomStyle.js +47 -6
  182. package/src/theming/ThemeLoaded.js +22 -0
  183. package/src/theming/applyTheme.js +13 -15
  184. package/src/theming/getConstructableStyle.js +15 -10
  185. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  186. package/src/theming/getEffectiveStyle.js +32 -8
  187. package/src/theming/getStylesString.js +15 -0
  188. package/src/theming/getThemeDesignerTheme.js +25 -5
  189. package/src/theming/preloadLinks.js +23 -0
  190. package/src/types/CSSColor.js +9 -0
  191. package/src/types/CalendarType.js +1 -1
  192. package/src/types/DataType.js +13 -1
  193. package/src/types/Float.js +4 -0
  194. package/src/types/Integer.js +4 -0
  195. package/src/types/InvisibleMessageMode.js +30 -0
  196. package/src/types/ItemNavigationBehavior.js +2 -7
  197. package/src/types/PopupState.js +1 -1
  198. package/src/types/ValueState.js +1 -1
  199. package/src/updateShadowRoot.js +29 -0
  200. package/src/util/AriaLabelHelper.js +41 -0
  201. package/src/util/Caret.js +32 -0
  202. package/src/util/ColorConversion.js +398 -0
  203. package/src/util/FocusableElements.js +22 -9
  204. package/src/util/HTMLSanitizer.js +7 -0
  205. package/src/util/InvisibleMessage.js +69 -0
  206. package/src/util/PopupUtils.js +93 -0
  207. package/src/util/SlotsHelper.js +43 -0
  208. package/src/util/TabbableElements.js +5 -1
  209. package/src/util/arraysAreEqual.js +15 -0
  210. package/src/util/clamp.js +12 -0
  211. package/src/util/createLinkInHead.js +19 -0
  212. package/src/util/debounce.js +17 -0
  213. package/src/util/escapeRegex.js +10 -0
  214. package/src/util/generateHighlightedMarkup.js +42 -0
  215. package/src/util/getActiveElement.js +11 -0
  216. package/src/util/getClassCopy.js +10 -0
  217. package/src/util/getEffectiveContentDensity.js +5 -0
  218. package/src/util/getNormalizedTarget.js +16 -0
  219. package/src/util/isDefaultSlotProvided.js +11 -0
  220. package/src/util/isElementInView.js +15 -0
  221. package/src/util/isNodeHidden.js +1 -1
  222. package/src/util/isNodeTabbable.js +4 -4
  223. package/src/util/isValidPropertyName.js +6 -5
  224. package/used-modules.txt +10 -0
  225. package/bundle.es5.js +0 -28
  226. package/config/.eslintrc.js +0 -3
  227. package/config/rollup.config.js +0 -1
  228. package/dist/SVGIconRegistry.js +0 -62
  229. package/dist/boot.js +0 -34
  230. package/dist/compatibility/DOMObserver.js +0 -62
  231. package/dist/compatibility/patchNodeValue.js +0 -24
  232. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  233. package/dist/delegate/CustomResize.js +0 -78
  234. package/dist/delegate/NativeResize.js +0 -44
  235. package/dist/features/PropertiesFormatSupport.js +0 -8
  236. package/dist/features/browsersupport/Edge.js +0 -6
  237. package/dist/features/browsersupport/IE11.js +0 -41
  238. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  239. package/dist/renderer/ifDefined.js +0 -21
  240. package/dist/resources/bundle.es5.js +0 -212
  241. package/dist/resources/bundle.es5.js.map +0 -1
  242. package/dist/resources/bundle.esm.js +0 -129
  243. package/dist/resources/bundle.esm.js.map +0 -1
  244. package/dist/test-resources/assets/Themes.js +0 -13
  245. package/dist/test-resources/elements/Child.js +0 -35
  246. package/dist/test-resources/elements/Generic.js +0 -84
  247. package/dist/test-resources/elements/GenericExt.js +0 -26
  248. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  249. package/dist/test-resources/elements/Parent.js +0 -37
  250. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  251. package/dist/test-resources/pages/AllTestElements.html +0 -42
  252. package/dist/test-resources/pages/Configuration.html +0 -20
  253. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  254. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  255. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  256. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  257. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  258. package/dist/test-resources/pages/i18n.html +0 -40
  259. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  260. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  261. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  262. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  263. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  264. package/dist/test-resources/specs/Theming.spec.js +0 -31
  265. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -258
  266. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -93
  267. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -101
  268. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  269. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  270. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  271. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  272. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  273. package/dist/theming/CSSVarsPonyfill.js +0 -24
  274. package/dist/theming/adaptCSSForIE.js +0 -90
  275. package/dist/theming/createComponentStyleTag.js +0 -49
  276. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  277. package/dist/thirdparty/Array.from.js +0 -16
  278. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  279. package/dist/thirdparty/Array.prototype.find.js +0 -46
  280. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  281. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  282. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  283. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  284. package/dist/thirdparty/Number.isInteger.js +0 -5
  285. package/dist/thirdparty/Number.isNaN.js +0 -1
  286. package/dist/thirdparty/Number.parseInt.js +0 -1
  287. package/dist/thirdparty/Object.assign.js +0 -31
  288. package/dist/thirdparty/Object.entries.js +0 -11
  289. package/dist/thirdparty/Symbol.js +0 -2
  290. package/dist/thirdparty/WeakSet.js +0 -27
  291. package/dist/thirdparty/es6-string-methods.js +0 -182
  292. package/dist/thirdparty/events-polyfills.js +0 -89
  293. package/dist/thirdparty/fetch.js +0 -1
  294. package/dist/thirdparty/template.js +0 -600
  295. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  296. package/dist/util/getEffectiveAriaLabelText.js +0 -28
  297. package/dist/util/isSlot.js +0 -3
  298. package/dist/webcomponentsjs/LICENSE.md +0 -19
  299. package/dist/webcomponentsjs/README.md +0 -229
  300. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  301. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  302. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  303. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  304. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  305. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  306. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  307. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  308. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  309. package/dist/webcomponentsjs/package.json +0 -46
  310. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  311. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  312. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  313. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  314. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  315. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  316. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  317. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  318. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  319. package/src/SVGIconRegistry.js +0 -62
  320. package/src/boot.js +0 -34
  321. package/src/compatibility/DOMObserver.js +0 -62
  322. package/src/compatibility/patchNodeValue.js +0 -24
  323. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  324. package/src/delegate/CustomResize.js +0 -78
  325. package/src/delegate/NativeResize.js +0 -44
  326. package/src/features/PropertiesFormatSupport.js +0 -8
  327. package/src/features/browsersupport/Edge.js +0 -6
  328. package/src/features/browsersupport/IE11.js +0 -41
  329. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  330. package/src/renderer/ifDefined.js +0 -21
  331. package/src/theming/CSSVarsPonyfill.js +0 -24
  332. package/src/theming/adaptCSSForIE.js +0 -90
  333. package/src/theming/createComponentStyleTag.js +0 -49
  334. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  335. package/src/thirdparty/Array.from.js +0 -16
  336. package/src/thirdparty/Array.prototype.fill.js +0 -44
  337. package/src/thirdparty/Array.prototype.find.js +0 -46
  338. package/src/thirdparty/Array.prototype.includes.js +0 -51
  339. package/src/thirdparty/Element.prototype.closest.js +0 -11
  340. package/src/thirdparty/Element.prototype.matches.js +0 -6
  341. package/src/thirdparty/Map.prototype.keys.js +0 -9
  342. package/src/thirdparty/Number.isInteger.js +0 -5
  343. package/src/thirdparty/Number.isNaN.js +0 -1
  344. package/src/thirdparty/Number.parseInt.js +0 -1
  345. package/src/thirdparty/Object.assign.js +0 -31
  346. package/src/thirdparty/Object.entries.js +0 -11
  347. package/src/thirdparty/Symbol.js +0 -2
  348. package/src/thirdparty/WeakSet.js +0 -27
  349. package/src/thirdparty/es6-string-methods.js +0 -182
  350. package/src/thirdparty/events-polyfills.js +0 -89
  351. package/src/thirdparty/fetch.js +0 -1
  352. package/src/thirdparty/template.js +0 -600
  353. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  354. package/src/util/getEffectiveAriaLabelText.js +0 -28
  355. package/src/util/isSlot.js +0 -3
@@ -0,0 +1,398 @@
1
+ /**
2
+ *
3
+ * @param {String} color Color in one of the following formats: RGBA or HEX
4
+ */
5
+
6
+ /**
7
+ * Map of CSS colors to hex representation
8
+ */
9
+ const CSSColors = {
10
+ aliceblue: "f0f8ff",
11
+ antiquewhite: "faebd7",
12
+ aqua: "00ffff",
13
+ aquamarine: "7fffd4",
14
+ azure: "f0ffff",
15
+ beige: "f5f5dc",
16
+ bisque: "ffe4c4",
17
+ black: "000000",
18
+ blanchedalmond: "ffebcd",
19
+ blue: "0000ff",
20
+ blueviolet: "8a2be2",
21
+ brown: "a52a2a",
22
+ burlywood: "deb887",
23
+ cadetblue: "5f9ea0",
24
+ chartreuse: "7fff00",
25
+ chocolate: "d2691e",
26
+ coral: "ff7f50",
27
+ cornflowerblue: "6495ed",
28
+ cornsilk: "fff8dc",
29
+ crimson: "dc143c",
30
+ cyan: "00ffff",
31
+ darkblue: "00008b",
32
+ darkcyan: "008b8b",
33
+ darkgoldenrod: "b8860b",
34
+ darkgray: "a9a9a9",
35
+ darkgrey: "a9a9a9",
36
+ darkgreen: "006400",
37
+ darkkhaki: "bdb76b",
38
+ darkmagenta: "8b008b",
39
+ darkolivegreen: "556b2f",
40
+ darkorange: "ff8c00",
41
+ darkorchid: "9932cc",
42
+ darkred: "8b0000",
43
+ darksalmon: "e9967a",
44
+ darkseagreen: "8fbc8f",
45
+ darkslateblue: "483d8b",
46
+ darkslategray: "2f4f4f",
47
+ darkslategrey: "2f4f4f",
48
+ darkturquoise: "00ced1",
49
+ darkviolet: "9400d3",
50
+ deeppink: "ff1493",
51
+ deepskyblue: "00bfff",
52
+ dimgray: "696969",
53
+ dimgrey: "696969",
54
+ dodgerblue: "1e90ff",
55
+ firebrick: "b22222",
56
+ floralwhite: "fffaf0",
57
+ forestgreen: "228b22",
58
+ fuchsia: "ff00ff",
59
+ gainsboro: "dcdcdc",
60
+ ghostwhite: "f8f8ff",
61
+ gold: "ffd700",
62
+ goldenrod: "daa520",
63
+ gray: "808080",
64
+ grey: "808080",
65
+ green: "008000",
66
+ greenyellow: "adff2f",
67
+ honeydew: "f0fff0",
68
+ hotpink: "ff69b4",
69
+ indianred: "cd5c5c",
70
+ indigo: "4b0082",
71
+ ivory: "fffff0",
72
+ khaki: "f0e68c",
73
+ lavender: "e6e6fa",
74
+ lavenderblush: "fff0f5",
75
+ lawngreen: "7cfc00",
76
+ lemonchiffon: "fffacd",
77
+ lightblue: "add8e6",
78
+ lightcoral: "f08080",
79
+ lightcyan: "e0ffff",
80
+ lightgoldenrodyellow: "fafad2",
81
+ lightgray: "d3d3d3",
82
+ lightgrey: "d3d3d3",
83
+ lightgreen: "90ee90",
84
+ lightpink: "ffb6c1",
85
+ lightsalmon: "ffa07a",
86
+ lightseagreen: "20b2aa",
87
+ lightskyblue: "87cefa",
88
+ lightslategray: "778899",
89
+ lightslategrey: "778899",
90
+ lightsteelblue: "b0c4de",
91
+ lightyellow: "ffffe0",
92
+ lime: "00ff00",
93
+ limegreen: "32cd32",
94
+ linen: "faf0e6",
95
+ magenta: "ff00ff",
96
+ maroon: "800000",
97
+ mediumaquamarine: "66cdaa",
98
+ mediumblue: "0000cd",
99
+ mediumorchid: "ba55d3",
100
+ mediumpurple: "9370db",
101
+ mediumseagreen: "3cb371",
102
+ mediumslateblue: "7b68ee",
103
+ mediumspringgreen: "00fa9a",
104
+ mediumturquoise: "48d1cc",
105
+ mediumvioletred: "c71585",
106
+ midnightblue: "191970",
107
+ mintcream: "f5fffa",
108
+ mistyrose: "ffe4e1",
109
+ moccasin: "ffe4b5",
110
+ navajowhite: "ffdead",
111
+ navy: "000080",
112
+ oldlace: "fdf5e6",
113
+ olive: "808000",
114
+ olivedrab: "6b8e23",
115
+ orange: "ffa500",
116
+ orangered: "ff4500",
117
+ orchid: "da70d6",
118
+ palegoldenrod: "eee8aa",
119
+ palegreen: "98fb98",
120
+ paleturquoise: "afeeee",
121
+ palevioletred: "db7093",
122
+ papayawhip: "ffefd5",
123
+ peachpuff: "ffdab9",
124
+ peru: "cd853f",
125
+ pink: "ffc0cb",
126
+ plum: "dda0dd",
127
+ powderblue: "b0e0e6",
128
+ purple: "800080",
129
+ red: "ff0000",
130
+ rosybrown: "bc8f8f",
131
+ royalblue: "4169e1",
132
+ saddlebrown: "8b4513",
133
+ salmon: "fa8072",
134
+ sandybrown: "f4a460",
135
+ seagreen: "2e8b57",
136
+ seashell: "fff5ee",
137
+ sienna: "a0522d",
138
+ silver: "c0c0c0",
139
+ skyblue: "87ceeb",
140
+ slateblue: "6a5acd",
141
+ slategray: "708090",
142
+ slategrey: "708090",
143
+ snow: "fffafa",
144
+ springgreen: "00ff7f",
145
+ steelblue: "4682b4",
146
+ tan: "d2b48c",
147
+ teal: "008080",
148
+ thistle: "d8bfd8",
149
+ tomato: "ff6347",
150
+ turquoise: "40e0d0",
151
+ violet: "ee82ee",
152
+ wheat: "f5deb3",
153
+ white: "ffffff",
154
+ whitesmoke: "f5f5f5",
155
+ yellow: "ffff00",
156
+ yellowgreen: "9acd32",
157
+ transparent: "00000000",
158
+ };
159
+
160
+ const getRGBColor = color => {
161
+ if (color.startsWith("rgba")) {
162
+ return RGBAToRGB(color);
163
+ }
164
+
165
+ if (color.startsWith("rgb")) {
166
+ return RGBStringToRGBObject(color);
167
+ }
168
+
169
+ // HEX
170
+ if (color.indexOf("#") === 0) {
171
+ // Shorthand Syntax
172
+ if (color.length === 4) {
173
+ color = `${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}`;
174
+ } else {
175
+ color = color.slice(1, color.length);
176
+ }
177
+ }
178
+
179
+ // Css Color
180
+ if (Object.keys(CSSColors).includes(color)) {
181
+ color = CSSColors[color];
182
+ }
183
+
184
+ return HEXToRGB(color);
185
+ };
186
+
187
+ /**
188
+ * Return an object with the properties for each of the main colors(red, green, blue)
189
+ * @param {String} color Receives a color in the following format: "rgba(0, 0, 0, 1)
190
+ */
191
+ const RGBAToRGB = color => {
192
+ const openingBracketIndex = color.indexOf("("),
193
+ commasIndexes = [];
194
+
195
+ for (let i = 0; i < color.length; i++) {
196
+ if (color[i] === ",") {
197
+ commasIndexes.push(i);
198
+ }
199
+ }
200
+
201
+ return {
202
+ r: parseInt(color.slice(openingBracketIndex + 1, commasIndexes[0]).trim()),
203
+ g: parseInt(color.slice(commasIndexes[0] + 1, commasIndexes[1]).trim()),
204
+ b: parseInt(color.slice(commasIndexes[1] + 1, commasIndexes[2]).trim()),
205
+ };
206
+ };
207
+
208
+ /**
209
+ * Return an object with the properties for each of the main colors(red, green, blue)
210
+ * @param {String} color Receives a color in the following format: "rgb(0, 0, 0)
211
+ */
212
+ const RGBStringToRGBObject = color => {
213
+ const openingBracketIndex = color.indexOf("("),
214
+ closingBraketIndex = color.indexOf(")"),
215
+ commasIndexes = [];
216
+
217
+ for (let i = 0; i < color.length; i++) {
218
+ if (color[i] === ",") {
219
+ commasIndexes.push(i);
220
+ }
221
+ }
222
+
223
+ return {
224
+ r: parseInt(color.slice(openingBracketIndex + 1, commasIndexes[0]).trim()),
225
+ g: parseInt(color.slice(commasIndexes[0] + 1, commasIndexes[1]).trim()),
226
+ b: parseInt(color.slice(commasIndexes[1] + 1, closingBraketIndex).trim()),
227
+ };
228
+ };
229
+
230
+ const HSLToRGB = (color = {
231
+ h: undefined,
232
+ s: undefined,
233
+ l: undefined,
234
+ }) => {
235
+ // Formula taken from https://www.rapidtables.com/convert/color/hsl-to-rgb.html
236
+ const C = (1 - Math.abs((2 * color.l) - 1)) * color.s,
237
+ X = C * (1 - Math.abs(((color.h / 60) % 2) - 1)),
238
+ m = color.l - C / 2;
239
+
240
+ let tempColor = {};
241
+ switch (Math.round(color.h / 60)) {
242
+ // 0 ≤ H < 60
243
+ case 0:
244
+ tempColor = {
245
+ r: C,
246
+ g: X,
247
+ b: 0,
248
+ };
249
+ break;
250
+
251
+ // 60 ≤ H < 120
252
+ case 1:
253
+ tempColor = {
254
+ r: X,
255
+ g: C,
256
+ b: 0,
257
+ };
258
+ break;
259
+
260
+ // 120 ≤ H < 180
261
+ case 2:
262
+ tempColor = {
263
+ r: 0,
264
+ g: C,
265
+ b: X,
266
+ };
267
+ break;
268
+
269
+ // 180 ≤ H < 240
270
+ case 3:
271
+ tempColor = {
272
+ r: 0,
273
+ g: X,
274
+ b: C,
275
+ };
276
+ break;
277
+
278
+ // 240 ≤ H < 300
279
+ case 4:
280
+ tempColor = {
281
+ r: X,
282
+ g: 0,
283
+ b: C,
284
+ };
285
+ break;
286
+
287
+ // 300 ≤ H < 360
288
+ default:
289
+ tempColor = {
290
+ r: C,
291
+ g: 0,
292
+ b: X,
293
+ };
294
+ }
295
+
296
+ return {
297
+ r: Math.floor((tempColor.r + m) * 255),
298
+ g: Math.floor((tempColor.g + m) * 255),
299
+ b: Math.floor((tempColor.b + m) * 255),
300
+ };
301
+ };
302
+
303
+ const HEXToRGB = hex => {
304
+ // Please make sure you pass a valid 6 digit hex color
305
+ // In the implementation of this method we assume that the hex argument is a 6 digit valid hex color
306
+
307
+ const rgbValues = {
308
+ r: hex.substr(0, 2),
309
+ g: hex.substr(2, 2),
310
+ b: hex.substr(4, 2),
311
+ };
312
+
313
+ const rgbKeys = Object.keys(rgbValues);
314
+
315
+ rgbKeys.forEach(key => {
316
+ rgbValues[key] = parseInt(rgbValues[key], 16);
317
+ });
318
+
319
+ return rgbValues;
320
+ };
321
+
322
+ /**
323
+ * Returns the hex value of the color as string
324
+ * @param {Object} color Receives an object with the properties for each of the main colors(r, g, b)
325
+ */
326
+ const RGBtoHEX = color => {
327
+ const hexMap = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E"];
328
+ let hexValue = "#";
329
+
330
+ let divisionNumber = color.r / 16;
331
+ let remainder = color.r % 16;
332
+ hexValue += String(hexMap[Math.floor(divisionNumber)]);
333
+ hexValue += String(hexMap[remainder]);
334
+
335
+ divisionNumber = color.g / 16;
336
+ remainder = color.g % 16;
337
+ hexValue += String(hexMap[Math.floor(divisionNumber)]);
338
+ hexValue += String(hexMap[remainder]);
339
+
340
+ divisionNumber = color.b / 16;
341
+ remainder = color.b % 16;
342
+ hexValue += String(hexMap[Math.floor(divisionNumber)]);
343
+ hexValue += String(hexMap[remainder]);
344
+
345
+ return hexValue;
346
+ };
347
+
348
+ const RGBToHSL = (color = {
349
+ r: undefined,
350
+ g: undefined,
351
+ b: undefined,
352
+ }) => {
353
+ const R = color.r / 255,
354
+ G = color.g / 255,
355
+ B = color.b / 255,
356
+ max = Math.max(R, G, B),
357
+ min = Math.min(R, G, B),
358
+ delta = max - min;
359
+
360
+ let h,
361
+ s;
362
+
363
+ // Hue calculation
364
+ if (delta === 0) {
365
+ h = 0;
366
+ } else if (max === R) {
367
+ h = 60 * (((G - B) / delta) % 6);
368
+ } else if (max === G) {
369
+ h = 60 * (((B - R) / delta) + 2);
370
+ } else if (max === B) {
371
+ h = 60 * (((R - G) / delta) + 4);
372
+ }
373
+
374
+ // Lightness calculation
375
+ const l = (max + min) / 2;
376
+
377
+ // Saturation calculation
378
+ if (delta === 0) {
379
+ s = 0;
380
+ } else {
381
+ s = delta / (1 - Math.abs(2 * l - 1));
382
+ }
383
+
384
+ return {
385
+ h,
386
+ s,
387
+ l,
388
+ };
389
+ };
390
+
391
+ export {
392
+ getRGBColor,
393
+ HSLToRGB,
394
+ HEXToRGB,
395
+ RGBToHSL,
396
+ RGBStringToRGBObject,
397
+ RGBtoHEX,
398
+ };
@@ -5,23 +5,27 @@ const isFocusTrap = el => {
5
5
  return el.hasAttribute("data-ui5-focus-trap");
6
6
  };
7
7
 
8
- const getFirstFocusableElement = container => {
8
+ const getFirstFocusableElement = async (container, startFromContainer) => {
9
9
  if (!container || isNodeHidden(container)) {
10
10
  return null;
11
11
  }
12
12
 
13
- return findFocusableElement(container, true);
13
+ return findFocusableElement(container, true, startFromContainer);
14
14
  };
15
15
 
16
- const getLastFocusableElement = container => {
16
+ const getLastFocusableElement = async (container, startFromContainer) => {
17
17
  if (!container || isNodeHidden(container)) {
18
18
  return null;
19
19
  }
20
20
 
21
- return findFocusableElement(container, false);
21
+ return findFocusableElement(container, false, startFromContainer);
22
22
  };
23
23
 
24
- const findFocusableElement = (container, forward) => {
24
+ const isElemFocusable = el => {
25
+ return el.hasAttribute("data-ui5-focus-redirect") || !isNodeHidden(el);
26
+ };
27
+
28
+ const findFocusableElement = async (container, forward, startFromContainer) => {
25
29
  let child;
26
30
 
27
31
  if (container.shadowRoot) {
@@ -29,26 +33,33 @@ const findFocusableElement = (container, forward) => {
29
33
  } else if (container.assignedNodes && container.assignedNodes()) {
30
34
  const assignedElements = container.assignedNodes();
31
35
  child = forward ? assignedElements[0] : assignedElements[assignedElements.length - 1];
36
+ } else if (startFromContainer) {
37
+ child = container;
32
38
  } else {
33
- child = forward ? container.firstChild : container.lastChild;
39
+ child = forward ? container.firstElementChild : container.lastElementChild;
34
40
  }
35
41
 
36
42
  let focusableDescendant;
37
43
 
44
+ /* eslint-disable no-await-in-loop */
45
+
38
46
  while (child) {
39
47
  const originalChild = child;
40
48
 
41
- child = child.isUI5Element ? child.getFocusDomRef() : child;
49
+ if (child.isUI5Element) {
50
+ child = await child.getFocusDomRefAsync();
51
+ }
52
+
42
53
  if (!child) {
43
54
  return null;
44
55
  }
45
56
 
46
- if (child.nodeType === 1 && !isNodeHidden(child) && !isFocusTrap(child)) {
57
+ if (child.nodeType === 1 && isElemFocusable(child) && !isFocusTrap(child)) {
47
58
  if (isNodeClickable(child)) {
48
59
  return (child && typeof child.focus === "function") ? child : null;
49
60
  }
50
61
 
51
- focusableDescendant = findFocusableElement(child, forward);
62
+ focusableDescendant = await findFocusableElement(child, forward);
52
63
  if (focusableDescendant) {
53
64
  return (focusableDescendant && typeof focusableDescendant.focus === "function") ? focusableDescendant : null;
54
65
  }
@@ -57,6 +68,8 @@ const findFocusableElement = (container, forward) => {
57
68
  child = forward ? originalChild.nextSibling : originalChild.previousSibling;
58
69
  }
59
70
 
71
+ /* eslint-enable no-await-in-loop */
72
+
60
73
  return null;
61
74
  };
62
75
 
@@ -0,0 +1,7 @@
1
+ import sanitizeHTML from "../sap/base/security/sanitizeHTML.js";
2
+ import URLListValidator from "../sap/base/security/URLListValidator.js";
3
+
4
+ export {
5
+ URLListValidator,
6
+ sanitizeHTML,
7
+ };
@@ -0,0 +1,69 @@
1
+ import InvisibleMessageMode from "../types/InvisibleMessageMode.js";
2
+ import getSingletonElementInstance from "./getSingletonElementInstance.js";
3
+ import { attachBoot } from "../Boot.js";
4
+
5
+ let politeSpan;
6
+ let assertiveSpan;
7
+
8
+ const setOutOfViewportStyles = el => {
9
+ el.style.position = "absolute";
10
+ el.style.clip = "rect(1px,1px,1px,1px)";
11
+ el.style.userSelect = "none";
12
+ el.style.left = "-1000px";
13
+ el.style.top = "-1000px";
14
+ el.style.pointerEvents = "none";
15
+ };
16
+
17
+ attachBoot(() => {
18
+ if (politeSpan && assertiveSpan) {
19
+ return;
20
+ }
21
+
22
+ politeSpan = document.createElement("span");
23
+ assertiveSpan = document.createElement("span");
24
+
25
+ politeSpan.classList.add("ui5-invisiblemessage-polite");
26
+ assertiveSpan.classList.add("ui5-invisiblemessage-assertive");
27
+
28
+ politeSpan.setAttribute("aria-live", "polite");
29
+ assertiveSpan.setAttribute("aria-live", "assertive");
30
+
31
+ politeSpan.setAttribute("role", "alert");
32
+ assertiveSpan.setAttribute("role", "alert");
33
+
34
+ setOutOfViewportStyles(politeSpan);
35
+ setOutOfViewportStyles(assertiveSpan);
36
+
37
+ getSingletonElementInstance("ui5-static-area").appendChild(politeSpan);
38
+ getSingletonElementInstance("ui5-static-area").appendChild(assertiveSpan);
39
+ });
40
+
41
+ /**
42
+ * Inserts the string into the respective span, depending on the mode provided.
43
+ *
44
+ * @param {string} message String to be announced by the screen reader.
45
+ * @param {sap.ui.core.InvisibleMessageMode} mode The mode to be inserted in the aria-live attribute.
46
+ * @public
47
+ */
48
+ const announce = (message, mode) => {
49
+ // If no type is presented, fallback to polite announcement.
50
+ const span = mode === InvisibleMessageMode.Assertive ? assertiveSpan : politeSpan;
51
+
52
+ // Set textContent to empty string in order to trigger screen reader's announcement.
53
+ span.textContent = "";
54
+ span.textContent = message;
55
+
56
+ if (mode !== InvisibleMessageMode.Assertive && mode !== InvisibleMessageMode.Polite) {
57
+ console.warn(`You have entered an invalid mode. Valid values are: "Polite" and "Assertive". The framework will automatically set the mode to "Polite".`); // eslint-disable-line
58
+ }
59
+
60
+ // clear the span in order to avoid reading it out while in JAWS reading node
61
+ setTimeout(() => {
62
+ // ensure that we clear the text node only if no announce is made in the meantime
63
+ if (span.textContent === message) {
64
+ span.textContent = "";
65
+ }
66
+ }, 3000);
67
+ };
68
+
69
+ export default announce;
@@ -0,0 +1,93 @@
1
+ import getSharedResource from "../getSharedResource.js";
2
+ import { getFeature } from "../FeaturesRegistry.js";
3
+ import getActiveElement from "./getActiveElement.js";
4
+
5
+ const PopupUtilsData = getSharedResource("PopupUtilsData", {});
6
+ PopupUtilsData.currentZIndex = PopupUtilsData.currentZIndex || 100;
7
+
8
+ const getFocusedElement = () => {
9
+ const element = getActiveElement();
10
+ return (element && typeof element.focus === "function") ? element : null;
11
+ };
12
+
13
+ const isFocusedElementWithinNode = node => {
14
+ const fe = getFocusedElement();
15
+
16
+ if (fe) {
17
+ return isNodeContainedWithin(node, fe);
18
+ }
19
+
20
+ return false;
21
+ };
22
+
23
+ const isNodeContainedWithin = (parent, child) => {
24
+ let currentNode = parent;
25
+
26
+ if (currentNode.shadowRoot) {
27
+ currentNode = Array.from(currentNode.shadowRoot.children).find(n => n.localName !== "style");
28
+ }
29
+
30
+ if (currentNode === child) {
31
+ return true;
32
+ }
33
+
34
+ const childNodes = currentNode.localName === "slot" ? currentNode.assignedNodes() : currentNode.children;
35
+
36
+ if (childNodes) {
37
+ return Array.from(childNodes).some(n => isNodeContainedWithin(n, child));
38
+ }
39
+ };
40
+
41
+ const isPointInRect = (x, y, rect) => {
42
+ return x >= rect.left && x <= rect.right
43
+ && y >= rect.top && y <= rect.bottom;
44
+ };
45
+
46
+ const isClickInRect = (event, rect) => {
47
+ let x;
48
+ let y;
49
+
50
+ if (event.touches) {
51
+ const touch = event.touches[0];
52
+ x = touch.clientX;
53
+ y = touch.clientY;
54
+ } else {
55
+ x = event.clientX;
56
+ y = event.clientY;
57
+ }
58
+
59
+ return isPointInRect(x, y, rect);
60
+ };
61
+
62
+ const getClosedPopupParent = el => {
63
+ const parent = el.parentElement || (el.getRootNode && el.getRootNode().host);
64
+
65
+ if (parent && ((parent.showAt && parent.isUI5Element) || (parent.open && parent.isUI5Element) || parent === document.documentElement)) {
66
+ return parent;
67
+ }
68
+
69
+ return getClosedPopupParent(parent);
70
+ };
71
+
72
+ const getNextZIndex = () => {
73
+ const OpenUI5Support = getFeature("OpenUI5Support");
74
+ if (OpenUI5Support && OpenUI5Support.isLoaded()) { // use OpenUI5 for getting z-index values, if loaded
75
+ return OpenUI5Support.getNextZIndex();
76
+ }
77
+
78
+ PopupUtilsData.currentZIndex += 2;
79
+ return PopupUtilsData.currentZIndex;
80
+ };
81
+
82
+ const getCurrentZIndex = () => {
83
+ return PopupUtilsData.currentZIndex;
84
+ };
85
+
86
+ export {
87
+ getFocusedElement,
88
+ isClickInRect,
89
+ getClosedPopupParent,
90
+ getNextZIndex,
91
+ getCurrentZIndex,
92
+ isFocusedElementWithinNode,
93
+ };
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Determines the slot to which a node should be assigned
3
+ * @param node Text node or HTML element
4
+ * @returns {string}
5
+ */
6
+ const getSlotName = node => {
7
+ // Text nodes can only go to the default slot
8
+ if (!(node instanceof HTMLElement)) {
9
+ return "default";
10
+ }
11
+
12
+ // Discover the slot based on the real slot name (f.e. footer => footer, or content-32 => content)
13
+ const slot = node.getAttribute("slot");
14
+ if (slot) {
15
+ const match = slot.match(/^(.+?)-\d+$/);
16
+ return match ? match[1] : slot;
17
+ }
18
+
19
+ // Use default slot as a fallback
20
+ return "default";
21
+ };
22
+
23
+ const isSlot = el => el && el instanceof HTMLElement && el.localName === "slot";
24
+
25
+ const getSlottedElements = el => {
26
+ if (isSlot(el)) {
27
+ return el.assignedNodes({ flatten: true }).filter(item => item instanceof HTMLElement);
28
+ }
29
+
30
+ return [el];
31
+ };
32
+
33
+ const getSlottedElementsList = elList => {
34
+ const reducer = (acc, curr) => acc.concat(getSlottedElements(curr));
35
+ return elList.reduce(reducer, []);
36
+ };
37
+
38
+ export {
39
+ getSlotName,
40
+ isSlot,
41
+ getSlottedElements,
42
+ getSlottedElementsList,
43
+ };
@@ -17,7 +17,7 @@ const getTabbables = (nodes, tabbables) => {
17
17
  }
18
18
 
19
19
  Array.from(nodes).forEach(currentNode => {
20
- if (currentNode.nodeType === Node.TEXT_NODE || currentNode.nodeType === Node.COMMENT_NODE) {
20
+ if (currentNode.nodeType === Node.TEXT_NODE || currentNode.nodeType === Node.COMMENT_NODE || currentNode.hasAttribute("data-sap-no-tab-ref")) {
21
21
  return;
22
22
  }
23
23
 
@@ -27,6 +27,10 @@ const getTabbables = (nodes, tabbables) => {
27
27
  currentNode = Array.from(children).find(node => node.tagName !== "STYLE");
28
28
  }
29
29
 
30
+ if (!currentNode) {
31
+ return;
32
+ }
33
+
30
34
  if (isNodeTabbable(currentNode)) {
31
35
  tabbablesNodes.push(currentNode);
32
36
  }