@ui5/webcomponents-base 0.0.0-389bdbabc → 0.0.0-453158269

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 (473) hide show
  1. package/.eslintignore +4 -0
  2. package/CHANGELOG.md +407 -0
  3. package/README.md +26 -2
  4. package/bundle.esm.js +18 -12
  5. package/dist/AssetRegistry.js +8 -6
  6. package/dist/Boot.js +59 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsRegistry.js +95 -0
  9. package/dist/CustomElementsScope.js +30 -0
  10. package/dist/CustomElementsScopeUtils.js +108 -0
  11. package/dist/DOMObserver.js +65 -0
  12. package/dist/Device.js +71 -773
  13. package/dist/EventProvider.js +38 -26
  14. package/dist/FeaturesRegistry.js +4 -1
  15. package/dist/FontFace.js +20 -56
  16. package/dist/InitialConfiguration.js +64 -17
  17. package/dist/Keys.js +295 -0
  18. package/dist/ManagedStyles.js +83 -0
  19. package/dist/MediaRange.js +109 -0
  20. package/dist/PropertiesFileFormat.js +95 -0
  21. package/dist/Render.js +175 -0
  22. package/dist/RenderQueue.js +41 -17
  23. package/dist/RenderScheduler.js +24 -145
  24. package/dist/Runtimes.js +107 -0
  25. package/dist/StaticArea.js +2 -34
  26. package/dist/StaticAreaItem.js +69 -35
  27. package/dist/SystemCSSVars.js +10 -0
  28. package/dist/Theming.js +3 -44
  29. package/dist/UI5Element.js +497 -306
  30. package/dist/UI5ElementMetadata.js +198 -19
  31. package/dist/asset-registries/Icons.js +125 -14
  32. package/dist/asset-registries/Illustrations.js +30 -0
  33. package/dist/asset-registries/LocaleData.js +114 -51
  34. package/dist/asset-registries/Themes.js +37 -30
  35. package/dist/asset-registries/i18n.js +80 -34
  36. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  37. package/dist/config/AnimationMode.js +16 -2
  38. package/dist/config/CalendarType.js +7 -7
  39. package/dist/config/FormatSettings.js +5 -1
  40. package/dist/config/Icons.js +52 -0
  41. package/dist/config/Language.js +62 -3
  42. package/dist/config/NoConflict.js +10 -3
  43. package/dist/config/Theme.js +32 -3
  44. package/dist/css/BusyIndicator.css +80 -0
  45. package/dist/css/FontFace.css +75 -0
  46. package/dist/css/OverrideFontFace.css +32 -0
  47. package/dist/css/SystemCSSVars.css +17 -0
  48. package/dist/delegate/ItemNavigation.js +245 -168
  49. package/dist/delegate/ResizeHandler.js +78 -38
  50. package/dist/delegate/ScrollEnablement.js +122 -14
  51. package/dist/features/F6Navigation.js +106 -0
  52. package/dist/features/OpenUI5Enablement.js +119 -0
  53. package/dist/features/OpenUI5Support.js +125 -0
  54. package/dist/generated/AssetParameters.js +13 -0
  55. package/dist/generated/VersionInfo.js +10 -0
  56. package/dist/generated/css/BusyIndicator.css.js +5 -0
  57. package/dist/generated/css/FontFace.css.js +5 -0
  58. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  59. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  60. package/dist/getSharedResource.js +30 -0
  61. package/dist/i18nBundle.js +62 -11
  62. package/dist/isLegacyBrowser.js +3 -0
  63. package/dist/{Locale.js → locale/Locale.js} +0 -10
  64. package/dist/locale/RTLAwareRegistry.js +14 -0
  65. package/dist/locale/applyDirection.js +17 -0
  66. package/dist/locale/directionChange.js +32 -0
  67. package/dist/locale/getEffectiveDir.js +28 -0
  68. package/dist/locale/getLocale.js +41 -0
  69. package/dist/locale/languageChange.js +22 -0
  70. package/dist/locale/nextFallbackLocale.js +28 -0
  71. package/{src/util → dist/locale}/normalizeLocale.js +8 -31
  72. package/dist/renderer/LitRenderer.js +44 -7
  73. package/dist/renderer/directives/style-map.js +72 -0
  74. package/dist/renderer/executeTemplate.js +34 -0
  75. package/dist/resources/bundle.esm.js +18 -7436
  76. package/dist/resources/bundle.esm.js.map +1 -1
  77. package/dist/sap/base/Log.js +241 -0
  78. package/dist/sap/base/assert.js +8 -0
  79. package/dist/sap/base/security/URLListValidator.js +148 -0
  80. package/dist/sap/base/security/encodeCSS.js +14 -0
  81. package/dist/sap/base/security/encodeXML.js +23 -0
  82. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  83. package/dist/sap/base/strings/toHex.js +8 -0
  84. package/dist/sap/base/util/now.js +7 -0
  85. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  86. package/dist/test-resources/assets/Themes.js +11 -5
  87. package/dist/test-resources/elements/Generic.js +1 -0
  88. package/dist/test-resources/elements/Parent.js +7 -2
  89. package/dist/test-resources/elements/WithStaticArea.js +77 -0
  90. package/dist/test-resources/pages/AllTestElements.html +5 -5
  91. package/dist/test-resources/pages/Configuration.html +0 -2
  92. package/dist/test-resources/pages/ConfigurationScript.html +1 -3
  93. package/dist/test-resources/pages/assets/messagebundle_de.properties +1 -0
  94. package/dist/test-resources/pages/assets/messagebundle_en.properties +1 -0
  95. package/dist/test-resources/pages/assets/messagebundle_es.properties +1 -0
  96. package/dist/test-resources/pages/assets/messagebundle_fr.properties +1 -0
  97. package/dist/test-resources/pages/i18n.html +33 -0
  98. package/dist/test-resources/specs/ConfigurationChange.spec.js +11 -9
  99. package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
  100. package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
  101. package/dist/test-resources/specs/CustomTheme.spec.js +9 -7
  102. package/dist/test-resources/specs/EventProvider.spec.js +63 -0
  103. package/dist/test-resources/specs/StaticArea.spec.js +78 -0
  104. package/dist/test-resources/specs/Theming.spec.js +23 -10
  105. package/dist/test-resources/specs/UI5ElementInvalidation.js +54 -70
  106. package/dist/test-resources/specs/UI5ElementLifecycle.js +19 -14
  107. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +25 -51
  108. package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
  109. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
  110. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
  111. package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
  112. package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
  113. package/dist/theming/CustomStyle.js +47 -6
  114. package/dist/theming/ThemeLoaded.js +22 -0
  115. package/dist/theming/applyTheme.js +79 -0
  116. package/dist/theming/getConstructableStyle.js +30 -0
  117. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  118. package/dist/theming/getEffectiveStyle.js +39 -0
  119. package/dist/theming/getStylesString.js +15 -0
  120. package/dist/theming/getThemeDesignerTheme.js +87 -0
  121. package/dist/theming/preloadLinks.js +23 -0
  122. package/dist/thirdparty/_merge.js +32 -0
  123. package/dist/thirdparty/isPlainObject.js +18 -0
  124. package/dist/thirdparty/merge.js +10 -0
  125. package/dist/types/CSSColor.js +9 -0
  126. package/{src/dates → dist/types}/CalendarType.js +2 -2
  127. package/dist/types/DataType.js +13 -1
  128. package/dist/types/Float.js +14 -0
  129. package/dist/types/Integer.js +4 -0
  130. package/dist/types/InvisibleMessageMode.js +30 -0
  131. package/dist/types/ItemNavigationBehavior.js +2 -7
  132. package/dist/types/NavigationMode.js +1 -0
  133. package/dist/types/PopupState.js +1 -1
  134. package/dist/types/ValueState.js +2 -1
  135. package/dist/updateShadowRoot.js +30 -0
  136. package/dist/util/AriaLabelHelper.js +41 -0
  137. package/dist/util/Caret.js +45 -0
  138. package/dist/util/ColorConversion.js +370 -0
  139. package/dist/util/FocusableElements.js +30 -11
  140. package/dist/util/HTMLSanitizer.js +7 -0
  141. package/dist/util/InvisibleMessage.js +60 -0
  142. package/dist/util/PopupUtils.js +93 -0
  143. package/dist/util/SlotsHelper.js +43 -0
  144. package/dist/util/StringHelper.js +17 -2
  145. package/dist/util/TabbableElements.js +9 -2
  146. package/dist/util/arraysAreEqual.js +15 -0
  147. package/dist/util/clamp.js +12 -0
  148. package/dist/util/createLinkInHead.js +19 -0
  149. package/dist/util/debounce.js +17 -0
  150. package/dist/util/detectNavigatorLanguage.js +3 -1
  151. package/dist/util/escapeRegex.js +10 -0
  152. package/dist/util/findNodeOwner.js +35 -0
  153. package/dist/util/generateHighlightedMarkup.js +42 -0
  154. package/dist/util/getActiveElement.js +11 -0
  155. package/dist/util/getClassCopy.js +10 -0
  156. package/dist/util/getEffectiveContentDensity.js +5 -0
  157. package/dist/util/getFileExtension.js +21 -0
  158. package/dist/util/getNormalizedTarget.js +16 -0
  159. package/dist/util/getSingletonElementInstance.js +13 -0
  160. package/dist/util/isElementInView.js +15 -0
  161. package/dist/util/isNodeHidden.js +1 -5
  162. package/dist/util/isNodeTabbable.js +4 -4
  163. package/dist/util/isValidPropertyName.js +11 -2
  164. package/dist/util/setToArray.js +10 -0
  165. package/hash.txt +1 -0
  166. package/index.js +1 -1
  167. package/lib/generate-asset-parameters/index.js +25 -0
  168. package/lib/generate-styles/index.js +26 -0
  169. package/lib/generate-version-info/index.js +32 -0
  170. package/package-scripts.js +34 -18
  171. package/package.json +21 -14
  172. package/src/AssetRegistry.js +8 -6
  173. package/src/Boot.js +59 -0
  174. package/src/CSP.js +59 -0
  175. package/src/CustomElementsRegistry.js +95 -0
  176. package/src/CustomElementsScope.js +30 -0
  177. package/src/CustomElementsScopeUtils.js +108 -0
  178. package/src/DOMObserver.js +65 -0
  179. package/src/Device.js +71 -773
  180. package/src/EventProvider.js +38 -26
  181. package/src/FeaturesRegistry.js +4 -1
  182. package/src/FontFace.js +20 -56
  183. package/src/InitialConfiguration.js +64 -17
  184. package/src/Keys.js +295 -0
  185. package/src/ManagedStyles.js +83 -0
  186. package/src/MediaRange.js +109 -0
  187. package/src/PropertiesFileFormat.js +95 -0
  188. package/src/Render.js +175 -0
  189. package/src/RenderQueue.js +41 -17
  190. package/src/RenderScheduler.js +24 -145
  191. package/src/Runtimes.js +107 -0
  192. package/src/StaticArea.js +1 -39
  193. package/src/StaticAreaItem.js +67 -39
  194. package/src/SystemCSSVars.js +10 -0
  195. package/src/Theming.js +3 -44
  196. package/src/UI5Element.js +497 -306
  197. package/src/UI5ElementMetadata.js +198 -19
  198. package/src/asset-registries/Icons.js +125 -14
  199. package/src/asset-registries/Illustrations.js +30 -0
  200. package/src/asset-registries/LocaleData.js +114 -51
  201. package/src/asset-registries/Themes.js +37 -30
  202. package/src/asset-registries/i18n.js +80 -34
  203. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  204. package/src/config/AnimationMode.js +16 -2
  205. package/src/config/CalendarType.js +7 -7
  206. package/src/config/FormatSettings.js +5 -1
  207. package/src/config/Icons.js +52 -0
  208. package/src/config/Language.js +62 -3
  209. package/src/config/NoConflict.js +10 -3
  210. package/src/config/Theme.js +32 -3
  211. package/src/css/BusyIndicator.css +80 -0
  212. package/src/css/FontFace.css +75 -0
  213. package/src/css/OverrideFontFace.css +32 -0
  214. package/src/css/SystemCSSVars.css +17 -0
  215. package/src/delegate/ItemNavigation.js +245 -168
  216. package/src/delegate/ResizeHandler.js +78 -38
  217. package/src/delegate/ScrollEnablement.js +122 -14
  218. package/src/features/F6Navigation.js +106 -0
  219. package/src/features/OpenUI5Enablement.js +119 -0
  220. package/src/features/OpenUI5Support.js +125 -0
  221. package/src/getSharedResource.js +30 -0
  222. package/src/i18nBundle.js +62 -11
  223. package/src/isLegacyBrowser.js +3 -0
  224. package/src/{Locale.js → locale/Locale.js} +0 -10
  225. package/src/locale/RTLAwareRegistry.js +14 -0
  226. package/src/locale/applyDirection.js +17 -0
  227. package/src/locale/directionChange.js +32 -0
  228. package/src/locale/getEffectiveDir.js +28 -0
  229. package/src/locale/getLocale.js +41 -0
  230. package/src/locale/languageChange.js +22 -0
  231. package/src/locale/nextFallbackLocale.js +28 -0
  232. package/{dist/util → src/locale}/normalizeLocale.js +8 -31
  233. package/src/renderer/LitRenderer.js +44 -7
  234. package/src/renderer/directives/style-map.js +72 -0
  235. package/src/renderer/executeTemplate.js +34 -0
  236. package/src/theming/CustomStyle.js +47 -6
  237. package/src/theming/ThemeLoaded.js +22 -0
  238. package/src/theming/applyTheme.js +79 -0
  239. package/src/theming/getConstructableStyle.js +30 -0
  240. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  241. package/src/theming/getEffectiveStyle.js +39 -0
  242. package/src/theming/getStylesString.js +15 -0
  243. package/src/theming/getThemeDesignerTheme.js +87 -0
  244. package/src/theming/preloadLinks.js +23 -0
  245. package/src/thirdparty/_merge.js +32 -0
  246. package/src/thirdparty/isPlainObject.js +18 -0
  247. package/src/thirdparty/merge.js +10 -0
  248. package/src/types/CSSColor.js +9 -0
  249. package/{dist/dates → src/types}/CalendarType.js +2 -2
  250. package/src/types/DataType.js +13 -1
  251. package/src/types/Float.js +14 -0
  252. package/src/types/Integer.js +4 -0
  253. package/src/types/InvisibleMessageMode.js +30 -0
  254. package/src/types/ItemNavigationBehavior.js +2 -7
  255. package/src/types/NavigationMode.js +1 -0
  256. package/src/types/PopupState.js +1 -1
  257. package/src/types/ValueState.js +2 -1
  258. package/src/updateShadowRoot.js +30 -0
  259. package/src/util/AriaLabelHelper.js +41 -0
  260. package/src/util/Caret.js +45 -0
  261. package/src/util/ColorConversion.js +370 -0
  262. package/src/util/FocusableElements.js +30 -11
  263. package/src/util/HTMLSanitizer.js +7 -0
  264. package/src/util/InvisibleMessage.js +60 -0
  265. package/src/util/PopupUtils.js +93 -0
  266. package/src/util/SlotsHelper.js +43 -0
  267. package/src/util/StringHelper.js +17 -2
  268. package/src/util/TabbableElements.js +9 -2
  269. package/src/util/arraysAreEqual.js +15 -0
  270. package/src/util/clamp.js +12 -0
  271. package/src/util/createLinkInHead.js +19 -0
  272. package/src/util/debounce.js +17 -0
  273. package/src/util/detectNavigatorLanguage.js +3 -1
  274. package/src/util/escapeRegex.js +10 -0
  275. package/src/util/findNodeOwner.js +35 -0
  276. package/src/util/generateHighlightedMarkup.js +42 -0
  277. package/src/util/getActiveElement.js +11 -0
  278. package/src/util/getClassCopy.js +10 -0
  279. package/src/util/getEffectiveContentDensity.js +5 -0
  280. package/src/util/getFileExtension.js +21 -0
  281. package/src/util/getNormalizedTarget.js +16 -0
  282. package/src/util/getSingletonElementInstance.js +13 -0
  283. package/src/util/isElementInView.js +15 -0
  284. package/src/util/isNodeHidden.js +1 -5
  285. package/src/util/isNodeTabbable.js +4 -4
  286. package/src/util/isValidPropertyName.js +11 -2
  287. package/src/util/setToArray.js +10 -0
  288. package/used-modules.txt +10 -0
  289. package/bundle.es5.js +0 -28
  290. package/dist/Assets.js +0 -2
  291. package/dist/CSS.js +0 -48
  292. package/dist/FormatSettings.js +0 -31
  293. package/dist/LocaleProvider.js +0 -34
  294. package/dist/ResourceLoaderOverrides.js +0 -38
  295. package/dist/SVGIconRegistry.js +0 -54
  296. package/dist/boot.js +0 -25
  297. package/dist/compatibility/DOMObserver.js +0 -62
  298. package/dist/compatibility/patchNodeValue.js +0 -24
  299. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  300. package/dist/dates/CalendarDate.js +0 -203
  301. package/dist/dates/CalendarUtils.js +0 -99
  302. package/dist/delegate/CustomResize.js +0 -78
  303. package/dist/delegate/NativeResize.js +0 -44
  304. package/dist/events/PseudoEvents.js +0 -58
  305. package/dist/features/browsersupport/Edge.js +0 -6
  306. package/dist/features/browsersupport/IE11.js +0 -41
  307. package/dist/features/calendar/Buddhist.js +0 -1
  308. package/dist/features/calendar/Islamic.js +0 -1
  309. package/dist/features/calendar/Japanese.js +0 -1
  310. package/dist/features/calendar/Persian.js +0 -1
  311. package/dist/generated/assets/cldr/sap/ui/core/cldr/ar.json +0 -5598
  312. package/dist/generated/assets/cldr/sap/ui/core/cldr/ar_EG.json +0 -5598
  313. package/dist/generated/assets/cldr/sap/ui/core/cldr/ar_SA.json +0 -5598
  314. package/dist/generated/assets/cldr/sap/ui/core/cldr/bg.json +0 -4789
  315. package/dist/generated/assets/cldr/sap/ui/core/cldr/ca.json +0 -4801
  316. package/dist/generated/assets/cldr/sap/ui/core/cldr/cs.json +0 -5245
  317. package/dist/generated/assets/cldr/sap/ui/core/cldr/da.json +0 -4696
  318. package/dist/generated/assets/cldr/sap/ui/core/cldr/de.json +0 -4797
  319. package/dist/generated/assets/cldr/sap/ui/core/cldr/de_AT.json +0 -4798
  320. package/dist/generated/assets/cldr/sap/ui/core/cldr/de_CH.json +0 -4796
  321. package/dist/generated/assets/cldr/sap/ui/core/cldr/el.json +0 -4694
  322. package/dist/generated/assets/cldr/sap/ui/core/cldr/el_CY.json +0 -4694
  323. package/dist/generated/assets/cldr/sap/ui/core/cldr/en.json +0 -4777
  324. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_AU.json +0 -4769
  325. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_GB.json +0 -4778
  326. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_HK.json +0 -4784
  327. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_IE.json +0 -4778
  328. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_IN.json +0 -4779
  329. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_NZ.json +0 -4778
  330. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_PG.json +0 -4779
  331. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_SG.json +0 -4780
  332. package/dist/generated/assets/cldr/sap/ui/core/cldr/en_ZA.json +0 -4779
  333. package/dist/generated/assets/cldr/sap/ui/core/cldr/es.json +0 -4719
  334. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_AR.json +0 -4721
  335. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_BO.json +0 -4720
  336. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_CL.json +0 -4721
  337. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_CO.json +0 -4721
  338. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_MX.json +0 -4722
  339. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_PE.json +0 -4720
  340. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_UY.json +0 -4722
  341. package/dist/generated/assets/cldr/sap/ui/core/cldr/es_VE.json +0 -4721
  342. package/dist/generated/assets/cldr/sap/ui/core/cldr/et.json +0 -4776
  343. package/dist/generated/assets/cldr/sap/ui/core/cldr/fa.json +0 -4704
  344. package/dist/generated/assets/cldr/sap/ui/core/cldr/fi.json +0 -4816
  345. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr.json +0 -4788
  346. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_BE.json +0 -4788
  347. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_CA.json +0 -4782
  348. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_CH.json +0 -4806
  349. package/dist/generated/assets/cldr/sap/ui/core/cldr/fr_LU.json +0 -4788
  350. package/dist/generated/assets/cldr/sap/ui/core/cldr/he.json +0 -5133
  351. package/dist/generated/assets/cldr/sap/ui/core/cldr/hi.json +0 -4680
  352. package/dist/generated/assets/cldr/sap/ui/core/cldr/hr.json +0 -4910
  353. package/dist/generated/assets/cldr/sap/ui/core/cldr/hu.json +0 -4664
  354. package/dist/generated/assets/cldr/sap/ui/core/cldr/id.json +0 -4500
  355. package/dist/generated/assets/cldr/sap/ui/core/cldr/it.json +0 -4757
  356. package/dist/generated/assets/cldr/sap/ui/core/cldr/it_CH.json +0 -4757
  357. package/dist/generated/assets/cldr/sap/ui/core/cldr/ja.json +0 -4599
  358. package/dist/generated/assets/cldr/sap/ui/core/cldr/kk.json +0 -4537
  359. package/dist/generated/assets/cldr/sap/ui/core/cldr/ko.json +0 -4574
  360. package/dist/generated/assets/cldr/sap/ui/core/cldr/lt.json +0 -5234
  361. package/dist/generated/assets/cldr/sap/ui/core/cldr/lv.json +0 -4902
  362. package/dist/generated/assets/cldr/sap/ui/core/cldr/ms.json +0 -4352
  363. package/dist/generated/assets/cldr/sap/ui/core/cldr/nb.json +0 -4784
  364. package/dist/generated/assets/cldr/sap/ui/core/cldr/nl.json +0 -4790
  365. package/dist/generated/assets/cldr/sap/ui/core/cldr/nl_BE.json +0 -4790
  366. package/dist/generated/assets/cldr/sap/ui/core/cldr/pl.json +0 -5223
  367. package/dist/generated/assets/cldr/sap/ui/core/cldr/pt.json +0 -4703
  368. package/dist/generated/assets/cldr/sap/ui/core/cldr/pt_PT.json +0 -4753
  369. package/dist/generated/assets/cldr/sap/ui/core/cldr/ro.json +0 -4881
  370. package/dist/generated/assets/cldr/sap/ui/core/cldr/ru.json +0 -5157
  371. package/dist/generated/assets/cldr/sap/ui/core/cldr/ru_UA.json +0 -5157
  372. package/dist/generated/assets/cldr/sap/ui/core/cldr/sk.json +0 -5125
  373. package/dist/generated/assets/cldr/sap/ui/core/cldr/sl.json +0 -5105
  374. package/dist/generated/assets/cldr/sap/ui/core/cldr/sr.json +0 -4908
  375. package/dist/generated/assets/cldr/sap/ui/core/cldr/sv.json +0 -4818
  376. package/dist/generated/assets/cldr/sap/ui/core/cldr/th.json +0 -4633
  377. package/dist/generated/assets/cldr/sap/ui/core/cldr/tr.json +0 -4791
  378. package/dist/generated/assets/cldr/sap/ui/core/cldr/uk.json +0 -5126
  379. package/dist/generated/assets/cldr/sap/ui/core/cldr/vi.json +0 -4510
  380. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_CN.json +0 -4469
  381. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_HK.json +0 -4479
  382. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_SG.json +0 -4479
  383. package/dist/generated/assets/cldr/sap/ui/core/cldr/zh_TW.json +0 -4565
  384. package/dist/json-imports/LocaleData.js +0 -171
  385. package/dist/renderer/ifDefined.js +0 -21
  386. package/dist/resources/bundle.es5.js +0 -12643
  387. package/dist/resources/bundle.es5.js.map +0 -1
  388. package/dist/shims/Core-shim.js +0 -52
  389. package/dist/shims/jquery-shim.js +0 -89
  390. package/dist/theming/StyleInjection.js +0 -67
  391. package/dist/thirdparty/Array.from.js +0 -16
  392. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  393. package/dist/thirdparty/Array.prototype.find.js +0 -46
  394. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  395. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  396. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  397. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  398. package/dist/thirdparty/Number.isInteger.js +0 -5
  399. package/dist/thirdparty/Number.isNaN.js +0 -1
  400. package/dist/thirdparty/Number.parseInt.js +0 -1
  401. package/dist/thirdparty/Object.assign.js +0 -31
  402. package/dist/thirdparty/Object.entries.js +0 -11
  403. package/dist/thirdparty/Symbol.js +0 -2
  404. package/dist/thirdparty/WeakSet.js +0 -27
  405. package/dist/thirdparty/events-polyfills.js +0 -89
  406. package/dist/thirdparty/fetch.js +0 -1
  407. package/dist/thirdparty/template.js +0 -600
  408. package/dist/util/CSSTransformUtils.js +0 -90
  409. package/dist/webcomponentsjs/LICENSE.md +0 -19
  410. package/dist/webcomponentsjs/README.md +0 -229
  411. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  412. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  413. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  414. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  415. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  416. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  417. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  418. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  419. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  420. package/dist/webcomponentsjs/package.json +0 -46
  421. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  422. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  423. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  424. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  425. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  426. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  427. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  428. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  429. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  430. package/src/Assets.js +0 -2
  431. package/src/CSS.js +0 -48
  432. package/src/FormatSettings.js +0 -31
  433. package/src/LocaleProvider.js +0 -34
  434. package/src/ResourceLoaderOverrides.js +0 -38
  435. package/src/SVGIconRegistry.js +0 -54
  436. package/src/boot.js +0 -25
  437. package/src/compatibility/DOMObserver.js +0 -62
  438. package/src/compatibility/patchNodeValue.js +0 -24
  439. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  440. package/src/dates/CalendarDate.js +0 -203
  441. package/src/dates/CalendarUtils.js +0 -99
  442. package/src/delegate/CustomResize.js +0 -78
  443. package/src/delegate/NativeResize.js +0 -44
  444. package/src/events/PseudoEvents.js +0 -58
  445. package/src/features/browsersupport/Edge.js +0 -6
  446. package/src/features/browsersupport/IE11.js +0 -41
  447. package/src/features/calendar/Buddhist.js +0 -1
  448. package/src/features/calendar/Islamic.js +0 -1
  449. package/src/features/calendar/Japanese.js +0 -1
  450. package/src/features/calendar/Persian.js +0 -1
  451. package/src/json-imports/LocaleData.js +0 -171
  452. package/src/renderer/ifDefined.js +0 -21
  453. package/src/shims/Core-shim.js +0 -52
  454. package/src/shims/jquery-shim.js +0 -89
  455. package/src/theming/StyleInjection.js +0 -67
  456. package/src/thirdparty/Array.from.js +0 -16
  457. package/src/thirdparty/Array.prototype.fill.js +0 -44
  458. package/src/thirdparty/Array.prototype.find.js +0 -46
  459. package/src/thirdparty/Array.prototype.includes.js +0 -51
  460. package/src/thirdparty/Element.prototype.closest.js +0 -11
  461. package/src/thirdparty/Element.prototype.matches.js +0 -6
  462. package/src/thirdparty/Map.prototype.keys.js +0 -9
  463. package/src/thirdparty/Number.isInteger.js +0 -5
  464. package/src/thirdparty/Number.isNaN.js +0 -1
  465. package/src/thirdparty/Number.parseInt.js +0 -1
  466. package/src/thirdparty/Object.assign.js +0 -31
  467. package/src/thirdparty/Object.entries.js +0 -11
  468. package/src/thirdparty/Symbol.js +0 -2
  469. package/src/thirdparty/WeakSet.js +0 -27
  470. package/src/thirdparty/events-polyfills.js +0 -89
  471. package/src/thirdparty/fetch.js +0 -1
  472. package/src/thirdparty/template.js +0 -600
  473. package/src/util/CSSTransformUtils.js +0 -90
@@ -1,48 +1,65 @@
1
- import UI5Element from "../UI5Element.js";
2
1
  import isNodeHidden from "./isNodeHidden.js";
3
2
  import isNodeClickable from "./isNodeClickable.js";
4
3
 
5
- const getFirstFocusableElement = container => {
4
+ const isFocusTrap = el => {
5
+ return el.hasAttribute("data-ui5-focus-trap");
6
+ };
7
+
8
+ const getFirstFocusableElement = async (container, startFromContainer) => {
6
9
  if (!container || isNodeHidden(container)) {
7
10
  return null;
8
11
  }
9
12
 
10
- return findFocusableElement(container, true);
13
+ return findFocusableElement(container, true, startFromContainer);
11
14
  };
12
15
 
13
- const getLastFocusableElement = container => {
16
+ const getLastFocusableElement = async (container, startFromContainer) => {
14
17
  if (!container || isNodeHidden(container)) {
15
18
  return null;
16
19
  }
17
20
 
18
- return findFocusableElement(container, false);
21
+ return findFocusableElement(container, false, startFromContainer);
19
22
  };
20
23
 
21
- 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) => {
22
29
  let child;
23
- if (container.assignedNodes && container.assignedNodes()) {
30
+
31
+ if (container.shadowRoot) {
32
+ child = forward ? container.shadowRoot.firstChild : container.shadowRoot.lastChild;
33
+ } else if (container.assignedNodes && container.assignedNodes()) {
24
34
  const assignedElements = container.assignedNodes();
25
35
  child = forward ? assignedElements[0] : assignedElements[assignedElements.length - 1];
36
+ } else if (startFromContainer) {
37
+ child = container;
26
38
  } else {
27
- child = forward ? container.firstChild : container.lastChild;
39
+ child = forward ? container.firstElementChild : container.lastElementChild;
28
40
  }
29
41
 
30
42
  let focusableDescendant;
31
43
 
44
+ /* eslint-disable no-await-in-loop */
45
+
32
46
  while (child) {
33
47
  const originalChild = child;
34
48
 
35
- child = child instanceof UI5Element ? child.getFocusDomRef() : child;
49
+ if (child.isUI5Element) {
50
+ child = await child.getFocusDomRefAsync();
51
+ }
52
+
36
53
  if (!child) {
37
54
  return null;
38
55
  }
39
56
 
40
- if (child.nodeType === 1 && !isNodeHidden(child)) {
57
+ if (child.nodeType === 1 && isElemFocusable(child) && !isFocusTrap(child)) {
41
58
  if (isNodeClickable(child)) {
42
59
  return (child && typeof child.focus === "function") ? child : null;
43
60
  }
44
61
 
45
- focusableDescendant = findFocusableElement(child, forward);
62
+ focusableDescendant = await findFocusableElement(child, forward);
46
63
  if (focusableDescendant) {
47
64
  return (focusableDescendant && typeof focusableDescendant.focus === "function") ? focusableDescendant : null;
48
65
  }
@@ -51,6 +68,8 @@ const findFocusableElement = (container, forward) => {
51
68
  child = forward ? originalChild.nextSibling : originalChild.previousSibling;
52
69
  }
53
70
 
71
+ /* eslint-enable no-await-in-loop */
72
+
54
73
  return null;
55
74
  };
56
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,60 @@
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
+ */
47
+ const announce = (message, mode) => {
48
+ // If no type is presented, fallback to polite announcement.
49
+ const span = mode === InvisibleMessageMode.Assertive ? assertiveSpan : politeSpan;
50
+
51
+ // Set textContent to empty string in order to trigger screen reader's announcement.
52
+ span.textContent = "";
53
+ span.textContent = message;
54
+
55
+ if (mode !== InvisibleMessageMode.Assertive && mode !== InvisibleMessageMode.Polite) {
56
+ 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
57
+ }
58
+ };
59
+
60
+ 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
+ };
@@ -1,6 +1,21 @@
1
- const kebabToCamelCase = string => toCamelCase(string.split("-"));
1
+ const kebabToCamelMap = new Map();
2
+ const camelToKebabMap = new Map();
2
3
 
3
- const camelToKebabCase = string => string.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
4
+ const kebabToCamelCase = string => {
5
+ if (!kebabToCamelMap.has(string)) {
6
+ const result = toCamelCase(string.split("-"));
7
+ kebabToCamelMap.set(string, result);
8
+ }
9
+ return kebabToCamelMap.get(string);
10
+ };
11
+
12
+ const camelToKebabCase = string => {
13
+ if (!camelToKebabMap.has(string)) {
14
+ const result = string.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
15
+ camelToKebabMap.set(string, result);
16
+ }
17
+ return camelToKebabMap.get(string);
18
+ };
4
19
 
5
20
  const toCamelCase = parts => {
6
21
  return parts.map((string, index) => {
@@ -1,4 +1,3 @@
1
-
2
1
  import isNodeTabbable from "./isNodeTabbable.js";
3
2
 
4
3
  const getTabbableElements = node => {
@@ -13,8 +12,12 @@ const getLastTabbableElement = node => {
13
12
  const getTabbables = (nodes, tabbables) => {
14
13
  const tabbablesNodes = tabbables || [];
15
14
 
15
+ if (!nodes) {
16
+ return tabbablesNodes;
17
+ }
18
+
16
19
  Array.from(nodes).forEach(currentNode => {
17
- if (currentNode.nodeType === Node.TEXT_NODE) {
20
+ if (currentNode.nodeType === Node.TEXT_NODE || currentNode.nodeType === Node.COMMENT_NODE || currentNode.hasAttribute("data-sap-no-tab-ref")) {
18
21
  return;
19
22
  }
20
23
 
@@ -24,6 +27,10 @@ const getTabbables = (nodes, tabbables) => {
24
27
  currentNode = Array.from(children).find(node => node.tagName !== "STYLE");
25
28
  }
26
29
 
30
+ if (!currentNode) {
31
+ return;
32
+ }
33
+
27
34
  if (isNodeTabbable(currentNode)) {
28
35
  tabbablesNodes.push(currentNode);
29
36
  }
@@ -0,0 +1,15 @@
1
+ const arraysAreEqual = (arr1, arr2) => {
2
+ if (arr1.length !== arr2.length) {
3
+ return false;
4
+ }
5
+
6
+ for (let i = 0; i < arr1.length; i++) {
7
+ if (arr1[i] !== arr2[i]) {
8
+ return false;
9
+ }
10
+ }
11
+
12
+ return true;
13
+ };
14
+
15
+ export default arraysAreEqual;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Returns a value clamped between an upper bound 'max' and lower bound 'min'.
3
+ * @param {number} val value
4
+ * @param {number} min lower bound
5
+ * @param {number} max upper bound
6
+ * @returns {number}
7
+ */
8
+ const clamp = (val, min, max) => {
9
+ return Math.min(Math.max(val, min), max);
10
+ };
11
+
12
+ export default clamp;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Creates a <link> tag in the <head> tag
3
+ * @param href - the CSS
4
+ * @param attributes - optional attributes to add to the tag
5
+ * @returns {HTMLElement}
6
+ */
7
+ const createLinkInHead = (href, attributes = {}) => {
8
+ const link = document.createElement("link");
9
+ link.type = "text/css";
10
+ link.rel = "stylesheet";
11
+
12
+ Object.entries(attributes).forEach(pair => link.setAttribute(...pair));
13
+
14
+ link.href = href;
15
+ document.head.appendChild(link);
16
+ return link;
17
+ };
18
+
19
+ export default createLinkInHead;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Delays function execution by given threshold.
3
+ * @param fn {Function}
4
+ * @param delay {Integer}
5
+ */
6
+
7
+ let debounceInterval = null;
8
+
9
+ const debounce = (fn, delay) => {
10
+ clearTimeout(debounceInterval);
11
+ debounceInterval = setTimeout(() => {
12
+ debounceInterval = null;
13
+ fn();
14
+ }, delay);
15
+ };
16
+
17
+ export default debounce;
@@ -1,3 +1,5 @@
1
+ import { DEFAULT_LANGUAGE } from "../generated/AssetParameters.js";
2
+
1
3
  export default () => {
2
4
  const browserLanguages = navigator.languages;
3
5
 
@@ -7,5 +9,5 @@ export default () => {
7
9
 
8
10
  const rawLocale = (browserLanguages && browserLanguages[0]) || navigatorLanguage() || navigator.userLanguage || navigator.browserLanguage;
9
11
 
10
- return rawLocale || "en";
12
+ return rawLocale || DEFAULT_LANGUAGE;
11
13
  };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Escape a regular expression text so that it can be used in a regular expression.
3
+ * @param {string} text The string to be interpreted literally
4
+ * @returns Regular expression string to pass to regex
5
+ */
6
+ function escapeRegex(text) {
7
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
8
+ }
9
+
10
+ export default escapeRegex;
@@ -0,0 +1,35 @@
1
+ const findNodeOwner = node => {
2
+ if (!(node instanceof HTMLElement)) {
3
+ throw new Error("Argument node should be of type HTMLElement");
4
+ }
5
+
6
+ const ownerTypes = [HTMLHtmlElement, HTMLIFrameElement];
7
+ let currentShadowRootFlag = true;
8
+ let currentCustomElementFlag = true;
9
+
10
+ while (node) {
11
+ if (node.toString() === "[object ShadowRoot]") {
12
+ // Web Component
13
+ // or the shadow root of web component with attached shadow root
14
+ if (currentShadowRootFlag) {
15
+ currentShadowRootFlag = false;
16
+ }
17
+ if (!currentCustomElementFlag && !currentShadowRootFlag) {
18
+ return node;
19
+ }
20
+ } else if (node.tagName && node.tagName.indexOf("-") > -1) {
21
+ if (currentCustomElementFlag) {
22
+ currentCustomElementFlag = false;
23
+ } else {
24
+ return node;
25
+ }
26
+ } else if (ownerTypes.indexOf(node.constructor) > -1) {
27
+ // Document or Iframe reached
28
+ return node;
29
+ }
30
+
31
+ node = node.parentNode || node.host;
32
+ }
33
+ };
34
+
35
+ export default findNodeOwner;
@@ -0,0 +1,42 @@
1
+ import escapeRegex from "./escapeRegex.js";
2
+ import encodeXML from "../sap/base/security/encodeXML.js";
3
+
4
+ // utility to replace all occurances of a string
5
+ function replaceAll(text, find, replace, caseInsensitive) {
6
+ return text.replace(new RegExp(escapeRegex(find), `${caseInsensitive ? "i" : ""}g`), replace);
7
+ }
8
+
9
+ /**
10
+ * Generate markup for a raw string where a particular text is wrapped with some tag, by default `<b>` (bold) tag.
11
+ * All inputs to this function are considered literal text, and special characters will always be escaped.
12
+ * @param {string} text The text to add highlighting to
13
+ * @param {string} textToHighlight The text which should be highlighted
14
+ * @return {string} the markup HTML which contains all occurrances of the input text surrounded with a `<b>` tag.
15
+ */
16
+ function generateHighlightedMarkup(text, textToHighlight) {
17
+ if (!text || !textToHighlight) {
18
+ return text;
19
+ }
20
+ // a token is some string that does not appear in either of the input strings
21
+ // repeat the token until it does not appear in the string
22
+ const makeToken = t => {
23
+ const [s, e] = t.split("");
24
+ while (text.indexOf(t) >= 0 || textToHighlight.indexOf(t) >= 0) {
25
+ t = `${s}${t}${e}`;
26
+ }
27
+ return t;
28
+ };
29
+ // It doesn't matter what characters are used as long as all 4 of them are unique
30
+ // And also that encodeXML will not change these characters
31
+ const openToken = makeToken("12");
32
+ const closeToken = makeToken("34");
33
+ // wrap every occurance of the textToHighlight using the open/close tokens (instead of markup at this point)
34
+ let result = encodeXML(replaceAll(text, textToHighlight, match => `${openToken}${match}${closeToken}`, true));
35
+ // now replace the open and close tokens with the markup that we expect
36
+ [[openToken, "<b>"], [closeToken, "</b>"]].forEach(([find, replace]) => {
37
+ result = replaceAll(result, find, replace);
38
+ });
39
+ return result;
40
+ }
41
+
42
+ export default generateHighlightedMarkup;
@@ -0,0 +1,11 @@
1
+ const getActiveElement = () => {
2
+ let element = document.activeElement;
3
+
4
+ while (element && element.shadowRoot && element.shadowRoot.activeElement) {
5
+ element = element.shadowRoot.activeElement;
6
+ }
7
+
8
+ return element;
9
+ };
10
+
11
+ export default getActiveElement;
@@ -0,0 +1,10 @@
1
+ const getClassCopy = (klass, constructorCallback) => {
2
+ return class classCopy extends klass {
3
+ constructor() {
4
+ super();
5
+ constructorCallback && constructorCallback();
6
+ }
7
+ };
8
+ };
9
+
10
+ export default getClassCopy;
@@ -0,0 +1,5 @@
1
+ const GLOBAL_CONTENT_DENSITY_CSS_VAR = "--_ui5_content_density";
2
+
3
+ const getEffectiveContentDensity = el => getComputedStyle(el).getPropertyValue(GLOBAL_CONTENT_DENSITY_CSS_VAR);
4
+
5
+ export default getEffectiveContentDensity;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * "" -> ""
3
+ * "noExtension" -> ""
4
+ * "file.txt" -> ".txt"
5
+ * "file.with.many.dots.doc" -> ".doc"
6
+ * ".gitignore" -> ""
7
+ *
8
+ * @param fileName - the file name
9
+ * @returns {string}
10
+ */
11
+ const getFileExtension = fileName => {
12
+ const dotPos = fileName.lastIndexOf(".");
13
+
14
+ if (dotPos < 1) {
15
+ return "";
16
+ }
17
+
18
+ return fileName.slice(dotPos);
19
+ };
20
+
21
+ export default getFileExtension;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Returns the normalized event target in cases when it has shadow root.
3
+ * @param {Object} target The original event target
4
+ * @returns {Object} The normalized target
5
+ */
6
+ const getNormalizedTarget = target => {
7
+ let element = target;
8
+
9
+ if (target.shadowRoot && target.shadowRoot.activeElement) {
10
+ element = target.shadowRoot.activeElement;
11
+ }
12
+
13
+ return element;
14
+ };
15
+
16
+ export default getNormalizedTarget;
@@ -0,0 +1,13 @@
1
+ const getSingletonElementInstance = (tag, parentElement = document.body) => {
2
+ let el = document.querySelector(tag);
3
+
4
+ if (el) {
5
+ return el;
6
+ }
7
+
8
+ el = document.createElement(tag);
9
+
10
+ return parentElement.insertBefore(el, parentElement.firstChild);
11
+ };
12
+
13
+ export default getSingletonElementInstance;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Determines if the element is within the viewport.
3
+ * @param el {HTMLElement}
4
+ */
5
+ const isElementInView = el => {
6
+ const rect = el.getBoundingClientRect();
7
+
8
+ return (
9
+ rect.top >= 0 && rect.left >= 0
10
+ && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)
11
+ && rect.right <= (window.innerWidth || document.documentElement.clientWidth)
12
+ );
13
+ };
14
+
15
+ export default isElementInView;
@@ -3,11 +3,7 @@ const isNodeHidden = node => {
3
3
  return false;
4
4
  }
5
5
 
6
- const rect = node.getBoundingClientRect();
7
-
8
- return (node.offsetWidth <= 0 && node.offsetHeight <= 0)
9
- || node.style.visibility === "hidden"
10
- || (rect.width === 0 && 0 && rect.height === 0);
6
+ return (node.offsetWidth <= 0 && node.offsetHeight <= 0) || (node.style && node.style.visibility === "hidden");
11
7
  };
12
8
 
13
9
  export default isNodeHidden;
@@ -15,14 +15,14 @@ const isNodeTabbable = node => {
15
15
  return false;
16
16
  }
17
17
 
18
- if (nodeName === "a" || /input|select|textarea|button|object/.test(nodeName)) {
19
- return !node.disabled;
20
- }
21
-
22
18
  const tabIndex = node.getAttribute("tabindex");
23
19
  if (tabIndex !== null && tabIndex !== undefined) {
24
20
  return parseInt(tabIndex) >= 0;
25
21
  }
22
+
23
+ if (nodeName === "a" || /input|select|textarea|button|object/.test(nodeName)) {
24
+ return !node.disabled;
25
+ }
26
26
  };
27
27
 
28
28
  export default isNodeTabbable;
@@ -1,12 +1,21 @@
1
+ // Note: disabled is present in IE so we explicitly allow it here.
2
+ // Others, such as title/hidden, we explicitly override, so valid too
3
+ const allowList = [
4
+ "disabled",
5
+ "title",
6
+ "hidden",
7
+ "role",
8
+ "draggable",
9
+ ];
10
+
1
11
  /**
2
12
  * Checks whether a property name is valid (does not collide with existing DOM API properties)
3
- * Note: disabled is present in IE so we explicitly allow it here.
4
13
  *
5
14
  * @param name
6
15
  * @returns {boolean}
7
16
  */
8
17
  const isValidPropertyName = name => {
9
- if (name === "disabled") {
18
+ if (allowList.includes(name) || name.startsWith("aria")) {
10
19
  return true;
11
20
  }
12
21
  const classes = [