@ui5/webcomponents-base 0.0.0-e7dd012d7 → 0.0.0-e818f286e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +314 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +20 -20
  5. package/dist/AssetRegistry.js +8 -9
  6. package/dist/Boot.js +59 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsRegistry.js +60 -4
  9. package/dist/CustomElementsScope.js +20 -98
  10. package/dist/CustomElementsScopeUtils.js +108 -0
  11. package/dist/DOMObserver.js +65 -0
  12. package/dist/Device.js +71 -773
  13. package/dist/EventProvider.js +30 -26
  14. package/dist/FeaturesRegistry.js +4 -1
  15. package/dist/FontFace.js +7 -95
  16. package/dist/InitialConfiguration.js +37 -21
  17. package/dist/Keys.js +98 -0
  18. package/dist/ManagedStyles.js +83 -0
  19. package/dist/MediaRange.js +109 -0
  20. package/dist/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  21. package/dist/Render.js +175 -0
  22. package/dist/RenderScheduler.js +16 -138
  23. package/dist/Runtimes.js +107 -0
  24. package/dist/StaticArea.js +1 -29
  25. package/dist/StaticAreaItem.js +58 -65
  26. package/dist/SystemCSSVars.js +4 -25
  27. package/dist/UI5Element.js +315 -382
  28. package/dist/UI5ElementMetadata.js +132 -17
  29. package/dist/asset-registries/Icons.js +117 -14
  30. package/dist/asset-registries/Illustrations.js +30 -0
  31. package/dist/asset-registries/LocaleData.js +97 -68
  32. package/dist/asset-registries/Themes.js +29 -35
  33. package/dist/asset-registries/i18n.js +62 -49
  34. package/dist/assets/bundle.esm.81ba431e.js +43 -0
  35. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  36. package/dist/config/Icons.js +52 -0
  37. package/dist/config/Language.js +18 -20
  38. package/dist/config/Theme.js +25 -0
  39. package/dist/css/BusyIndicator.css +80 -0
  40. package/dist/css/FontFace.css +75 -0
  41. package/dist/css/OverrideFontFace.css +32 -0
  42. package/dist/css/SystemCSSVars.css +17 -0
  43. package/dist/delegate/ItemNavigation.js +238 -201
  44. package/dist/delegate/ResizeHandler.js +78 -37
  45. package/dist/delegate/ScrollEnablement.js +49 -20
  46. package/dist/features/F6Navigation.js +110 -0
  47. package/dist/features/OpenUI5Enablement.js +119 -0
  48. package/dist/features/OpenUI5Support.js +41 -6
  49. package/dist/generated/AssetParameters.js +1 -1
  50. package/dist/generated/VersionInfo.js +10 -0
  51. package/dist/generated/css/BusyIndicator.css.js +5 -0
  52. package/dist/generated/css/FontFace.css.js +5 -0
  53. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  54. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  55. package/dist/i18nBundle.js +38 -4
  56. package/dist/locale/applyDirection.js +6 -4
  57. package/dist/locale/directionChange.js +32 -0
  58. package/dist/locale/getEffectiveDir.js +28 -0
  59. package/dist/locale/languageChange.js +1 -1
  60. package/dist/renderer/LitRenderer.js +39 -18
  61. package/dist/renderer/directives/style-map.js +72 -0
  62. package/dist/renderer/executeTemplate.js +19 -2
  63. package/dist/sap/base/Log.js +241 -0
  64. package/dist/sap/base/assert.js +8 -0
  65. package/dist/sap/base/security/URLListValidator.js +148 -0
  66. package/dist/sap/base/security/encodeCSS.js +14 -0
  67. package/dist/sap/base/security/encodeXML.js +23 -0
  68. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  69. package/dist/sap/base/strings/toHex.js +8 -0
  70. package/dist/sap/base/util/now.js +7 -0
  71. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  72. package/dist/theming/CustomStyle.js +25 -5
  73. package/dist/theming/applyTheme.js +11 -16
  74. package/dist/theming/getConstructableStyle.js +7 -6
  75. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  76. package/dist/theming/getEffectiveStyle.js +24 -8
  77. package/dist/theming/getStylesString.js +4 -2
  78. package/dist/theming/getThemeDesignerTheme.js +25 -5
  79. package/dist/theming/preloadLinks.js +23 -0
  80. package/dist/types/CSSColor.js +9 -0
  81. package/dist/types/CalendarType.js +1 -1
  82. package/dist/types/DataType.js +13 -1
  83. package/dist/types/Float.js +4 -0
  84. package/dist/types/Integer.js +4 -0
  85. package/dist/types/InvisibleMessageMode.js +30 -0
  86. package/dist/types/ItemNavigationBehavior.js +2 -7
  87. package/dist/types/PopupState.js +1 -1
  88. package/dist/types/ValueState.js +1 -1
  89. package/dist/updateShadowRoot.js +29 -0
  90. package/dist/util/AriaLabelHelper.js +6 -8
  91. package/dist/util/Caret.js +32 -0
  92. package/dist/util/ColorConversion.js +398 -0
  93. package/dist/util/FocusableElements.js +22 -9
  94. package/dist/util/HTMLSanitizer.js +7 -0
  95. package/dist/util/InvisibleMessage.js +69 -0
  96. package/dist/util/PopupUtils.js +93 -0
  97. package/dist/util/SlotsHelper.js +43 -0
  98. package/dist/util/TabbableElements.js +5 -1
  99. package/dist/util/arraysAreEqual.js +15 -0
  100. package/dist/util/clamp.js +12 -0
  101. package/dist/util/createLinkInHead.js +19 -0
  102. package/dist/util/debounce.js +17 -0
  103. package/dist/util/escapeRegex.js +10 -0
  104. package/dist/util/generateHighlightedMarkup.js +42 -0
  105. package/dist/util/getActiveElement.js +11 -0
  106. package/dist/util/getClassCopy.js +10 -0
  107. package/dist/util/getEffectiveContentDensity.js +5 -0
  108. package/dist/util/getNormalizedTarget.js +16 -0
  109. package/dist/util/isDefaultSlotProvided.js +11 -0
  110. package/dist/util/isElementInView.js +15 -0
  111. package/dist/util/isNodeHidden.js +1 -1
  112. package/dist/util/isNodeTabbable.js +4 -4
  113. package/hash.txt +1 -0
  114. package/index.js +1 -1
  115. package/lib/generate-asset-parameters/index.js +8 -5
  116. package/lib/generate-styles/index.js +26 -0
  117. package/lib/generate-version-info/index.js +32 -0
  118. package/package-scripts.js +37 -28
  119. package/package.json +20 -13
  120. package/src/AssetRegistry.js +8 -9
  121. package/src/Boot.js +59 -0
  122. package/src/CSP.js +59 -0
  123. package/src/CustomElementsRegistry.js +60 -4
  124. package/src/CustomElementsScope.js +20 -98
  125. package/src/CustomElementsScopeUtils.js +108 -0
  126. package/src/DOMObserver.js +65 -0
  127. package/src/Device.js +71 -773
  128. package/src/EventProvider.js +30 -26
  129. package/src/FeaturesRegistry.js +4 -1
  130. package/src/FontFace.js +7 -95
  131. package/src/InitialConfiguration.js +37 -21
  132. package/src/Keys.js +98 -0
  133. package/src/ManagedStyles.js +83 -0
  134. package/src/MediaRange.js +109 -0
  135. package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  136. package/src/Render.js +175 -0
  137. package/src/RenderScheduler.js +16 -138
  138. package/src/Runtimes.js +107 -0
  139. package/src/StaticArea.js +1 -29
  140. package/src/StaticAreaItem.js +58 -65
  141. package/src/SystemCSSVars.js +4 -25
  142. package/src/UI5Element.js +315 -382
  143. package/src/UI5ElementMetadata.js +132 -17
  144. package/src/asset-registries/Icons.js +117 -14
  145. package/src/asset-registries/Illustrations.js +30 -0
  146. package/src/asset-registries/LocaleData.js +97 -68
  147. package/src/asset-registries/Themes.js +29 -35
  148. package/src/asset-registries/i18n.js +62 -49
  149. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  150. package/src/config/Icons.js +52 -0
  151. package/src/config/Language.js +18 -20
  152. package/src/config/Theme.js +25 -0
  153. package/src/css/BusyIndicator.css +80 -0
  154. package/src/css/FontFace.css +75 -0
  155. package/src/css/OverrideFontFace.css +32 -0
  156. package/src/css/SystemCSSVars.css +17 -0
  157. package/src/delegate/ItemNavigation.js +238 -201
  158. package/src/delegate/ResizeHandler.js +78 -37
  159. package/src/delegate/ScrollEnablement.js +49 -20
  160. package/src/features/F6Navigation.js +110 -0
  161. package/src/features/OpenUI5Enablement.js +119 -0
  162. package/src/features/OpenUI5Support.js +41 -6
  163. package/src/i18nBundle.js +38 -4
  164. package/src/locale/applyDirection.js +6 -4
  165. package/src/locale/directionChange.js +32 -0
  166. package/src/locale/getEffectiveDir.js +28 -0
  167. package/src/locale/languageChange.js +1 -1
  168. package/src/renderer/LitRenderer.js +39 -18
  169. package/src/renderer/directives/style-map.js +72 -0
  170. package/src/renderer/executeTemplate.js +19 -2
  171. package/src/theming/CustomStyle.js +25 -5
  172. package/src/theming/applyTheme.js +11 -16
  173. package/src/theming/getConstructableStyle.js +7 -6
  174. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  175. package/src/theming/getEffectiveStyle.js +24 -8
  176. package/src/theming/getStylesString.js +4 -2
  177. package/src/theming/getThemeDesignerTheme.js +25 -5
  178. package/src/theming/preloadLinks.js +23 -0
  179. package/src/types/CSSColor.js +9 -0
  180. package/src/types/CalendarType.js +1 -1
  181. package/src/types/DataType.js +13 -1
  182. package/src/types/Float.js +4 -0
  183. package/src/types/Integer.js +4 -0
  184. package/src/types/InvisibleMessageMode.js +30 -0
  185. package/src/types/ItemNavigationBehavior.js +2 -7
  186. package/src/types/PopupState.js +1 -1
  187. package/src/types/ValueState.js +1 -1
  188. package/src/updateShadowRoot.js +29 -0
  189. package/src/util/AriaLabelHelper.js +6 -8
  190. package/src/util/Caret.js +32 -0
  191. package/src/util/ColorConversion.js +398 -0
  192. package/src/util/FocusableElements.js +22 -9
  193. package/src/util/HTMLSanitizer.js +7 -0
  194. package/src/util/InvisibleMessage.js +69 -0
  195. package/src/util/PopupUtils.js +93 -0
  196. package/src/util/SlotsHelper.js +43 -0
  197. package/src/util/TabbableElements.js +5 -1
  198. package/src/util/arraysAreEqual.js +15 -0
  199. package/src/util/clamp.js +12 -0
  200. package/src/util/createLinkInHead.js +19 -0
  201. package/src/util/debounce.js +17 -0
  202. package/src/util/escapeRegex.js +10 -0
  203. package/src/util/generateHighlightedMarkup.js +42 -0
  204. package/src/util/getActiveElement.js +11 -0
  205. package/src/util/getClassCopy.js +10 -0
  206. package/src/util/getEffectiveContentDensity.js +5 -0
  207. package/src/util/getNormalizedTarget.js +16 -0
  208. package/src/util/isDefaultSlotProvided.js +11 -0
  209. package/src/util/isElementInView.js +15 -0
  210. package/src/util/isNodeHidden.js +1 -1
  211. package/src/util/isNodeTabbable.js +4 -4
  212. package/used-modules.txt +10 -0
  213. package/bundle.es5.js +0 -28
  214. package/config/.eslintrc.js +0 -3
  215. package/config/rollup.config.js +0 -1
  216. package/dist/SVGIconRegistry.js +0 -73
  217. package/dist/boot.js +0 -34
  218. package/dist/compatibility/DOMObserver.js +0 -62
  219. package/dist/compatibility/patchNodeValue.js +0 -24
  220. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  221. package/dist/config/AssetsPath.js +0 -17
  222. package/dist/delegate/CustomResize.js +0 -78
  223. package/dist/delegate/NativeResize.js +0 -45
  224. package/dist/features/PropertiesFormatSupport.js +0 -8
  225. package/dist/features/browsersupport/Edge.js +0 -6
  226. package/dist/features/browsersupport/IE11.js +0 -42
  227. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  228. package/dist/renderer/ifDefined.js +0 -21
  229. package/dist/renderer/scopeHTML.js +0 -32
  230. package/dist/resources/bundle.es5.js +0 -212
  231. package/dist/resources/bundle.es5.js.map +0 -1
  232. package/dist/resources/bundle.esm.js +0 -129
  233. package/dist/resources/bundle.esm.js.map +0 -1
  234. package/dist/test-resources/assets/Themes.js +0 -17
  235. package/dist/test-resources/elements/Child.js +0 -35
  236. package/dist/test-resources/elements/Generic.js +0 -84
  237. package/dist/test-resources/elements/GenericExt.js +0 -26
  238. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  239. package/dist/test-resources/elements/Parent.js +0 -37
  240. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  241. package/dist/test-resources/pages/AllTestElements.html +0 -42
  242. package/dist/test-resources/pages/Configuration.html +0 -20
  243. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  244. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  245. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  246. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  247. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  248. package/dist/test-resources/pages/i18n.html +0 -40
  249. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  250. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  251. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  252. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  253. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  254. package/dist/test-resources/specs/Theming.spec.js +0 -31
  255. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -258
  256. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -96
  257. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -101
  258. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  259. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  260. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  261. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  262. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  263. package/dist/theming/CSSVarsPonyfill.js +0 -68
  264. package/dist/theming/adaptCSSForIE.js +0 -95
  265. package/dist/theming/createComponentStyleTag.js +0 -54
  266. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  267. package/dist/thirdparty/Array.from.js +0 -16
  268. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  269. package/dist/thirdparty/Array.prototype.find.js +0 -46
  270. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  271. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  272. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  273. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  274. package/dist/thirdparty/Number.isInteger.js +0 -5
  275. package/dist/thirdparty/Number.isNaN.js +0 -1
  276. package/dist/thirdparty/Number.parseFloat.js +0 -1
  277. package/dist/thirdparty/Number.parseInt.js +0 -1
  278. package/dist/thirdparty/Object.assign.js +0 -31
  279. package/dist/thirdparty/Object.entries.js +0 -11
  280. package/dist/thirdparty/Symbol.js +0 -2
  281. package/dist/thirdparty/WeakSet.js +0 -27
  282. package/dist/thirdparty/es6-string-methods.js +0 -182
  283. package/dist/thirdparty/events-polyfills.js +0 -89
  284. package/dist/thirdparty/fetch.js +0 -1
  285. package/dist/thirdparty/template.js +0 -600
  286. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  287. package/dist/util/EffectiveAssetPath.js +0 -27
  288. package/dist/util/encodeCSS.js +0 -24
  289. package/dist/util/findNodeOwner.js +0 -35
  290. package/dist/util/isSlot.js +0 -3
  291. package/dist/webcomponentsjs/LICENSE.md +0 -19
  292. package/dist/webcomponentsjs/README.md +0 -229
  293. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  294. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  295. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  296. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  297. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  298. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  299. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  300. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  301. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  302. package/dist/webcomponentsjs/package.json +0 -46
  303. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  304. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  305. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  306. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  307. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  308. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  309. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  310. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  311. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  312. package/src/SVGIconRegistry.js +0 -73
  313. package/src/boot.js +0 -34
  314. package/src/compatibility/DOMObserver.js +0 -62
  315. package/src/compatibility/patchNodeValue.js +0 -24
  316. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  317. package/src/config/AssetsPath.js +0 -17
  318. package/src/delegate/CustomResize.js +0 -78
  319. package/src/delegate/NativeResize.js +0 -45
  320. package/src/features/PropertiesFormatSupport.js +0 -8
  321. package/src/features/browsersupport/Edge.js +0 -6
  322. package/src/features/browsersupport/IE11.js +0 -42
  323. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  324. package/src/renderer/ifDefined.js +0 -21
  325. package/src/renderer/scopeHTML.js +0 -32
  326. package/src/theming/CSSVarsPonyfill.js +0 -68
  327. package/src/theming/adaptCSSForIE.js +0 -95
  328. package/src/theming/createComponentStyleTag.js +0 -54
  329. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  330. package/src/thirdparty/Array.from.js +0 -16
  331. package/src/thirdparty/Array.prototype.fill.js +0 -44
  332. package/src/thirdparty/Array.prototype.find.js +0 -46
  333. package/src/thirdparty/Array.prototype.includes.js +0 -51
  334. package/src/thirdparty/Element.prototype.closest.js +0 -11
  335. package/src/thirdparty/Element.prototype.matches.js +0 -6
  336. package/src/thirdparty/Map.prototype.keys.js +0 -9
  337. package/src/thirdparty/Number.isInteger.js +0 -5
  338. package/src/thirdparty/Number.isNaN.js +0 -1
  339. package/src/thirdparty/Number.parseFloat.js +0 -1
  340. package/src/thirdparty/Number.parseInt.js +0 -1
  341. package/src/thirdparty/Object.assign.js +0 -31
  342. package/src/thirdparty/Object.entries.js +0 -11
  343. package/src/thirdparty/Symbol.js +0 -2
  344. package/src/thirdparty/WeakSet.js +0 -27
  345. package/src/thirdparty/es6-string-methods.js +0 -182
  346. package/src/thirdparty/events-polyfills.js +0 -89
  347. package/src/thirdparty/fetch.js +0 -1
  348. package/src/thirdparty/template.js +0 -600
  349. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  350. package/src/util/EffectiveAssetPath.js +0 -27
  351. package/src/util/encodeCSS.js +0 -24
  352. package/src/util/findNodeOwner.js +0 -35
  353. package/src/util/isSlot.js +0 -3
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle.esm.js","sources":["../FeaturesRegistry.js","../generated/AssetParameters.js","../util/detectNavigatorLanguage.js","../thirdparty/isPlainObject.js","../thirdparty/_merge.js","../thirdparty/merge.js","../InitialConfiguration.js","../EventProvider.js","../locale/languageChange.js","../util/setToArray.js","../CustomElementsRegistry.js","../locale/RTLAwareRegistry.js","../RenderScheduler.js","../RenderQueue.js","../config/Language.js","../locale/Locale.js","../locale/getLocale.js","../util/FetchHelper.js","../locale/normalizeLocale.js","../locale/nextFallbackLocale.js","../config/AssetsPath.js","../util/EffectiveAssetPath.js","../asset-registries/i18n.js","../asset-registries/LocaleData.js","../util/getFileExtension.js","../asset-registries/Themes.js","../../../../node_modules/url-search-params-polyfill/index.js","../compatibility/patchNodeValue.js","../util/createStyleInHead.js","../theming/createThemePropertiesStyleTag.js","../theming/getThemeDesignerTheme.js","../theming/CSSVarsPonyfill.js","../theming/ThemeLoaded.js","../theming/applyTheme.js","../config/Theme.js","../features/OpenUI5Support.js","../util/whenDOMReady.js","../FontFace.js","../compatibility/whenPolyfillLoaded.js","../boot.js","../SystemCSSVars.js","../types/DataType.js","../util/isDescendantOf.js","../util/StringHelper.js","../util/isSlot.js","../CustomElementsScope.js","../UI5ElementMetadata.js","../renderer/executeTemplate.js","../util/getSingletonElementInstance.js","../StaticArea.js","../theming/getStylesString.js","../StaticAreaItem.js","../compatibility/DOMObserver.js","../config/NoConflict.js","../config/RTL.js","../util/getDesigntimePropertyAsArray.js","../theming/CustomStyle.js","../theming/getEffectiveStyle.js","../theming/getConstructableStyle.js","../theming/adaptCSSForIE.js","../theming/createComponentStyleTag.js","../types/Integer.js","../types/Float.js","../util/isValidPropertyName.js","../UI5Element.js","../../../../node_modules/lit-html/lib/directive.js","../../../../node_modules/lit-html/lib/dom.js","../../../../node_modules/lit-html/lib/part.js","../../../../node_modules/lit-html/lib/template.js","../../../../node_modules/lit-html/lib/template-instance.js","../../../../node_modules/lit-html/lib/template-result.js","../../../../node_modules/lit-html/lib/parts.js","../../../../node_modules/lit-html/lib/default-template-processor.js","../../../../node_modules/lit-html/lib/template-factory.js","../../../../node_modules/lit-html/lib/render.js","../../../../node_modules/lit-html/lit-html.js","../renderer/scopeHTML.js","../renderer/LitRenderer.js","../test-resources/elements/Generic.js","../test-resources/elements/NoShadowDOM.js","../test-resources/elements/Parent.js","../test-resources/elements/Child.js","../test-resources/elements/WithStaticArea.js","../test-resources/elements/GenericExt.js","../test-resources/assets/Themes.js","../Device.js","../util/parseProperties.js","../features/PropertiesFormatSupport.js","../util/formatMessage.js","../i18nBundle.js","../config/AnimationMode.js","../types/CalendarType.js","../config/CalendarType.js","../config/FormatSettings.js","../getSharedResource.js","../SVGIconRegistry.js","../../bundle.esm.js"],"sourcesContent":["const features = new Map();\n\nconst registerFeature = (name, feature) => {\n\tfeatures.set(name, feature);\n};\n\nconst getFeature = name => {\n\treturn features.get(name);\n};\n\nexport { registerFeature, getFeature };\n","const assetParameters = {\"themes\":{\"default\":\"sap_fiori_3\",\"all\":[\"sap_fiori_3\",\"sap_fiori_3_dark\",\"sap_belize\",\"sap_belize_hcb\",\"sap_belize_hcw\",\"sap_fiori_3_hcb\",\"sap_fiori_3_hcw\"]},\"languages\":{\"default\":\"en\",\"all\":[\"ar\",\"bg\",\"ca\",\"cs\",\"da\",\"de\",\"el\",\"en\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"it\",\"iw\",\"ja\",\"kk\",\"ko\",\"lt\",\"lv\",\"ms\",\"nl\",\"no\",\"pl\",\"pt\",\"ro\",\"ru\",\"sh\",\"sk\",\"sl\",\"sv\",\"th\",\"tr\",\"uk\",\"vi\",\"zh_CN\",\"zh_TW\"]},\"locales\":{\"default\":\"en\",\"all\":[\"ar\",\"ar_EG\",\"ar_SA\",\"bg\",\"ca\",\"cs\",\"da\",\"de\",\"de_AT\",\"de_CH\",\"el\",\"el_CY\",\"en\",\"en_AU\",\"en_GB\",\"en_HK\",\"en_IE\",\"en_IN\",\"en_NZ\",\"en_PG\",\"en_SG\",\"en_ZA\",\"es\",\"es_AR\",\"es_BO\",\"es_CL\",\"es_CO\",\"es_MX\",\"es_PE\",\"es_UY\",\"es_VE\",\"et\",\"fa\",\"fi\",\"fr\",\"fr_BE\",\"fr_CA\",\"fr_CH\",\"fr_LU\",\"he\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"it_CH\",\"ja\",\"kk\",\"ko\",\"lt\",\"lv\",\"ms\",\"nb\",\"nl\",\"nl_BE\",\"pl\",\"pt\",\"pt_PT\",\"ro\",\"ru\",\"ru_UA\",\"sk\",\"sl\",\"sr\",\"sv\",\"th\",\"tr\",\"uk\",\"vi\",\"zh_CN\",\"zh_HK\",\"zh_SG\",\"zh_TW\"]}};\n\nconst DEFAULT_THEME = assetParameters.themes.default;\nconst DEFAULT_LANGUAGE = assetParameters.languages.default;\nconst DEFAULT_LOCALE = assetParameters.locales.default;\nconst SUPPORTED_LOCALES = assetParameters.locales.all;\n\nexport {\n\tDEFAULT_THEME,\n\tDEFAULT_LANGUAGE,\n\tDEFAULT_LOCALE,\n\tSUPPORTED_LOCALES,\n};","import { DEFAULT_LANGUAGE } from \"../generated/AssetParameters.js\";\n\nexport default () => {\n\tconst browserLanguages = navigator.languages;\n\n\tconst navigatorLanguage = () => {\n\t\treturn navigator.language;\n\t};\n\n\tconst rawLocale = (browserLanguages && browserLanguages[0]) || navigatorLanguage() || navigator.userLanguage || navigator.browserLanguage;\n\n\treturn rawLocale || DEFAULT_LANGUAGE;\n};\n","var class2type = {};\nvar hasOwn = class2type.hasOwnProperty;\nvar toString = class2type.toString;\nvar fnToString = hasOwn.toString;\nvar ObjectFunctionString = fnToString.call(Object);\nvar fnIsPlainObject = function (obj) {\n var proto, Ctor;\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n proto = Object.getPrototypeOf(obj);\n if (!proto) {\n return true;\n }\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n};\nexport default fnIsPlainObject;\n","import isPlainObject from './isPlainObject.js';\nvar oToken = Object.create(null);\nvar fnMerge = function () {\n var src, copyIsArray, copy, name, options, clone, target = arguments[2] || {}, i = 3, length = arguments.length, deep = arguments[0] || false, skipToken = arguments[1] ? undefined : oToken;\n if (typeof target !== 'object' && typeof target !== 'function') {\n target = {};\n }\n for (; i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n src = target[name];\n copy = options[name];\n if (name === '__proto__' || target === copy) {\n continue;\n }\n if (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n } else {\n clone = src && isPlainObject(src) ? src : {};\n }\n target[name] = fnMerge(deep, arguments[1], clone, copy);\n } else if (copy !== skipToken) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n};\nexport default fnMerge;","import _merge from './_merge.js';\nvar fnMerge = function () {\n var args = [\n true,\n false\n ];\n args.push.apply(args, arguments);\n return _merge.apply(null, args);\n};\nexport default fnMerge;","import merge from \"./thirdparty/merge.js\";\nimport { getFeature } from \"./FeaturesRegistry.js\";\nimport { DEFAULT_THEME } from \"./generated/AssetParameters.js\";\n\nlet initialized = false;\n\nlet initialConfig = {\n\tanimationMode: \"full\",\n\ttheme: DEFAULT_THEME,\n\trtl: null,\n\tlanguage: null,\n\tcalendarType: null,\n\tnoConflict: false, // no URL\n\tformatSettings: {},\n\tuseDefaultLanguage: false,\n\tassetsPath: \"\",\n};\n\n/* General settings */\nconst getAnimationMode = () => {\n\tinitConfiguration();\n\treturn initialConfig.animationMode;\n};\n\nconst getTheme = () => {\n\tinitConfiguration();\n\treturn initialConfig.theme;\n};\n\nconst getRTL = () => {\n\tinitConfiguration();\n\treturn initialConfig.rtl;\n};\n\nconst getLanguage = () => {\n\tinitConfiguration();\n\treturn initialConfig.language;\n};\n\n/**\n * Returns if the default language, that is inlined build time,\n * should be used, instead of trying fetching the language over the network.\n * @returns {Boolean}\n */\nconst getUseDefaultLanguage = () => {\n\tinitConfiguration();\n\treturn initialConfig.useDefaultLanguage;\n};\n\nconst getNoConflict = () => {\n\tinitConfiguration();\n\treturn initialConfig.noConflict;\n};\n\nconst getCalendarType = () => {\n\tinitConfiguration();\n\treturn initialConfig.calendarType;\n};\n\nconst getFormatSettings = () => {\n\tinitConfiguration();\n\treturn initialConfig.formatSettings;\n};\n\nconst getAssetsPath = () => {\n\tinitConfiguration();\n\treturn initialConfig.assetsPath;\n};\n\nconst booleanMapping = new Map();\nbooleanMapping.set(\"true\", true);\nbooleanMapping.set(\"false\", false);\n\nconst parseConfigurationScript = () => {\n\tconst configScript = document.querySelector(\"[data-ui5-config]\") || document.querySelector(\"[data-id='sap-ui-config']\"); // for backward compatibility\n\n\tlet configJSON;\n\n\tif (configScript) {\n\t\ttry {\n\t\t\tconfigJSON = JSON.parse(configScript.innerHTML);\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"Incorrect data-sap-ui-config format. Please use JSON\"); /* eslint-disable-line */\n\t\t}\n\n\t\tif (configJSON) {\n\t\t\tinitialConfig = merge(initialConfig, configJSON);\n\t\t}\n\t}\n};\n\nconst parseURLParameters = () => {\n\tconst params = new URLSearchParams(window.location.search);\n\n\tparams.forEach((value, key) => {\n\t\tif (!key.startsWith(\"sap-ui\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lowerCaseValue = value.toLowerCase();\n\n\t\tconst param = key.split(\"sap-ui-\")[1];\n\n\t\tif (booleanMapping.has(value)) {\n\t\t\tvalue = booleanMapping.get(lowerCaseValue);\n\t\t}\n\n\t\tinitialConfig[param] = value;\n\t});\n};\n\nconst applyOpenUI5Configuration = () => {\n\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\tif (!OpenUI5Support || !OpenUI5Support.isLoaded()) {\n\t\treturn;\n\t}\n\n\tconst OpenUI5Config = OpenUI5Support.getConfigurationSettingsObject();\n\tinitialConfig = merge(initialConfig, OpenUI5Config);\n};\n\n\nconst initConfiguration = () => {\n\tif (initialized) {\n\t\treturn;\n\t}\n\n\t// 1. Lowest priority - configuration script\n\tparseConfigurationScript();\n\n\t// 2. URL parameters overwrite configuration script parameters\n\tparseURLParameters();\n\n\t// 3. If OpenUI5 is detected, it has the highest priority\n\tapplyOpenUI5Configuration();\n\n\tinitialized = true;\n};\n\nexport {\n\tgetAnimationMode,\n\tgetTheme,\n\tgetRTL,\n\tgetLanguage,\n\tgetUseDefaultLanguage,\n\tgetNoConflict,\n\tgetCalendarType,\n\tgetFormatSettings,\n\tgetAssetsPath,\n};\n","class EventProvider {\n\tconstructor() {\n\t\tthis._eventRegistry = {};\n\t}\n\n\tattachEvent(eventName, fnFunction) {\n\t\tconst eventRegistry = this._eventRegistry;\n\t\tlet eventListeners = eventRegistry[eventName];\n\n\t\tif (!Array.isArray(eventListeners)) {\n\t\t\teventRegistry[eventName] = [];\n\t\t\teventListeners = eventRegistry[eventName];\n\t\t}\n\n\t\teventListeners.push({\n\t\t\t\"function\": fnFunction,\n\t\t});\n\t}\n\n\tdetachEvent(eventName, fnFunction) {\n\t\tconst eventRegistry = this._eventRegistry;\n\t\tlet eventListeners = eventRegistry[eventName];\n\n\t\tif (!eventListeners) {\n\t\t\treturn;\n\t\t}\n\n\t\teventListeners = eventListeners.filter(event => {\n\t\t\treturn event[\"function\"] !== fnFunction; // eslint-disable-line\n\t\t});\n\n\t\tif (eventListeners.length === 0) {\n\t\t\tdelete eventRegistry[eventName];\n\t\t}\n\t}\n\n\t/**\n\t * Fires an event and returns the results of all event listeners as an array.\n\t * Example: If listeners return promises, you can: await fireEvent(\"myEvent\") to know when all listeners have finished.\n\t *\n\t * @param eventName the event to fire\n\t * @param data optional data to pass to each event listener\n\t * @returns {Array} an array with the results of all event listeners\n\t */\n\tfireEvent(eventName, data) {\n\t\tconst eventRegistry = this._eventRegistry;\n\t\tconst eventListeners = eventRegistry[eventName];\n\n\t\tif (!eventListeners) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn eventListeners.map(event => {\n\t\t\treturn event[\"function\"].call(this, data); // eslint-disable-line\n\t\t});\n\t}\n\n\tisHandlerAttached(eventName, fnFunction) {\n\t\tconst eventRegistry = this._eventRegistry;\n\t\tconst eventListeners = eventRegistry[eventName];\n\n\t\tif (!eventListeners) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = 0; i < eventListeners.length; i++) {\n\t\t\tconst event = eventListeners[i];\n\t\t\tif (event[\"function\"] === fnFunction) { // eslint-disable-line\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\thasListeners(eventName) {\n\t\treturn !!this._eventRegistry[eventName];\n\t}\n}\n\nexport default EventProvider;\n","import EventProvider from \"../EventProvider.js\";\n\nconst eventProvider = new EventProvider();\nconst LANG_CHANGE = \"languageChange\";\n\nconst attachLanguageChange = listener => {\n\teventProvider.attachEvent(LANG_CHANGE, listener);\n};\n\nconst detachLanguageChange = listener => {\n\teventProvider.detachEvent(LANG_CHANGE, listener);\n};\n\nconst fireLanguageChange = lang => {\n\treturn eventProvider.fireEvent(LANG_CHANGE, lang);\n};\n\nexport {\n\tattachLanguageChange,\n\tdetachLanguageChange,\n\tfireLanguageChange,\n};\n","// This is needed as IE11 doesn't have Set.prototype.keys/values/entries, so [...mySet.values()] is not an option\nconst setToArray = s => {\n\tconst arr = [];\n\ts.forEach(item => {\n\t\tarr.push(item);\n\t});\n\treturn arr;\n};\n\nexport default setToArray;\n","import setToArray from \"./util/setToArray.js\";\n\nconst Definitions = new Set();\nconst Failures = new Set();\nlet failureTimeout;\n\nconst registerTag = tag => {\n\tDefinitions.add(tag);\n};\n\nconst isTagRegistered = tag => {\n\treturn Definitions.has(tag);\n};\n\nconst getAllRegisteredTags = () => {\n\treturn setToArray(Definitions);\n};\n\nconst recordTagRegistrationFailure = tag => {\n\tFailures.add(tag);\n\tif (!failureTimeout) {\n\t\tfailureTimeout = setTimeout(() => {\n\t\t\tdisplayFailedRegistrations();\n\t\t\tfailureTimeout = undefined;\n\t\t}, 1000);\n\t}\n};\n\nconst displayFailedRegistrations = () => {\n\tconsole.warn(`The following tags have already been defined by a different UI5 Web Components version: ${setToArray(Failures).join(\", \")}`); // eslint-disable-line\n\tFailures.clear();\n};\n\nexport {\n\tregisterTag,\n\tisTagRegistered,\n\tgetAllRegisteredTags,\n\trecordTagRegistrationFailure,\n};\n","const rtlAwareSet = new Set();\n\nconst markAsRtlAware = klass => {\n\trtlAwareSet.add(klass);\n};\n\nconst isRtlAware = klass => {\n\treturn rtlAwareSet.has(klass);\n};\n\nexport {\n\tmarkAsRtlAware,\n\tisRtlAware,\n};\n","import RenderQueue from \"./RenderQueue.js\";\nimport { getAllRegisteredTags } from \"./CustomElementsRegistry.js\";\nimport { isRtlAware } from \"./locale/RTLAwareRegistry.js\";\n\nconst registeredElements = new Set();\n\n// Queue for invalidated web components\nconst invalidatedWebComponents = new RenderQueue();\n\nlet renderTaskPromise,\n\trenderTaskPromiseResolve;\n\nlet mutationObserverTimer;\n\nlet queuePromise;\n\n/**\n * Class that manages the rendering/re-rendering of web components\n * This is always asynchronous\n */\nclass RenderScheduler {\n\tconstructor() {\n\t\tthrow new Error(\"Static class\");\n\t}\n\n\t/**\n\t * Schedules a render task (if not already scheduled) to render the component\n\t *\n\t * @param webComponent\n\t * @returns {Promise}\n\t */\n\tstatic async renderDeferred(webComponent) {\n\t\t// Enqueue the web component\n\t\tinvalidatedWebComponents.add(webComponent);\n\n\t\t// Schedule a rendering task\n\t\tawait RenderScheduler.scheduleRenderTask();\n\t}\n\n\t/**\n\t * Renders a component synchronously\n\t *\n\t * @param webComponent\n\t */\n\tstatic renderImmediately(webComponent) {\n\t\twebComponent._render();\n\t}\n\n\t/**\n\t * Cancels the rendering of a component, added to the queue with renderDeferred\n\t *\n\t * @param webComponent\n\t */\n\tstatic cancelRender(webComponent) {\n\t\tinvalidatedWebComponents.remove(webComponent);\n\t}\n\n\t/**\n\t * Schedules a rendering task, if not scheduled already\n\t */\n\tstatic async scheduleRenderTask() {\n\t\tif (!queuePromise) {\n\t\t\tqueuePromise = new Promise(resolve => {\n\t\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\t\t// Render all components in the queue\n\t\t\t\t\tinvalidatedWebComponents.process(component => component._render());\n\n\t\t\t\t\t// Resolve the promise so that callers of renderDeferred can continue\n\t\t\t\t\tqueuePromise = null;\n\t\t\t\t\tresolve();\n\n\t\t\t\t\t// Wait for Mutation observer before the render task is considered finished\n\t\t\t\t\tif (!mutationObserverTimer) {\n\t\t\t\t\t\tmutationObserverTimer = setTimeout(() => {\n\t\t\t\t\t\t\tmutationObserverTimer = undefined;\n\t\t\t\t\t\t\tif (invalidatedWebComponents.isEmpty()) {\n\t\t\t\t\t\t\t\tRenderScheduler._resolveTaskPromise();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 200);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tawait queuePromise;\n\t}\n\n\t/**\n\t * return a promise that will be resolved once all invalidated web components are rendered\n\t */\n\tstatic whenDOMUpdated() {\n\t\tif (renderTaskPromise) {\n\t\t\treturn renderTaskPromise;\n\t\t}\n\n\t\trenderTaskPromise = new Promise(resolve => {\n\t\t\trenderTaskPromiseResolve = resolve;\n\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\tif (invalidatedWebComponents.isEmpty()) {\n\t\t\t\t\trenderTaskPromise = undefined;\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn renderTaskPromise;\n\t}\n\n\tstatic whenAllCustomElementsAreDefined() {\n\t\tconst definedPromises = getAllRegisteredTags().map(tag => customElements.whenDefined(tag));\n\t\treturn Promise.all(definedPromises);\n\t}\n\n\tstatic async whenFinished() {\n\t\tawait RenderScheduler.whenAllCustomElementsAreDefined();\n\t\tawait RenderScheduler.whenDOMUpdated();\n\t}\n\n\tstatic _resolveTaskPromise() {\n\t\tif (!invalidatedWebComponents.isEmpty()) {\n\t\t\t// More updates are pending. Resolve will be called again\n\t\t\treturn;\n\t\t}\n\n\t\tif (renderTaskPromiseResolve) {\n\t\t\trenderTaskPromiseResolve.call(this);\n\t\t\trenderTaskPromiseResolve = undefined;\n\t\t\trenderTaskPromise = undefined;\n\t\t}\n\t}\n\n\tstatic register(element) {\n\t\tregisteredElements.add(element);\n\t}\n\n\tstatic deregister(element) {\n\t\tregisteredElements.delete(element);\n\t}\n\n\t/**\n\t * Re-renders all UI5 Elements on the page, with the option to specify filters to rerender only some components.\n\t *\n\t * Usage:\n\t * reRenderAllUI5Elements() -> rerenders all components\n\t * reRenderAllUI5Elements({tag: \"ui5-button\"}) -> re-renders only instances of ui5-button\n\t * reRenderAllUI5Elements({rtlAware: true}) -> re-renders only rtlAware components\n\t * reRenderAllUI5Elements({languageAware: true}) -> re-renders only languageAware components\n\t * reRenderAllUI5Elements({rtlAware: true, languageAware: true}) -> re-renders components that are rtlAware or languageAware\n\t * etc...\n\t *\n\t * @public\n\t * @param {Object|undefined} filters - Object with keys that can be \"rtlAware\" or \"languageAware\"\n\t */\n\tstatic reRenderAllUI5Elements(filters) {\n\t\tregisteredElements.forEach(element => {\n\t\t\tconst tag = element.constructor.getMetadata().getTag();\n\t\t\tconst rtlAware = isRtlAware(element.constructor);\n\t\t\tconst languageAware = element.constructor.getMetadata().isLanguageAware();\n\t\t\tif (!filters || (filters.tag === tag) || (filters.rtlAware && rtlAware) || (filters.languageAware && languageAware)) {\n\t\t\t\tRenderScheduler.renderDeferred(element);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport default RenderScheduler;\n","const MAX_PROCESS_COUNT = 10;\n\nclass RenderQueue {\n\tconstructor() {\n\t\tthis.list = []; // Used to store the web components in order\n\t\tthis.lookup = new Set(); // Used for faster search\n\t}\n\n\tadd(webComponent) {\n\t\tif (this.lookup.has(webComponent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.list.push(webComponent);\n\t\tthis.lookup.add(webComponent);\n\t}\n\n\tremove(webComponent) {\n\t\tif (!this.lookup.has(webComponent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.list = this.list.filter(item => item !== webComponent);\n\t\tthis.lookup.delete(webComponent);\n\t}\n\n\tshift() {\n\t\tconst webComponent = this.list.shift();\n\t\tif (webComponent) {\n\t\t\tthis.lookup.delete(webComponent);\n\t\t\treturn webComponent;\n\t\t}\n\t}\n\n\tisEmpty() {\n\t\treturn this.list.length === 0;\n\t}\n\n\tisAdded(webComponent) {\n\t\treturn this.lookup.has(webComponent);\n\t}\n\n\t/**\n\t * Processes the whole queue by executing the callback on each component,\n\t * while also imposing restrictions on how many times a component may be processed.\n\t *\n\t * @param callback - function with one argument (the web component to be processed)\n\t */\n\tprocess(callback) {\n\t\tlet webComponent;\n\t\tconst stats = new Map();\n\n\t\twebComponent = this.shift();\n\t\twhile (webComponent) {\n\t\t\tconst timesProcessed = stats.get(webComponent) || 0;\n\t\t\tif (timesProcessed > MAX_PROCESS_COUNT) {\n\t\t\t\tthrow new Error(`Web component processed too many times this task, max allowed is: ${MAX_PROCESS_COUNT}`);\n\t\t\t}\n\t\t\tcallback(webComponent);\n\t\t\tstats.set(webComponent, timesProcessed + 1);\n\t\t\twebComponent = this.shift();\n\t\t}\n\t}\n}\n\nexport default RenderQueue;\n","import {\n\tgetLanguage as getConfiguredLanguage,\n\tgetUseDefaultLanguage as getConfiguredUseDefaultLanguage,\n} from \"../InitialConfiguration.js\";\nimport { fireLanguageChange } from \"../locale/languageChange.js\";\nimport RenderScheduler from \"../RenderScheduler.js\";\n\nlet language;\nlet useDefaultLanguage;\n\n/**\n * Returns the currently configured language, or the browser language as a fallback\n * @returns {String}\n */\nconst getLanguage = () => {\n\tif (language === undefined) {\n\t\tlanguage = getConfiguredLanguage();\n\t}\n\treturn language;\n};\n\n/**\n * Changes the current language, re-fetches all message bundles, updates all language-aware components\n * and returns a promise that resolves when all rendering is done\n *\n * @param newLanguage\n * @returns {Promise<void>}\n */\nconst setLanguage = async newLanguage => {\n\tif (language === newLanguage) {\n\t\treturn;\n\t}\n\n\tlanguage = newLanguage;\n\n\tconst listenersResults = fireLanguageChange(newLanguage);\n\tawait Promise.all(listenersResults);\n\tRenderScheduler.reRenderAllUI5Elements({ languageAware: true });\n\treturn RenderScheduler.whenFinished();\n};\n\n/**\n * Defines if the default language, that is inlined, should be used,\n * instead of fetching the language over the network.\n * <b>Note:</b> By default the language will be fetched.\n *\n * @param {Boolean} useDefaultLanguage\n */\nconst setUseDefaultLanguage = useDefaultLang => {\n\tuseDefaultLanguage = useDefaultLang;\n};\n\n/**\n * Returns if the default language, that is inlined, should be used.\n * @returns {Boolean}\n */\nconst getUseDefaultLanguage = () => {\n\tif (useDefaultLanguage === undefined) {\n\t\tsetUseDefaultLanguage(getConfiguredUseDefaultLanguage());\n\t}\n\n\treturn useDefaultLanguage;\n};\n\nexport {\n\tgetLanguage,\n\tsetLanguage,\n\tsetUseDefaultLanguage,\n\tgetUseDefaultLanguage,\n};\n","const rLocale = /^((?:[A-Z]{2,3}(?:-[A-Z]{3}){0,3})|[A-Z]{4}|[A-Z]{5,8})(?:-([A-Z]{4}))?(?:-([A-Z]{2}|[0-9]{3}))?((?:-[0-9A-Z]{5,8}|-[0-9][0-9A-Z]{3})*)((?:-[0-9A-WYZ](?:-[0-9A-Z]{2,8})+)*)(?:-(X(?:-[0-9A-Z]{1,8})+))?$/i;\n\nclass Locale {\n\tconstructor(sLocaleId) {\n\t\tconst aResult = rLocale.exec(sLocaleId.replace(/_/g, \"-\"));\n\t\tif (aResult === null) {\n\t\t\tthrow new Error(`The given language ${sLocaleId} does not adhere to BCP-47.`);\n\t\t}\n\t\tthis.sLocaleId = sLocaleId;\n\t\tthis.sLanguage = aResult[1] || null;\n\t\tthis.sScript = aResult[2] || null;\n\t\tthis.sRegion = aResult[3] || null;\n\t\tthis.sVariant = (aResult[4] && aResult[4].slice(1)) || null;\n\t\tthis.sExtension = (aResult[5] && aResult[5].slice(1)) || null;\n\t\tthis.sPrivateUse = aResult[6] || null;\n\t\tif (this.sLanguage) {\n\t\t\tthis.sLanguage = this.sLanguage.toLowerCase();\n\t\t}\n\t\tif (this.sScript) {\n\t\t\tthis.sScript = this.sScript.toLowerCase().replace(/^[a-z]/, s => {\n\t\t\t\treturn s.toUpperCase();\n\t\t\t});\n\t\t}\n\t\tif (this.sRegion) {\n\t\t\tthis.sRegion = this.sRegion.toUpperCase();\n\t\t}\n\t}\n\n\tgetLanguage() {\n\t\treturn this.sLanguage;\n\t}\n\n\tgetScript() {\n\t\treturn this.sScript;\n\t}\n\n\tgetRegion() {\n\t\treturn this.sRegion;\n\t}\n\n\tgetVariant() {\n\t\treturn this.sVariant;\n\t}\n\n\tgetVariantSubtags() {\n\t\treturn this.sVariant ? this.sVariant.split(\"-\") : [];\n\t}\n\n\tgetExtension() {\n\t\treturn this.sExtension;\n\t}\n\n\tgetExtensionSubtags() {\n\t\treturn this.sExtension ? this.sExtension.slice(2).split(\"-\") : [];\n\t}\n\n\tgetPrivateUse() {\n\t\treturn this.sPrivateUse;\n\t}\n\n\tgetPrivateUseSubtags() {\n\t\treturn this.sPrivateUse ? this.sPrivateUse.slice(2).split(\"-\") : [];\n\t}\n\n\thasPrivateUseSubtag(sSubtag) {\n\t\treturn this.getPrivateUseSubtags().indexOf(sSubtag) >= 0;\n\t}\n\n\ttoString() {\n\t\tconst r = [this.sLanguage];\n\n\t\tif (this.sScript) {\n\t\t\tr.push(this.sScript);\n\t\t}\n\t\tif (this.sRegion) {\n\t\t\tr.push(this.sRegion);\n\t\t}\n\t\tif (this.sVariant) {\n\t\t\tr.push(this.sVariant);\n\t\t}\n\t\tif (this.sExtension) {\n\t\t\tr.push(this.sExtension);\n\t\t}\n\t\tif (this.sPrivateUse) {\n\t\t\tr.push(this.sPrivateUse);\n\t\t}\n\t\treturn r.join(\"-\");\n\t}\n}\n\nexport default Locale;\n","import detectNavigatorLanguage from \"../util/detectNavigatorLanguage.js\";\nimport { getLanguage as getConfigLanguage } from \"../config/Language.js\";\nimport Locale from \"./Locale.js\";\n\nconst cache = new Map();\n\nconst getLocaleInstance = lang => {\n\tif (!cache.has(lang)) {\n\t\tcache.set(lang, new Locale(lang));\n\t}\n\n\treturn cache.get(lang);\n};\n\nconst convertToLocaleOrNull = lang => {\n\ttry {\n\t\tif (lang && typeof lang === \"string\") {\n\t\t\treturn getLocaleInstance(lang);\n\t\t}\n\t} catch (e) {\n\t\t// ignore\n\t}\n};\n\n/**\n * Returns the locale based on the parameter or configured language Configuration#getLanguage\n * If no language has been configured - a new locale based on browser language is returned\n */\nconst getLocale = lang => {\n\tif (lang) {\n\t\treturn convertToLocaleOrNull(lang);\n\t}\n\n\tif (getConfigLanguage()) {\n\t\treturn getLocaleInstance(getConfigLanguage());\n\t}\n\n\treturn convertToLocaleOrNull(detectNavigatorLanguage());\n};\n\nexport default getLocale;\n","const fetchPromises = new Map();\nconst jsonPromises = new Map();\nconst textPromises = new Map();\n\nconst fetchTextOnce = async url => {\n\tif (!fetchPromises.get(url)) {\n\t\tfetchPromises.set(url, fetch(url));\n\t}\n\tconst response = await fetchPromises.get(url);\n\n\tif (!textPromises.get(url)) {\n\t\ttextPromises.set(url, response.text());\n\t}\n\n\treturn textPromises.get(url);\n};\n\nconst fetchJsonOnce = async url => {\n\tif (!fetchPromises.get(url)) {\n\t\tfetchPromises.set(url, fetch(url));\n\t}\n\tconst response = await fetchPromises.get(url);\n\n\tif (!jsonPromises.get(url)) {\n\t\tjsonPromises.set(url, response.json());\n\t}\n\n\treturn jsonPromises.get(url);\n};\n\nexport { fetchTextOnce, fetchJsonOnce };\n","import { DEFAULT_LOCALE } from \"../generated/AssetParameters.js\";\n\nconst localeRegEX = /^((?:[A-Z]{2,3}(?:-[A-Z]{3}){0,3})|[A-Z]{4}|[A-Z]{5,8})(?:-([A-Z]{4}))?(?:-([A-Z]{2}|[0-9]{3}))?((?:-[0-9A-Z]{5,8}|-[0-9][0-9A-Z]{3})*)((?:-[0-9A-WYZ](?:-[0-9A-Z]{2,8})+)*)(?:-(X(?:-[0-9A-Z]{1,8})+))?$/i;\nconst SAPSupportabilityLocales = /(?:^|-)(saptrc|sappsd)(?:-|$)/i;\n\n/* Map for old language names for a few ISO639 codes. */\nconst M_ISO639_NEW_TO_OLD = {\n\t\"he\": \"iw\",\n\t\"yi\": \"ji\",\n\t\"id\": \"in\",\n\t\"sr\": \"sh\",\n};\n\n/**\n * Normalizes the given locale in BCP-47 syntax.\n * @param {string} locale locale to normalize\n * @returns {string} Normalized locale, \"undefined\" if the locale can't be normalized or the default locale, if no locale provided.\n */\nconst normalizeLocale = locale => {\n\tlet m;\n\n\tif (!locale) {\n\t\treturn DEFAULT_LOCALE;\n\t}\n\n\tif (typeof locale === \"string\" && (m = localeRegEX.exec(locale.replace(/_/g, \"-\")))) {/* eslint-disable-line */\n\t\tlet language = m[1].toLowerCase();\n\t\tlet region = m[3] ? m[3].toUpperCase() : undefined;\n\t\tconst script = m[2] ? m[2].toLowerCase() : undefined;\n\t\tconst variants = m[4] ? m[4].slice(1) : undefined;\n\t\tconst isPrivate = m[6];\n\n\t\tlanguage = M_ISO639_NEW_TO_OLD[language] || language;\n\n\t\t// recognize and convert special SAP supportability locales (overwrites m[]!)\n\t\tif ((isPrivate && (m = SAPSupportabilityLocales.exec(isPrivate))) /* eslint-disable-line */ ||\n\t\t\t(variants && (m = SAPSupportabilityLocales.exec(variants)))) {/* eslint-disable-line */\n\t\t\treturn `en_US_${m[1].toLowerCase()}`; // for now enforce en_US (agreed with SAP SLS)\n\t\t}\n\n\t\t// Chinese: when no region but a script is specified, use default region for each script\n\t\tif (language === \"zh\" && !region) {\n\t\t\tif (script === \"hans\") {\n\t\t\t\tregion = \"CN\";\n\t\t\t} else if (script === \"hant\") {\n\t\t\t\tregion = \"TW\";\n\t\t\t}\n\t\t}\n\n\t\treturn language + (region ? \"_\" + region + (variants ? \"_\" + variants.replace(\"-\", \"_\") : \"\") : \"\"); /* eslint-disable-line */\n\t}\n};\n\nexport default normalizeLocale;\n","import { DEFAULT_LOCALE } from \"../generated/AssetParameters.js\";\n\n/**\n * Calculates the next fallback locale for the given locale.\n *\n * @param {string} locale Locale string in Java format (underscores) or null\n * @returns {string} Next fallback Locale or \"en\" if no fallbacks found.\n */\nconst nextFallbackLocale = locale => {\n\tif (!locale) {\n\t\treturn DEFAULT_LOCALE;\n\t}\n\n\tif (locale === \"zh_HK\") {\n\t\treturn \"zh_TW\";\n\t}\n\n\t// if there are multiple segments (separated by underscores), remove the last one\n\tconst p = locale.lastIndexOf(\"_\");\n\tif (p >= 0) {\n\t\treturn locale.slice(0, p);\n\t}\n\n\t// for any language but the default, fallback to the default first before falling back to the 'raw' language (empty string)\n\treturn locale !== DEFAULT_LOCALE ? DEFAULT_LOCALE : \"\";\n};\n\nexport default nextFallbackLocale;\n","import { getAssetsPath as getConfiguredAssetsPath } from \"../InitialConfiguration.js\";\n\nlet assetsPath;\n\nconst getAssetsPath = () => {\n\tif (assetsPath === undefined) {\n\t\tassetsPath = getConfiguredAssetsPath();\n\t}\n\n\treturn assetsPath;\n};\n\nconst setAssetsPath = newAssetsPath => {\n\tassetsPath = newAssetsPath;\n};\n\nexport { getAssetsPath, setAssetsPath }; // eslint-disable-line\n","import { getAssetsPath } from \"../config/AssetsPath.js\";\n\nlet assetPathMappingFn = assetName => assetName;\n\nconst getEffectiveAssetPath = assetName => {\n\tif (typeof assetName !== \"string\") {\n\t\treturn assetName;\n\t}\n\n\tassetName = assetPathMappingFn(assetName);\n\n\tconst assetsPathPrefix = getAssetsPath();\n\tif (assetsPathPrefix) {\n\t\treturn `${assetsPathPrefix}${assetName}`;\n\t}\n\n\treturn assetName;\n};\n\nconst registerAssetPathMappingFunction = mappingFn => {\n\tassetPathMappingFn = mappingFn;\n};\n\nexport {\n\tgetEffectiveAssetPath,\n\tregisterAssetPathMappingFunction,\n};\n","import { getFeature } from \"../FeaturesRegistry.js\";\nimport getLocale from \"../locale/getLocale.js\";\nimport { attachLanguageChange } from \"../locale/languageChange.js\";\nimport { fetchTextOnce } from \"../util/FetchHelper.js\";\nimport normalizeLocale from \"../locale/normalizeLocale.js\";\nimport nextFallbackLocale from \"../locale/nextFallbackLocale.js\";\nimport { DEFAULT_LANGUAGE } from \"../generated/AssetParameters.js\";\nimport { getEffectiveAssetPath } from \"../util/EffectiveAssetPath.js\";\nimport { getUseDefaultLanguage } from \"../config/Language.js\";\n\nconst bundleData = new Map();\nconst bundleURLs = new Map();\n\n/**\n * Sets a map with texts and ID the are related to.\n * @param {string} packageName package ID that the i18n bundle will be related to\n * @param {Object} data an object with string locales as keys and text translataions as values\n * @public\n */\nconst setI18nBundleData = (packageName, data) => {\n\tbundleData.set(packageName, data);\n};\n\nconst getI18nBundleData = packageName => {\n\treturn bundleData.get(packageName);\n};\n\n/**\n * Registers a map of locale/url information, to be used by the <code>fetchI18nBundle</code> method.\n * Note: In order to be able to register \".properties\" files, you must import the following module:\n * import \"@ui5/webcomponents-base/dist/features/PropertiesFormatSupport.js\";\n *\n * @param {string} packageName package ID that the i18n bundle will be related to\n * @param {Object} bundle an object with string locales as keys and the URLs (in .json or .properties format - see the note above) where the corresponding locale can be fetched from, f.e {\"en\": \"path/en.json\", ...}\n *\n * @public\n */\nconst registerI18nBundle = (packageName, bundle) => {\n\tconst oldBundle = bundleURLs.get(packageName) || {};\n\tbundleURLs.set(packageName, Object.assign({}, oldBundle, bundle));\n};\n\n/**\n * This method preforms the asynchronous task of fetching the actual text resources. It will fetch\n * each text resource over the network once (even for multiple calls to the same method).\n * It should be fully finished before the i18nBundle class is created in the webcomponents.\n * This method uses the bundle URLs that are populated by the <code>registerI18nBundle</code> method.\n * To simplify the usage, the synchronization of both methods happens internally for the same <code>bundleId</code>\n * @param {packageName} packageName the NPM package name\n * @public\n */\nconst fetchI18nBundle = async packageName => {\n\tconst bundlesForPackage = bundleURLs.get(packageName);\n\n\tif (!bundlesForPackage) {\n\t\tconsole.warn(`Message bundle assets are not configured. Falling back to English texts.`, /* eslint-disable-line */\n\t\t` You need to import ${packageName}/dist/Assets.js with a build tool that supports JSON imports.`); /* eslint-disable-line */\n\t\treturn;\n\t}\n\n\tconst language = getLocale().getLanguage();\n\tconst region = getLocale().getRegion();\n\tconst useDefaultLanguage = getUseDefaultLanguage();\n\tlet localeId = normalizeLocale(language + (region ? `-${region}` : ``));\n\n\twhile (localeId !== DEFAULT_LANGUAGE && !bundlesForPackage[localeId]) {\n\t\tlocaleId = nextFallbackLocale(localeId);\n\t}\n\n\tif (useDefaultLanguage && localeId === DEFAULT_LANGUAGE) {\n\t\tsetI18nBundleData(packageName, null); // reset for the default language (if data was set for a previous language)\n\t\treturn;\n\t}\n\n\tconst bundleURL = bundlesForPackage[localeId];\n\n\tif (typeof bundleURL === \"object\") { // inlined from build\n\t\tsetI18nBundleData(packageName, bundleURL);\n\t\treturn;\n\t}\n\n\tconst content = await fetchTextOnce(getEffectiveAssetPath(bundleURL));\n\tlet parser;\n\tif (content.startsWith(\"{\")) {\n\t\tparser = JSON.parse;\n\t} else {\n\t\tconst PropertiesFormatSupport = getFeature(\"PropertiesFormatSupport\");\n\t\tif (!PropertiesFormatSupport) {\n\t\t\tthrow new Error(`In order to support .properties files, please: import \"@ui5/webcomponents-base/dist/features/PropertiesFormatSupport.js\";`);\n\t\t}\n\t\tparser = PropertiesFormatSupport.parser;\n\t}\n\n\tconst data = parser(content);\n\n\tsetI18nBundleData(packageName, data);\n};\n\n// When the language changes dynamically (the user calls setLanguage), re-fetch all previously fetched bundles\nattachLanguageChange(() => {\n\tconst allPackages = [...bundleData.keys()];\n\treturn Promise.all(allPackages.map(fetchI18nBundle));\n});\n\nexport {\n\tfetchI18nBundle,\n\tregisterI18nBundle,\n\tsetI18nBundleData,\n\tgetI18nBundleData,\n};\n","import { fetchJsonOnce } from \"../util/FetchHelper.js\";\nimport { attachLanguageChange } from \"../locale/languageChange.js\";\nimport getLocale from \"../locale/getLocale.js\";\nimport { getFeature } from \"../FeaturesRegistry.js\";\nimport { DEFAULT_LOCALE, SUPPORTED_LOCALES } from \"../generated/AssetParameters.js\";\nimport { getEffectiveAssetPath } from \"../util/EffectiveAssetPath.js\";\n\nconst resources = new Map();\nconst cldrData = {};\nconst cldrUrls = {};\n\n// externally configurable mapping function for resolving (localeId -> URL)\n// default implementation - ui5 CDN\nlet cldrMappingFn = locale => `https://ui5.sap.com/1.60.2/resources/sap/ui/core/cldr/${locale}.json`;\n\nconst M_ISO639_OLD_TO_NEW = {\n\t\"iw\": \"he\",\n\t\"ji\": \"yi\",\n\t\"in\": \"id\",\n\t\"sh\": \"sr\",\n};\n\nconst calcLocale = (language, region, script) => {\n\t// normalize language and handle special cases\n\tlanguage = (language && M_ISO639_OLD_TO_NEW[language]) || language;\n\t// Special case 1: in an SAP context, the inclusive language code \"no\" always means Norwegian Bokmal (\"nb\")\n\tif (language === \"no\") {\n\t\tlanguage = \"nb\";\n\t}\n\t// Special case 2: for Chinese, derive a default region from the script (this behavior is inherited from Java)\n\tif (language === \"zh\" && !region) {\n\t\tif (script === \"Hans\") {\n\t\t\tregion = \"CN\";\n\t\t} else if (script === \"Hant\") {\n\t\t\tregion = \"TW\";\n\t\t}\n\t}\n\n\t// try language + region\n\tlet localeId = `${language}_${region}`;\n\tif (!SUPPORTED_LOCALES.includes(localeId)) {\n\t\t// fallback to language only\n\t\tlocaleId = language;\n\t}\n\tif (!SUPPORTED_LOCALES.includes(localeId)) {\n\t\t// fallback to english\n\t\tlocaleId = DEFAULT_LOCALE;\n\t}\n\n\treturn localeId;\n};\n\n\nconst resolveMissingMappings = () => {\n\tif (!cldrMappingFn) {\n\t\treturn;\n\t}\n\n\tconst missingLocales = SUPPORTED_LOCALES.filter(locale => !cldrData[locale] && !cldrUrls[locale]);\n\tmissingLocales.forEach(locale => {\n\t\tcldrUrls[locale] = cldrMappingFn(locale);\n\t});\n};\n\nconst registerModuleContent = (moduleName, content) => {\n\tresources.set(moduleName, content);\n};\n\nconst getModuleContent = moduleName => {\n\tconst moduleContent = resources.get(moduleName);\n\tif (moduleContent) {\n\t\treturn moduleContent;\n\t}\n\n\tconst missingModule = moduleName.match(/sap\\/ui\\/core\\/cldr\\/(\\w+)\\.json/);\n\tif (missingModule) {\n\t\tthrow new Error(`CLDR data for locale ${missingModule[1]} is not loaded!`);\n\t}\n\n\tthrow new Error(`Unknown module ${moduleName}`);\n};\n\nconst fetchCldr = async (language, region, script) => {\n\tresolveMissingMappings();\n\tconst localeId = calcLocale(language, region, script);\n\n\tlet cldrObj = cldrData[localeId];\n\tconst url = cldrUrls[localeId];\n\n\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\tif (!cldrObj && OpenUI5Support) {\n\t\tcldrObj = OpenUI5Support.getLocaleDataObject();\n\t}\n\n\tif (cldrObj) {\n\t\t// inlined from build or fetched independently\n\t\tregisterModuleContent(`sap/ui/core/cldr/${localeId}.json`, cldrObj);\n\t} else if (url) {\n\t\t// fetch it\n\t\tconst cldrContent = await fetchJsonOnce(getEffectiveAssetPath(url));\n\t\tregisterModuleContent(`sap/ui/core/cldr/${localeId}.json`, cldrContent);\n\t}\n};\n\nconst registerCldr = (locale, url) => {\n\tcldrUrls[locale] = url;\n};\n\nconst setCldrData = (locale, data) => {\n\tcldrData[locale] = data;\n};\n\nconst getCldrData = locale => {\n\treturn cldrData[locale];\n};\n\nconst _registerMappingFunction = mappingFn => {\n\tcldrMappingFn = mappingFn;\n};\n\n// When the language changes dynamically (the user calls setLanguage),\n// re-fetch the required CDRD data.\nattachLanguageChange(() => {\n\tconst locale = getLocale();\n\treturn fetchCldr(locale.getLanguage(), locale.getRegion(), locale.getScript());\n});\n\nexport {\n\tfetchCldr,\n\tregisterCldr,\n\tsetCldrData,\n\tgetCldrData,\n\tgetModuleContent,\n\t_registerMappingFunction,\n};\n","/**\n * \"\" -> \"\"\n * \"noExtension\" -> \"\"\n * \"file.txt\" -> \".txt\"\n * \"file.with.many.dots.doc\" -> \".doc\"\n * \".gitignore\" -> \"\"\n *\n * @param fileName - the file name\n * @returns {string}\n */\nconst getFileExtension = fileName => {\n\tconst dotPos = fileName.lastIndexOf(\".\");\n\n\tif (dotPos < 1) {\n\t\treturn \"\";\n\t}\n\n\treturn fileName.slice(dotPos);\n};\n\nexport default getFileExtension;\n","import { fetchJsonOnce, fetchTextOnce } from \"../util/FetchHelper.js\";\nimport { DEFAULT_THEME } from \"../generated/AssetParameters.js\";\nimport getFileExtension from \"../util/getFileExtension.js\";\nimport { getEffectiveAssetPath } from \"../util/EffectiveAssetPath.js\";\n\nconst themeURLs = new Map();\nconst themeStyles = new Map();\nconst registeredPackages = new Set();\nconst registeredThemes = new Set();\n\n/**\n * Used to provide CSS Vars for a specific theme for a specific package.\n * The CSS Vars can be passed directly as a string (containing them), as an object with a \"_\" property(containing them in the \"_\" property), or as a URL.\n * This URL must point to a JSON file, containing a \"_\" property.\n *\n * Example usage:\n * 1) Pass the CSS Vars as a string directly.\n * registerThemeProperties(\"my-package\", \"my_theme\", \":root{--var1: red;}\");\n * 2) Pass the CSS Vars as an object directly\n * registerThemeProperties(\"my-package\", \"my_theme\", {\"_\": \":root{--var1: red;}\"});\n * 3) Pass a URL to a CSS file, containing the CSS Vars. Will be fetched on demand, not upon registration.\n * registerThemeProperties(\"my-package\", \"my_theme\", \"http://url/to/my/theme.css\");\n * 4) Pass a URL to a JSON file, containing the CSS Vars in its \"_\" property. Will be fetched on demand, not upon registration.\n * registerThemeProperties(\"my-package\", \"my_theme\", \"http://url/to/my/theme.json\");\n *\n * @public\n * @param packageName - the NPM package for which CSS Vars are registered\n * @param themeName - the theme which the CSS Vars implement\n * @param style - can be one of four options: a string, an object with a \"_\" property, URL to a CSS file, or URL to a JSON file with a \"_\" property\n */\nconst registerThemeProperties = (packageName, themeName, style) => {\n\tif (style._) {\n\t\t// JSON object like ({\"_\": \":root\"})\n\t\tthemeStyles.set(`${packageName}_${themeName}`, style._);\n\t} else if (style.includes(\":root\") || style === \"\") {\n\t\t// pure string, including empty string\n\t\tthemeStyles.set(`${packageName}_${themeName}`, style);\n\t} else {\n\t\t// url for fetching\n\t\tthemeURLs.set(`${packageName}_${themeName}`, style);\n\t}\n\tregisteredPackages.add(packageName);\n\tregisteredThemes.add(themeName);\n};\n\nconst getThemeProperties = async (packageName, themeName) => {\n\tconst style = themeStyles.get(`${packageName}_${themeName}`);\n\tif (style !== undefined) { // it's valid for style to be an empty string\n\t\treturn style;\n\t}\n\n\tif (!registeredThemes.has(themeName)) {\n\t\tconst regThemesStr = [...registeredThemes.values()].join(\", \");\n\t\tconsole.warn(`You have requested a non-registered theme - falling back to ${DEFAULT_THEME}. Registered themes are: ${regThemesStr}`); /* eslint-disable-line */\n\t\treturn themeStyles.get(`${packageName}_${DEFAULT_THEME}`);\n\t}\n\n\tconst data = await fetchThemeProperties(packageName, themeName);\n\tconst themeProps = data._ || data;\n\n\tthemeStyles.set(`${packageName}_${themeName}`, themeProps);\n\treturn themeProps;\n};\n\nconst fetchThemeProperties = async (packageName, themeName) => {\n\tconst url = themeURLs.get(`${packageName}_${themeName}`);\n\n\tif (!url) {\n\t\tthrow new Error(`You have to import the ${packageName}/dist/Assets.js module to switch to additional themes`);\n\t}\n\n\treturn getFileExtension(url) === \".css\" ? fetchTextOnce(url) : fetchJsonOnce(getEffectiveAssetPath(url));\n};\n\nconst getRegisteredPackages = () => {\n\treturn registeredPackages;\n};\n\nconst isThemeRegistered = theme => {\n\treturn registeredThemes.has(theme);\n};\n\nexport {\n\tregisterThemeProperties,\n\tgetThemeProperties,\n\tgetRegisteredPackages,\n\tisThemeRegistered,\n};\n","/**\n *\n *\n * @author Jerry Bendy <jerry@icewingcc.com>\n * @licence MIT\n *\n */\n\n(function(self) {\n 'use strict';\n\n var nativeURLSearchParams = (self.URLSearchParams && self.URLSearchParams.prototype.get) ? self.URLSearchParams : null,\n isSupportObjectConstructor = nativeURLSearchParams && (new nativeURLSearchParams({a: 1})).toString() === 'a=1',\n // There is a bug in safari 10.1 (and earlier) that incorrectly decodes `%2B` as an empty space and not a plus.\n decodesPlusesCorrectly = nativeURLSearchParams && (new nativeURLSearchParams('s=%2B').get('s') === '+'),\n __URLSearchParams__ = \"__URLSearchParams__\",\n // Fix bug in Edge which cannot encode ' &' correctly\n encodesAmpersandsCorrectly = nativeURLSearchParams ? (function() {\n var ampersandTest = new nativeURLSearchParams();\n ampersandTest.append('s', ' &');\n return ampersandTest.toString() === 's=+%26';\n })() : true,\n prototype = URLSearchParamsPolyfill.prototype,\n iterable = !!(self.Symbol && self.Symbol.iterator);\n\n if (nativeURLSearchParams && isSupportObjectConstructor && decodesPlusesCorrectly && encodesAmpersandsCorrectly) {\n return;\n }\n\n\n /**\n * Make a URLSearchParams instance\n *\n * @param {object|string|URLSearchParams} search\n * @constructor\n */\n function URLSearchParamsPolyfill(search) {\n search = search || \"\";\n\n // support construct object with another URLSearchParams instance\n if (search instanceof URLSearchParams || search instanceof URLSearchParamsPolyfill) {\n search = search.toString();\n }\n this [__URLSearchParams__] = parseToDict(search);\n }\n\n\n /**\n * Appends a specified key/value pair as a new search parameter.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.append = function(name, value) {\n appendTo(this [__URLSearchParams__], name, value);\n };\n\n /**\n * Deletes the given search parameter, and its associated value,\n * from the list of all search parameters.\n *\n * @param {string} name\n */\n prototype['delete'] = function(name) {\n delete this [__URLSearchParams__] [name];\n };\n\n /**\n * Returns the first value associated to the given search parameter.\n *\n * @param {string} name\n * @returns {string|null}\n */\n prototype.get = function(name) {\n var dict = this [__URLSearchParams__];\n return name in dict ? dict[name][0] : null;\n };\n\n /**\n * Returns all the values association with a given search parameter.\n *\n * @param {string} name\n * @returns {Array}\n */\n prototype.getAll = function(name) {\n var dict = this [__URLSearchParams__];\n return name in dict ? dict [name].slice(0) : [];\n };\n\n /**\n * Returns a Boolean indicating if such a search parameter exists.\n *\n * @param {string} name\n * @returns {boolean}\n */\n prototype.has = function(name) {\n return name in this [__URLSearchParams__];\n };\n\n /**\n * Sets the value associated to a given search parameter to\n * the given value. If there were several values, delete the\n * others.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.set = function set(name, value) {\n this [__URLSearchParams__][name] = ['' + value];\n };\n\n /**\n * Returns a string containg a query string suitable for use in a URL.\n *\n * @returns {string}\n */\n prototype.toString = function() {\n var dict = this[__URLSearchParams__], query = [], i, key, name, value;\n for (key in dict) {\n name = encode(key);\n for (i = 0, value = dict[key]; i < value.length; i++) {\n query.push(name + '=' + encode(value[i]));\n }\n }\n return query.join('&');\n };\n\n // There is a bug in Safari 10.1 and `Proxy`ing it is not enough.\n var forSureUsePolyfill = !decodesPlusesCorrectly;\n var useProxy = (!forSureUsePolyfill && nativeURLSearchParams && !isSupportObjectConstructor && self.Proxy)\n /*\n * Apply polifill to global object and append other prototype into it\n */\n Object.defineProperty(self, 'URLSearchParams', {\n value: (useProxy ?\n // Safari 10.0 doesn't support Proxy, so it won't extend URLSearchParams on safari 10.0\n new Proxy(nativeURLSearchParams, {\n construct: function(target, args) {\n return new target((new URLSearchParamsPolyfill(args[0]).toString()));\n }\n }) :\n URLSearchParamsPolyfill)\n });\n\n var USPProto = self.URLSearchParams.prototype;\n\n USPProto.polyfill = true;\n\n /**\n *\n * @param {function} callback\n * @param {object} thisArg\n */\n USPProto.forEach = USPProto.forEach || function(callback, thisArg) {\n var dict = parseToDict(this.toString());\n Object.getOwnPropertyNames(dict).forEach(function(name) {\n dict[name].forEach(function(value) {\n callback.call(thisArg, value, name, this);\n }, this);\n }, this);\n };\n\n /**\n * Sort all name-value pairs\n */\n USPProto.sort = USPProto.sort || function() {\n var dict = parseToDict(this.toString()), keys = [], k, i, j;\n for (k in dict) {\n keys.push(k);\n }\n keys.sort();\n\n for (i = 0; i < keys.length; i++) {\n this['delete'](keys[i]);\n }\n for (i = 0; i < keys.length; i++) {\n var key = keys[i], values = dict[key];\n for (j = 0; j < values.length; j++) {\n this.append(key, values[j]);\n }\n }\n };\n\n /**\n * Returns an iterator allowing to go through all keys of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.keys = USPProto.keys || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push(name);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all values of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.values = USPProto.values || function() {\n var items = [];\n this.forEach(function(item) {\n items.push(item);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all key/value\n * pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.entries = USPProto.entries || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push([name, item]);\n });\n return makeIterator(items);\n };\n\n\n if (iterable) {\n USPProto[self.Symbol.iterator] = USPProto[self.Symbol.iterator] || USPProto.entries;\n }\n\n\n function encode(str) {\n var replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function(match) {\n return replace[match];\n });\n }\n\n function decode(str) {\n return decodeURIComponent(str.replace(/\\+/g, ' '));\n }\n\n function makeIterator(arr) {\n var iterator = {\n next: function() {\n var value = arr.shift();\n return {done: value === undefined, value: value};\n }\n };\n\n if (iterable) {\n iterator[self.Symbol.iterator] = function() {\n return iterator;\n };\n }\n\n return iterator;\n }\n\n function parseToDict(search) {\n var dict = {};\n\n if (typeof search === \"object\") {\n for (var key in search) {\n if (search.hasOwnProperty(key)) {\n appendTo(dict, key, search[key])\n }\n }\n\n } else {\n // remove first '?'\n if (search.indexOf(\"?\") === 0) {\n search = search.slice(1);\n }\n\n var pairs = search.split(\"&\");\n for (var j = 0; j < pairs.length; j++) {\n var value = pairs [j],\n index = value.indexOf('=');\n\n if (-1 < index) {\n appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));\n\n } else {\n if (value) {\n appendTo(dict, decode(value), '');\n }\n }\n }\n }\n\n return dict;\n }\n\n function appendTo(dict, name, value) {\n var val = typeof value === 'string' ? value : (\n value !== null && value !== undefined && typeof value.toString === 'function' ? value.toString() : JSON.stringify(value)\n )\n\n if (name in dict) {\n dict[name].push(val);\n } else {\n dict[name] = [val];\n }\n }\n\n})(typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : this));\n","const patchNodeValue = () => {\n\tif (!window.ShadyDOM) {\n\t\treturn;\n\t}\n\tconst nativeNodeValue = Object.getOwnPropertyDescriptor(Node.prototype, \"nodeValue\");\n\tObject.defineProperty(Node.prototype, \"nodeValue\", {\n\t\tget() {\n\t\t\treturn nativeNodeValue.get.apply(this);\n\t\t},\n\t\tset(text) {\n\t\t\tnativeNodeValue.set.apply(this, arguments); // eslint-disable-line\n\n\t\t\t// Call manually the mutation observer callback\n\t\t\tconst parentElement = this.parentNode;\n\t\t\tif (parentElement instanceof HTMLElement && parentElement.isUI5Element) {\n\t\t\t\tparentElement._processChildren();\n\t\t\t}\n\t\t},\n\t});\n};\n\npatchNodeValue();\n\nexport default {};\n","/**\n * Creates a <style> tag in the <head> tag\n * @param cssText - the CSS\n * @param attributes - optional attributes to add to the tag\n * @returns {HTMLElement}\n */\nconst createStyleInHead = (cssText, attributes = {}) => {\n\tconst style = document.createElement(\"style\");\n\tstyle.type = \"text/css\";\n\n\tObject.entries(attributes).forEach(pair => style.setAttribute(...pair));\n\n\tstyle.textContent = cssText;\n\tdocument.head.appendChild(style);\n\treturn style;\n};\n\nexport default createStyleInHead;\n","import createStyleInHead from \"../util/createStyleInHead.js\";\n\n/**\n * Creates/updates a style element holding all CSS Custom Properties\n * @param cssText\n * @param packageName\n */\nconst createThemePropertiesStyleTag = (cssText, packageName) => {\n\tconst styleElement = document.head.querySelector(`style[data-ui5-theme-properties=\"${packageName}\"]`);\n\tif (styleElement) {\n\t\tstyleElement.textContent = cssText || \"\";\t// in case of undefined\n\t} else {\n\t\tconst attributes = {\n\t\t\t\"data-ui5-theme-properties\": packageName,\n\t\t};\n\t\tcreateStyleInHead(cssText, attributes);\n\t}\n};\n\nexport default createThemePropertiesStyleTag;\n","const getThemeMetadata = () => {\n\t// Check if the class was already applied, most commonly to the link/style tag with the CSS Variables\n\tlet el = document.querySelector(\".sapThemeMetaData-Base-baseLib\");\n\tif (el) {\n\t\treturn getComputedStyle(el).backgroundImage;\n\t}\n\n\tel = document.createElement(\"span\");\n\tel.style.display = \"none\";\n\tel.classList.add(\"sapThemeMetaData-Base-baseLib\");\n\tdocument.body.appendChild(el);\n\tconst metadata = getComputedStyle(el).backgroundImage;\n\tdocument.body.removeChild(el);\n\n\treturn metadata;\n};\n\nconst parseThemeMetadata = metadataString => {\n\tconst params = /\\([\"']?data:text\\/plain;utf-8,(.*?)['\"]?\\)$/i.exec(metadataString);\n\tif (params && params.length >= 2) {\n\t\tlet paramsString = params[1];\n\t\tparamsString = paramsString.replace(/\\\\\"/g, `\"`);\n\t\tif (paramsString.charAt(0) !== \"{\" && paramsString.charAt(paramsString.length - 1) !== \"}\") {\n\t\t\ttry {\n\t\t\t\tparamsString = decodeURIComponent(paramsString);\n\t\t\t} catch (ex) {\n\t\t\t\tconsole.warn(\"Malformed theme metadata string, unable to decodeURIComponent\"); // eslint-disable-line\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\treturn JSON.parse(paramsString);\n\t\t} catch (ex) {\n\t\t\tconsole.warn(\"Malformed theme metadata string, unable to parse JSON\"); // eslint-disable-line\n\t\t}\n\t}\n};\n\nconst processThemeMetadata = metadata => {\n\tlet themeName;\n\tlet baseThemeName;\n\n\ttry {\n\t\tthemeName = metadata.Path.match(/\\.([^.]+)\\.css_variables$/)[1];\n\t\tbaseThemeName = metadata.Extends[0];\n\t} catch (ex) {\n\t\tconsole.warn(\"Malformed theme metadata Object\", metadata); // eslint-disable-line\n\t\treturn;\n\t}\n\n\treturn {\n\t\tthemeName,\n\t\tbaseThemeName,\n\t};\n};\n\nconst getThemeDesignerTheme = () => {\n\tconst metadataString = getThemeMetadata();\n\tif (!metadataString || metadataString === \"none\") {\n\t\treturn;\n\t}\n\n\tconst metadata = parseThemeMetadata(metadataString);\n\treturn processThemeMetadata(metadata);\n};\n\nexport default getThemeDesignerTheme;\n","let ponyfillTimer;\n\nconst ponyfillNeeded = () => !!window.CSSVarsPonyfill;\n\n/**\n * Removes the \"data-cssvars-group\" attribute for all element styles and their respective out nodes.\n * CSSVarsPonyfill has internal counters for \"group\" and \"job\" and running several instances of the ponyfill may lead to issues, since these counters are not shared\n * Therefore we remove them for our \"data-ui5-element-styles\"\n *\n * @param rootElement\n */\nconst cleanPonyfillMetadata = (rootElement = document.head) => {\n\trootElement.querySelectorAll(`style[data-ui5-element-styles][data-cssvars=\"src\"]`).forEach(tag => {\n\t\tconst group = tag.getAttribute(\"data-cssvars-group\");\n\t\ttag.removeAttribute(\"data-cssvars-group\");\n\t\ttag.disabled = false;\n\t\tconst outNode = rootElement.querySelector(`style[data-cssvars=\"out\"][data-cssvars-group=\"${group}\"]`);\n\t\tif (outNode) {\n\t\t\toutNode.removeAttribute(\"data-cssvars-group\");\n\t\t}\n\t});\n};\n\nconst runPonyfill = () => {\n\tponyfillTimer = undefined;\n\n\tcleanPonyfillMetadata();\n\twindow.CSSVarsPonyfill.cssVars({\n\t\trootElement: document.head,\n\t\tvariables: isCompact() ? getCompactModeVars() : {},\n\t\tsilent: true,\n\t});\n};\n\nconst schedulePonyfill = () => {\n\tif (!ponyfillTimer) {\n\t\tponyfillTimer = window.setTimeout(runPonyfill, 0);\n\t}\n};\n\nconst isCompact = () => {\n\tconst b = document.body;\n\treturn b.hasAttribute(\"data-ui5-compact-size\") || b.classList.contains(\"ui5-content-density-compact\") || b.classList.contains(\"sapUiSizeCompact\");\n};\n\nconst getCompactModeVars = () => {\n\tconst compactVars = {};\n\t[...document.querySelectorAll(`[data-ui5-theme-properties]`)].forEach(el => {\n\t\tconst cssContent = el.textContent.replace(\"\\n\", \"\");\n\t\tlet match;\n\t\tconst regExp = new RegExp(\"data-ui5-compact-size[^{]*{(.*?)}\", \"g\");\n\t\twhile ((match = regExp.exec(cssContent)) !== null) { // eslint-disable-line\n\t\t\tconst compactCSS = match[1];\n\t\t\tcompactCSS.split(\";\").forEach(declaration => {\n\t\t\t\tconst pair = declaration.split(\":\");\n\t\t\t\tcompactVars[pair[0].trim()] = pair[1].trim();\n\t\t\t});\n\t\t}\n\t});\n\n\treturn compactVars;\n};\n\nexport {\n\tponyfillNeeded,\n\trunPonyfill,\n\tschedulePonyfill,\n};\n","import EventProvider from \"../EventProvider.js\";\n\nconst eventProvider = new EventProvider();\nconst THEME_LOADED = \"themeLoaded\";\n\nconst attachThemeLoaded = listener => {\n\teventProvider.attachEvent(THEME_LOADED, listener);\n};\n\nconst detachThemeLoaded = listener => {\n\teventProvider.detachEvent(THEME_LOADED, listener);\n};\n\nconst fireThemeLoaded = theme => {\n\treturn eventProvider.fireEvent(THEME_LOADED, theme);\n};\n\nexport {\n\tattachThemeLoaded,\n\tdetachThemeLoaded,\n\tfireThemeLoaded,\n};\n","import { getThemeProperties, getRegisteredPackages, isThemeRegistered } from \"../asset-registries/Themes.js\";\nimport createThemePropertiesStyleTag from \"./createThemePropertiesStyleTag.js\";\nimport getThemeDesignerTheme from \"./getThemeDesignerTheme.js\";\nimport { ponyfillNeeded, runPonyfill } from \"./CSSVarsPonyfill.js\";\nimport { fireThemeLoaded } from \"./ThemeLoaded.js\";\nimport { getFeature } from \"../FeaturesRegistry.js\";\n\nconst BASE_THEME_PACKAGE = \"@ui5/webcomponents-theme-base\";\n\nconst isThemeBaseRegistered = () => {\n\tconst registeredPackages = getRegisteredPackages();\n\treturn registeredPackages.has(BASE_THEME_PACKAGE);\n};\n\nconst loadThemeBase = async theme => {\n\tif (!isThemeBaseRegistered()) {\n\t\treturn;\n\t}\n\n\tconst cssText = await getThemeProperties(BASE_THEME_PACKAGE, theme);\n\tcreateThemePropertiesStyleTag(cssText, BASE_THEME_PACKAGE);\n};\n\nconst deleteThemeBase = () => {\n\tconst styleElement = document.head.querySelector(`style[data-ui5-theme-properties=\"${BASE_THEME_PACKAGE}\"]`);\n\tif (styleElement) {\n\t\tstyleElement.parentElement.removeChild(styleElement);\n\t}\n};\n\nconst loadComponentPackages = async theme => {\n\tconst registeredPackages = getRegisteredPackages();\n\tregisteredPackages.forEach(async packageName => {\n\t\tif (packageName === BASE_THEME_PACKAGE) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cssText = await getThemeProperties(packageName, theme);\n\t\tcreateThemePropertiesStyleTag(cssText, packageName);\n\t});\n};\n\nconst detectExternalTheme = () => {\n\t// If theme designer theme is detected, use this\n\tconst extTheme = getThemeDesignerTheme();\n\tif (extTheme) {\n\t\treturn extTheme;\n\t}\n\n\t// If OpenUI5Support is enabled, try to find out if it loaded variables\n\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\tif (OpenUI5Support) {\n\t\tconst varsLoaded = OpenUI5Support.cssVariablesLoaded();\n\t\tif (varsLoaded) {\n\t\t\treturn {\n\t\t\t\tthemeName: OpenUI5Support.getConfigurationSettingsObject().theme, // just themeName, baseThemeName is only relevant for custom themes\n\t\t\t};\n\t\t}\n\t}\n};\n\nconst applyTheme = async theme => {\n\tconst extTheme = detectExternalTheme();\n\n\t// Only load theme_base properties if there is no externally loaded theme, or there is, but it is not being loaded\n\tif (!extTheme || theme !== extTheme.themeName) {\n\t\tawait loadThemeBase(theme);\n\t} else {\n\t\tdeleteThemeBase();\n\t}\n\n\t// Always load component packages properties. For non-registered themes, try with the base theme, if any\n\tconst packagesTheme = isThemeRegistered(theme) ? theme : extTheme && extTheme.baseThemeName;\n\tawait loadComponentPackages(packagesTheme);\n\n\t// When changing the theme, run the ponyfill immediately\n\tif (ponyfillNeeded()) {\n\t\trunPonyfill();\n\t}\n\n\tfireThemeLoaded(theme);\n};\n\nexport default applyTheme;\n","import { getTheme as getConfiguredTheme } from \"../InitialConfiguration.js\";\nimport applyTheme from \"../theming/applyTheme.js\";\n\nlet theme;\n\nconst getTheme = () => {\n\tif (theme === undefined) {\n\t\ttheme = getConfiguredTheme();\n\t}\n\n\treturn theme;\n};\n\nconst setTheme = async newTheme => {\n\tif (theme === newTheme) {\n\t\treturn;\n\t}\n\n\ttheme = newTheme;\n\n\t// Update CSS Custom Properties\n\tawait applyTheme(theme);\n};\n\nexport {\n\tgetTheme,\n\tsetTheme,\n};\n","import { registerFeature } from \"../FeaturesRegistry.js\";\nimport { setTheme } from \"../config/Theme.js\";\n\nconst sap = window.sap;\nconst core = sap && sap.ui && typeof sap.ui.getCore === \"function\" && sap.ui.getCore();\n\nconst isLoaded = () => {\n\treturn !!core;\n};\n\nconst init = () => {\n\tif (!core) {\n\t\treturn Promise.resolve();\n\t}\n\n\treturn new Promise(resolve => {\n\t\tcore.attachInit(() => {\n\t\t\tsap.ui.require([\"sap/ui/core/LocaleData\"], resolve);\n\t\t});\n\t});\n};\n\nconst getConfigurationSettingsObject = () => {\n\tif (!core) {\n\t\treturn;\n\t}\n\n\tconst config = core.getConfiguration();\n\tconst LocaleData = sap.ui.require(\"sap/ui/core/LocaleData\");\n\n\treturn {\n\t\tanimationMode: config.getAnimationMode(),\n\t\tlanguage: config.getLanguage(),\n\t\ttheme: config.getTheme(),\n\t\trtl: config.getRTL(),\n\t\tcalendarType: config.getCalendarType(),\n\t\tformatSettings: {\n\t\t\tfirstDayOfWeek: LocaleData ? LocaleData.getInstance(config.getLocale()).getFirstDayOfWeek() : undefined,\n\t\t},\n\t};\n};\n\nconst getLocaleDataObject = () => {\n\tif (!core) {\n\t\treturn;\n\t}\n\n\tconst config = core.getConfiguration();\n\tconst LocaleData = sap.ui.require(\"sap/ui/core/LocaleData\");\n\treturn LocaleData.getInstance(config.getLocale())._get();\n};\n\nconst listenForThemeChange = () => {\n\tconst config = core.getConfiguration();\n\tcore.attachThemeChanged(async () => {\n\t\tawait setTheme(config.getTheme());\n\t});\n};\n\nconst attachListeners = () => {\n\tif (!core) {\n\t\treturn;\n\t}\n\n\tlistenForThemeChange();\n};\n\nconst cssVariablesLoaded = () => {\n\tif (!core) {\n\t\treturn;\n\t}\n\n\tconst link = [...document.head.children].find(el => el.id === \"sap-ui-theme-sap.ui.core\"); // more reliable than querySelector early\n\tif (!link) {\n\t\treturn;\n\t}\n\n\treturn !!link.href.match(/\\/css(-|_)variables\\.css/);\n};\n\nconst OpenUI5Support = {\n\tisLoaded,\n\tinit,\n\tgetConfigurationSettingsObject,\n\tgetLocaleDataObject,\n\tattachListeners,\n\tcssVariablesLoaded,\n};\n\nregisterFeature(\"OpenUI5Support\", OpenUI5Support);\n","const whenDOMReady = () => {\n\treturn new Promise(resolve => {\n\t\tif (document.body) {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\t\t\tresolve();\n\t\t\t});\n\t\t}\n\t});\n};\n\nexport default whenDOMReady;\n","/**\n * CSS font face used for the texts provided by SAP.\n */\nimport createStyleInHead from \"./util/createStyleInHead.js\";\nimport { getFeature } from \"./FeaturesRegistry.js\";\n\n/* CDN Locations */\nconst font72RegularWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents`;\nconst font72RegularWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents`;\n\nconst font72RegularFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents`;\nconst font72RegularFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents`;\n\nconst font72BoldWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents`;\nconst font72BoldWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents`;\n\nconst font72BoldFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents`;\nconst font72BoldFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents`;\n\nconst fontFaceCSS = `\n\t@font-face {\n\t\tfont-family: \"72\";\n\t\tfont-style: normal;\n\t\tfont-weight: 400;\n\t\tsrc: local(\"72\"),\n\t\t\turl(${font72RegularWoff2}) format(\"woff2\"),\n\t\t\turl(${font72RegularWoff}) format(\"woff\");\n\t}\n\t\n\t@font-face {\n\t\tfont-family: \"72full\";\n\t\tfont-style: normal;\n\t\tfont-weight: 400;\n\t\tsrc: local('72-full'),\n\t\t\turl(${font72RegularFullWoff2}) format(\"woff2\"),\n\t\t\turl(${font72RegularFullWoff}) format(\"woff\");\n\t\t\n\t}\n\t\n\t@font-face {\n\t\tfont-family: \"72\";\n\t\tfont-style: normal;\n\t\tfont-weight: 700;\n\t\tsrc: local('72-Bold'),\n\t\t\turl(${font72BoldWoff2}) format(\"woff2\"),\n\t\t\turl(${font72BoldWoff}) format(\"woff\");\n\t}\n\t\n\t@font-face {\n\t\tfont-family: \"72full\";\n\t\tfont-style: normal;\n\t\tfont-weight: 700;\n\t\tsrc: local('72-Bold-full'),\n\t\t\turl(${font72BoldFullWoff2}) format(\"woff2\"),\n\t\t\turl(${font72BoldFullWoff}) format(\"woff\");\n\t}\n`;\n\n/**\n * Some diacritics are supported by the 72 font:\n * * Grave\n * * Acute\n * * Circumflex\n * * Tilde\n *\n * However, the following diacritics and the combination of multiple diacritics (including the supported ones) are not supported:\n * * Breve\n * * Horn\n * * Dot below\n * * Hook above\n *\n *\n * Override for the characters that aren't covered by the '72' font to other system fonts\n *\n * U+0102-0103: A and a with Breve\n * U+01A0-01A1: O and o with Horn\n * U+01AF-01B0: U and u with Horn\n * U+1EA0-1EB7: A and a with diacritics that are not supported by the font and combination of multiple diacritics\n * U+1EB8-1EC7: E and e with diacritics that are not supported by the font and combination of multiple diacritics\n * U+1EC8-1ECB: I and i with diacritics that are not supported by the font and combination of multiple diacritics\n * U+1ECC-1EE3: O and o with diacritics that are not supported by the font and combination of multiple diacritics\n * U+1EE4-1EF1: U and u with diacritics that are not supported by the font and combination of multiple diacritics\n * U+1EF4-1EF7: Y and y with diacritics that are not supported by the font and combination of multiple diacritics\n *\n */\nconst overrideFontFaceCSS = `\n\t@font-face {\n\t\tfont-family: '72override';\n\t\tunicode-range: U+0102-0103, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, U+1EE4-1EF1, U+1EF4-1EF7;\n\t\tsrc: local('Arial'), local('Helvetica'), local('sans-serif');\n\t}\n`;\n\nconst insertFontFace = () => {\n\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\n\t// Only set the main font if there is no OpenUI5 support, or there is, but OpenUI5 is not loaded\n\tif (!OpenUI5Support || !OpenUI5Support.isLoaded()) {\n\t\tinsertMainFontFace();\n\t}\n\n\t// Always set the override font - OpenUI5 in CSS Vars mode does not set it, unlike the main font\n\tinsertOverrideFontFace();\n};\n\nconst insertMainFontFace = () => {\n\tif (!document.querySelector(`head>style[data-ui5-font-face]`)) {\n\t\tcreateStyleInHead(fontFaceCSS, { \"data-ui5-font-face\": \"\" });\n\t}\n};\n\nconst insertOverrideFontFace = () => {\n\tif (!document.querySelector(`head>style[data-ui5-font-face-override]`)) {\n\t\tcreateStyleInHead(overrideFontFaceCSS, { \"data-ui5-font-face-override\": \"\" });\n\t}\n};\n\nexport default insertFontFace;\n","let polyfillLoadedPromise;\n\nconst whenPolyfillLoaded = () => {\n\tif (polyfillLoadedPromise) {\n\t\treturn polyfillLoadedPromise;\n\t}\n\n\tpolyfillLoadedPromise = new Promise(resolve => {\n\t\tif (window.WebComponents\n\t\t\t&& !window.WebComponents.ready\n\t\t\t&& window.WebComponents.waitFor) {\n\t\t\t// the polyfill loader is present\n\t\t\twindow.WebComponents.waitFor(() => {\n\t\t\t\t// the polyfills are loaded, safe to execute code depending on their APIs\n\t\t\t\tresolve();\n\t\t\t});\n\t\t} else {\n\t\t\t// polyfill loader missing, modern browsers only\n\t\t\tresolve();\n\t\t}\n\t});\n\n\treturn polyfillLoadedPromise;\n};\n\nexport default whenPolyfillLoaded;\n","import whenDOMReady from \"./util/whenDOMReady.js\";\nimport insertFontFace from \"./FontFace.js\";\nimport insertSystemCSSVars from \"./SystemCSSVars.js\";\nimport { getTheme } from \"./config/Theme.js\";\nimport applyTheme from \"./theming/applyTheme.js\";\nimport whenPolyfillLoaded from \"./compatibility/whenPolyfillLoaded.js\";\nimport { getFeature } from \"./FeaturesRegistry.js\";\n\nlet bootPromise;\n\nconst boot = () => {\n\tif (bootPromise) {\n\t\treturn bootPromise;\n\t}\n\n\tbootPromise = new Promise(async resolve => {\n\t\tconst OpenUI5Support = getFeature(\"OpenUI5Support\");\n\t\tif (OpenUI5Support) {\n\t\t\tawait OpenUI5Support.init();\n\t\t}\n\n\t\tawait whenDOMReady();\n\t\tawait applyTheme(getTheme());\n\t\tOpenUI5Support && OpenUI5Support.attachListeners();\n\t\tinsertFontFace();\n\t\tinsertSystemCSSVars();\n\t\tawait whenPolyfillLoaded();\n\t\tresolve();\n\t});\n\n\treturn bootPromise;\n};\n\nexport default boot;\n","import createStyleInHead from \"./util/createStyleInHead.js\";\n\nconst systemCSSVars = `\n\t:root {\n\t\t--_ui5_content_density:cozy;\n\t}\n\t\n\t[data-ui5-compact-size],\n\t.ui5-content-density-compact,\n\t.sapUiSizeCompact {\n\t\t--_ui5_content_density:compact;\n\t}\n\t\n\t[dir=\"rtl\"] {\n\t\t--_ui5_dir:rtl;\n\t}\n\t\n\t[dir=\"ltr\"] {\n\t\t--_ui5_dir:ltr;\n\t}\n`;\n\nconst insertSystemCSSVars = () => {\n\tif (document.querySelector(`head>style[data-ui5-system-css-vars]`)) {\n\t\treturn;\n\t}\n\n\tcreateStyleInHead(systemCSSVars, { \"data-ui5-system-css-vars\": \"\" });\n};\n\nexport default insertSystemCSSVars;\n","/**\n * Base class for all data types.\n *\n * @class\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.base.types.DataType\n * @public\n */\nclass DataType {\n\tstatic isValid(value) {\n\t}\n\n\tstatic generateTypeAcessors(types) {\n\t\tObject.keys(types).forEach(type => {\n\t\t\tObject.defineProperty(this, type, {\n\t\t\t\tget() {\n\t\t\t\t\treturn types[type];\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n}\n\nexport default DataType;\n","const isDescendantOf = (klass, baseKlass, inclusive = false) => {\n\tif (typeof klass !== \"function\" || typeof baseKlass !== \"function\") {\n\t\treturn false;\n\t}\n\tif (inclusive && klass === baseKlass) {\n\t\treturn true;\n\t}\n\tlet parent = klass;\n\tdo {\n\t\tparent = Object.getPrototypeOf(parent);\n\t} while (parent !== null && parent !== baseKlass);\n\treturn parent === baseKlass;\n};\n\nexport default isDescendantOf;\n","const kebabToCamelMap = new Map();\nconst camelToKebabMap = new Map();\n\nconst kebabToCamelCase = string => {\n\tif (!kebabToCamelMap.has(string)) {\n\t\tconst result = toCamelCase(string.split(\"-\"));\n\t\tkebabToCamelMap.set(string, result);\n\t}\n\treturn kebabToCamelMap.get(string);\n};\n\nconst camelToKebabCase = string => {\n\tif (!camelToKebabMap.has(string)) {\n\t\tconst result = string.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n\t\tcamelToKebabMap.set(string, result);\n\t}\n\treturn camelToKebabMap.get(string);\n};\n\nconst toCamelCase = parts => {\n\treturn parts.map((string, index) => {\n\t\treturn index === 0 ? string.toLowerCase() : string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n\t}).join(\"\");\n};\n\nexport { kebabToCamelCase, camelToKebabCase };\n","const isSlot = el => el && el instanceof HTMLElement && el.localName === \"slot\";\n\nexport default isSlot;\n","let suf;\nlet rulesObj = {\n\tinclude: [/^ui5-/],\n\texclude: [],\n};\nconst tagsCache = new Map(); // true/false means the tag should/should not be cached, undefined means not known yet.\n\n/**\n * Sets the suffix to be used for custom elements scoping, f.e. pass \"demo\" to get tags such as \"ui5-button-demo\".\n * Note: by default all tags starting with \"ui5-\" will be scoped, unless you change this by calling \"setCustomElementsScopingRules\"\n *\n * @public\n * @param suffix The scoping suffix\n */\nconst setCustomElementsScopingSuffix = suffix => {\n\tif (!suffix.match(/^[a-zA-Z0-9_-]+$/)) {\n\t\tthrow new Error(\"Only alphanumeric characters and dashes allowed for the scoping suffix\");\n\t}\n\n\tsuf = suffix;\n};\n\n/**\n * Returns the currently set scoping suffix, or undefined if not set.\n *\n * @public\n * @returns {String|undefined}\n */\nconst getCustomElementsScopingSuffix = () => {\n\treturn suf;\n};\n\n/**\n * Sets the rules, governing which custom element tags to scope and which not, f.e.\n * setCustomElementsScopingRules({include: [/^ui5-/]}, exclude: [/^ui5-mylib-/, /^ui5-carousel$/]);\n * will scope all elements starting with \"ui5-\" but not the ones starting with \"ui5-mylib-\" and not \"ui5-carousel\".\n *\n * @public\n * @param rules Object with \"include\" and \"exclude\" properties, both arrays of regular expressions. Note that \"include\"\n * rules are applied first and \"exclude\" rules second.\n */\nconst setCustomElementsScopingRules = rules => {\n\tif (!rules || !rules.include) {\n\t\tthrow new Error(`\"rules\" must be an object with at least an \"include\" property`);\n\t}\n\n\tif (!Array.isArray(rules.include) || rules.include.some(rule => !(rule instanceof RegExp))) {\n\t\tthrow new Error(`\"rules.include\" must be an array of regular expressions`);\n\t}\n\n\tif (rules.exclude && (!Array.isArray(rules.exclude) || rules.exclude.some(rule => !(rule instanceof RegExp)))) {\n\t\tthrow new Error(`\"rules.exclude\" must be an array of regular expressions`);\n\t}\n\n\trules.exclude = rules.exclude || [];\n\trulesObj = rules;\n\ttagsCache.clear(); // reset the cache upon setting new rules\n};\n\n/**\n * Returns the rules, governing which custom element tags to scope and which not. By default, all elements\n * starting with \"ui5-\" are scoped. The default rules are: {include: [/^ui5-/]}.\n *\n * @public\n * @returns {Object}\n */\nconst getCustomElementsScopingRules = () => {\n\treturn rulesObj;\n};\n\n/**\n * Determines whether custom elements with the given tag should be scoped or not.\n * The tag is first matched against the \"include\" rules and then against the \"exclude\" rules and the\n * result is cached until new rules are set.\n *\n * @public\n * @param tag\n */\nconst shouldScopeCustomElement = tag => {\n\tif (!tagsCache.has(tag)) {\n\t\tconst result = rulesObj.include.some(rule => tag.match(rule)) && !rulesObj.exclude.some(rule => tag.match(rule));\n\t\ttagsCache.set(tag, result);\n\t}\n\n\treturn tagsCache.get(tag);\n};\n\n/**\n * Returns the currently set scoping suffix, if any and if the tag should be scoped, or undefined otherwise.\n *\n * @public\n * @param tag\n * @returns {String}\n */\nconst getEffectiveScopingSuffixForTag = tag => {\n\tif (shouldScopeCustomElement(tag)) {\n\t\treturn getCustomElementsScopingSuffix();\n\t}\n};\n\nexport {\n\tsetCustomElementsScopingSuffix,\n\tgetCustomElementsScopingSuffix,\n\tsetCustomElementsScopingRules,\n\tgetCustomElementsScopingRules,\n\tshouldScopeCustomElement,\n\tgetEffectiveScopingSuffixForTag,\n};\n","import DataType from \"./types/DataType.js\";\nimport isDescendantOf from \"./util/isDescendantOf.js\";\nimport { camelToKebabCase } from \"./util/StringHelper.js\";\nimport isSlot from \"./util/isSlot.js\";\nimport { getEffectiveScopingSuffixForTag } from \"./CustomElementsScope.js\";\n\n/**\n *\n * @class\n * @public\n */\nclass UI5ElementMetadata {\n\tconstructor(metadata) {\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Only intended for use by UI5Element.js\n\t * @protected\n\t */\n\tstatic validatePropertyValue(value, propData) {\n\t\tconst isMultiple = propData.multiple;\n\t\tif (isMultiple) {\n\t\t\treturn value.map(propValue => validateSingleProperty(propValue, propData));\n\t\t}\n\t\treturn validateSingleProperty(value, propData);\n\t}\n\n\t/**\n\t * Only intended for use by UI5Element.js\n\t * @protected\n\t */\n\tstatic validateSlotValue(value, slotData) {\n\t\treturn validateSingleSlot(value, slotData);\n\t}\n\n\t/**\n\t * Returns the tag of the UI5 Element without the scope\n\t * @public\n\t */\n\tgetPureTag() {\n\t\treturn this.metadata.tag;\n\t}\n\n\t/**\n\t * Returns the tag of the UI5 Element\n\t * @public\n\t */\n\tgetTag() {\n\t\tconst pureTag = this.metadata.tag;\n\t\tconst suffix = getEffectiveScopingSuffixForTag(pureTag);\n\t\tif (!suffix) {\n\t\t\treturn pureTag;\n\t\t}\n\n\t\treturn `${pureTag}-${suffix}`;\n\t}\n\n\t/**\n\t * Used to get the tag we need to register for backwards compatibility\n\t * @public\n\t */\n\tgetAltTag() {\n\t\tconst pureAltTag = this.metadata.altTag;\n\t\tif (!pureAltTag) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst suffix = getEffectiveScopingSuffixForTag(pureAltTag);\n\t\tif (!suffix) {\n\t\t\treturn pureAltTag;\n\t\t}\n\n\t\treturn `${pureAltTag}-${suffix}`;\n\t}\n\n\t/**\n\t * Determines whether a property should have an attribute counterpart\n\t * @public\n\t * @param propName\n\t * @returns {boolean}\n\t */\n\thasAttribute(propName) {\n\t\tconst propData = this.getProperties()[propName];\n\t\treturn propData.type !== Object && !propData.noAttribute;\n\t}\n\n\t/**\n\t * Returns an array with the properties of the UI5 Element (in camelCase)\n\t * @public\n\t * @returns {string[]}\n\t */\n\tgetPropertiesList() {\n\t\treturn Object.keys(this.getProperties());\n\t}\n\n\t/**\n\t * Returns an array with the attributes of the UI5 Element (in kebab-case)\n\t * @public\n\t * @returns {string[]}\n\t */\n\tgetAttributesList() {\n\t\treturn this.getPropertiesList().filter(this.hasAttribute, this).map(camelToKebabCase);\n\t}\n\n\t/**\n\t * Returns an object with key-value pairs of slots and their metadata definitions\n\t * @public\n\t */\n\tgetSlots() {\n\t\treturn this.metadata.slots || {};\n\t}\n\n\t/**\n\t * Determines whether this UI5 Element has a default slot of type Node, therefore can slot text\n\t * @returns {boolean}\n\t */\n\tcanSlotText() {\n\t\tconst defaultSlot = this.getSlots().default;\n\t\treturn defaultSlot && defaultSlot.type === Node;\n\t}\n\n\t/**\n\t * Determines whether this UI5 Element supports any slots\n\t * @public\n\t */\n\thasSlots() {\n\t\treturn !!Object.entries(this.getSlots()).length;\n\t}\n\n\t/**\n\t * Determines whether this UI5 Element supports any slots with \"individualSlots: true\"\n\t * @public\n\t */\n\thasIndividualSlots() {\n\t\treturn this.slotsAreManaged() && Object.entries(this.getSlots()).some(([_slotName, slotData]) => slotData.individualSlots);\n\t}\n\n\t/**\n\t * Determines whether this UI5 Element needs to invalidate if children are added/removed/changed\n\t * @public\n\t */\n\tslotsAreManaged() {\n\t\treturn !!this.metadata.managedSlots;\n\t}\n\n\t/**\n\t * Returns an object with key-value pairs of properties and their metadata definitions\n\t * @public\n\t */\n\tgetProperties() {\n\t\treturn this.metadata.properties || {};\n\t}\n\n\t/**\n\t * Returns an object with key-value pairs of events and their metadata definitions\n\t * @public\n\t */\n\tgetEvents() {\n\t\treturn this.metadata.events || {};\n\t}\n\n\t/**\n\t * Determines whether this UI5 Element has any translatable texts (needs to be invalidated upon language change)\n\t * @returns {boolean}\n\t */\n\tisLanguageAware() {\n\t\treturn !!this.metadata.languageAware;\n\t}\n}\n\nconst validateSingleProperty = (value, propData) => {\n\tconst propertyType = propData.type;\n\n\tif (propertyType === Boolean) {\n\t\treturn typeof value === \"boolean\" ? value : false;\n\t}\n\tif (propertyType === String) {\n\t\treturn (typeof value === \"string\" || typeof value === \"undefined\" || value === null) ? value : value.toString();\n\t}\n\tif (propertyType === Object) {\n\t\treturn typeof value === \"object\" ? value : propData.defaultValue;\n\t}\n\tif (isDescendantOf(propertyType, DataType)) {\n\t\treturn propertyType.isValid(value) ? value : propData.defaultValue;\n\t}\n};\n\nconst validateSingleSlot = (value, slotData) => {\n\tif (value === null) {\n\t\treturn value;\n\t}\n\n\tconst getSlottedNodes = el => {\n\t\tif (isSlot(el)) {\n\t\t\treturn el.assignedNodes({ flatten: true }).filter(item => item instanceof HTMLElement);\n\t\t}\n\n\t\treturn [el];\n\t};\n\n\tconst slottedNodes = getSlottedNodes(value);\n\tslottedNodes.forEach(el => {\n\t\tif (!(el instanceof slotData.type)) {\n\t\t\tthrow new Error(`${el} is not of type ${slotData.type}`);\n\t\t}\n\t});\n\n\treturn value;\n};\n\nexport default UI5ElementMetadata;\n","import { getCustomElementsScopingSuffix, shouldScopeCustomElement } from \"../CustomElementsScope.js\";\n\n/**\n * Runs a component's template with the component's current state, while also scoping HTML\n *\n * @param template - the template to execute\n * @param component - the component\n * @public\n * @returns {*}\n */\nconst executeTemplate = (template, component) => {\n\tconst tagsToScope = component.constructor.getUniqueDependencies().map(dep => dep.getMetadata().getPureTag()).filter(shouldScopeCustomElement);\n\tconst scope = getCustomElementsScopingSuffix();\n\treturn template(component, tagsToScope, scope);\n};\n\nexport default executeTemplate;\n","const getSingletonElementInstance = (tag, parentElement = document.body) => {\n\tlet el = document.querySelector(tag);\n\n\tif (el) {\n\t\treturn el;\n\t}\n\n\tel = document.createElement(tag);\n\n\treturn parentElement.insertBefore(el, parentElement.firstChild);\n};\n\nexport default getSingletonElementInstance;\n","import getSingletonElementInstance from \"./util/getSingletonElementInstance.js\";\n\nconst getStaticAreaInstance = () => getSingletonElementInstance(\"ui5-static-area\");\n\nconst removeStaticArea = () => {\n\tgetStaticAreaInstance().destroy();\n};\n\nclass StaticAreaElement extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tget isUI5Element() {\n\t\treturn true;\n\t}\n\n\tdestroy() {\n\t\tconst staticAreaDomRef = document.querySelector(this.tagName.toLowerCase());\n\t\tstaticAreaDomRef.parentElement.removeChild(staticAreaDomRef);\n\t}\n}\n\nif (!customElements.get(\"ui5-static-area\")) {\n\tcustomElements.define(\"ui5-static-area\", StaticAreaElement);\n}\n\nexport {\n\tgetStaticAreaInstance,\n\tremoveStaticArea,\n};\n","const getStylesString = styles => {\n\tif (Array.isArray(styles)) {\n\t\treturn flatten(styles).join(\" \");\n\t}\n\n\treturn styles;\n};\n\nconst flatten = arr => {\n\treturn arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);\n};\n\nexport default getStylesString;\n","import { getStaticAreaInstance, removeStaticArea } from \"./StaticArea.js\";\nimport RenderScheduler from \"./RenderScheduler.js\";\nimport getStylesString from \"./theming/getStylesString.js\";\nimport executeTemplate from \"./renderer/executeTemplate.js\";\n\n/**\n * @class\n * @author SAP SE\n * @private\n * Defines and takes care of ui5-static-are-item items\n */\nclass StaticAreaItem {\n\tconstructor(_ui5ElementContext) {\n\t\tthis.ui5ElementContext = _ui5ElementContext;\n\t\tthis._rendered = false;\n\t}\n\n\tisRendered() {\n\t\treturn this._rendered;\n\t}\n\n\t/**\n\t * @protected\n\t */\n\t_updateFragment() {\n\t\tconst renderResult = executeTemplate(this.ui5ElementContext.constructor.staticAreaTemplate, this.ui5ElementContext),\n\t\t\tstylesToAdd = window.ShadyDOM ? false : getStylesString(this.ui5ElementContext.constructor.staticAreaStyles);\n\n\t\tif (!this.staticAreaItemDomRef) {\n\t\t\t// Initial rendering of fragment\n\n\t\t\tthis.staticAreaItemDomRef = document.createElement(\"ui5-static-area-item\");\n\t\t\tthis.staticAreaItemDomRef.attachShadow({ mode: \"open\" });\n\t\t\tthis.staticAreaItemDomRef.classList.add(this.ui5ElementContext._id); // used for getting the popover in the tests\n\n\t\t\tgetStaticAreaInstance().appendChild(this.staticAreaItemDomRef);\n\t\t\tthis._rendered = true;\n\t\t}\n\n\t\tthis._updateContentDensity(this.ui5ElementContext.isCompact);\n\t\tthis.ui5ElementContext.constructor.render(renderResult, this.staticAreaItemDomRef.shadowRoot, stylesToAdd, { eventContext: this.ui5ElementContext });\n\t}\n\n\t/**\n\t * @protected\n\t */\n\t_removeFragmentFromStaticArea() {\n\t\tif (!this.staticAreaItemDomRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst staticArea = getStaticAreaInstance();\n\n\t\tstaticArea.removeChild(this.staticAreaItemDomRef);\n\n\t\tthis.staticAreaItemDomRef = null;\n\n\t\t// remove static area\n\t\tif (staticArea.childElementCount < 1) {\n\t\t\tremoveStaticArea();\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t */\n\t_updateContentDensity(isCompact) {\n\t\tif (!this.staticAreaItemDomRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isCompact) {\n\t\t\tthis.staticAreaItemDomRef.classList.add(\"sapUiSizeCompact\");\n\t\t\tthis.staticAreaItemDomRef.classList.add(\"ui5-content-density-compact\");\n\t\t} else {\n\t\t\tthis.staticAreaItemDomRef.classList.remove(\"sapUiSizeCompact\");\n\t\t\tthis.staticAreaItemDomRef.classList.remove(\"ui5-content-density-compact\");\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * Returns reference to the DOM element where the current fragment is added.\n\t */\n\tasync getDomRef() {\n\t\tif (!this._rendered || !this.staticAreaItemDomRef) {\n\t\t\tthis._updateFragment();\n\t\t}\n\t\tawait RenderScheduler.whenDOMUpdated(); // Wait for the content of the ui5-static-area-item to be rendered\n\t\treturn this.staticAreaItemDomRef && this.staticAreaItemDomRef.shadowRoot;\n\t}\n}\n\nclass StaticAreaItemElement extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tget isUI5Element() {\n\t\treturn true;\n\t}\n}\n\nif (!customElements.get(\"ui5-static-area-item\")) {\n\tcustomElements.define(\"ui5-static-area-item\", StaticAreaItemElement);\n}\n\nexport default StaticAreaItem;\n","// Shorthands\nconst w = window;\n\n// Map of observer objects per dom node\nconst observers = new WeakMap();\n\n/**\n * Implements universal DOM node observation methods.\n */\nclass DOMObserver {\n\tconstructor() {\n\t\tthrow new Error(\"Static class\");\n\t}\n\n\t/**\n\t * This function abstracts out mutation observer usage inside shadow DOM.\n\t * For native shadow DOM the native mutation observer is used.\n\t * When the polyfill is used, the observeChildren ShadyDOM method is used instead.\n\t *\n\t * @throws Exception\n\t * Note: does not allow several mutation observers per node. If there is a valid use-case, this behavior can be changed.\n\t *\n\t * @param node\n\t * @param callback\n\t * @param options - Only used for the native mutation observer\n\t */\n\tstatic observeDOMNode(node, callback, options) {\n\t\tlet observerObject = observers.get(node);\n\t\tif (observerObject) {\n\t\t\tthrow new Error(\"A mutation/ShadyDOM observer is already assigned to this node.\");\n\t\t}\n\n\t\tif (w.ShadyDOM) {\n\t\t\tobserverObject = w.ShadyDOM.observeChildren(node, callback);\n\t\t} else {\n\t\t\tobserverObject = new MutationObserver(callback);\n\t\t\tobserverObject.observe(node, options);\n\t\t}\n\n\t\tobservers.set(node, observerObject);\n\t}\n\n\t/**\n\t * De-registers the mutation observer, depending on its type\n\t * @param node\n\t */\n\tstatic unobserveDOMNode(node) {\n\t\tconst observerObject = observers.get(node);\n\t\tif (!observerObject) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (observerObject instanceof MutationObserver) {\n\t\t\tobserverObject.disconnect();\n\t\t} else {\n\t\t\tw.ShadyDOM.unobserveChildren(observerObject);\n\t\t}\n\t\tobservers.delete(node);\n\t}\n}\n\nexport default DOMObserver;\n","import { getNoConflict as getConfiguredNoConflict } from \"../InitialConfiguration.js\";\n\n// Fire these events even with noConflict: true\nconst excludeList = [\n\t\"value-changed\",\n];\n\nconst shouldFireOriginalEvent = eventName => {\n\treturn excludeList.includes(eventName);\n};\n\nlet noConflict;\n\nconst shouldNotFireOriginalEvent = eventName => {\n\tconst nc = getNoConflict();\n\treturn !(nc.events && nc.events.includes && nc.events.includes(eventName));\n};\n\nconst getNoConflict = () => {\n\tif (noConflict === undefined) {\n\t\tnoConflict = getConfiguredNoConflict();\n\t}\n\n\treturn noConflict;\n};\n\nconst skipOriginalEvent = eventName => {\n\tconst nc = getNoConflict();\n\n\t// Always fire these events\n\tif (shouldFireOriginalEvent(eventName)) {\n\t\treturn false;\n\t}\n\n\t// Read from the configuration\n\tif (nc === true) {\n\t\treturn true;\n\t}\n\n\treturn !shouldNotFireOriginalEvent(eventName);\n};\n\nconst setNoConflict = noConflictData => {\n\tnoConflict = noConflictData;\n};\n\nexport {\n\tgetNoConflict,\n\tsetNoConflict,\n\tskipOriginalEvent,\n};\n","import { getRTL as getConfiguredRTL } from \"../InitialConfiguration.js\";\nimport { getLanguage } from \"./Language.js\";\nimport getDesigntimePropertyAsArray from \"../util/getDesigntimePropertyAsArray.js\";\nimport detectNavigatorLanguage from \"../util/detectNavigatorLanguage.js\";\n\nconst M_ISO639_OLD_TO_NEW = {\n\t\"iw\": \"he\",\n\t\"ji\": \"yi\",\n\t\"in\": \"id\",\n\t\"sh\": \"sr\",\n};\n\nconst A_RTL_LOCALES = getDesigntimePropertyAsArray(\"$cldr-rtl-locales:ar,fa,he$\") || [];\n\nconst impliesRTL = language => {\n\tlanguage = (language && M_ISO639_OLD_TO_NEW[language]) || language;\n\n\treturn A_RTL_LOCALES.indexOf(language) >= 0;\n};\n\nconst getRTL = () => {\n\tconst configurationRTL = getConfiguredRTL();\n\n\tif (configurationRTL !== null) {\n\t\treturn !!configurationRTL;\n\t}\n\n\treturn impliesRTL(getLanguage() || detectNavigatorLanguage());\n};\n\nexport { getRTL }; // eslint-disable-line\n","export default value => {\n\tconst m = /\\$([-a-z0-9A-Z._]+)(?::([^$]*))?\\$/.exec(value);\n\treturn m && m[2] ? m[2].split(/,/) : null;\n};\n","import RenderScheduler from \"../RenderScheduler.js\";\nimport EventProvider from \"../EventProvider.js\";\n\nconst eventProvider = new EventProvider();\nconst CUSTOM_CSS_CHANGE = \"CustomCSSChange\";\n\nconst attachCustomCSSChange = listener => {\n\teventProvider.attachEvent(CUSTOM_CSS_CHANGE, listener);\n};\n\nconst detachCustomCSSChange = listener => {\n\teventProvider.detachEvent(CUSTOM_CSS_CHANGE, listener);\n};\n\nconst fireCustomCSSChange = tag => {\n\treturn eventProvider.fireEvent(CUSTOM_CSS_CHANGE, tag);\n};\n\nconst customCSSFor = {};\n\nconst addCustomCSS = (tag, css) => {\n\tif (!customCSSFor[tag]) {\n\t\tcustomCSSFor[tag] = [];\n\t}\n\tcustomCSSFor[tag].push(css);\n\tfireCustomCSSChange(tag);\n\n\tRenderScheduler.reRenderAllUI5Elements({ tag });\n};\n\nconst getCustomCSS = tag => {\n\treturn customCSSFor[tag] ? customCSSFor[tag].join(\"\") : \"\";\n};\n\nexport {\n\taddCustomCSS,\n\tgetCustomCSS,\n\tattachCustomCSSChange,\n\tdetachCustomCSSChange,\n};\n","import { getCustomCSS, attachCustomCSSChange } from \"./CustomStyle.js\";\nimport getStylesString from \"./getStylesString.js\";\n\nconst effectiveStyleMap = new Map();\n\nattachCustomCSSChange(tag => {\n\teffectiveStyleMap.delete(tag);\n});\n\nconst getEffectiveStyle = ElementClass => {\n\tconst tag = ElementClass.getMetadata().getTag();\n\n\tif (!effectiveStyleMap.has(tag)) {\n\t\tconst customStyle = getCustomCSS(tag) || \"\";\n\t\tconst builtInStyles = getStylesString(ElementClass.styles);\n\t\tconst effectiveStyle = `${builtInStyles} ${customStyle}`;\n\t\teffectiveStyleMap.set(tag, effectiveStyle);\n\t}\n\n\treturn effectiveStyleMap.get(tag);\n};\n\nexport default getEffectiveStyle;\n","import getEffectiveStyle from \"./getEffectiveStyle.js\";\nimport { attachCustomCSSChange } from \"./CustomStyle.js\";\n\nconst constructableStyleMap = new Map();\n\nattachCustomCSSChange(tag => {\n\tconstructableStyleMap.delete(tag);\n});\n\n/**\n * Returns (and caches) a constructable style sheet for a web component class\n * Note: Chrome\n * @param ElementClass\n * @returns {*}\n */\nconst getConstructableStyle = ElementClass => {\n\tconst tag = ElementClass.getMetadata().getTag();\n\n\tif (!constructableStyleMap.has(tag)) {\n\t\tconst styleContent = getEffectiveStyle(ElementClass);\n\t\tconst style = new CSSStyleSheet();\n\t\tstyle.replaceSync(styleContent);\n\t\tconstructableStyleMap.set(tag, [style]);\n\t}\n\n\treturn constructableStyleMap.get(tag);\n};\n\nexport default getConstructableStyle;\n","const findClosingParenthesisPos = (str, openingParenthesisPos) => {\n\tlet opened = 1;\n\tfor (let pos = openingParenthesisPos + 1; pos < str.length; pos++) {\n\t\tconst char = str.charAt(pos);\n\t\tif (char === \"(\") {\n\t\t\topened++;\n\t\t} else if (char === \")\") {\n\t\t\topened--;\n\t\t}\n\t\tif (opened === 0) {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\nconst replaceSelector = (str, selector, selectorStartPos, replacement) => {\n\tconst charAfterSelectorPos = selectorStartPos + selector.length;\n\tconst charAfterSelector = str.charAt(charAfterSelectorPos);\n\n\tconst upToSelector = str.substring(0, selectorStartPos) + replacement;\n\tif (charAfterSelector === \"(\") {\n\t\tconst closingParenthesisPos = findClosingParenthesisPos(str, charAfterSelectorPos);\n\t\treturn upToSelector + str.substring(charAfterSelectorPos + 1, closingParenthesisPos) + str.substring(closingParenthesisPos + 1);\n\t}\n\n\treturn upToSelector + str.substring(charAfterSelectorPos);\n};\n\n/**\n * :host => ui5-button\n * :host([expr]) => ui5-button[expr]\n * ::slotted(expr) => expr\n * @param str - source string\n * @param selector - :host or ::slotted\n * @param replacement - normally tag name\n * @returns {*}\n */\nconst replaceSelectors = (str, selector, replacement) => {\n\tlet selectorStartPos = str.indexOf(selector);\n\twhile (selectorStartPos !== -1) {\n\t\tstr = replaceSelector(str, selector, selectorStartPos, replacement);\n\t\tselectorStartPos = str.indexOf(selector);\n\t}\n\treturn str;\n};\n\nconst adaptLinePart = (line, tag, pureTag) => {\n\tline = line.trim();\n\tline = replaceSelectors(line, \"::slotted\", ``); // first remove all ::slotted() occurrences\n\n\t// Host selector - replace it\n\tif (line.startsWith(\":host\")) {\n\t\treturn replaceSelector(line, \":host\", 0, tag);\n\t}\n\n\t// Leave out @keyframes and keyframe values (0%, 100%, etc...)\n\t// csso shortens '100%' -> 'to', make sure to leave it untouched\n\tif (line.match(/^[@0-9]/) || line === \"to\" || line === \"to{\") {\n\t\treturn line;\n\t}\n\n\t// IE specific selector (directly written with the tag, f.e. ui5-button {}) - keep it\n\tif (line.match(new RegExp(`^${tag}[^a-zA-Z0-9-]`))) {\n\t\treturn line;\n\t}\n\n\t// IE specific selector (directly written with the tag attribute, f.e. [ui5-button] {}) - keep it\n\tif (pureTag && line.startsWith(`[${pureTag}]`)) {\n\t\treturn line;\n\t}\n\n\t// No host and no tag in the beginning of the selector - prepend the tag\n\treturn `${tag} ${line}`;\n};\n\nconst adaptCSSForIE = (str, tag, pureTag) => {\n\tstr = str.replace(/\\n/g, ` `);\n\tstr = str.replace(/([{}])/g, `$1\\n`);\n\tlet result = ``;\n\tconst lines = str.split(`\\n`);\n\tlines.forEach(line => {\n\t\tconst mustProcess = line.match(/{$/); // Only work on lines that end on {, otherwise just append to result\n\t\tif (mustProcess) {\n\t\t\tconst lineParts = line.split(\",\");\n\t\t\tconst processedLineParts = lineParts.map(linePart => {\n\t\t\t\treturn adaptLinePart(linePart, tag, pureTag);\n\t\t\t});\n\t\t\tline = processedLineParts.join(\",\");\n\t\t}\n\t\tresult = `${result}${line}`;\n\t});\n\treturn result;\n};\n\nexport default adaptCSSForIE;\n","import createStyleInHead from \"../util/createStyleInHead.js\";\nimport getEffectiveStyle from \"./getEffectiveStyle.js\";\nimport adaptCSSForIE from \"./adaptCSSForIE.js\";\nimport { ponyfillNeeded, schedulePonyfill } from \"./CSSVarsPonyfill.js\";\nimport { attachCustomCSSChange } from \"./CustomStyle.js\";\n\nconst IEStyleSet = new Set();\n\nattachCustomCSSChange(tag => {\n\tIEStyleSet.delete(tag);\n});\n\nconst getStaticStyle = ElementClass => {\n\tlet componentStaticStyles = ElementClass.staticAreaStyles;\n\tif (Array.isArray(componentStaticStyles)) {\n\t\tcomponentStaticStyles = componentStaticStyles.join(\" \");\n\t}\n\n\treturn componentStaticStyles;\n};\n\n/**\n * Creates the needed CSS for a web component class in the head tag\n * Note: IE11, Edge\n * @param ElementClass\n */\nconst createComponentStyleTag = ElementClass => {\n\tconst tag = ElementClass.getMetadata().getTag();\n\tconst pureTag = ElementClass.getMetadata().getPureTag();\n\tif (IEStyleSet.has(tag)) {\n\t\treturn;\n\t}\n\n\tlet cssContent = getEffectiveStyle(ElementClass);\n\tcssContent = adaptCSSForIE(cssContent, tag, pureTag);\n\n\t// Append static CSS, if any, for IE\n\tlet staticCssContent = getStaticStyle(ElementClass);\n\tif (staticCssContent) {\n\t\tstaticCssContent = adaptCSSForIE(staticCssContent, \"ui5-static-area-item\");\n\t\tcssContent = `${cssContent} ${staticCssContent}`;\n\t}\n\n\tcreateStyleInHead(cssContent, {\n\t\t\"data-ui5-element-styles\": tag,\n\t});\n\tif (ponyfillNeeded()) {\n\t\tschedulePonyfill();\n\t}\n\n\tIEStyleSet.add(tag);\n};\n\nexport default createComponentStyleTag;\n","import DataType from \"./DataType.js\";\n\nclass Integer extends DataType {\n\tstatic isValid(value) {\n\t\treturn Number.isInteger(value);\n\t}\n}\n\nexport default Integer;\n","import DataType from \"./DataType.js\";\n\nclass Float extends DataType {\n\tstatic isValid(value) {\n\t\t// Assuming that integers are floats as well!\n\t\treturn Number(value) === value;\n\t}\n}\n\nexport default Float;\n","// Note: disabled is present in IE so we explicitly allow it here.\n// Others, such as title/hidden, we explicitly override, so valid too\nconst allowList = [\n\t\"disabled\",\n\t\"title\",\n\t\"hidden\",\n\t\"role\",\n\t\"draggable\",\n];\n\n/**\n * Checks whether a property name is valid (does not collide with existing DOM API properties)\n *\n * @param name\n * @returns {boolean}\n */\nconst isValidPropertyName = name => {\n\tif (allowList.includes(name) || name.startsWith(\"aria\")) {\n\t\treturn true;\n\t}\n\tconst classes = [\n\t\tHTMLElement,\n\t\tElement,\n\t\tNode,\n\t];\n\treturn !classes.some(klass => klass.prototype.hasOwnProperty(name)); // eslint-disable-line\n};\n\nexport default isValidPropertyName;\n","import merge from \"./thirdparty/merge.js\";\nimport boot from \"./boot.js\";\nimport UI5ElementMetadata from \"./UI5ElementMetadata.js\";\nimport executeTemplate from \"./renderer/executeTemplate.js\";\nimport StaticAreaItem from \"./StaticAreaItem.js\";\nimport RenderScheduler from \"./RenderScheduler.js\";\nimport { registerTag, isTagRegistered, recordTagRegistrationFailure } from \"./CustomElementsRegistry.js\";\nimport DOMObserver from \"./compatibility/DOMObserver.js\";\nimport { skipOriginalEvent } from \"./config/NoConflict.js\";\nimport { getRTL } from \"./config/RTL.js\";\nimport getConstructableStyle from \"./theming/getConstructableStyle.js\";\nimport createComponentStyleTag from \"./theming/createComponentStyleTag.js\";\nimport getEffectiveStyle from \"./theming/getEffectiveStyle.js\";\nimport Integer from \"./types/Integer.js\";\nimport Float from \"./types/Float.js\";\nimport { kebabToCamelCase, camelToKebabCase } from \"./util/StringHelper.js\";\nimport isValidPropertyName from \"./util/isValidPropertyName.js\";\nimport isSlot from \"./util/isSlot.js\";\nimport { markAsRtlAware } from \"./locale/RTLAwareRegistry.js\";\n\nconst metadata = {\n\tevents: {\n\t\t\"_property-change\": {},\n\t},\n};\n\nlet autoId = 0;\n\nconst elementTimeouts = new Map();\nconst uniqueDependenciesCache = new Map();\n\nconst GLOBAL_CONTENT_DENSITY_CSS_VAR = \"--_ui5_content_density\";\nconst GLOBAL_DIR_CSS_VAR = \"--_ui5_dir\";\n\n/**\n * Base class for all UI5 Web Components\n *\n * @class\n * @constructor\n * @author SAP SE\n * @alias sap.ui.webcomponents.base.UI5Element\n * @extends HTMLElement\n * @public\n */\nclass UI5Element extends HTMLElement {\n\tconstructor() {\n\t\tsuper();\n\t\tthis._propertyChangeListeners = new Set();\n\t\tthis._initializeState();\n\t\tthis._upgradeAllProperties();\n\t\tthis._initializeContainers();\n\t\tthis._upToDate = false;\n\t\tthis._inDOM = false;\n\t\tthis._fullyConnected = false;\n\n\t\tlet deferredResolve;\n\t\tthis._domRefReadyPromise = new Promise(resolve => {\n\t\t\tdeferredResolve = resolve;\n\t\t});\n\t\tthis._domRefReadyPromise._deferredResolve = deferredResolve;\n\n\t\tthis._monitoredChildProps = new Map();\n\t\tthis._shouldInvalidateParent = false;\n\t}\n\n\taddEventListener(type, listener, options) {\n\t\tif (type === \"_property-change\") {\n\t\t\tthis._propertyChangeListeners.add(listener);\n\t\t}\n\t\treturn super.addEventListener(type, listener, options);\n\t}\n\n\tremoveEventListener(type, listener, options) {\n\t\tif (type === \"_property-change\") {\n\t\t\tthis._propertyChangeListeners.delete(listener);\n\t\t}\n\t\treturn super.removeEventListener(type, listener, options);\n\t}\n\n\t_hasPropertyChangeListeners() {\n\t\treturn !!this._propertyChangeListeners.size;\n\t}\n\n\t/**\n\t * Returns a unique ID for this UI5 Element\n\t *\n\t * @deprecated - This property is not guaranteed in future releases\n\t * @protected\n\t */\n\tget _id() {\n\t\tif (!this.__id) {\n\t\t\tthis.__id = `ui5wc_${++autoId}`;\n\t\t}\n\n\t\treturn this.__id;\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_initializeContainers() {\n\t\tconst needsShadowDOM = this.constructor._needsShadowDOM();\n\t\tconst needsStaticArea = this.constructor._needsStaticArea();\n\n\t\t// Init Shadow Root\n\t\tif (needsShadowDOM) {\n\t\t\tthis.attachShadow({ mode: \"open\" });\n\t\t}\n\n\t\t// Init StaticAreaItem only if needed\n\t\tif (needsStaticArea) {\n\t\t\tthis.staticAreaItem = new StaticAreaItem(this);\n\t\t}\n\t}\n\n\t/**\n\t * Do not call this method from derivatives of UI5Element, use \"onEnterDOM\" only\n\t * @private\n\t */\n\tasync connectedCallback() {\n\t\tthis.setAttribute(this.constructor.getMetadata().getPureTag(), \"\");\n\n\t\tconst needsShadowDOM = this.constructor._needsShadowDOM();\n\t\tconst slotsAreManaged = this.constructor.getMetadata().slotsAreManaged();\n\n\t\tthis._inDOM = true;\n\n\t\tif (slotsAreManaged) {\n\t\t\t// always register the observer before yielding control to the main thread (await)\n\t\t\tthis._startObservingDOMChildren();\n\t\t\tawait this._processChildren();\n\t\t}\n\n\t\t// Render the Shadow DOM\n\t\tif (needsShadowDOM) {\n\t\t\tif (!this.shadowRoot) { // Workaround for Firefox74 bug\n\t\t\t\tawait Promise.resolve();\n\t\t\t}\n\n\t\t\tif (!this._inDOM) { // Component removed from DOM while _processChildren was running\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tRenderScheduler.register(this);\n\t\t\tRenderScheduler.renderImmediately(this);\n\t\t\tthis._domRefReadyPromise._deferredResolve();\n\t\t\tthis._fullyConnected = true;\n\t\t\tif (typeof this.onEnterDOM === \"function\") {\n\t\t\t\tthis.onEnterDOM();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Do not call this method from derivatives of UI5Element, use \"onExitDOM\" only\n\t * @private\n\t */\n\tdisconnectedCallback() {\n\t\tconst needsShadowDOM = this.constructor._needsShadowDOM();\n\t\tconst needsStaticArea = this.constructor._needsStaticArea();\n\t\tconst slotsAreManaged = this.constructor.getMetadata().slotsAreManaged();\n\n\t\tthis._inDOM = false;\n\n\t\tif (slotsAreManaged) {\n\t\t\tthis._stopObservingDOMChildren();\n\t\t}\n\n\t\tif (needsShadowDOM) {\n\t\t\tRenderScheduler.deregister(this);\n\t\t\tif (this._fullyConnected) {\n\t\t\t\tif (typeof this.onExitDOM === \"function\") {\n\t\t\t\t\tthis.onExitDOM();\n\t\t\t\t}\n\t\t\t\tthis._fullyConnected = false;\n\t\t\t}\n\t\t}\n\n\t\tif (needsStaticArea) {\n\t\t\tthis.staticAreaItem._removeFragmentFromStaticArea();\n\t\t}\n\n\t\tRenderScheduler.cancelRender(this);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_startObservingDOMChildren() {\n\t\tconst shouldObserveChildren = this.constructor.getMetadata().hasSlots();\n\t\tif (!shouldObserveChildren) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst canSlotText = this.constructor.getMetadata().canSlotText();\n\t\tconst mutationObserverOptions = {\n\t\t\tchildList: true,\n\t\t\tsubtree: canSlotText,\n\t\t\tcharacterData: true,\n\t\t};\n\t\tDOMObserver.observeDOMNode(this, this._processChildren.bind(this), mutationObserverOptions);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_stopObservingDOMChildren() {\n\t\tDOMObserver.unobserveDOMNode(this);\n\t}\n\n\t/**\n\t * Note: this method is also manually called by \"compatibility/patchNodeValue.js\"\n\t * @private\n\t */\n\tasync _processChildren() {\n\t\tconst hasSlots = this.constructor.getMetadata().hasSlots();\n\t\tif (hasSlots) {\n\t\t\tawait this._updateSlots();\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\tasync _updateSlots() {\n\t\tconst slotsMap = this.constructor.getMetadata().getSlots();\n\t\tconst canSlotText = this.constructor.getMetadata().canSlotText();\n\t\tconst domChildren = Array.from(canSlotText ? this.childNodes : this.children);\n\n\t\t// Init the _state object based on the supported slots\n\t\tfor (const [slotName, slotData] of Object.entries(slotsMap)) { // eslint-disable-line\n\t\t\tthis._clearSlot(slotName, slotData);\n\t\t}\n\n\t\tconst autoIncrementMap = new Map();\n\t\tconst slottedChildrenMap = new Map();\n\n\t\tconst allChildrenUpgraded = domChildren.map(async (child, idx) => {\n\t\t\t// Determine the type of the child (mainly by the slot attribute)\n\t\t\tconst slotName = this.constructor._getSlotName(child);\n\t\t\tconst slotData = slotsMap[slotName];\n\n\t\t\t// Check if the slotName is supported\n\t\t\tif (slotData === undefined) {\n\t\t\t\tconst validValues = Object.keys(slotsMap).join(\", \");\n\t\t\t\tconsole.warn(`Unknown slotName: ${slotName}, ignoring`, child, `Valid values are: ${validValues}`); // eslint-disable-line\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For children that need individual slots, calculate them\n\t\t\tif (slotData.individualSlots) {\n\t\t\t\tconst nextIndex = (autoIncrementMap.get(slotName) || 0) + 1;\n\t\t\t\tautoIncrementMap.set(slotName, nextIndex);\n\t\t\t\tchild._individualSlot = `${slotName}-${nextIndex}`;\n\t\t\t}\n\n\t\t\t// Await for not-yet-defined custom elements\n\t\t\tif (child instanceof HTMLElement) {\n\t\t\t\tconst localName = child.localName;\n\t\t\t\tconst isCustomElement = localName.includes(\"-\");\n\t\t\t\tif (isCustomElement) {\n\t\t\t\t\tconst isDefined = window.customElements.get(localName);\n\t\t\t\t\tif (!isDefined) {\n\t\t\t\t\t\tconst whenDefinedPromise = window.customElements.whenDefined(localName); // Class registered, but instances not upgraded yet\n\t\t\t\t\t\tlet timeoutPromise = elementTimeouts.get(localName);\n\t\t\t\t\t\tif (!timeoutPromise) {\n\t\t\t\t\t\t\ttimeoutPromise = new Promise(resolve => setTimeout(resolve, 1000));\n\t\t\t\t\t\t\telementTimeouts.set(localName, timeoutPromise);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait Promise.race([whenDefinedPromise, timeoutPromise]);\n\t\t\t\t\t}\n\t\t\t\t\twindow.customElements.upgrade(child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchild = this.constructor.getMetadata().constructor.validateSlotValue(child, slotData);\n\n\t\t\tif (child.isUI5Element && slotData.listenFor) {\n\t\t\t\tthis._attachChildPropertyUpdated(child, slotData.listenFor);\n\t\t\t}\n\n\t\t\tif (child.isUI5Element && slotData.invalidateParent) {\n\t\t\t\tchild._shouldInvalidateParent = true;\n\t\t\t}\n\n\t\t\tif (isSlot(child)) {\n\t\t\t\tthis._attachSlotChange(child);\n\t\t\t}\n\n\t\t\tconst propertyName = slotData.propertyName || slotName;\n\n\t\t\tif (slottedChildrenMap.has(propertyName)) {\n\t\t\t\tslottedChildrenMap.get(propertyName).push({ child, idx });\n\t\t\t} else {\n\t\t\t\tslottedChildrenMap.set(propertyName, [{ child, idx }]);\n\t\t\t}\n\t\t});\n\n\t\tawait Promise.all(allChildrenUpgraded);\n\n\t\t// Distribute the child in the _state object, keeping the Light DOM order,\n\t\t// not the order elements are defined.\n\t\tslottedChildrenMap.forEach((children, slot) => {\n\t\t\tthis._state[slot] = children.sort((a, b) => a.idx - b.idx).map(_ => _.child);\n\t\t});\n\t\tthis._invalidate(\"slots\");\n\t}\n\n\t/**\n\t * Removes all children from the slot and detaches listeners, if any\n\t * @private\n\t */\n\t_clearSlot(slotName, slotData) {\n\t\tconst propertyName = slotData.propertyName || slotName;\n\n\t\tlet children = this._state[propertyName];\n\t\tif (!Array.isArray(children)) {\n\t\t\tchildren = [children];\n\t\t}\n\n\t\tchildren.forEach(child => {\n\t\t\tif (child && child.isUI5Element) {\n\t\t\t\tthis._detachChildPropertyUpdated(child);\n\t\t\t\tchild._shouldInvalidateParent = false;\n\t\t\t}\n\n\t\t\tif (isSlot(child)) {\n\t\t\t\tthis._detachSlotChange(child);\n\t\t\t}\n\t\t});\n\n\t\tthis._state[propertyName] = [];\n\t\tthis._invalidate(propertyName, []);\n\t}\n\n\t/**\n\t * Do not override this method in derivatives of UI5Element\n\t * @private\n\t */\n\tattributeChangedCallback(name, oldValue, newValue) {\n\t\tconst properties = this.constructor.getMetadata().getProperties();\n\t\tconst realName = name.replace(/^ui5-/, \"\");\n\t\tconst nameInCamelCase = kebabToCamelCase(realName);\n\t\tif (properties.hasOwnProperty(nameInCamelCase)) { // eslint-disable-line\n\t\t\tconst propertyTypeClass = properties[nameInCamelCase].type;\n\t\t\tif (propertyTypeClass === Boolean) {\n\t\t\t\tnewValue = newValue !== null;\n\t\t\t}\n\t\t\tif (propertyTypeClass === Integer) {\n\t\t\t\tnewValue = parseInt(newValue);\n\t\t\t}\n\t\t\tif (propertyTypeClass === Float) {\n\t\t\t\tnewValue = parseFloat(newValue);\n\t\t\t}\n\t\t\tthis[nameInCamelCase] = newValue;\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_updateAttribute(name, newValue) {\n\t\tif (!this.constructor.getMetadata().hasAttribute(name)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof newValue === \"object\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst attrName = camelToKebabCase(name);\n\t\tconst attrValue = this.getAttribute(attrName);\n\t\tif (typeof newValue === \"boolean\") {\n\t\t\tif (newValue === true && attrValue === null) {\n\t\t\t\tthis.setAttribute(attrName, \"\");\n\t\t\t} else if (newValue === false && attrValue !== null) {\n\t\t\t\tthis.removeAttribute(attrName);\n\t\t\t}\n\t\t} else if (attrValue !== newValue) {\n\t\t\tthis.setAttribute(attrName, newValue);\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_upgradeProperty(prop) {\n\t\tif (this.hasOwnProperty(prop)) { // eslint-disable-line\n\t\t\tconst value = this[prop];\n\t\t\tdelete this[prop];\n\t\t\tthis[prop] = value;\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_upgradeAllProperties() {\n\t\tconst allProps = this.constructor.getMetadata().getPropertiesList();\n\t\tallProps.forEach(this._upgradeProperty, this);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_initializeState() {\n\t\tconst defaultState = this.constructor._getDefaultState();\n\t\tthis._state = Object.assign({}, defaultState);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_attachChildPropertyUpdated(child, listenFor) {\n\t\tconst slotName = this.constructor._getSlotName(child); // all slotted children have the same configuration\n\n\t\tlet observedProps = [],\n\t\t\tnotObservedProps = [];\n\n\t\tif (Array.isArray(listenFor)) {\n\t\t\tobservedProps = listenFor;\n\t\t} else {\n\t\t\tobservedProps = Array.isArray(listenFor.include) ? listenFor.include : [];\n\t\t\tnotObservedProps = Array.isArray(listenFor.exclude) ? listenFor.exclude : [];\n\t\t}\n\n\t\tif (!this._monitoredChildProps.has(slotName)) {\n\t\t\tthis._monitoredChildProps.set(slotName, { observedProps, notObservedProps });\n\t\t}\n\n\t\tchild.addEventListener(\"_property-change\", this._invalidateParentOnPropertyUpdate);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_detachChildPropertyUpdated(child) {\n\t\tchild.removeEventListener(\"_property-change\", this._invalidateParentOnPropertyUpdate);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_propertyChange(name, value) {\n\t\tthis._updateAttribute(name, value);\n\n\t\tif (this._hasPropertyChangeListeners()) {\n\t\t\tthis.dispatchEvent(new CustomEvent(\"_property-change\", {\n\t\t\t\tdetail: { name, newValue: value },\n\t\t\t\tcomposed: false,\n\t\t\t\tbubbles: false,\n\t\t\t}));\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_invalidateParentOnPropertyUpdate(prop) {\n\t\t// The web component to be invalidated\n\t\tconst parentNode = this.parentNode;\n\t\tif (!parentNode) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst slotName = parentNode.constructor._getSlotName(this);\n\t\tconst propsMetadata = parentNode._monitoredChildProps.get(slotName);\n\n\t\tif (!propsMetadata) {\n\t\t\treturn;\n\t\t}\n\t\tconst { observedProps, notObservedProps } = propsMetadata;\n\n\t\tconst allPropertiesAreObserved = observedProps.length === 1 && observedProps[0] === \"*\";\n\t\tconst shouldObserve = allPropertiesAreObserved || observedProps.includes(prop.detail.name);\n\t\tconst shouldSkip = notObservedProps.includes(prop.detail.name);\n\t\tif (shouldObserve && !shouldSkip) {\n\t\t\tparentNode._invalidate(\"_parent_\", this);\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_attachSlotChange(child) {\n\t\tif (!this._invalidateOnSlotChange) {\n\t\t\tthis._invalidateOnSlotChange = () => {\n\t\t\t\tthis._invalidate(\"slotchange\");\n\t\t\t};\n\t\t}\n\t\tchild.addEventListener(\"slotchange\", this._invalidateOnSlotChange);\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_detachSlotChange(child) {\n\t\tchild.removeEventListener(\"slotchange\", this._invalidateOnSlotChange);\n\t}\n\n\t/**\n\t * Asynchronously re-renders an already rendered web component\n\t * @private\n\t */\n\t_invalidate() {\n\t\tif (this._shouldInvalidateParent) {\n\t\t\tthis.parentNode._invalidate();\n\t\t}\n\n\t\tif (!this._upToDate) {\n\t\t\t// console.log(\"already invalidated\", this, ...arguments);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.getDomRef() && !this._suppressInvalidation) {\n\t\t\tthis._upToDate = false;\n\t\t\t// console.log(\"INVAL\", this, ...arguments);\n\t\t\tRenderScheduler.renderDeferred(this);\n\t\t}\n\t}\n\n\t/**\n\t * Do not call this method directly, only intended to be called by RenderScheduler.js\n\t * @protected\n\t */\n\t_render() {\n\t\tconst hasIndividualSlots = this.constructor.getMetadata().hasIndividualSlots();\n\n\t\t// suppress invalidation to prevent state changes scheduling another rendering\n\t\tthis._suppressInvalidation = true;\n\n\t\tif (typeof this.onBeforeRendering === \"function\") {\n\t\t\tthis.onBeforeRendering();\n\t\t}\n\n\t\t// Intended for framework usage only. Currently ItemNavigation updates tab indexes after the component has updated its state but before the template is rendered\n\t\tif (this._onComponentStateFinalized) {\n\t\t\tthis._onComponentStateFinalized();\n\t\t}\n\n\t\t// resume normal invalidation handling\n\t\tdelete this._suppressInvalidation;\n\n\t\t// Update the shadow root with the render result\n\t\t// console.log(this.getDomRef() ? \"RE-RENDER\" : \"FIRST RENDER\", this);\n\t\tthis._upToDate = true;\n\t\tthis._updateShadowRoot();\n\n\t\tif (this._shouldUpdateFragment()) {\n\t\t\tthis.staticAreaItem._updateFragment(this);\n\t\t\tthis.staticAreaItemDomRef = this.staticAreaItem.staticAreaItemDomRef.shadowRoot;\n\t\t}\n\n\t\t// Safari requires that children get the slot attribute only after the slot tags have been rendered in the shadow DOM\n\t\tif (hasIndividualSlots) {\n\t\t\tthis._assignIndividualSlotsToChildren();\n\t\t}\n\n\t\t// Call the onAfterRendering hook\n\t\tif (typeof this.onAfterRendering === \"function\") {\n\t\t\tthis.onAfterRendering();\n\t\t}\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_updateShadowRoot() {\n\t\tif (!this.constructor._needsShadowDOM()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet styleToPrepend;\n\t\tconst renderResult = executeTemplate(this.constructor.template, this);\n\n\t\t// IE11, Edge\n\t\tif (window.ShadyDOM) {\n\t\t\tcreateComponentStyleTag(this.constructor);\n\t\t}\n\n\t\t// Chrome\n\t\tif (document.adoptedStyleSheets) {\n\t\t\tthis.shadowRoot.adoptedStyleSheets = getConstructableStyle(this.constructor);\n\t\t}\n\n\t\t// FF, Safari\n\t\tif (!document.adoptedStyleSheets && !window.ShadyDOM) {\n\t\t\tstyleToPrepend = getEffectiveStyle(this.constructor);\n\t\t}\n\n\t\tthis.constructor.render(renderResult, this.shadowRoot, styleToPrepend, { eventContext: this });\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_assignIndividualSlotsToChildren() {\n\t\tconst domChildren = Array.from(this.children);\n\n\t\tdomChildren.forEach(child => {\n\t\t\tif (child._individualSlot) {\n\t\t\t\tchild.setAttribute(\"slot\", child._individualSlot);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @private\n\t */\n\t_waitForDomRef() {\n\t\treturn this._domRefReadyPromise;\n\t}\n\n\t/**\n\t * Returns the DOM Element inside the Shadow Root that corresponds to the opening tag in the UI5 Web Component's template\n\t * Use this method instead of \"this.shadowRoot\" to read the Shadow DOM, if ever necessary\n\t * @public\n\t */\n\tgetDomRef() {\n\t\tif (!this.shadowRoot || this.shadowRoot.children.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.shadowRoot.children.length === 1\n\t\t\t? this.shadowRoot.children[0] : this.shadowRoot.children[1];\n\t}\n\n\t/**\n\t * Returns the DOM Element marked with \"data-sap-focus-ref\" inside the template.\n\t * This is the element that will receive the focus by default.\n\t * @public\n\t */\n\tgetFocusDomRef() {\n\t\tconst domRef = this.getDomRef();\n\t\tif (domRef) {\n\t\t\tconst focusRef = domRef.querySelector(\"[data-sap-focus-ref]\");\n\t\t\treturn focusRef || domRef;\n\t\t}\n\t}\n\n\t/**\n\t * Use this method in order to get a reference to an element in the shadow root of the web component or the static area item of the component\n\t * @public\n\t * @method\n\t * @param {String} refName Defines the name of the stable DOM ref\n\t */\n\tgetStableDomRef(refName) {\n\t\tconst staticAreaResult = this.staticAreaItemDomRef && this.staticAreaItemDomRef.querySelector(`[data-ui5-stable=${refName}]`);\n\n\t\treturn staticAreaResult\n\t\t|| this.getDomRef().querySelector(`[data-ui5-stable=${refName}]`);\n\t}\n\n\t/**\n\t * Set the focus to the element, returned by \"getFocusDomRef()\" (marked by \"data-sap-focus-ref\")\n\t * @public\n\t */\n\tasync focus() {\n\t\tawait this._waitForDomRef();\n\n\t\tconst focusDomRef = this.getFocusDomRef();\n\n\t\tif (focusDomRef && typeof focusDomRef.focus === \"function\") {\n\t\t\tfocusDomRef.focus();\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @public\n\t * @param name - name of the event\n\t * @param data - additional data for the event\n\t * @param cancelable - true, if the user can call preventDefault on the event object\n\t * @param bubbles - true, if the event bubbles\n\t * @returns {boolean} false, if the event was cancelled (preventDefault called), true otherwise\n\t */\n\tfireEvent(name, data, cancelable = false, bubbles = true) {\n\t\tconst eventResult = this._fireEvent(name, data, cancelable, bubbles);\n\t\tconst camelCaseEventName = kebabToCamelCase(name);\n\n\t\tif (camelCaseEventName !== name) {\n\t\t\treturn eventResult && this._fireEvent(camelCaseEventName, data, cancelable);\n\t\t}\n\n\t\treturn eventResult;\n\t}\n\n\t_fireEvent(name, data, cancelable = false, bubbles = true) {\n\t\tlet compatEventResult = true; // Initialized to true, because if the event is not fired at all, it should be considered \"not-prevented\"\n\n\t\tconst noConflictEvent = new CustomEvent(`ui5-${name}`, {\n\t\t\tdetail: data,\n\t\t\tcomposed: false,\n\t\t\tbubbles,\n\t\t\tcancelable,\n\t\t});\n\n\t\t// This will be false if the compat event is prevented\n\t\tcompatEventResult = this.dispatchEvent(noConflictEvent);\n\n\t\tif (skipOriginalEvent(name)) {\n\t\t\treturn compatEventResult;\n\t\t}\n\n\t\tconst customEvent = new CustomEvent(name, {\n\t\t\tdetail: data,\n\t\t\tcomposed: false,\n\t\t\tbubbles,\n\t\t\tcancelable,\n\t\t});\n\n\t\t// This will be false if the normal event is prevented\n\t\tconst normalEventResult = this.dispatchEvent(customEvent);\n\n\t\t// Return false if any of the two events was prevented (its result was false).\n\t\treturn normalEventResult && compatEventResult;\n\t}\n\n\t/**\n\t * Returns the actual children, associated with a slot.\n\t * Useful when there are transitive slots in nested component scenarios and you don't want to get a list of the slots, but rather of their content.\n\t * @public\n\t */\n\tgetSlottedNodes(slotName) {\n\t\tconst reducer = (acc, curr) => {\n\t\t\tif (!isSlot(curr)) {\n\t\t\t\treturn acc.concat([curr]);\n\t\t\t}\n\t\t\treturn acc.concat(curr.assignedNodes({ flatten: true }).filter(item => item instanceof HTMLElement));\n\t\t};\n\n\t\treturn this[slotName].reduce(reducer, []);\n\t}\n\n\tget isCompact() {\n\t\treturn getComputedStyle(this).getPropertyValue(GLOBAL_CONTENT_DENSITY_CSS_VAR) === \"compact\";\n\t}\n\n\t/**\n\t * Determines whether the component should be rendered in RTL mode or not.\n\t * Returns: \"rtl\", \"ltr\" or undefined\n\t *\n\t * @public\n\t * @returns {String|undefined}\n\t */\n\tget effectiveDir() {\n\t\tmarkAsRtlAware(this.constructor); // if a UI5 Element calls this method, it's considered to be rtl-aware\n\n\t\tconst doc = window.document;\n\t\tconst dirValues = [\"ltr\", \"rtl\"]; // exclude \"auto\" and \"\" from all calculations\n\t\tconst locallyAppliedDir = getComputedStyle(this).getPropertyValue(GLOBAL_DIR_CSS_VAR);\n\n\t\t// In that order, inspect the CSS Var (for modern browsers), the element itself, html and body (for IE fallback)\n\t\tif (dirValues.includes(locallyAppliedDir)) {\n\t\t\treturn locallyAppliedDir;\n\t\t}\n\t\tif (dirValues.includes(this.dir)) {\n\t\t\treturn this.dir;\n\t\t}\n\t\tif (dirValues.includes(doc.documentElement.dir)) {\n\t\t\treturn doc.documentElement.dir;\n\t\t}\n\t\tif (dirValues.includes(doc.body.dir)) {\n\t\t\treturn doc.body.dir;\n\t\t}\n\n\t\t// Finally, check the configuration for explicitly set RTL or language-implied RTL\n\t\treturn getRTL() ? \"rtl\" : undefined;\n\t}\n\n\tupdateStaticAreaItemContentDensity() {\n\t\tif (this.staticAreaItem) {\n\t\t\tthis.staticAreaItem._updateContentDensity(this.isCompact);\n\t\t}\n\t}\n\n\t/**\n\t * Used to duck-type UI5 elements without using instanceof\n\t * @returns {boolean}\n\t * @public\n\t */\n\tget isUI5Element() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Do not override this method in derivatives of UI5Element, use metadata properties instead\n\t * @private\n\t */\n\tstatic get observedAttributes() {\n\t\treturn this.getMetadata().getAttributesList();\n\t}\n\n\t/**\n\t * @private\n\t */\n\tstatic _getSlotName(child) {\n\t\t// Text nodes can only go to the default slot\n\t\tif (!(child instanceof HTMLElement)) {\n\t\t\treturn \"default\";\n\t\t}\n\n\t\t// Discover the slot based on the real slot name (f.e. footer => footer, or content-32 => content)\n\t\tconst slot = child.getAttribute(\"slot\");\n\t\tif (slot) {\n\t\t\tconst match = slot.match(/^(.+?)-\\d+$/);\n\t\t\treturn match ? match[1] : slot;\n\t\t}\n\n\t\t// Use default slot as a fallback\n\t\treturn \"default\";\n\t}\n\n\t/**\n\t * @private\n\t */\n\tstatic _needsShadowDOM() {\n\t\treturn !!this.template;\n\t}\n\n\t_shouldUpdateFragment() {\n\t\treturn this.constructor._needsStaticArea() && this.staticAreaItem.isRendered();\n\t}\n\n\t/**\n\t * @private\n\t */\n\tstatic _needsStaticArea() {\n\t\treturn typeof this.staticAreaTemplate === \"function\";\n\t}\n\n\t/**\n\t * @public\n\t */\n\tgetStaticAreaItemDomRef() {\n\t\treturn this.staticAreaItem.getDomRef();\n\t}\n\n\t/**\n\t * @private\n\t */\n\tstatic _getDefaultState() {\n\t\tif (this._defaultState) {\n\t\t\treturn this._defaultState;\n\t\t}\n\n\t\tconst MetadataClass = this.getMetadata();\n\t\tconst defaultState = {};\n\t\tconst slotsAreManaged = MetadataClass.slotsAreManaged();\n\n\t\t// Initialize properties\n\t\tconst props = MetadataClass.getProperties();\n\t\tfor (const propName in props) { // eslint-disable-line\n\t\t\tconst propType = props[propName].type;\n\t\t\tconst propDefaultValue = props[propName].defaultValue;\n\n\t\t\tif (propType === Boolean) {\n\t\t\t\tdefaultState[propName] = false;\n\n\t\t\t\tif (propDefaultValue !== undefined) {\n\t\t\t\t\tconsole.warn(\"The 'defaultValue' metadata key is ignored for all booleans properties, they would be initialized with 'false' by default\"); // eslint-disable-line\n\t\t\t\t}\n\t\t\t} else if (props[propName].multiple) {\n\t\t\t\tdefaultState[propName] = [];\n\t\t\t} else if (propType === Object) {\n\t\t\t\tdefaultState[propName] = \"defaultValue\" in props[propName] ? props[propName].defaultValue : {};\n\t\t\t} else if (propType === String) {\n\t\t\t\tdefaultState[propName] = \"defaultValue\" in props[propName] ? props[propName].defaultValue : \"\";\n\t\t\t} else {\n\t\t\t\tdefaultState[propName] = propDefaultValue;\n\t\t\t}\n\t\t}\n\n\t\t// Initialize slots\n\t\tif (slotsAreManaged) {\n\t\t\tconst slots = MetadataClass.getSlots();\n\t\t\tfor (const [slotName, slotData] of Object.entries(slots)) { // eslint-disable-line\n\t\t\t\tconst propertyName = slotData.propertyName || slotName;\n\t\t\t\tdefaultState[propertyName] = [];\n\t\t\t}\n\t\t}\n\n\t\tthis._defaultState = defaultState;\n\t\treturn defaultState;\n\t}\n\n\t/**\n\t * @private\n\t */\n\tstatic _generateAccessors() {\n\t\tconst proto = this.prototype;\n\t\tconst slotsAreManaged = this.getMetadata().slotsAreManaged();\n\n\t\t// Properties\n\t\tconst properties = this.getMetadata().getProperties();\n\t\tfor (const [prop, propData] of Object.entries(properties)) { // eslint-disable-line\n\t\t\tif (!isValidPropertyName(prop)) {\n\t\t\t\tconsole.warn(`\"${prop}\" is not a valid property name. Use a name that does not collide with DOM APIs`); /* eslint-disable-line */\n\t\t\t}\n\n\t\t\tif (propData.type === Boolean && propData.defaultValue) {\n\t\t\t\tthrow new Error(`Cannot set a default value for property \"${prop}\". All booleans are false by default.`);\n\t\t\t}\n\n\t\t\tif (propData.type === Array) {\n\t\t\t\tthrow new Error(`Wrong type for property \"${prop}\". Properties cannot be of type Array - use \"multiple: true\" and set \"type\" to the single value type, such as \"String\", \"Object\", etc...`);\n\t\t\t}\n\n\t\t\tif (propData.type === Object && propData.defaultValue) {\n\t\t\t\tthrow new Error(`Cannot set a default value for property \"${prop}\". All properties of type \"Object\" are empty objects by default.`);\n\t\t\t}\n\n\t\t\tif (propData.multiple && propData.defaultValue) {\n\t\t\t\tthrow new Error(`Cannot set a default value for property \"${prop}\". All multiple properties are empty arrays by default.`);\n\t\t\t}\n\n\t\t\tObject.defineProperty(proto, prop, {\n\t\t\t\tget() {\n\t\t\t\t\tif (this._state[prop] !== undefined) {\n\t\t\t\t\t\treturn this._state[prop];\n\t\t\t\t\t}\n\n\t\t\t\t\tconst propDefaultValue = propData.defaultValue;\n\n\t\t\t\t\tif (propData.type === Boolean) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (propData.type === String) { // eslint-disable-line\n\t\t\t\t\t\treturn propDefaultValue;\n\t\t\t\t\t} else if (propData.multiple) { // eslint-disable-line\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn propDefaultValue;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tvalue = this.constructor.getMetadata().constructor.validatePropertyValue(value, propData);\n\n\t\t\t\t\tconst oldState = this._state[prop];\n\n\t\t\t\t\tif (oldState !== value) {\n\t\t\t\t\t\tthis._state[prop] = value;\n\t\t\t\t\t\tthis._invalidate(prop, value);\n\t\t\t\t\t\tthis._propertyChange(prop, value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\t// Slots\n\t\tif (slotsAreManaged) {\n\t\t\tconst slots = this.getMetadata().getSlots();\n\t\t\tfor (const [slotName, slotData] of Object.entries(slots)) { // eslint-disable-line\n\t\t\t\tif (!isValidPropertyName(slotName)) {\n\t\t\t\t\tconsole.warn(`\"${slotName}\" is not a valid property name. Use a name that does not collide with DOM APIs`); /* eslint-disable-line */\n\t\t\t\t}\n\n\t\t\t\tconst propertyName = slotData.propertyName || slotName;\n\t\t\t\tObject.defineProperty(proto, propertyName, {\n\t\t\t\t\tget() {\n\t\t\t\t\t\tif (this._state[propertyName] !== undefined) {\n\t\t\t\t\t\t\treturn this._state[propertyName];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t},\n\t\t\t\t\tset() {\n\t\t\t\t\t\tthrow new Error(\"Cannot set slots directly, use the DOM APIs\");\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns the metadata object for this UI5 Web Component Class\n\t * @protected\n\t */\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\t/**\n\t * Returns the CSS for this UI5 Web Component Class\n\t * @protected\n\t */\n\tstatic get styles() {\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Returns the Static Area CSS for this UI5 Web Component Class\n\t * @protected\n\t */\n\tstatic get staticAreaStyles() {\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Returns an array with the dependencies for this UI5 Web Component, which could be:\n\t * - composed components (used in its shadow root or static area item)\n\t * - slotted components that the component may need to communicate with\n\t *\n\t * @protected\n\t */\n\tstatic get dependencies() {\n\t\treturn [];\n\t}\n\n\t/**\n\t * Returns a list of the unique dependencies for this UI5 Web Component\n\t *\n\t * @public\n\t */\n\tstatic getUniqueDependencies() {\n\t\tif (!uniqueDependenciesCache.has(this)) {\n\t\t\tconst filtered = this.dependencies.filter((dep, index, deps) => deps.indexOf(dep) === index);\n\t\t\tuniqueDependenciesCache.set(this, filtered);\n\t\t}\n\n\t\treturn uniqueDependenciesCache.get(this);\n\t}\n\n\t/**\n\t * Returns a promise that resolves whenever all dependencies for this UI5 Web Component have resolved\n\t *\n\t * @returns {Promise<any[]>}\n\t */\n\tstatic whenDependenciesDefined() {\n\t\treturn Promise.all(this.getUniqueDependencies().map(dep => dep.define()));\n\t}\n\n\t/**\n\t * Hook that will be called upon custom element definition\n\t *\n\t * @protected\n\t * @returns {Promise<void>}\n\t */\n\tstatic async onDefine() {\n\t\treturn Promise.resolve();\n\t}\n\n\t/**\n\t * Registers a UI5 Web Component in the browser window object\n\t * @public\n\t * @returns {Promise<UI5Element>}\n\t */\n\tstatic async define() {\n\t\tawait boot();\n\n\t\tawait Promise.all([\n\t\t\tthis.whenDependenciesDefined(),\n\t\t\tthis.onDefine(),\n\t\t]);\n\n\t\tconst tag = this.getMetadata().getTag();\n\t\tconst altTag = this.getMetadata().getAltTag();\n\n\t\tconst definedLocally = isTagRegistered(tag);\n\t\tconst definedGlobally = customElements.get(tag);\n\n\t\tif (definedGlobally && !definedLocally) {\n\t\t\trecordTagRegistrationFailure(tag);\n\t\t} else if (!definedGlobally) {\n\t\t\tthis._generateAccessors();\n\t\t\tregisterTag(tag);\n\t\t\twindow.customElements.define(tag, this);\n\n\t\t\tif (altTag && !customElements.get(altTag)) {\n\t\t\t\tclass oldClassName extends this {}\n\t\t\t\tregisterTag(altTag);\n\t\t\t\twindow.customElements.define(altTag, oldClassName);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns an instance of UI5ElementMetadata.js representing this UI5 Web Component's full metadata (its and its parents')\n\t * Note: not to be confused with the \"get metadata()\" method, which returns an object for this class's metadata only\n\t * @public\n\t * @returns {UI5ElementMetadata}\n\t */\n\tstatic getMetadata() {\n\t\tif (this.hasOwnProperty(\"_metadata\")) { // eslint-disable-line\n\t\t\treturn this._metadata;\n\t\t}\n\n\t\tconst metadataObjects = [this.metadata];\n\t\tlet klass = this; // eslint-disable-line\n\t\twhile (klass !== UI5Element) {\n\t\t\tklass = Object.getPrototypeOf(klass);\n\t\t\tmetadataObjects.unshift(klass.metadata);\n\t\t}\n\t\tconst mergedMetadata = merge({}, ...metadataObjects);\n\n\t\tthis._metadata = new UI5ElementMetadata(mergedMetadata);\n\t\treturn this._metadata;\n\t}\n}\n\nexport default UI5Element;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst directives = new WeakMap();\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = (f) => ((...args) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n});\nexport const isDirective = (o) => {\n return typeof o === 'function' && directives.has(o);\n};\n//# sourceMappingURL=directive.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = window.customElements !== undefined &&\n window.customElements.polyfillWrapFlushCallback !==\n undefined;\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes = (container, start, end = null, before = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.insertBefore(start, before);\n start = n;\n }\n};\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes = (container, start, end = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.removeChild(start);\n start = n;\n }\n};\n//# sourceMappingURL=dom.js.map","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n//# sourceMappingURL=part.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n/**\n * An updateable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n constructor(result, element) {\n this.parts = [];\n this.element = element;\n const nodesToRemove = [];\n const stack = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(element.content, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const { strings, values: { length } } = result;\n while (partIndex < length) {\n const node = walker.nextNode();\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n continue;\n }\n index++;\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if (node.hasAttributes()) {\n const attributes = node.attributes;\n const { length } = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)[2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName = name.toLowerCase() + boundAttributeSuffix;\n const attributeValue = node.getAttribute(attributeLookupName);\n node.removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({ type: 'attribute', index, name, strings: statics });\n partIndex += statics.length - 1;\n }\n }\n if (node.tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n }\n else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = node.data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n }\n else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({ type: 'node', index: ++index });\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n }\n else {\n node.data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n }\n else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if (node.data === marker) {\n const parent = node.parentNode;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({ type: 'node', index });\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n node.data = '';\n }\n else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n }\n else {\n let i = -1;\n while ((i = node.data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({ type: 'node', index: -1 });\n partIndex++;\n }\n }\n }\n }\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode.removeChild(n);\n }\n }\n}\nconst endsWith = (str, suffix) => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\nexport const isTemplatePartActive = (part) => part.index !== -1;\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex = /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n//# sourceMappingURL=template.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { isCEPolyfill } from './dom.js';\nimport { isTemplatePartActive } from './template.js';\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n constructor(template, processor, options) {\n this.__parts = [];\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n update(values) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n _clone() {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari dooes not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) :\n document.importNode(this.template.element.content, true);\n const stack = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(fragment, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node.nodeName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n node = walker.nextNode();\n }\n }\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node.previousSibling);\n this.__parts.push(part);\n }\n else {\n this.__parts.push(...this.processor.handleAttributeExpressions(node, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n//# sourceMappingURL=template-instance.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { reparentNodes } from './dom.js';\nimport { boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker } from './template.js';\nconst commentMarker = ` ${marker} `;\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n constructor(strings, values, type, processor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML() {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment poisition.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceeding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceeding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n }\n else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n getTemplateElement() {\n const template = document.createElement('template');\n template.innerHTML = this.getHTML();\n return template;\n }\n}\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML() {\n return `<svg>${super.getHTML()}</svg>`;\n }\n getTemplateElement() {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n//# sourceMappingURL=template-result.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { isDirective } from './directive.js';\nimport { removeNodes } from './dom.js';\nimport { noChange, nothing } from './part.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { TemplateResult } from './template-result.js';\nimport { createMarker } from './template.js';\nexport const isPrimitive = (value) => {\n return (value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value) => {\n return Array.isArray(value) ||\n // tslint:disable-next-line:no-any\n !!(value && value[Symbol.iterator]);\n};\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attibute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n constructor(element, name, strings) {\n this.dirty = true;\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n this.parts[i] = this._createPart();\n }\n }\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n _createPart() {\n return new AttributePart(this);\n }\n _getValue() {\n const strings = this.strings;\n const l = strings.length - 1;\n let text = '';\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = this.parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n }\n else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n text += strings[l];\n return text;\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue());\n }\n }\n}\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart {\n constructor(committer) {\n this.value = undefined;\n this.committer = committer;\n }\n setValue(value) {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart {\n constructor(options) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.options = options;\n }\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref) {\n this.startNode = ref;\n this.endNode = ref.nextSibling;\n }\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n }\n else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n }\n else if (value instanceof Node) {\n this.__commitNode(value);\n }\n else if (isIterable(value)) {\n this.__commitIterable(value);\n }\n else if (value === nothing) {\n this.value = nothing;\n this.clear();\n }\n else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n __insert(node) {\n this.endNode.parentNode.insertBefore(node, this.endNode);\n }\n __commitNode(value) {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n __commitText(value) {\n const node = this.startNode.nextSibling;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString = typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n node.data = valueAsString;\n }\n else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n __commitTemplateResult(value) {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n }\n else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance = new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n __commitIterable(value) {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value;\n let partIndex = 0;\n let itemPart;\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n }\n else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n clear(startNode = this.startNode) {\n removeNodes(this.startNode.parentNode, startNode.nextSibling, this.endNode);\n }\n}\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart {\n constructor(element, name, strings) {\n this.value = undefined;\n this.__pendingValue = undefined;\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error('Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n }\n else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n constructor(element, name, strings) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n _createPart() {\n return new PropertyPart(this);\n }\n _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n // tslint:disable-next-line:no-any\n this.element[this.name] = this._getValue();\n }\n }\n}\nexport class PropertyPart extends AttributePart {\n}\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the thrid\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\ntry {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // tslint:disable-next-line:no-any\n window.addEventListener('test', options, options);\n // tslint:disable-next-line:no-any\n window.removeEventListener('test', options, options);\n}\ncatch (_e) {\n}\nexport class EventPart {\n constructor(element, eventName, eventContext) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener = newListener != null && (oldListener == null || shouldRemoveListener);\n if (shouldRemoveListener) {\n this.element.removeEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange;\n }\n handleEvent(event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n }\n else {\n this.value.handleEvent(event);\n }\n }\n}\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o) => o &&\n (eventOptionsSupported ?\n { capture: o.capture, passive: o.passive, once: o.once } :\n o.capture);\n//# sourceMappingURL=parts.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter } from './parts.js';\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(element, name, strings, options) {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options) {\n return new NodePart(options);\n }\n}\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n//# sourceMappingURL=default-template-processor.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { marker, Template } from './template.js';\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map()\n };\n templateCaches.set(result.type, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\nexport const templateCaches = new Map();\n//# sourceMappingURL=template-factory.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { removeNodes } from './dom.js';\nimport { NodePart } from './parts.js';\nimport { templateFactory } from './template-factory.js';\nexport const parts = new WeakMap();\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n * created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n * replaced, or efficiently updated if the same result type was previous\n * rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n * container. Render options must *not* change between renders to the same\n * container, as those changes will not effect previously rendered DOM.\n */\nexport const render = (result, container, options) => {\n let part = parts.get(container);\n if (part === undefined) {\n removeNodes(container, container.firstChild);\n parts.set(container, part = new NodePart(Object.assign({ templateFactory }, options)));\n part.appendInto(container);\n }\n part.setValue(result);\n part.commit();\n};\n//# sourceMappingURL=render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @module lit-html\n * @preferred\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { defaultTemplateProcessor } from './lib/default-template-processor.js';\nimport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { DefaultTemplateProcessor, defaultTemplateProcessor } from './lib/default-template-processor.js';\nexport { directive, isDirective } from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport { removeNodes, reparentNodes } from './lib/dom.js';\nexport { noChange, nothing } from './lib/part.js';\nexport { AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart } from './lib/parts.js';\nexport { parts, render } from './lib/render.js';\nexport { templateCaches, templateFactory } from './lib/template-factory.js';\nexport { TemplateInstance } from './lib/template-instance.js';\nexport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { createMarker, isTemplatePartActive, Template } from './lib/template.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.1.2');\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings, ...values) => new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings, ...values) => new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n//# sourceMappingURL=lit-html.js.map","const cache = new Map();\n\nconst scopeHTML = (strings, tags, suffix) => {\n\tif (suffix && tags && tags.length) {\n\t\tstrings = strings.map(string => {\n\t\t\tif (cache.has(string)) {\n\t\t\t\treturn cache.get(string);\n\t\t\t}\n\n\t\t\t/*\n\t\t\tconst allTags = [...string.matchAll(/<(ui5-.*?)[> ]/g)].map(x => x[1]);\n\t\t\tallTags.forEach(t => {\n\t\t\t\tif (!tags.includes(t)) {\n\t\t\t\t\tthrow new Error(`${t} not found in ${string}`);\n\t\t\t\t\t// console.log(t, \" in \", string);\n\t\t\t\t}\n\t\t\t});\n\t\t\t*/\n\n\t\t\tlet result = string;\n\t\t\ttags.forEach(tag => {\n\t\t\t\tresult = result.replace(new RegExp(`(</?)(${tag})(/?[> \\t\\n])`, \"g\"), `$1$2-${suffix}$3`);\n\t\t\t});\n\t\t\tcache.set(string, result);\n\t\t\treturn result;\n\t\t});\n\t}\n\n\treturn strings;\n};\n\nexport default scopeHTML;\n","import { html, svg, render } from \"lit-html/lit-html.js\";\nimport scopeHTML from \"./scopeHTML.js\";\n\nlet tags;\nlet\tsuffix;\n\nconst setTags = t => {\n\ttags = t;\n};\nconst setSuffix = s => {\n\tsuffix = s;\n};\n\nconst litRender = (templateResult, domNode, styles, { eventContext } = {}) => {\n\tif (styles) {\n\t\ttemplateResult = html`<style>${styles}</style>${templateResult}`;\n\t}\n\trender(templateResult, domNode, { eventContext });\n};\n\nconst scopedHtml = (strings, ...values) => html(scopeHTML(strings, tags, suffix), ...values);\nconst scopedSvg = (strings, ...values) => svg(scopeHTML(strings, tags, suffix), ...values);\n\nexport { setTags, setSuffix };\nexport { scopedHtml as html, scopedSvg as svg };\nexport { repeat } from \"lit-html/directives/repeat.js\";\nexport { classMap } from \"lit-html/directives/class-map.js\";\nexport { styleMap } from \"lit-html/directives/style-map.js\";\nexport { unsafeHTML } from \"lit-html/directives/unsafe-html.js\";\n\nexport default litRender;\n","import UI5Element from \"../../UI5Element.js\";\nimport litRender, { html } from \"../../renderer/LitRenderer.js\";\n\nconst metadata = {\n\ttag: \"ui5-test-generic\",\n\tproperties: {\n\t\tstrProp: {\n\t\t\ttype: String,\n\t\t},\n\t\tboolProp: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tobjectProp: {\n\t\t\ttype: Object,\n\t\t},\n\t\tnoAttributeProp: {\n\t\t\ttype: String,\n\t\t\tnoAttribute: true,\n\t\t},\n\t\tmultiProp: {\n\t\t\ttype: String,\n\t\t\tmultiple: true,\n\t\t},\n\t\tdefaultValueProp: {\n\t\t\ttype: String,\n\t\t\tdefaultValue: \"Hello\",\n\t\t}\n\t},\n\tmanagedSlots: true,\n\tslots: {\n\t\tdefault: {\n\t\t\ttype: Node,\n\t\t},\n\t\tother: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t\tindividual: {\n\t\t\ttype: HTMLElement,\n\t\t\tindividualSlots: true,\n\t\t},\n\t\tnamed: {\n\t\t\ttype: HTMLElement,\n\t\t\tpropertyName: \"items\",\n\t\t}\n\t}\n};\n\nclass Generic extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get render() {\n\t\treturn litRender;\n\t}\n\n\tstatic get template() {\n\t\treturn element => {\n\t\t\treturn html`<div><p>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"other\"></slot>\n\t\t\t\t<slot name=\"individual-1\"></slot>\n\t\t\t\t<slot name=\"individual-2\"></slot>\n\t\t\t</p></div>`;\n\t\t};\n\t}\n\n\tstatic get styles() {\n\t\treturn `:host {\n display: inline-block;\n border: 1px solid black;\n color: var(--var1);\n }`;\n\t}\n\n\tonBeforeRendering() {}\n\tonAfterRendering() {}\n\tonEnterDOM() {}\n\tonExitDOM() {}\n}\n\nGeneric.define();\n\nexport default Generic;\n","import UI5Element from \"../../UI5Element.js\";\n\nconst metadata = {\n\ttag: \"ui5-test-no-shadow\",\n};\n\nclass NoShadow extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n}\n\nNoShadow.define();\n","import UI5Element from \"../../UI5Element.js\";\nimport litRender, { html } from \"../../renderer/LitRenderer.js\";\n\nconst metadata = {\n\ttag: \"ui5-test-parent\",\n\tmanagedSlots: true,\n\tslots: {\n\t\tdefault: {\n\t\t\ttype: Node,\n\t\t\tlistenFor: [\"prop1\"],\n\t\t},\n\t\titems: {\n\t\t\ttype: HTMLElement,\n\t\t\tlistenFor: { include: [\"*\"], exclude: [\"prop3\"] }\n\t\t}\n\t}\n};\n\nclass Parent extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get render() {\n\t\treturn litRender;\n\t}\n\n\tstatic get template() {\n\t\treturn element => {\n\t\t\treturn html`<div>\n\t\t\t\t<slot></slot>\n\t\t\t</div>`;\n\t\t};\n\t}\n}\n\nParent.define();\n","import UI5Element from \"../../UI5Element.js\";\nimport litRender, { html } from \"../../renderer/LitRenderer.js\";\n\nconst metadata = {\n\ttag: \"ui5-test-child\",\n\tproperties: {\n\t\tprop1: {\n\t\t\ttype: String,\n\t\t},\n\t\tprop2: {\n\t\t\ttype: String,\n\t\t},\n\t\tprop3: {\n\t\t\ttype: String,\n\t\t},\n\t}\n};\n\nclass Child extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get render() {\n\t\treturn litRender;\n\t}\n\n\tstatic get template() {\n\t\treturn element => {\n\t\t\treturn html`<div></div>`;\n\t\t};\n\t}\n}\n\nChild.define();\n","import UI5Element from \"../../UI5Element.js\";\nimport litRender, { html } from \"../../renderer/LitRenderer.js\";\n\nconst metadata = {\n\ttag: \"ui5-with-static-area\",\n\tproperties: {\n\t\t/**\n\t\t * Defines whether the static area item will be rendered\n\t\t */\n\t\tstaticContent: {\n\t\t\ttype: Boolean,\n\t\t}\n\t},\n\tslots: {\n\n\t}\n};\n\nclass WithStaticArea extends UI5Element {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n\n\tstatic get render() {\n\t\treturn litRender;\n\t}\n\n\tstatic get template() {\n\t\treturn element => {\n\t\t\treturn html`\n\t\t\t\t<div>\n\t\t\t\t\tWithStaticArea works!\n\t\t\t\t</div>`;\n\t\t};\n\t}\n\n\tstatic get staticAreaTemplate() {\n\t\treturn element => {\n\t\t\treturn html`\n\t\t\t\t<div class=\"ui5-with-static-area-content\">\n\t\t\t\t\tStatic area content.\n\t\t\t\t</div>`;\n\t\t};\n\t}\n\n\tstatic get styles() {\n\t\treturn `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tborder: 1px solid black;\n\t\t\t\tcolor: red;\n\t\t\t}`;\n\t}\n\n\tasync addStaticArea() {\n\t\tif (!this.staticContent) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Require static area item\n\t\tconst staticArea = await this.getStaticAreaItemDomRef();\n\t\tthis.responsivePopover = staticArea.querySelector(\".ui5-with-static-area-content\");\n\t\treturn this.responsivePopover;\n\t}\n\n\tonBeforeRendering() {\n\t\tthis.addStaticArea();\n\t}\n\tonAfterRendering() {}\n\tonEnterDOM() {}\n\tonExitDOM() {}\n}\n\nWithStaticArea.define();\n\nexport default WithStaticArea;\n","import Generic from \"./Generic.js\";\n\nconst metadata = {\n\ttag: \"ui5-test-generic-ext\",\n\tproperties: {\n\t\textProp: {\n\t\t\ttype: String,\n\t\t},\n\t\tstrProp: {\n\t\t\tdefaultValue: \"Ext\",\n\t\t}\n\t},\n\tslots: {\n\t\textSlot: {\n\t\t\ttype: HTMLElement,\n\t\t},\n\t}\n};\n\nclass GenericExt extends Generic {\n\tstatic get metadata() {\n\t\treturn metadata;\n\t}\n}\n\nGenericExt.define();\n","import { registerThemeProperties } from \"../../asset-registries/Themes.js\";\n\nconst fiori3 = `:root{ --var1: red; }`;\nconst fiori3Dark = `:root{ --var1: green; }`;\nconst belize = `:root{ --var1: blue; }`;\nconst belizeHcb = `:root{ --var1: orange; }`;\nconst belizeHcw = `:root{ --var1: orange; }`;\nconst fiori3Hcb = `:root{ --var1: yellow; }`;\nconst fiori3Hcw = `:root{ --var1: yellow; }`;\n\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_fiori_3\", fiori3);\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_fiori_3_dark\", fiori3Dark);\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_belize\", belize);\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_belize_hcb\", belizeHcb);\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_belize_hcw\", belizeHcw);\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_fiori_3_hcb\", fiori3Hcb);\nregisterThemeProperties(\"@ui5/webcomponents-base-test\", \"sap_fiori_3_hcw\", fiori3Hcw);\n","/**\n * Device and Feature Detection API: Provides information about the used browser / device and cross platform support for certain events\n * like media queries, orientation change or resizing.\n *\n * This API is independent from any other part of the UI5 framework. This allows it to be loaded beforehand, if it is needed, to create the UI5 bootstrap\n * dynamically depending on the capabilities of the browser or device.\n *\n * @namespace\n * @name Device\n */\n\nconst Device = {};\n\n//* ******* OS Detection ********\n\n/**\n * Contains information about the operating system of the Device.\n * @name Device.os\n */\n\n/**\n * Enumeration containing the names of known operating systems.\n * @name Device.os.OS\n */\n\n/**\n * The name of the operating system.\n * @name Device.os.name\n * @type String\n */\n\n/**\n * The version of the operating system as <code>string</code>. Might be empty if no version can be determined.\n * @name Device.os.versionStr\n * @type String\n */\n\n/**\n * The version of the operating system as <code>float</code>. Might be <code>-1</code> if no version can be determined.\n * @name Device.os.version\n * @type float\n */\n\n/**\n * If this flag is set to <code>true</code>, a Windows operating system is used.\n * @name Device.os.windows\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, a Mac operating system is used.\n * @name Device.os.macintosh\n * @type boolean\n */\n\n/*\n * If this flag is set to <code>true</code>, an iOS operating system is used.\n * @name Device.os.ios\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, an Android operating system is used.\n * @name Device.os.android\n * @type boolean\n */\n\n/*\n * Windows operating system name.\n * @see Device.os.name\n * @name Device.os.OS.WINDOWS\n */\n\n/**\n * MAC operating system name.\n * @see Device.os.name\n * @name Device.os.OS.MACINTOSH\n */\n\n/**\n * iOS operating system name.\n * @see Device.os.name\n * @name Device.os.OS.IOS\n */\n\n/**\n * Android operating system name.\n * @see Device.os.name\n * @name Device.os.OS.ANDROID\n */\n\nconst OS = {\n\t\"WINDOWS\": \"win\",\n\t\"MACINTOSH\": \"mac\",\n\t\"IOS\": \"iOS\",\n\t\"ANDROID\": \"Android\",\n};\n\nconst _getMobileOS = () => {\n\tconst userAgent = navigator.userAgent;\n\n\tlet rPlatform, // regular expression for platform\n\t\taMatches;\n\n\t// iOS, Android\n\trPlatform = /\\(([a-zA-Z ]+);\\s(?:[U]?[;]?)([\\D]+)((?:[\\d._]*))(?:.*[)][^\\d]*)([\\d.]*)\\s/;\n\taMatches = userAgent.match(rPlatform);\n\n\tif (aMatches) {\n\t\tconst rAppleDevices = /iPhone|iPad|iPod/;\n\n\t\tif (aMatches[0].match(rAppleDevices)) {\n\t\t\taMatches[3] = aMatches[3].replace(/_/g, \".\");\n\n\t\t\treturn ({\n\t\t\t\t\"name\": OS.IOS,\n\t\t\t\t\"versionStr\": aMatches[3],\n\t\t\t});\n\t\t}\n\n\t\tif (aMatches[2].match(/Android/)) {\n\t\t\taMatches[2] = aMatches[2].replace(/\\s/g, \"\");\n\t\t\treturn ({\n\t\t\t\t\"name\": OS.ANDROID,\n\t\t\t\t\"versionStr\": aMatches[3],\n\t\t\t});\n\t\t}\n\t}\n\n\t// Firefox on Android\n\trPlatform = /\\((Android)[\\s]?([\\d][.\\d]*)?;.*Firefox\\/[\\d][.\\d]*/;\n\taMatches = userAgent.match(rPlatform);\n\tif (aMatches) {\n\t\treturn ({\n\t\t\t\"name\": OS.ANDROID,\n\t\t\t\"versionStr\": aMatches.length === 3 ? aMatches[2] : \"\",\n\t\t});\n\t}\n};\n\nconst _getDesktopOS = () => {\n\tconst sPlatform = navigator.platform;\n\tif (sPlatform.indexOf(\"Win\") !== -1) {\n\t\tconst rVersion = /Windows NT (\\d+).(\\d)/i; // userAgent since windows 10: Windows NT 10[...]\n\t\tconst uaResult = navigator.userAgent.match(rVersion);\n\n\t\treturn {\n\t\t\t\"name\": OS.WINDOWS,\n\t\t\t\"versionStr\": (uaResult && uaResult[1]) || \"\",\n\t\t};\n\t}\n\n\tif (sPlatform.indexOf(\"Mac\") !== -1) {\n\t\treturn {\n\t\t\t\"name\": OS.MACINTOSH,\n\t\t\t\"versionStr\": \"\",\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst _getOS = () => {\n\treturn _getMobileOS() || _getDesktopOS();\n};\n\nconst _setOS = () => {\n\tif (Device.os) {\n\t\treturn;\n\t}\n\n\tDevice.os = _getOS() || {};\n\tDevice.os.OS = OS;\n\tDevice.os.version = Device.os.versionStr ? parseFloat(Device.os.versionStr) : -1;\n\n\tif (Device.os.name) {\n\t\tObject.keys(OS).forEach(name => {\n\t\t\tif (OS[name] === Device.os.name) {\n\t\t\t\tDevice.os[name.toLowerCase()] = true;\n\t\t\t}\n\t\t});\n\t}\n};\n\nconst getOS = () => {\n\tif (!Device.os) {\n\t\t_setOS();\n\t}\n\n\treturn Device.os;\n};\n\nconst isAndroid = () => {\n\tif (!Device.os) {\n\t\t_setOS();\n\t}\n\n\treturn !!Device.os.android;\n};\n\n//* ******* Browser Detection ********\n\n/**\n * Contains information about the used browser.\n * @name Device.browser\n */\n\n/**\n * Enumeration containing the names of known browsers.\n * @name Device.browser.BROWSER\n *\n * The name of the browser.\n * @name Device.browser.name\n * @type String\n */\n\n/**\n * The version of the browser as <code>string</code>. Might be empty if no version can be determined.\n * @name Device.browser.versionStr\n * @type String\n */\n\n/**\n * The version of the browser as <code>float</code>. Might be <code>-1</code> if no version can be determined.\n * @name Device.browser.version\n * @type float\n */\n\n/**\n * If this flag is set to <code>true</code>, the mobile variant of the browser is used or\n * a tablet or phone device is detected. This information might not be available for all browsers.\n * @name Device.browser.mobile\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the Microsoft Internet Explorer browser is used.\n * @name Device.browser.internet_explorer\n * @type boolean\n * @deprecated since 1.20, use {@link Device.browser.msie} instead.\n */\n\n/**\n * If this flag is set to <code>true</code>, the Microsoft Internet Explorer browser is used.\n * @name Device.browser.msie\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the Microsoft Edge browser is used.\n * @name Device.browser.edge\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the Mozilla Firefox browser is used.\n * @name Device.browser.firefox\n */\n\n/**\n * If this flag is set to <code>true</code>, the Google Chrome browser is used.\n * @name Device.browser.chrome\n * @type boolean\n *\n * If this flag is set to <code>true</code>, the Apple Safari browser is used.\n *\n * <b>Note:</b>\n * This flag is also <code>true</code> when the standalone (fullscreen) mode or webview is used on iOS devices.\n * Please also note the flags {@link Device.browser.fullscreen} and {@link Device.browser.webview}.\n *\n * @name Device.browser.safari\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, a browser featuring a Webkit engine is used.\n *\n * <b>Note:</b>\n * This flag is also <code>true</code> when the used browser was based on the Webkit engine, but\n * uses another rendering engine in the meantime. For example the Chrome browser started from version 28 and above\n * uses the Blink rendering engine.\n *\n * @name Device.browser.webkit\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the Safari browser runs in standalone fullscreen mode on iOS.\n *\n * <b>Note:</b> This flag is only available if the Safari browser was detected. Furthermore, if this mode is detected,\n * technically not a standard Safari is used. There might be slight differences in behavior and detection, e.g.\n * the availability of {@link Device.browser.version}.\n *\n * @name Device.browser.fullscreen\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the Safari browser runs in webview mode on iOS.\n *\n * <b>Note:</b> This flag is only available if the Safari browser was detected. Furthermore, if this mode is detected,\n * technically not a standard Safari is used. There might be slight differences in behavior and detection, e.g.\n * the availability of {@link Device.browser.version}.\n *\n * @name Device.browser.webview\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the Phantom JS browser is used.\n * @name Device.browser.phantomJS\n * @type boolean\n */\n\n/**\n * The version of the used Webkit engine, if available.\n * @name Device.browser.webkitVersion\n * @type String\n */\n\n/**\n * If this flag is set to <code>true</code>, a browser featuring a Mozilla engine is used.\n * @name Device.browser.mozilla\n * @type boolean\n */\n\n/**\n * Internet Explorer browser name.\n * @name Device.browser.BROWSER.INTERNET_EXPLORER\n */\n\n/**\n * Edge browser name.\n * @name Device.browser.BROWSER.EDGE\n */\n\n/**\n * Firefox browser name.\n * @name Device.browser.BROWSER.FIREFOX\n */\n\n/**\n * Chrome browser name.\n * @name Device.browser.BROWSER.CHROME\n */\n\n/**\n * Safari browser name.\n * @name Device.browser.BROWSER.SAFARI\n */\n\n/**\n * Android stock browser name.\n * @name Device.browser.BROWSER.ANDROID\n */\n\nconst BROWSER = {\n\t\"INTERNET_EXPLORER\": \"ie\",\n\t\"EDGE\": \"ed\",\n\t\"FIREFOX\": \"ff\",\n\t\"CHROME\": \"cr\",\n\t\"SAFARI\": \"sf\",\n\t\"ANDROID\": \"an\",\n};\n\n/*!\n* Taken from jQuery JavaScript Library v1.7.1\n* http://jquery.com/\n*\n* Copyright 2011, John Resig\n* Dual licensed under the MIT or GPL Version 2 licenses.\n* http://jquery.org/license\n*\n* Includes Sizzle.js\n* http://sizzlejs.com/\n* Copyright 2011, The Dojo Foundation\n* Released under the MIT, BSD, and GPL Licenses.\n*\n* Date: Mon Nov 21 21:11:03 2011 -0500\n*/\nconst _calcBrowser = () => {\n\tconst sUserAgent = navigator.userAgent.toLowerCase();\n\n\tconst rwebkit = /(webkit)[ /]([\\w.]+)/;\n\tconst rmsie = /(msie) ([\\w.]+)/;\n\tconst rmsie11 = /(trident)\\/[\\w.]+;.*rv:([\\w.]+)/;\n\tconst redge = /(edge)[ /]([\\w.]+)/;\n\tconst rmozilla = /(mozilla)(?:.*? rv:([\\w.]+))?/;\n\n\t// WinPhone IE11 and MS Edge userAgents contain \"WebKit\" and \"Mozilla\" and therefore must be checked first\n\tconst browserMatch = redge.exec(sUserAgent)\n\t\t|| rmsie11.exec(sUserAgent)\n\t\t|| rwebkit.exec(sUserAgent)\n\t\t|| rmsie.exec(sUserAgent)\n\t\t|| (sUserAgent.indexOf(\"compatible\") < 0 && rmozilla.exec(sUserAgent)) || [];\n\n\tconst oRes = {\n\t\tbrowser: browserMatch[1] || \"\",\n\t\tversion: browserMatch[2] || \"0\",\n\t};\n\toRes[oRes.browser] = true;\n\treturn oRes;\n};\n\nconst _getBrowser = () => {\n\tconst oBrowser = _calcBrowser();\n\tconst sUserAgent = navigator.userAgent;\n\tconst oNavigator = window.navigator;\n\n\t// jQuery checks for user agent strings. We differentiate between browsers\n\tlet oExpMobile;\n\tlet oResult;\n\tlet fVersion;\n\n\t// Mozilla\n\tif (oBrowser.mozilla) {\n\t\toExpMobile = /Mobile/;\n\t\tif (sUserAgent.match(/Firefox\\/(\\d+\\.\\d+)/)) {\n\t\t\tfVersion = parseFloat(RegExp.$1);\n\t\t\toResult = {\n\t\t\t\tname: BROWSER.FIREFOX,\n\t\t\t\tversionStr: `${fVersion}`,\n\t\t\t\tversion: fVersion,\n\t\t\t\tmozilla: true,\n\t\t\t\tmobile: oExpMobile.test(sUserAgent),\n\t\t\t};\n\t\t} else {\n\t\t\t// unknown mozilla browser\n\t\t\toResult = {\n\t\t\t\tmobile: oExpMobile.test(sUserAgent),\n\t\t\t\tmozilla: true,\n\t\t\t\tversion: -1,\n\t\t\t};\n\t\t}\n\t} else if (oBrowser.webkit) {\n\t\t// webkit version is needed for calculation if the mobile android device is a tablet (calculation of other mobile devices work without)\n\t\tconst regExpWebkitVersion = sUserAgent.toLowerCase().match(/webkit[/]([\\d.]+)/);\n\t\tlet webkitVersion;\n\t\tif (regExpWebkitVersion) {\n\t\t\twebkitVersion = regExpWebkitVersion[1];\n\t\t}\n\t\toExpMobile = /Mobile/;\n\t\tconst aChromeMatch = sUserAgent.match(/(Chrome|CriOS)\\/(\\d+\\.\\d+).\\d+/);\n\t\tconst aFirefoxMatch = sUserAgent.match(/FxiOS\\/(\\d+\\.\\d+)/);\n\t\tconst aAndroidMatch = sUserAgent.match(/Android .+ Version\\/(\\d+\\.\\d+)/);\n\n\t\tif (aChromeMatch || aFirefoxMatch || aAndroidMatch) {\n\t\t\tlet sName,\n\t\t\t\tsVersion,\n\t\t\t\tbMobile;\n\n\t\t\tif (aChromeMatch) {\n\t\t\t\tsName = BROWSER.CHROME;\n\t\t\t\tbMobile = oExpMobile.test(sUserAgent);\n\t\t\t\tsVersion = parseFloat(aChromeMatch[2]);\n\t\t\t} else if (aFirefoxMatch) {\n\t\t\t\tsName = BROWSER.FIREFOX;\n\t\t\t\tbMobile = true;\n\t\t\t\tsVersion = parseFloat(aFirefoxMatch[1]);\n\t\t\t} else if (aAndroidMatch) {\n\t\t\t\tsName = BROWSER.ANDROID;\n\t\t\t\tbMobile = oExpMobile.test(sUserAgent);\n\t\t\t\tsVersion = parseFloat(aAndroidMatch[1]);\n\t\t\t}\n\n\t\t\toResult = {\n\t\t\t\tname: sName,\n\t\t\t\tmobile: bMobile,\n\t\t\t\tversionStr: `${sVersion}`,\n\t\t\t\tversion: sVersion,\n\t\t\t\twebkit: true,\n\t\t\t\twebkitVersion,\n\t\t\t};\n\t\t} else { // Safari might have an issue with sUserAgent.match(...); thus changing\n\t\t\tconst oExp = /(Version|PhantomJS)\\/(\\d+\\.\\d+).*Safari/;\n\t\t\tconst bStandalone = oNavigator.standalone;\n\t\t\tif (oExp.test(sUserAgent)) {\n\t\t\t\tconst aParts = oExp.exec(sUserAgent);\n\t\t\t\tfVersion = parseFloat(aParts[2]);\n\t\t\t\toResult = {\n\t\t\t\t\tname: BROWSER.SAFARI,\n\t\t\t\t\tversionStr: `${fVersion}`,\n\t\t\t\t\tfullscreen: false,\n\t\t\t\t\twebview: false,\n\t\t\t\t\tversion: fVersion,\n\t\t\t\t\tmobile: oExpMobile.test(sUserAgent),\n\t\t\t\t\twebkit: true,\n\t\t\t\t\twebkitVersion,\n\t\t\t\t\tphantomJS: aParts[1] === \"PhantomJS\",\n\t\t\t\t};\n\t\t\t} else if (/iPhone|iPad|iPod/.test(sUserAgent) && !(/CriOS/.test(sUserAgent)) && !(/FxiOS/.test(sUserAgent)) && (bStandalone === true || bStandalone === false)) {\n\t\t\t\t// WebView or Standalone mode on iOS\n\t\t\t\toResult = {\n\t\t\t\t\tname: BROWSER.SAFARI,\n\t\t\t\t\tversion: -1,\n\t\t\t\t\tfullscreen: bStandalone,\n\t\t\t\t\twebview: !bStandalone,\n\t\t\t\t\tmobile: oExpMobile.test(sUserAgent),\n\t\t\t\t\twebkit: true,\n\t\t\t\t\twebkitVersion,\n\t\t\t\t};\n\t\t\t} else { // other webkit based browser\n\t\t\t\toResult = {\n\t\t\t\t\tmobile: oExpMobile.test(sUserAgent),\n\t\t\t\t\twebkit: true,\n\t\t\t\t\twebkitVersion,\n\t\t\t\t\tversion: -1,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} else if (oBrowser.msie || oBrowser.trident) {\n\t\tfVersion = parseFloat(oBrowser.version);\n\n\t\toResult = {\n\t\t\tname: BROWSER.INTERNET_EXPLORER,\n\t\t\tversionStr: `${fVersion}`,\n\t\t\tversion: fVersion,\n\t\t\tmsie: true,\n\t\t\tmobile: false,\n\t\t};\n\t} else if (oBrowser.edge) {\n\t\tfVersion = parseFloat(oBrowser.version);\n\t\toResult = {\n\t\t\tname: BROWSER.EDGE,\n\t\t\tversionStr: `${fVersion}`,\n\t\t\tversion: fVersion,\n\t\t\tedge: true,\n\t\t};\n\t} else {\n\t\toResult = {\n\t\t\tname: \"\",\n\t\t\tversionStr: \"\",\n\t\t\tversion: -1,\n\t\t\tmobile: false,\n\t\t};\n\t}\n\n\treturn oResult;\n};\n\nconst _setBrowser = () => {\n\tDevice.browser = _getBrowser();\n\tDevice.browser.BROWSER = BROWSER;\n\n\tif (Device.browser.name) {\n\t\tObject.keys(BROWSER).forEach(b => {\n\t\t\tif (BROWSER[b] === Device.browser.name) {\n\t\t\t\tDevice.browser[b.toLowerCase()] = true;\n\t\t\t}\n\t\t});\n\t}\n};\n\nconst getBrowser = () => {\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\treturn Device.browser;\n};\n\nconst isIE = () => {\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\treturn !!Device.browser.msie;\n};\n\nconst isEdge = () => {\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\treturn !!Device.browser.edge;\n};\n\nconst isChrome = () => {\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\treturn !!Device.browser.chrome;\n};\n\nconst isFF = () => {\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\treturn !!Device.browser.firefox;\n};\n\nconst isSafari = () => {\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\treturn !!Device.browser.safari;\n};\n\n//* ******* Support Detection ********\n\nconst _setSupport = () => {\n\tif (Device.support) {\n\t\treturn;\n\t}\n\n\tif (!Device.browser) {\n\t\t_setBrowser();\n\t}\n\n\tDevice.support = {};\n\tDevice.support.touch = !!((\"ontouchstart\" in window) || (navigator.maxTouchPoints > 0) || (window.DocumentTouch && document instanceof window.DocumentTouch));\n};\n\nconst supportTouch = () => {\n\tif (!Device.support) {\n\t\t_setSupport();\n\t}\n\n\treturn !!Device.support.touch;\n};\n\n//* ******* System Detection ********\n\n/**\n * Provides a basic categorization of the used device based on various indicators.\n *\n * <b>Note:</b> Depending on the capabilities of the device it is also possible that multiple flags are set to <code>true</code>.\n *\n * @namespace\n * @name Device.system\n */\n\n/**\n * If this flag is set to <code>true</code>, the device is recognized as a tablet.\n *\n * <b>Note:</b> This flag is also true for some browsers on desktop devices running on Windows 8 or higher.\n * Also see the documentation for {@link Device.system.combi} devices.\n * You can use the following logic to ensure that the current device is a tablet device:\n *\n * <pre>\n * if(Device.system.tablet && !Device.system.desktop){\n *\t...tablet related commands...\n * }\n * </pre>\n *\n * @name Device.system.tablet\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the device is recognized as a phone.\n *\n * @name Device.system.phone\n * @type boolean\n */\n\n/**\n * If this flag is set to <code>true</code>, the device is recognized as a desktop system.\n *\n * @name Device.system.desktop\n * @type boolean\n */\n\n/**\n * Indicates if the device is recognized as a combination of a desktop system and tablet.\n *\n * <b>Note:</b> This property is mainly for Microsoft Windows 8 (and following) devices where the mouse and touch event may be supported\n * natively by the browser being used. This property is set to <code>true</code> only when both mouse and touch event are natively supported.\n *\n * @name Device.system.combi\n * @type boolean\n */\n\n/**\n * @name Device.system.SYSTEMTYPE\n * Enumeration containing the names of known types of the devices.\n */\n\nconst SYSTEMTYPE = {\n\t\"TABLET\": \"tablet\",\n\t\"PHONE\": \"phone\",\n\t\"DESKTOP\": \"desktop\",\n\t\"COMBI\": \"combi\",\n};\n\nconst _isTablet = () => {\n\tconst sUserAgent = navigator.userAgent;\n\tif (Device.os.name === Device.os.OS.IOS) {\n\t\treturn /ipad/i.test(sUserAgent);\n\t}\n\t// in real mobile device\n\tif (supportTouch()) {\n\t\tif (Device.os.windows && Device.os.version >= 8) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (Device.browser.chrome && Device.os.android && Device.os.version >= 4.4) {\n\t\t\t// From Android version 4.4, WebView also uses Chrome as Kernel.\n\t\t\t// We can use the user agent pattern defined in Chrome to do phone/tablet detection\n\t\t\t// According to the information here: https://developer.chrome.com/multidevice/user-agent#chrome_for_android_user_agent,\n\t\t\t// the existence of \"Mobile\" indicates it's a phone. But because the crosswalk framework which is used in Fiori Client\n\t\t\t// inserts another \"Mobile\" to the user agent for both tablet and phone, we need to check whether \"Mobile Safari/<Webkit Rev>\" exists.\n\t\t\treturn !/Mobile Safari\\/[.0-9]+/.test(sUserAgent);\n\t\t}\n\t\tlet densityFactor = window.devicePixelRatio ? window.devicePixelRatio : 1; // may be undefined in Windows Phone devices\n\t\t// On Android sometimes window.screen.width returns the logical CSS pixels, sometimes the physical device pixels;\n\t\t// Tests on multiple devices suggest this depends on the Webkit version.\n\t\t// The Webkit patch which changed the behavior was done here: https://bugs.webkit.org/show_bug.cgi?id=106460\n\t\t// Chrome 27 with Webkit 537.36 returns the logical pixels,\n\t\t// Chrome 18 with Webkit 535.19 returns the physical pixels.\n\t\t// The BlackBerry 10 browser with Webkit 537.10+ returns the physical pixels.\n\t\t// So it appears like somewhere above Webkit 537.10 we do not hve to divide by the devicePixelRatio anymore.\n\t\tif (Device.os.android && Device.browser.webkit && (parseFloat(Device.browser.webkitVersion) > 537.10)) {\n\t\t\tdensityFactor = 1;\n\t\t}\n\n\t\t// this is how android distinguishes between tablet and phone\n\t\t// http://android-developers.blogspot.de/2011/07/new-tools-for-managing-screen-sizes.html\n\t\tconst bTablet = (Math.min(window.screen.width / densityFactor, window.screen.height / densityFactor) >= 600);\n\n\t\t// special workaround for Nexus 7 where the window.screen.width is 600px or 601px in portrait mode (=> tablet)\n\t\t// but window.screen.height 552px in landscape mode (=> phone), because the browser UI takes some space on top.\n\t\t// So the detected device type depends on the orientation :-(\n\t\t// actually this is a Chrome bug, as \"width\"/\"height\" should return the entire screen's dimensions and\n\t\t// \"availWidth\"/\"availHeight\" should return the size available after subtracting the browser UI\n\n\t\t/*\n\t\t\t\tif (isLandscape() &&\n\t\t\t\t\t(window.screen.height === 552 || window.screen.height === 553) // old/new Nexus 7\n\t\t\t\t\t&&\n\t\t\t\t\t(/Nexus 7/i.test(sUserAgent))) {\n\t\t\t\t\tbTablet = true;\n\t\t\t\t}\n\t\t\t\t*/\n\n\t\treturn bTablet;\n\t}\n\t// This simple android phone detection can be used here because this is the mobile emulation mode in desktop browser\n\tconst bAndroidPhone = (/(?=android)(?=.*mobile)/i.test(sUserAgent));\n\t// in desktop browser, it's detected as tablet when\n\t// 1. Windows 8 device with a touch screen where \"Touch\" is contained in the userAgent\n\t// 2. Android emulation and it's not an Android phone\n\treturn (Device.browser.msie && sUserAgent.indexOf(\"Touch\") !== -1) || (Device.os.android && !bAndroidPhone);\n};\n\nconst _getSystem = () => {\n\tconst bTabletDetected = _isTablet();\n\tconst isWin8Upwards = Device.os.windows && Device.os.version >= 8;\n\n\tconst oSystem = {};\n\toSystem.tablet = !!((Device.support.touch || isWin8Upwards) && bTabletDetected);\n\toSystem.phone = !!((Device.os.windows_phone || (Device.support.touch)) && !bTabletDetected);\n\toSystem.desktop = !!((!oSystem.tablet && !oSystem.phone) || isWin8Upwards);\n\toSystem.combi = oSystem.desktop && oSystem.tablet;\n\toSystem.SYSTEMTYPE = SYSTEMTYPE;\n\n\treturn oSystem;\n};\n\nconst _setSystem = () => {\n\t_setSupport();\n\t_setOS();\n\n\tDevice.system = {};\n\tDevice.system = _getSystem();\n\tif (Device.system.tablet || Device.system.phone) {\n\t\tDevice.browser.mobile = true;\n\t}\n};\n\nconst getSystem = () => {\n\tif (!Device.system) {\n\t\t_setSystem();\n\t}\n\n\treturn Device.system;\n};\n\nconst isDesktop = () => {\n\tif (!Device.system) {\n\t\t_setSystem();\n\t}\n\n\treturn Device.system.desktop;\n};\n\nconst isTablet = () => {\n\tif (!Device.system) {\n\t\t_setSystem();\n\t}\n\n\treturn Device.system.tablet;\n};\n\nconst isPhone = () => {\n\tif (!Device.system) {\n\t\t_setSystem();\n\t}\n\n\treturn Device.system.phone;\n};\n\nconst isMobile = () => {\n\tif (!Device.system) {\n\t\t_setSystem();\n\t}\n\n\treturn Device.browser.mobile;\n};\n\nexport {\n\tisIE,\n\tisEdge,\n\tisChrome,\n\tisFF,\n\tisSafari,\n\tisMobile,\n\tisDesktop,\n\tisTablet,\n\tisPhone,\n\tisAndroid,\n\tgetOS,\n\tgetSystem,\n\tgetBrowser,\n\tsupportTouch,\n};\n","const flatstr = typeof chrome === \"object\" || typeof v8 === \"object\" ? (s, iConcatOps) => {\n\tif (iConcatOps > 2 && 40 * iConcatOps > s.length) {\n\t\tNumber(s);\n\t}\n\treturn s;\n} : s => s;\n\nconst rLines = /(?:\\r\\n|\\r|\\n|^)[ \\t\\f]*/;\nconst rEscapesOrSeparator = /(\\\\u[0-9a-fA-F]{0,4})|(\\\\.)|(\\\\$)|([ \\t\\f]*[ \\t\\f:=][ \\t\\f]*)/g;\nconst rEscapes = /(\\\\u[0-9a-fA-F]{0,4})|(\\\\.)|(\\\\$)/g;\nconst mEscapes = {\n\t\"\\\\f\": \"\\f\",\n\t\"\\\\n\": \"\\n\",\n\t\"\\\\r\": \"\\r\",\n\t\"\\\\t\": \"\\t\",\n};\n\nconst parseProperties = sText => {\n\tconst properties = {},\n\t\taLines = sText.split(rLines);\n\n\tlet sLine,\n\t\trMatcher,\n\t\tsKey,\n\t\tsValue,\n\t\ti,\n\t\tm,\n\t\tiLastIndex,\n\t\tiConcatOps;\n\n\tconst append = s => {\n\t\tif (sValue) {\n\t\t\tsValue = `${sValue}${s}`;\n\t\t\tiConcatOps++;\n\t\t} else {\n\t\t\tsValue = s;\n\t\t\tiConcatOps = 0;\n\t\t}\n\t};\n\n\tfor (i = 0; i < aLines.length; i++) {\n\t\tsLine = aLines[i];\n\t\tconst skipLine = sLine === \"\" || sLine.charAt(0) === \"#\" || sLine.charAt(0) === \"!\";\n\n\t\tif (!skipLine) {\n\t\t\trMatcher = rEscapesOrSeparator;\n\t\t\tiLastIndex = 0;\n\t\t\trMatcher.lastIndex = iLastIndex;\n\t\t\tsKey = null;\n\t\t\tsValue = \"\";\n\t\t\tm = rMatcher.exec(sLine);\n\t\t\twhile (m !== null) {\n\t\t\t\tif (iLastIndex < m.index) {\n\t\t\t\t\tappend(sLine.slice(iLastIndex, m.index));\n\t\t\t\t}\n\t\t\t\tiLastIndex = rMatcher.lastIndex;\n\t\t\t\tif (m[1]) {\n\t\t\t\t\tif (m[1].length !== 6) {\n\t\t\t\t\t\tthrow new Error(`Incomplete Unicode Escape '${m[1]}'`);\n\t\t\t\t\t}\n\t\t\t\t\tappend(String.fromCharCode(parseInt(m[1].slice(2), 16)));\n\t\t\t\t} else if (m[2]) {\n\t\t\t\t\tappend(mEscapes[m[2]] || m[2].slice(1));\n\t\t\t\t} else if (m[3]) {\n\t\t\t\t\tsLine = aLines[++i];\n\t\t\t\t\tiLastIndex = 0;\n\t\t\t\t\trMatcher.lastIndex = iLastIndex;\n\t\t\t\t} else if (m[4]) {\n\t\t\t\t\tsKey = sValue;\n\t\t\t\t\tsValue = \"\";\n\t\t\t\t\trMatcher = rEscapes;\n\t\t\t\t\trMatcher.lastIndex = iLastIndex;\n\t\t\t\t}\n\t\t\t\tm = rMatcher.exec(sLine);\n\t\t\t}\n\t\t\tif (iLastIndex < sLine.length) {\n\t\t\t\tappend(sLine.slice(iLastIndex));\n\t\t\t}\n\t\t\tif (sKey == null) {\n\t\t\t\tsKey = sValue;\n\t\t\t\tsValue = \"\";\n\t\t\t}\n\t\t\tproperties[sKey] = flatstr(sValue, sValue ? iConcatOps : 0);\n\t\t}\n\t}\n\treturn properties;\n};\n\nexport default parseProperties;\n","import { registerFeature } from \"../FeaturesRegistry.js\";\nimport parseProperties from \"../util/parseProperties.js\";\n\nconst PropertiesFormatSupport = {\n\tparser: parseProperties,\n};\n\nregisterFeature(\"PropertiesFormatSupport\", PropertiesFormatSupport);\n","const messageFormatRegEX = /('')|'([^']+(?:''[^']*)*)(?:'|$)|\\{([0-9]+(?:\\s*,[^{}]*)?)\\}|[{}]/g;\n\nconst formatMessage = (text, values) => {\n\tvalues = values || [];\n\n\treturn text.replace(messageFormatRegEX, ($0, $1, $2, $3, offset) => {\n\t\tif ($1) {\n\t\t\treturn '\\''; /* eslint-disable-line */\n\t\t}\n\n\t\tif ($2) {\n\t\t\treturn $2.replace(/''/g, '\\''); /* eslint-disable-line */\n\t\t}\n\n\t\tif ($3) {\n\t\t\treturn String(values[parseInt($3)]);\n\t\t}\n\n\t\tthrow new Error(`[i18n]: pattern syntax error at pos ${offset}`);\n\t});\n};\n\nexport default formatMessage;\n","import { registerI18nBundle, fetchI18nBundle, getI18nBundleData } from \"./asset-registries/i18n.js\";\nimport formatMessage from \"./util/formatMessage.js\";\n\nconst I18nBundleInstances = new Map();\n\n/**\n * @class\n * @public\n */\nclass I18nBundle {\n\tconstructor(packageName) {\n\t\tthis.packageName = packageName;\n\t}\n\n\t/**\n\t * Returns a text in the currently loaded language\n\t *\n\t * @param {Object|String} textObj key/defaultText pair or just the key\n\t * @param params Values for the placeholders\n\t * @returns {*}\n\t */\n\tgetText(textObj, ...params) {\n\t\tif (typeof textObj === \"string\") {\n\t\t\ttextObj = { key: textObj, defaultText: textObj };\n\t\t}\n\n\t\tif (!textObj || !textObj.key) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst bundle = getI18nBundleData(this.packageName);\n\t\tconst messageText = bundle && bundle[textObj.key] ? bundle[textObj.key] : (textObj.defaultText || textObj.key);\n\n\t\treturn formatMessage(messageText, params);\n\t}\n}\n\nconst getI18nBundle = packageName => {\n\tif (I18nBundleInstances.has(packageName)) {\n\t\treturn I18nBundleInstances.get(packageName);\n\t}\n\n\tconst i18nBundle = new I18nBundle(packageName);\n\tI18nBundleInstances.set(packageName, i18nBundle);\n\treturn i18nBundle;\n};\n\nexport {\n\tregisterI18nBundle,\n\tfetchI18nBundle,\n\tgetI18nBundle,\n};\n","import { getAnimationMode as getConfiguredAnimationMode } from \"../InitialConfiguration.js\";\nimport AnimationMode from \"../types/AnimationMode.js\";\n\nlet animationMode;\n\nconst getAnimationMode = () => {\n\tif (animationMode === undefined) {\n\t\tanimationMode = getConfiguredAnimationMode();\n\t}\n\n\treturn animationMode;\n};\n\nconst setAnimationMode = newAnimationMode => {\n\tif (Object.values(AnimationMode).includes(newAnimationMode)) {\n\t\tanimationMode = newAnimationMode;\n\t}\n};\n\nexport {\n\tgetAnimationMode,\n\tsetAnimationMode,\n};\n","import DataType from \"./DataType.js\";\n\n/**\n * Different calendar types.\n */\nconst CalendarTypes = {\n\tGregorian: \"Gregorian\",\n\tIslamic: \"Islamic\",\n\tJapanese: \"Japanese\",\n\tBuddhist: \"Buddhist\",\n\tPersian: \"Persian\",\n};\n\nclass CalendarType extends DataType {\n\tstatic isValid(value) {\n\t\treturn !!CalendarTypes[value];\n\t}\n}\n\nCalendarType.generateTypeAcessors(CalendarTypes);\n\nexport default CalendarType;\n","import CalendarType from \"../types/CalendarType.js\";\nimport { getCalendarType as getConfiguredCalendarType } from \"../InitialConfiguration.js\";\n\nlet calendarType;\n\nconst getCalendarType = () => {\n\tif (calendarType === undefined) {\n\t\tcalendarType = getConfiguredCalendarType();\n\t}\n\n\tif (CalendarType.isValid(calendarType)) {\n\t\treturn calendarType;\n\t}\n\n\treturn CalendarType.Gregorian;\n};\n\nexport { getCalendarType }; // eslint-disable-line\n","import { getFormatSettings } from \"../InitialConfiguration.js\";\n\nlet formatSettings;\n\nconst getFirstDayOfWeek = () => {\n\tif (formatSettings === undefined) {\n\t\tformatSettings = getFormatSettings();\n\t}\n\n\treturn formatSettings.firstDayOfWeek;\n};\n\nexport { getFirstDayOfWeek }; // eslint-disable-line\n","import getSingletonElementInstance from \"./util/getSingletonElementInstance.js\";\n\nconst getSharedResourcesInstance = () => getSingletonElementInstance(\"ui5-shared-resources\", document.head);\n\n/**\n * Use this method to initialize/get resources that you would like to be shared among UI5 Web Components runtime instances.\n * The data will be accessed via a singleton \"ui5-shared-resources\" HTML element in the \"head\" element of the page.\n *\n * @public\n * @param namespace Unique ID of the resource, may contain \".\" to denote hierarchy\n * @param initialValue Object or primitive that will be used as an initial value if the resource does not exist\n * @returns {*}\n */\nconst getSharedResource = (namespace, initialValue) => {\n\tconst parts = namespace.split(\".\");\n\tlet current = getSharedResourcesInstance();\n\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tconst part = parts[i];\n\t\tconst lastPart = i === parts.length - 1;\n\t\tif (!Object.prototype.hasOwnProperty.call(current, part)) {\n\t\t\tcurrent[part] = lastPart ? initialValue : {};\n\t\t}\n\t\tcurrent = current[part];\n\t}\n\n\treturn current;\n};\n\nexport default getSharedResource;\n","import getSharedResource from \"./getSharedResource.js\";\n\nconst registry = getSharedResource(\"SVGIcons.registry\", new Map());\nconst iconCollectionPromises = getSharedResource(\"SVGIcons.promises\", new Map());\n\nconst ICON_NOT_FOUND = \"ICON_NOT_FOUND\";\nconst DEFAULT_COLLECTION = \"SAP-icons\";\n\nconst parseName = name => {\n\t// silently support ui5-compatible URIs\n\tif (name.startsWith(\"sap-icon://\")) {\n\t\tname = name.replace(\"sap-icon://\", \"\");\n\t}\n\n\tlet collection;\n\t[name, collection] = name.split(\"/\").reverse();\n\tcollection = collection || DEFAULT_COLLECTION;\n\t// hardcoded alias in case icon explorer is used, resolve `SAP-icons-TNT` to `tnt`\n\t// aliases can be made a feature in the future if more collections need it or more aliases are needed.\n\tif (collection === \"SAP-icons-TNT\") {\n\t\tcollection = \"tnt\";\n\t}\n\tconst registryKey = `${collection}/${name}`;\n\treturn { name, collection, registryKey };\n};\n\n\nconst registerIcon = (name, { pathData, ltr, accData, collection } = {}) => { // eslint-disable-line\n\tif (!collection) {\n\t\tcollection = DEFAULT_COLLECTION;\n\t}\n\n\tconst key = `${collection}/${name}`;\n\tregistry.set(key, { pathData, ltr, accData });\n};\n\nconst getIconDataSync = nameProp => {\n\tconst { registryKey } = parseName(nameProp);\n\treturn registry.get(registryKey);\n};\n\nconst getIconData = async nameProp => {\n\tconst { collection, registryKey } = parseName(nameProp);\n\n\tif (!iconCollectionPromises.has(collection)) {\n\t\ticonCollectionPromises.set(collection, Promise.resolve(ICON_NOT_FOUND));\n\t}\n\n\tconst iconData = await iconCollectionPromises.get(collection);\n\n\tif (iconData === ICON_NOT_FOUND) {\n\t\treturn iconData;\n\t}\n\n\treturn registry.get(registryKey);\n};\n\nconst getRegisteredNames = async () => {\n\tawait Promise.all(Array.from(iconCollectionPromises.values()));\n\treturn Array.from(registry.keys());\n};\n\nconst registerCollectionPromise = (collection, promise) => {\n\ticonCollectionPromises.set(collection, promise);\n};\n\nexport {\n\tgetIconData,\n\tgetIconDataSync,\n\tregisterIcon,\n\tgetRegisteredNames,\n\tregisterCollectionPromise,\n};\n","import { registerThemeProperties } from \"./dist/AssetRegistry.js\";\n\n// ESM bundle targets Edge + browsers with native support\nimport \"./dist/features/browsersupport/Edge.js\";\nimport \"./dist/features/OpenUI5Support.js\";\n\n// Test components\nimport \"./dist/test-resources/elements/Generic.js\";\nimport \"./dist/test-resources/elements/NoShadowDOM.js\";\nimport \"./dist/test-resources/elements/Parent.js\";\nimport \"./dist/test-resources/elements/Child.js\";\nimport \"./dist/test-resources/elements/WithStaticArea.js\";\nimport \"./dist/test-resources/elements/GenericExt.js\";\n\n// Test themes - CSS Vars for the sap_fiori_3, sap_fiori_3_dark, sap_belize and sap_belize_hcb themes\nimport \"./dist/test-resources/assets/Themes.js\";\n\n// used in test pages\nimport RenderScheduler from \"./dist/RenderScheduler.js\";\nwindow.RenderScheduler = RenderScheduler;\nimport { isIE } from \"./dist/Device.js\";\nwindow.isIE = isIE; // attached to the window object for testing purposes\n\n// used for tests - to register a custom theme\nwindow.registerThemeProperties = registerThemeProperties;\n\n// i18n\nimport \"./dist/features/PropertiesFormatSupport.js\";\nimport { registerI18nBundle, fetchI18nBundle, getI18nBundle } from \"./dist/i18nBundle.js\";\n\n// Note: keep in sync with rollup.config value for IIFE\nimport { getAnimationMode } from \"./dist/config/AnimationMode.js\";\nimport { getLanguage } from \"./dist/config/Language.js\";\nimport { getCalendarType } from \"./dist/config/CalendarType.js\";\nimport { getTheme, setTheme } from \"./dist/config/Theme.js\";\nimport { getNoConflict, setNoConflict } from \"./dist/config/NoConflict.js\";\nimport { getRTL } from \"./dist/config/RTL.js\";\nimport { getFirstDayOfWeek } from \"./dist/config/FormatSettings.js\";\nimport { getRegisteredNames as getIconNames } from \"./dist/SVGIconRegistry.js\"\nwindow[\"sap-ui-webcomponents-bundle\"] = {\n\tconfiguration : {\n\t\tgetAnimationMode,\n\t\tgetLanguage,\n\t\tgetTheme,\n\t\tsetTheme,\n\t\tgetNoConflict,\n\t\tsetNoConflict,\n\t\tgetCalendarType,\n\t\tgetRTL,\n\t\tgetFirstDayOfWeek,\n\t},\n\tgetIconNames,\n\tregisterI18nBundle,\n\tfetchI18nBundle,\n\tgetI18nBundle,\n};\n"],"names":["features","Map","registerFeature","name","feature","set","getFeature","get","assetParameters","default","all","DEFAULT_THEME","DEFAULT_LANGUAGE","DEFAULT_LOCALE","SUPPORTED_LOCALES","browserLanguages","navigator","languages","language","userLanguage","browserLanguage","class2type","hasOwn","hasOwnProperty","toString","fnToString","ObjectFunctionString","call","Object","fnIsPlainObject","obj","proto","Ctor","getPrototypeOf","constructor","oToken","create","fnMerge","src","copyIsArray","copy","options","clone","target","arguments","i","length","deep","skipToken","undefined","isPlainObject","Array","isArray","args","push","apply","_merge","initialized","initialConfig","animationMode","theme","rtl","calendarType","noConflict","formatSettings","useDefaultLanguage","assetsPath","booleanMapping","initConfiguration","configScript","document","querySelector","configJSON","JSON","parse","innerHTML","err","console","warn","merge","parseConfigurationScript","URLSearchParams","window","location","search","forEach","value","key","startsWith","lowerCaseValue","toLowerCase","param","split","has","OpenUI5Support","isLoaded","OpenUI5Config","getConfigurationSettingsObject","applyOpenUI5Configuration","EventProvider","[object Object]","this","_eventRegistry","eventName","fnFunction","eventRegistry","eventListeners","function","filter","event","data","map","eventProvider","attachLanguageChange","listener","attachEvent","setToArray","s","arr","item","Definitions","Set","Failures","failureTimeout","registerTag","tag","add","displayFailedRegistrations","join","clear","rtlAwareSet","registeredElements","invalidatedWebComponents","list","lookup","webComponent","delete","shift","callback","stats","timesProcessed","Error","renderTaskPromise","renderTaskPromiseResolve","mutationObserverTimer","queuePromise","RenderScheduler","scheduleRenderTask","_render","remove","Promise","resolve","requestAnimationFrame","process","component","setTimeout","isEmpty","_resolveTaskPromise","definedPromises","customElements","whenDefined","whenAllCustomElementsAreDefined","whenDOMUpdated","element","filters","getMetadata","getTag","rtlAware","klass","languageAware","isLanguageAware","renderDeferred","getLanguage","getUseDefaultLanguage","useDefaultLang","rLocale","Locale","sLocaleId","aResult","exec","replace","sLanguage","sScript","sRegion","sVariant","slice","sExtension","sPrivateUse","toUpperCase","sSubtag","getPrivateUseSubtags","indexOf","r","cache","getLocaleInstance","lang","convertToLocaleOrNull","e","getLocale","getConfigLanguage","detectNavigatorLanguage","fetchPromises","jsonPromises","textPromises","fetchTextOnce","async","url","fetch","response","text","fetchJsonOnce","json","localeRegEX","SAPSupportabilityLocales","M_ISO639_NEW_TO_OLD","he","yi","id","sr","nextFallbackLocale","locale","p","lastIndexOf","getAssetsPath","getEffectiveAssetPath","assetName","assetsPathPrefix","bundleData","bundleURLs","setI18nBundleData","packageName","fetchI18nBundle","bundlesForPackage","region","getRegion","localeId","m","script","variants","isPrivate","normalizeLocale","bundleURL","content","parser","PropertiesFormatSupport","allPackages","keys","resources","cldrData","cldrUrls","cldrMappingFn","M_ISO639_OLD_TO_NEW","iw","ji","in","sh","registerModuleContent","moduleName","fetchCldr","resolveMissingMappings","includes","calcLocale","cldrObj","getLocaleDataObject","cldrContent","getScript","themeURLs","themeStyles","registeredPackages","registeredThemes","registerThemeProperties","themeName","style","_","getThemeProperties","regThemesStr","values","fetchThemeProperties","themeProps","fileName","dotPos","getFileExtension","getRegisteredPackages","self","ampersandTest","nativeURLSearchParams","prototype","isSupportObjectConstructor","a","decodesPlusesCorrectly","encodesAmpersandsCorrectly","append","URLSearchParamsPolyfill","iterable","Symbol","iterator","appendTo","dict","getAll","query","encode","useProxy","Proxy","defineProperty","construct","USPProto","polyfill","thisArg","parseToDict","getOwnPropertyNames","sort","k","j","items","makeIterator","entries","str","!","'","(",")","~","%20","%00","encodeURIComponent","match","decode","decodeURIComponent","next","done","pairs","index","val","stringify","global","ShadyDOM","nativeNodeValue","getOwnPropertyDescriptor","Node","parentElement","parentNode","HTMLElement","isUI5Element","_processChildren","patchNodeValue","createStyleInHead","cssText","attributes","createElement","type","pair","setAttribute","textContent","head","appendChild","createThemePropertiesStyleTag","styleElement","data-ui5-theme-properties","getThemeDesignerTheme","metadataString","el","getComputedStyle","backgroundImage","display","classList","body","metadata","removeChild","getThemeMetadata","baseThemeName","Path","Extends","ex","processThemeMetadata","params","paramsString","charAt","parseThemeMetadata","ponyfillTimer","ponyfillNeeded","CSSVarsPonyfill","runPonyfill","rootElement","querySelectorAll","group","getAttribute","removeAttribute","disabled","outNode","cleanPonyfillMetadata","cssVars","variables","isCompact","getCompactModeVars","silent","b","hasAttribute","contains","compactVars","cssContent","regExp","RegExp","declaration","trim","BASE_THEME_PACKAGE","loadThemeBase","applyTheme","extTheme","cssVariablesLoaded","detectExternalTheme","deleteThemeBase","packagesTheme","isThemeRegistered","loadComponentPackages","fireEvent","fireThemeLoaded","getTheme","setTheme","newTheme","sap","core","ui","getCore","init","attachInit","require","config","getConfiguration","LocaleData","getAnimationMode","getRTL","getCalendarType","firstDayOfWeek","getInstance","getFirstDayOfWeek","_get","attachListeners","attachThemeChanged","listenForThemeChange","link","children","find","href","insertMainFontFace","data-ui5-font-face","insertOverrideFontFace","data-ui5-font-face-override","polyfillLoadedPromise","bootPromise","boot","addEventListener","insertFontFace","data-ui5-system-css-vars","WebComponents","ready","waitFor","DataType","types","kebabToCamelMap","camelToKebabMap","kebabToCamelCase","string","result","toCamelCase","camelToKebabCase","parts","isSlot","localName","rulesObj","include","exclude","tagsCache","shouldScopeCustomElement","some","rule","getEffectiveScopingSuffixForTag","UI5ElementMetadata","propData","multiple","propValue","validateSingleProperty","slotData","validateSingleSlot","pureTag","suffix","pureAltTag","altTag","propName","getProperties","noAttribute","getPropertiesList","slots","defaultSlot","getSlots","slotsAreManaged","_slotName","individualSlots","managedSlots","properties","events","propertyType","Boolean","String","defaultValue","baseKlass","inclusive","parent","isDescendantOf","isValid","assignedNodes","flatten","executeTemplate","template","tagsToScope","getUniqueDependencies","dep","getPureTag","getCustomElementsScopingSuffix","getSingletonElementInstance","insertBefore","firstChild","getStaticAreaInstance","StaticAreaElement","super","staticAreaDomRef","tagName","define","getStylesString","styles","reduce","acc","concat","StaticAreaItem","_ui5ElementContext","ui5ElementContext","_rendered","renderResult","staticAreaTemplate","stylesToAdd","staticAreaStyles","staticAreaItemDomRef","attachShadow","mode","_id","_updateContentDensity","render","shadowRoot","eventContext","staticArea","childElementCount","destroy","_updateFragment","StaticAreaItemElement","w","observers","WeakMap","DOMObserver","node","observerObject","observeChildren","MutationObserver","observe","disconnect","unobserveChildren","excludeList","getNoConflict","skipOriginalEvent","nc","shouldFireOriginalEvent","shouldNotFireOriginalEvent","A_RTL_LOCALES","getDesigntimePropertyAsArray","configurationRTL","impliesRTL","attachCustomCSSChange","customCSSFor","effectiveStyleMap","getEffectiveStyle","ElementClass","customStyle","getCustomCSS","effectiveStyle","constructableStyleMap","replaceSelector","selector","selectorStartPos","replacement","charAfterSelectorPos","charAfterSelector","upToSelector","substring","closingParenthesisPos","openingParenthesisPos","opened","pos","char","findClosingParenthesisPos","adaptLinePart","line","replaceSelectors","adaptCSSForIE","lineParts","linePart","IEStyleSet","createComponentStyleTag","staticCssContent","componentStaticStyles","getStaticStyle","data-ui5-element-styles","Integer","Number","isInteger","Float","allowList","isValidPropertyName","Element","_property-change","autoId","elementTimeouts","uniqueDependenciesCache","UI5Element","deferredResolve","_propertyChangeListeners","_initializeState","_upgradeAllProperties","_initializeContainers","_upToDate","_inDOM","_fullyConnected","_domRefReadyPromise","_deferredResolve","_monitoredChildProps","_shouldInvalidateParent","removeEventListener","size","__id","needsShadowDOM","_needsShadowDOM","needsStaticArea","_needsStaticArea","staticAreaItem","_startObservingDOMChildren","register","renderImmediately","onEnterDOM","_stopObservingDOMChildren","deregister","onExitDOM","_removeFragmentFromStaticArea","cancelRender","hasSlots","mutationObserverOptions","childList","subtree","canSlotText","characterData","observeDOMNode","bind","unobserveDOMNode","_updateSlots","slotsMap","domChildren","from","childNodes","slotName","_clearSlot","autoIncrementMap","slottedChildrenMap","allChildrenUpgraded","child","idx","_getSlotName","validValues","nextIndex","_individualSlot","whenDefinedPromise","timeoutPromise","race","upgrade","validateSlotValue","listenFor","_attachChildPropertyUpdated","invalidateParent","_attachSlotChange","propertyName","slot","_state","_invalidate","_detachChildPropertyUpdated","_detachSlotChange","oldValue","newValue","realName","nameInCamelCase","propertyTypeClass","parseInt","parseFloat","attrName","attrValue","prop","_upgradeProperty","defaultState","_getDefaultState","assign","observedProps","notObservedProps","_invalidateParentOnPropertyUpdate","_updateAttribute","_hasPropertyChangeListeners","dispatchEvent","CustomEvent","detail","composed","bubbles","propsMetadata","shouldObserve","shouldSkip","_invalidateOnSlotChange","getDomRef","_suppressInvalidation","hasIndividualSlots","onBeforeRendering","_onComponentStateFinalized","_updateShadowRoot","_shouldUpdateFragment","_assignIndividualSlotsToChildren","onAfterRendering","styleToPrepend","adoptedStyleSheets","styleContent","CSSStyleSheet","replaceSync","getConstructableStyle","domRef","refName","_waitForDomRef","focusDomRef","getFocusDomRef","focus","cancelable","eventResult","_fireEvent","camelCaseEventName","compatEventResult","noConflictEvent","customEvent","curr","getPropertyValue","effectiveDir","doc","dirValues","locallyAppliedDir","dir","documentElement","observedAttributes","getAttributesList","isRendered","_defaultState","MetadataClass","props","propType","propDefaultValue","validatePropertyValue","_propertyChange","dependencies","filtered","deps","whenDependenciesDefined","onDefine","getAltTag","definedLocally","isTagRegistered","definedGlobally","recordTagRegistrationFailure","_generateAccessors","oldClassName","_metadata","metadataObjects","unshift","mergedMetadata","directives","isDirective","o","isCEPolyfill","polyfillWrapFlushCallback","removeNodes","container","start","end","n","nextSibling","noChange","nothing","marker","Math","random","nodeMarker","markerRegex","Template","nodesToRemove","stack","walker","createTreeWalker","lastPartIndex","partIndex","strings","nextNode","nodeType","hasAttributes","count","endsWith","stringForPart","lastAttributeNameRegex","attributeLookupName","attributeValue","statics","currentNode","lastIndex","insert","createMarker","createTextNode","previousSibling","pop","isTemplatePartActive","part","createComment","TemplateInstance","processor","__parts","setValue","commit","fragment","cloneNode","importNode","nodeIndex","nodeName","handleTextExpression","insertAfterNode","handleAttributeExpressions","adoptNode","commentMarker","TemplateResult","l","html","isCommentBinding","commentOpen","attributeMatch","substr","getHTML","isPrimitive","isIterable","AttributeCommitter","dirty","_createPart","AttributePart","v","t","_getValue","committer","directive","NodePart","__pendingValue","startNode","endNode","ref","__insert","__commitText","__commitTemplateResult","__commitNode","__commitIterable","valueAsString","templateFactory","update","instance","_clone","itemParts","itemPart","appendIntoPart","insertAfterPart","BooleanAttributePart","PropertyCommitter","single","PropertyPart","eventOptionsSupported","capture","_e","EventPart","__boundHandleEvent","handleEvent","newListener","oldListener","shouldRemoveListener","once","passive","shouldAddListener","__options","getOptions","defaultTemplateProcessor","prefix","templateCache","templateCaches","stringsArray","keyString","getTemplateElement","litRender","templateResult","domNode","appendInto","scopedHtml","tags","scopeHTML","strProp","boolProp","objectProp","noAttributeProp","multiProp","defaultValueProp","other","individual","named","Generic","prop1","prop2","prop3","staticContent","getStaticAreaItemDomRef","responsivePopover","addStaticArea","extProp","extSlot","Device","BROWSER","INTERNET_EXPLORER","EDGE","FIREFOX","CHROME","SAFARI","ANDROID","_getBrowser","oBrowser","sUserAgent","userAgent","browserMatch","oRes","browser","version","_calcBrowser","oNavigator","oExpMobile","oResult","fVersion","mozilla","$1","versionStr","mobile","test","webkit","regExpWebkitVersion","webkitVersion","aChromeMatch","aFirefoxMatch","aAndroidMatch","sName","sVersion","bMobile","oExp","bStandalone","standalone","aParts","fullscreen","webview","phantomJS","msie","trident","edge","flatstr","chrome","v8","iConcatOps","rLines","rEscapesOrSeparator","rEscapes","mEscapes","\\f","\\n","\\r","\\t","sText","aLines","sLine","rMatcher","sKey","sValue","iLastIndex","fromCharCode","messageFormatRegEX","I18nBundleInstances","I18nBundle","textObj","defaultText","bundle","messageText","$0","$2","$3","offset","CalendarTypes","Gregorian","Islamic","Japanese","Buddhist","Persian","CalendarType","generateTypeAcessors","getSharedResource","namespace","initialValue","current","lastPart","registry","iconCollectionPromises","isIE","configuration","setNoConflict","noConflictData","registerI18nBundle","oldBundle","getI18nBundle","i18nBundle"],"mappings":"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"}