@ui5/webcomponents-base 0.0.0-6ef02a35f → 0.0.0-7e7d9ea6f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/.eslintignore +3 -2
  2. package/CHANGELOG.md +225 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +13 -11
  5. package/dist/Boot.js +34 -18
  6. package/dist/CSP.js +59 -0
  7. package/dist/CustomElementsRegistry.js +60 -4
  8. package/dist/CustomElementsScope.js +20 -98
  9. package/dist/CustomElementsScopeUtils.js +108 -0
  10. package/dist/Device.js +20 -1
  11. package/dist/EventProvider.js +19 -25
  12. package/dist/FeaturesRegistry.js +4 -1
  13. package/dist/FontFace.js +7 -95
  14. package/dist/InitialConfiguration.js +11 -7
  15. package/dist/Keys.js +56 -0
  16. package/dist/ManagedStyles.js +83 -0
  17. package/dist/Render.js +3 -1
  18. package/dist/Runtimes.js +107 -0
  19. package/dist/StaticAreaItem.js +15 -10
  20. package/dist/SystemCSSVars.js +4 -25
  21. package/dist/UI5Element.js +59 -60
  22. package/dist/UI5ElementMetadata.js +47 -6
  23. package/dist/asset-registries/Icons.js +22 -8
  24. package/dist/asset-registries/Illustrations.js +10 -3
  25. package/dist/asset-registries/LocaleData.js +18 -4
  26. package/dist/asset-registries/Themes.js +6 -2
  27. package/dist/asset-registries/i18n.js +3 -1
  28. package/dist/assets/bundle.esm.691f93f5.js +43 -0
  29. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  30. package/dist/config/Icons.js +52 -0
  31. package/dist/config/Theme.js +25 -0
  32. package/dist/css/BusyIndicator.css +80 -0
  33. package/dist/css/FontFace.css +75 -0
  34. package/dist/css/OverrideFontFace.css +32 -0
  35. package/dist/css/SystemCSSVars.css +17 -0
  36. package/dist/delegate/ItemNavigation.js +75 -4
  37. package/dist/features/F6Navigation.js +110 -0
  38. package/dist/features/OpenUI5Enablement.js +119 -0
  39. package/dist/generated/AssetParameters.js +1 -1
  40. package/dist/generated/VersionInfo.js +10 -0
  41. package/dist/generated/css/BusyIndicator.css.js +5 -0
  42. package/dist/generated/css/FontFace.css.js +5 -0
  43. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  44. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  45. package/dist/i18nBundle.js +33 -2
  46. package/dist/renderer/LitRenderer.js +33 -12
  47. package/dist/renderer/directives/style-map.js +72 -0
  48. package/dist/renderer/executeTemplate.js +19 -2
  49. package/dist/sap/base/Log.js +2 -10
  50. package/dist/sap/base/assert.js +1 -5
  51. package/dist/sap/base/security/encodeCSS.js +14 -0
  52. package/dist/sap/base/security/encodeXML.js +23 -0
  53. package/dist/sap/base/strings/toHex.js +8 -0
  54. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
  55. package/dist/theming/CustomStyle.js +23 -3
  56. package/dist/theming/applyTheme.js +11 -10
  57. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  58. package/dist/theming/getEffectiveStyle.js +9 -0
  59. package/dist/theming/getStylesString.js +4 -2
  60. package/dist/theming/getThemeDesignerTheme.js +25 -5
  61. package/dist/theming/preloadLinks.js +23 -0
  62. package/dist/types/DataType.js +12 -0
  63. package/dist/types/Float.js +4 -0
  64. package/dist/types/Integer.js +4 -0
  65. package/dist/updateShadowRoot.js +9 -6
  66. package/dist/util/Caret.js +1 -14
  67. package/dist/util/ColorConversion.js +30 -2
  68. package/dist/util/FocusableElements.js +8 -6
  69. package/dist/util/InvisibleMessage.js +20 -9
  70. package/dist/util/TabbableElements.js +4 -0
  71. package/dist/util/createLinkInHead.js +19 -0
  72. package/dist/util/escapeRegex.js +10 -0
  73. package/dist/util/generateHighlightedMarkup.js +42 -0
  74. package/dist/util/getNormalizedTarget.js +16 -0
  75. package/dist/util/isDefaultSlotProvided.js +11 -0
  76. package/dist/util/isNodeHidden.js +1 -1
  77. package/hash.txt +1 -1
  78. package/lib/generate-asset-parameters/index.js +8 -5
  79. package/lib/generate-styles/index.js +26 -0
  80. package/lib/generate-version-info/index.js +32 -0
  81. package/package-scripts.js +25 -31
  82. package/package.json +11 -12
  83. package/src/Boot.js +34 -18
  84. package/src/CSP.js +59 -0
  85. package/src/CustomElementsRegistry.js +60 -4
  86. package/src/CustomElementsScope.js +20 -98
  87. package/src/CustomElementsScopeUtils.js +108 -0
  88. package/src/Device.js +20 -1
  89. package/src/EventProvider.js +19 -25
  90. package/src/FeaturesRegistry.js +4 -1
  91. package/src/FontFace.js +7 -95
  92. package/src/InitialConfiguration.js +11 -7
  93. package/src/Keys.js +56 -0
  94. package/src/ManagedStyles.js +83 -0
  95. package/src/Render.js +3 -1
  96. package/src/Runtimes.js +107 -0
  97. package/src/StaticAreaItem.js +15 -10
  98. package/src/SystemCSSVars.js +4 -25
  99. package/src/UI5Element.js +59 -60
  100. package/src/UI5ElementMetadata.js +47 -6
  101. package/src/asset-registries/Icons.js +22 -8
  102. package/src/asset-registries/Illustrations.js +10 -3
  103. package/src/asset-registries/LocaleData.js +18 -4
  104. package/src/asset-registries/Themes.js +6 -2
  105. package/src/asset-registries/i18n.js +3 -1
  106. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  107. package/src/config/Icons.js +52 -0
  108. package/src/config/Theme.js +25 -0
  109. package/src/css/BusyIndicator.css +80 -0
  110. package/src/css/FontFace.css +75 -0
  111. package/src/css/OverrideFontFace.css +32 -0
  112. package/src/css/SystemCSSVars.css +17 -0
  113. package/src/delegate/ItemNavigation.js +75 -4
  114. package/src/features/F6Navigation.js +110 -0
  115. package/src/features/OpenUI5Enablement.js +119 -0
  116. package/src/i18nBundle.js +33 -2
  117. package/src/renderer/LitRenderer.js +33 -12
  118. package/src/renderer/directives/style-map.js +72 -0
  119. package/src/renderer/executeTemplate.js +19 -2
  120. package/src/theming/CustomStyle.js +23 -3
  121. package/src/theming/applyTheme.js +11 -10
  122. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  123. package/src/theming/getEffectiveStyle.js +9 -0
  124. package/src/theming/getStylesString.js +4 -2
  125. package/src/theming/getThemeDesignerTheme.js +25 -5
  126. package/src/theming/preloadLinks.js +23 -0
  127. package/src/types/DataType.js +12 -0
  128. package/src/types/Float.js +4 -0
  129. package/src/types/Integer.js +4 -0
  130. package/src/updateShadowRoot.js +9 -6
  131. package/src/util/Caret.js +1 -14
  132. package/src/util/ColorConversion.js +30 -2
  133. package/src/util/FocusableElements.js +8 -6
  134. package/src/util/InvisibleMessage.js +20 -9
  135. package/src/util/TabbableElements.js +4 -0
  136. package/src/util/createLinkInHead.js +19 -0
  137. package/src/util/escapeRegex.js +10 -0
  138. package/src/util/generateHighlightedMarkup.js +42 -0
  139. package/src/util/getNormalizedTarget.js +16 -0
  140. package/src/util/isDefaultSlotProvided.js +11 -0
  141. package/src/util/isNodeHidden.js +1 -1
  142. package/used-modules.txt +4 -1
  143. package/config/.eslintrc.js +0 -3
  144. package/config/rollup.config.js +0 -1
  145. package/dist/config/AssetsPath.js +0 -17
  146. package/dist/isLegacyBrowser.js +0 -3
  147. package/dist/resources/bundle.esm.js +0 -26
  148. package/dist/resources/bundle.esm.js.map +0 -1
  149. package/dist/test-resources/assets/Themes.js +0 -17
  150. package/dist/test-resources/elements/Child.js +0 -35
  151. package/dist/test-resources/elements/Generic.js +0 -84
  152. package/dist/test-resources/elements/GenericExt.js +0 -26
  153. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  154. package/dist/test-resources/elements/Parent.js +0 -41
  155. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  156. package/dist/test-resources/pages/AllTestElements.html +0 -39
  157. package/dist/test-resources/pages/Configuration.html +0 -18
  158. package/dist/test-resources/pages/ConfigurationScript.html +0 -34
  159. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  160. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  161. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  162. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  163. package/dist/test-resources/pages/i18n.html +0 -35
  164. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -27
  165. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -63
  166. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -93
  167. package/dist/test-resources/specs/CustomTheme.spec.js +0 -27
  168. package/dist/test-resources/specs/StaticArea.spec.js +0 -36
  169. package/dist/test-resources/specs/Theming.spec.js +0 -33
  170. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -242
  171. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -98
  172. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -75
  173. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -42
  174. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -14
  175. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -67
  176. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -24
  177. package/dist/test-resources/specs/UI5ElementSlots.js +0 -36
  178. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  179. package/dist/util/encodeCSS.js +0 -24
  180. package/src/config/AssetsPath.js +0 -17
  181. package/src/isLegacyBrowser.js +0 -3
  182. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  183. package/src/util/encodeCSS.js +0 -24
@@ -0,0 +1,43 @@
1
+ const Es=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function s(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerpolicy&&(o.referrerPolicy=r.referrerpolicy),r.crossorigin==="use-credentials"?o.credentials="include":r.crossorigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=s(r);fetch(r.href,o)}};Es();const dt={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","sap_horizon","sap_horizon_dark","sap_horizon_hcb","sap_horizon_hcw","sap_horizon_exp"]},languages:{default:"en",all:["ar","bg","ca","cs","cy","da","de","el","en","en_GB","en_US_sappsd","en_US_saprigi","en_US_saptrc","es","es_MX","et","fi","fr","fr_CA","hi","hr","hu","in","it","iw","ja","kk","ko","lt","lv","ms","nl","no","pl","pt_PT","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","sr_Latn","sv","th","tr","uk","vi","zh_CN","zh_HK","zh_SG","zh_TW"]}},Nt=dt.themes.default,Ut=dt.languages.default,E=dt.locales.default,se=dt.locales.all;var Be=()=>{const e=navigator.languages,t=()=>navigator.language;return e&&e[0]||t()||navigator.userLanguage||navigator.browserLanguage||Ut},He={},je=He.hasOwnProperty,Ts=He.toString,Fe=je.toString,Ms=Fe.call(Object),ne=function(e){var t,s;return!e||Ts.call(e)!=="[object Object]"?!1:(t=Object.getPrototypeOf(e),t?(s=je.call(t,"constructor")&&t.constructor,typeof s=="function"&&Fe.call(s)===Ms):!0)},Ls=Object.create(null),Ve=function(){var e,t,s,n,r,o,i=arguments[2]||{},a=3,c=arguments.length,l=arguments[0]||!1,h=arguments[1]?void 0:Ls;for(typeof i!="object"&&typeof i!="function"&&(i={});a<c;a++)if((r=arguments[a])!=null)for(n in r)e=i[n],s=r[n],!(n==="__proto__"||i===s)&&(l&&s&&(ne(s)||(t=Array.isArray(s)))?(t?(t=!1,o=e&&Array.isArray(e)?e:[]):o=e&&ne(e)?e:{},i[n]=Ve(l,arguments[1],o,s)):s!==h&&(i[n]=s));return i},qt=function(){var e=[!0,!1];return e.push.apply(e,arguments),Ve.apply(null,e)};const ze=new Map,Os=(e,t)=>{ze.set(e,t)},_=e=>ze.get(e);let re=!1,m={animationMode:"full",theme:Nt,rtl:null,language:null,calendarType:null,noConflict:!1,formatSettings:{},fetchDefaultLanguage:!1};const Ps=()=>(A(),m.animationMode),Is=()=>(A(),m.theme),Ds=()=>(A(),m.rtl),Rs=()=>(A(),m.language),xs=()=>(A(),m.fetchDefaultLanguage),Ns=()=>(A(),m.noConflict),Us=()=>(A(),m.calendarType),ks=()=>(A(),m.formatSettings),it=new Map;it.set("true",!0);it.set("false",!1);const Bs=()=>{const e=document.querySelector("[data-ui5-config]")||document.querySelector("[data-id='sap-ui-config']");let t;if(e){try{t=JSON.parse(e.innerHTML)}catch{console.warn("Incorrect data-sap-ui-config format. Please use JSON")}t&&(m=qt(m,t))}},Hs=()=>{const e=new URLSearchParams(window.location.search);e.forEach((t,s)=>{const n=s.split("sap-").length;n===0||n===s.split("sap-ui-").length||oe(s,t,"sap")}),e.forEach((t,s)=>{!s.startsWith("sap-ui")||oe(s,t,"sap-ui")})},js=(e,t)=>e==="theme"&&t.includes("@")?t.split("@")[0]:t,oe=(e,t,s)=>{const n=t.toLowerCase(),r=e.split(`${s}-`)[1];it.has(t)&&(t=it.get(n)),t=js(r,t),m[r]=t},Fs=()=>{const e=_("OpenUI5Support");if(!e||!e.isLoaded())return;const t=e.getConfigurationSettingsObject();m=qt(m,t)},A=()=>{re||(Bs(),Hs(),Fs(),re=!0)};class T{constructor(){this._eventRegistry=new Map}attachEvent(t,s){const n=this._eventRegistry,r=n.get(t);if(!Array.isArray(r)){n.set(t,[s]);return}r.includes(s)||r.push(s)}detachEvent(t,s){const n=this._eventRegistry,r=n.get(t);if(!r)return;const o=r.indexOf(s);o!==-1&&r.splice(o,1),r.length===0&&n.delete(t)}fireEvent(t,s){const r=this._eventRegistry.get(t);return r?r.map(o=>o.call(this,s)):[]}fireEventAsync(t,s){return Promise.all(this.fireEvent(t,s))}isHandlerAttached(t,s){const r=this._eventRegistry.get(t);return r?r.includes(s):!1}hasListeners(t){return!!this._eventRegistry.get(t)}}const Vs=new T,zs="languageChange",We=e=>{Vs.attachEvent(zs,e)},ie=10;class Ws{constructor(){this.list=[],this.lookup=new Set}add(t){this.lookup.has(t)||(this.list.push(t),this.lookup.add(t))}remove(t){!this.lookup.has(t)||(this.list=this.list.filter(s=>s!==t),this.lookup.delete(t))}shift(){const t=this.list.shift();if(t)return this.lookup.delete(t),t}isEmpty(){return this.list.length===0}isAdded(t){return this.lookup.has(t)}process(t){let s;const n=new Map;for(s=this.shift();s;){const r=n.get(s)||0;if(r>ie)throw new Error(`Web component processed too many times this task, max allowed is: ${ie}`);t(s),n.set(s,r+1),s=this.shift()}}}const Ze=e=>{const t=[];return e.forEach(s=>{t.push(s)}),t},qe=(e,t=document.body)=>{let s=document.querySelector(e);return s||(s=document.createElement(e),t.insertBefore(s,t.firstChild))},Zs=()=>qe("ui5-shared-resources",document.head),M=(e,t)=>{const s=e.split(".");let n=Zs();for(let r=0;r<s.length;r++){const o=s[r],i=r===s.length-1;Object.prototype.hasOwnProperty.call(n,o)||(n[o]=i?t:{}),n=n[o]}return n},ae={version:"0.0.0-7e7d9ea6f",major:0,minor:0,patch:0,suffix:"-7e7d9ea6f",isNext:!0,buildTime:1658392235};let et,qs="";const _t=new Map,z=M("Runtimes",[]),Gs=()=>{et===void 0&&(et=z.length,z.push({...ae,alias:qs,description:`Runtime ${et} - ver ${ae.version}`}))},Ge=()=>et,Ks=(e,t)=>{const s=`${e},${t}`;if(_t.has(s))return _t.get(s);const n=z[e],r=z[t];if(!n||!r)throw new Error("Invalid runtime index supplied");if(n.isNext||r.isNext)return n.buildTime-r.buildTime;const o=n.major-r.major;if(o)return o;const i=n.minor-r.minor;if(i)return i;const a=n.patch-r.patch;if(a)return a;const l=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}).compare(n.suffix,r.suffix);return _t.set(s,l),l},Js=()=>z,Ke=M("Tags",new Map),Gt=new Set;let C={},wt;const Je="unknown",ce=e=>{Gt.add(e),Ke.set(e,Ge())},Xs=e=>Gt.has(e),Ys=()=>Ze(Gt),Qs=e=>{let t=Ke.get(e);t===void 0&&(t=Je),C[t]=C[t]||new Set,C[t].add(e),wt||(wt=setTimeout(()=>{tn(),C={},wt=void 0},1e3))},tn=()=>{const e=Js(),t=Ge(),s=e[t];let n="Multiple UI5 Web Components instances detected.";e.length>1&&(n=`${n}
2
+ Loading order (versions before 1.1.0 not listed): ${e.map(r=>`
3
+ ${r.description}`).join("")}`),Object.keys(C).forEach(r=>{let o,i;r===Je?(o=1,i={description:"Older unknown runtime"}):(o=Ks(t,r),i=e[r]);let a;o>0?a="an older":o<0?a="a newer":a="the same",n=`${n}
4
+
5
+ "${s.description}" failed to define ${C[r].size} tag(s) as they were defined by a runtime of ${a} version "${i.description}": ${Ze(C[r]).sort().join(", ")}.`,o>0?n=`${n}
6
+ WARNING! If your code uses features of the above web components, unavailable in ${i.description}, it might not work as expected!`:n=`${n}
7
+ Since the above web components were defined by the same or newer version runtime, they should be compatible with your code.`}),n=`${n}
8
+
9
+ To prevent other runtimes from defining tags that you use, consider using scoping or have third-party libraries use scoping: https://github.com/SAP/ui5-webcomponents/blob/main/docs/2-advanced/03-scoping.md.`,console.warn(n)},Xe=new Set,en=e=>{Xe.add(e)},sn=e=>Xe.has(e),Kt=new Set,nn=new T,x=new Ws;let O,st,vt,X;const Ye=async e=>{x.add(e),await on()},Qe=e=>{nn.fireEvent("beforeComponentRender",e),Kt.add(e),e._render()},rn=e=>{x.remove(e),Kt.delete(e)},on=async()=>{X||(X=new Promise(e=>{window.requestAnimationFrame(()=>{x.process(Qe),X=null,e(),vt||(vt=setTimeout(()=>{vt=void 0,x.isEmpty()&&ln()},200))})})),await X},an=()=>O||(O=new Promise(e=>{st=e,window.requestAnimationFrame(()=>{x.isEmpty()&&(O=void 0,e())})}),O),cn=()=>{const e=Ys().map(t=>customElements.whenDefined(t));return Promise.all(e)},Jt=async()=>{await cn(),await an()},ln=()=>{!x.isEmpty()||st&&(st(),st=void 0,O=void 0)},Xt=async e=>{Kt.forEach(t=>{const s=t.constructor.getMetadata().getTag(),n=sn(t.constructor),r=t.constructor.getMetadata().isLanguageAware(),o=t.constructor.getMetadata().isThemeAware();(!e||e.tag===s||e.rtlAware&&n||e.languageAware&&r||e.themeAware&&o)&&Ye(t)}),await Jt()};let St,kt;const at=()=>(St===void 0&&(St=Rs()),St),un=e=>{kt=e},dn=()=>(kt===void 0&&un(xs()),kt),hn=/^((?:[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;class fn{constructor(t){const s=hn.exec(t.replace(/_/g,"-"));if(s===null)throw new Error(`The given language ${t} does not adhere to BCP-47.`);this.sLocaleId=t,this.sLanguage=s[1]||null,this.sScript=s[2]||null,this.sRegion=s[3]||null,this.sVariant=s[4]&&s[4].slice(1)||null,this.sExtension=s[5]&&s[5].slice(1)||null,this.sPrivateUse=s[6]||null,this.sLanguage&&(this.sLanguage=this.sLanguage.toLowerCase()),this.sScript&&(this.sScript=this.sScript.toLowerCase().replace(/^[a-z]/,n=>n.toUpperCase())),this.sRegion&&(this.sRegion=this.sRegion.toUpperCase())}getLanguage(){return this.sLanguage}getScript(){return this.sScript}getRegion(){return this.sRegion}getVariant(){return this.sVariant}getVariantSubtags(){return this.sVariant?this.sVariant.split("-"):[]}getExtension(){return this.sExtension}getExtensionSubtags(){return this.sExtension?this.sExtension.slice(2).split("-"):[]}getPrivateUse(){return this.sPrivateUse}getPrivateUseSubtags(){return this.sPrivateUse?this.sPrivateUse.slice(2).split("-"):[]}hasPrivateUseSubtag(t){return this.getPrivateUseSubtags().indexOf(t)>=0}toString(){const t=[this.sLanguage];return this.sScript&&t.push(this.sScript),this.sRegion&&t.push(this.sRegion),this.sVariant&&t.push(this.sVariant),this.sExtension&&t.push(this.sExtension),this.sPrivateUse&&t.push(this.sPrivateUse),t.join("-")}}const At=new Map,ts=e=>(At.has(e)||At.set(e,new fn(e)),At.get(e)),le=e=>{try{if(e&&typeof e=="string")return ts(e)}catch{}},Bt=e=>e?le(e):at()?ts(at()):le(Be()),pn=/^((?:[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,ue=/(?:^|-)(saptrc|sappsd)(?:-|$)/i,gn={he:"iw",yi:"ji",id:"in",sr:"sh"},mn=e=>{let t;if(!e)return E;if(typeof e=="string"&&(t=pn.exec(e.replace(/_/g,"-")))){let s=t[1].toLowerCase(),n=t[3]?t[3].toUpperCase():void 0;const r=t[2]?t[2].toLowerCase():void 0,o=t[4]?t[4].slice(1):void 0,i=t[6];return s=gn[s]||s,i&&(t=ue.exec(i))||o&&(t=ue.exec(o))?`en_US_${t[1].toLowerCase()}`:(s==="zh"&&!n&&(r==="hans"?n="CN":r==="hant"&&(n="TW")),s+(n?"_"+n+(o?"_"+o.replace("-","_"):""):""))}},yn=e=>{if(!e)return E;if(e==="zh_HK")return"zh_TW";const t=e.lastIndexOf("_");return t>=0?e.slice(0,t):e!==E?E:""},de=new Set,he=new Set,Yt=new Map,bt=new Map,Qt=new Map,_n=(e,t,s)=>{const n=`${e}/${t}`;Qt.set(n,s)},fe=(e,t)=>{Yt.set(e,t)},wn=e=>Yt.get(e),pe=(e,t)=>{const s=`${e}/${t}`;return Qt.has(s)},vn=(e,t)=>{const s=`${e}/${t}`,n=Qt.get(s);return bt.get(s)||bt.set(s,n(t)),bt.get(s)},Sn=e=>{de.has(e)||(console.warn(`[${e}]: Message bundle assets are not configured. Falling back to English texts.`,` Add \`import "${e}/dist/Assets.js"\` in your bundle and make sure your build tool supports dynamic imports and JSON imports. See section "Assets" in the documentation for more information.`),de.add(e))},es=async e=>{const t=Bt().getLanguage(),s=Bt().getRegion();let n=mn(t+(s?`-${s}`:""));for(;n!==Ut&&!pe(e,n);)n=yn(n);const r=dn();if(n===Ut&&!r){fe(e,null);return}if(!pe(e,n)){Sn(e);return}try{const o=await vn(e,n);fe(e,o)}catch(o){he.has(o.message)||(he.add(o.message),console.error(o.message))}};We(()=>{const e=[...Yt.keys()];return Promise.all(e.map(es))});const An=new Map,ct=new Map,$t=new Map,ge=new Set;let me=!1;const bn={iw:"he",ji:"yi",in:"id"},ye=e=>{me||(console.warn(`[LocaleData] Supported locale "${e}" not configured, import the "Assets.js" module from the webcomponents package you are using.`),me=!0)},$n=(e,t,s)=>{e=e&&bn[e]||e,e==="no"&&(e="nb"),e==="zh"&&!t&&(s==="Hans"?t="CN":s==="Hant"&&(t="TW")),(e==="sh"||e==="sr"&&s==="Latn")&&(e="sr",t="Latn");let n=`${e}_${t}`;return se.includes(n)||(n=e,se.includes(n))?ct.has(n)?n:(ye(n),E):E},_e=(e,t)=>{An.set(e,t)},Cn=e=>{const t=ct.get(e);return $t.get(e)||$t.set(e,t(e)),$t.get(e)},En=async(e,t,s)=>{const n=$n(e,t,s),r=_("OpenUI5Support");if(r){const o=r.getLocaleDataObject();if(o){_e(n,o);return}}try{const o=await Cn(n);_e(n,o)}catch(o){ge.has(o.message)||(ge.add(o.message),console.error(o.message))}},Tn=(e,t)=>{ct.set(e,t)};Tn("en",async e=>(await fetch("https://ui5.sap.com/1.103.0/resources/sap/ui/core/cldr/en.json")).json());We(()=>{const e=Bt();return En(e.getLanguage(),e.getRegion(),e.getScript())});const ss=new Map,ns=new Map,rs=new Set,lt=new Set,b=(e,t,s)=>{ns.set(`${e}/${t}`,s),rs.add(e),lt.add(t)},os=async(e,t)=>{const s=ss.get(`${e}_${t}`);if(s!==void 0)return s;if(!lt.has(t)){const n=[...lt.values()].join(", ");return console.warn(`You have requested a non-registered theme ${t} - falling back to ${Nt}. Registered themes are: ${n}`),we(e,Nt)}return we(e,t)},we=async(e,t)=>{const s=ns.get(`${e}/${t}`);if(!s){console.error(`Theme [${t}] not registered for package [${e}]`);return}let n;try{n=await s(t)}catch(o){console.error(e,o.message);return}const r=n._||n;return ss.set(`${e}_${t}`,r),r},is=()=>rs,Mn=e=>lt.has(e),ve={"SAP-icons-TNT":"tnt",BusinessSuiteInAppSymbols:"business-suite",horizon:"SAP-icons-v5"},Ln=(e,t={})=>{const s=document.createElement("style");return s.type="text/css",Object.entries(t).forEach(n=>s.setAttribute(...n)),s.textContent=e,document.head.appendChild(s),s},ht=(e,t)=>t?`${e}|${t}`:e,ft=(e,t,s="")=>{const n=typeof e=="string"?e:e.content;if(document.adoptedStyleSheets){const r=new CSSStyleSheet;r.replaceSync(n),r._ui5StyleId=ht(t,s),document.adoptedStyleSheets=[...document.adoptedStyleSheets,r]}else{const r={};r[t]=s,Ln(n,r)}},On=(e,t,s="")=>{const n=typeof e=="string"?e:e.content;document.adoptedStyleSheets?document.adoptedStyleSheets.find(r=>r._ui5StyleId===ht(t,s)).replaceSync(n||""):document.querySelector(`head>style[${t}="${s}"]`).textContent=n||""},pt=(e,t="")=>document.adoptedStyleSheets?!!document.adoptedStyleSheets.find(s=>s._ui5StyleId===ht(e,t)):!!document.querySelector(`head>style[${e}="${t}"]`),Pn=(e,t="")=>{if(document.adoptedStyleSheets)document.adoptedStyleSheets=document.adoptedStyleSheets.filter(s=>s._ui5StyleId!==ht(e,t));else{const s=document.querySelector(`head > style[${e}="${t}"]`);s&&s.parentElement.removeChild(s)}},as=(e,t,s="")=>{pt(t,s)?On(e,t,s):ft(e,t,s)},P=new Set,In=()=>{let e=document.querySelector(".sapThemeMetaData-Base-baseLib")||document.querySelector(".sapThemeMetaData-UI5-sap-ui-core");if(e)return getComputedStyle(e).backgroundImage;e=document.createElement("span"),e.style.display="none",e.classList.add("sapThemeMetaData-Base-baseLib"),document.body.appendChild(e);let t=getComputedStyle(e).backgroundImage;return t==="none"&&(e.classList.add("sapThemeMetaData-UI5-sap-ui-core"),t=getComputedStyle(e).backgroundImage),document.body.removeChild(e),t},Dn=e=>{const t=/\(["']?data:text\/plain;utf-8,(.*?)['"]?\)$/i.exec(e);if(t&&t.length>=2){let s=t[1];if(s=s.replace(/\\"/g,'"'),s.charAt(0)!=="{"&&s.charAt(s.length-1)!=="}")try{s=decodeURIComponent(s)}catch{P.has("decode")||(console.warn("Malformed theme metadata string, unable to decodeURIComponent"),P.add("decode"));return}try{return JSON.parse(s)}catch{P.has("parse")||(console.warn("Malformed theme metadata string, unable to parse JSON"),P.add("parse"))}}},Rn=e=>{let t,s;try{t=e.Path.match(/\.([^.]+)\.css_variables$/)[1],s=e.Extends[0]}catch{P.has("object")||(console.warn("Malformed theme metadata Object",e),P.add("object"));return}return{themeName:t,baseThemeName:s}},xn=()=>{const e=In();if(!e||e==="none")return;const t=Dn(e);return Rn(t)},Nn=new T,Un="themeLoaded",kn=e=>Nn.fireEvent(Un,e),W="@ui5/webcomponents-theming",Bn=()=>is().has(W),Hn=async e=>{if(!Bn())return;const t=await os(W,e);t&&as(t,"data-ui5-theme-properties",W)},jn=()=>{Pn("data-ui5-theme-properties",W)},Fn=async e=>{is().forEach(async s=>{if(s===W)return;const n=await os(s,e);n&&as(n,"data-ui5-theme-properties",s)})},Vn=()=>{const e=xn();if(e)return e;const t=_("OpenUI5Support");if(t&&t.cssVariablesLoaded())return{themeName:t.getConfigurationSettingsObject().theme}},cs=async e=>{const t=Vn();!t||e!==t.themeName?await Hn(e):jn();const s=Mn(e)?e:t&&t.baseThemeName;await Fn(s),kn(e)};let I;const gt=()=>(I===void 0&&(I=Is()),I),ls=async e=>{I!==e&&(I=e,await cs(I),await Xt({themeAware:!0}))},zn=e=>gt().startsWith(e),Wn=new Map,us=()=>{const e=gt(),t=Wn.get(e);return t||(zn("sap_horizon")?"SAP-icons-v5":"SAP-icons")},Se=new Map,ut=M("SVGIcons.registry",new Map),Ct=M("SVGIcons.promises",new Map),Ae="ICON_NOT_FOUND",Zn=async e=>{if(!Ct.has(e)){if(!Se.has(e))throw new Error(`No loader registered for the ${e} icons collection. Probably you forgot to import the "AllIcons.js" module for the respective package.`);const t=Se.get(e);Ct.set(e,t(e))}return Ct.get(e)},qn=e=>{Object.keys(e.data).forEach(t=>{const s=e.data[t];Gn(t,{pathData:s.path,ltr:s.ltr,accData:s.acc,collection:e.collection,packageName:e.packageName})})},Gn=(e,{pathData:t,ltr:s,accData:n,collection:r,packageName:o}={})=>{r||(r=us());const i=`${r}/${e}`;ut.set(i,{pathData:t,ltr:s,accData:n,packageName:o})},Kn=e=>{e.startsWith("sap-icon://")&&(e=e.replace("sap-icon://",""));let t;[e,t]=e.split("/").reverse(),t=t||us(),t=Xn(t),e=e.replace("icon-","");const s=`${t}/${e}`;return{name:e,collection:t,registryKey:s}},Et=async e=>{const{collection:t,registryKey:s}=Kn(e);let n=Ae;try{n=await Zn(t)}catch(r){console.error(r.message)}return n===Ae?n:(ut.has(s)||qn(n),ut.get(s))},Jn=async()=>(await Et("edit"),await Et("tnt/arrow"),await Et("business-suite/3d"),Array.from(ut.keys())),Xn=e=>ve[e]?ve[e]:e,Ht=M("PopupUtilsData",{});Ht.currentZIndex=Ht.currentZIndex||100;const ds=()=>Ht.currentZIndex,w=()=>{const e=window.sap;return e&&e.ui&&typeof e.ui.getCore=="function"&&e.ui.getCore()},Yn=()=>!!w(),Qn=()=>{const e=w();return e?new Promise(t=>{e.attachInit(()=>{window.sap.ui.require(["sap/ui/core/LocaleData","sap/ui/core/Popup"],(s,n)=>{n.setInitialZIndex(ds()),t()})})}):Promise.resolve()},tr=()=>{const e=w();if(!e)return;const t=e.getConfiguration(),s=window.sap.ui.require("sap/ui/core/LocaleData");return{animationMode:t.getAnimationMode(),language:t.getLanguage(),theme:t.getTheme(),rtl:t.getRTL(),calendarType:t.getCalendarType(),formatSettings:{firstDayOfWeek:s?s.getInstance(t.getLocale()).getFirstDayOfWeek():void 0}}},er=()=>{const e=w();if(!e)return;const t=e.getConfiguration();return window.sap.ui.require("sap/ui/core/LocaleData").getInstance(t.getLocale())._get()},sr=()=>{const e=w(),t=e.getConfiguration();e.attachThemeChanged(async()=>{await ls(t.getTheme())})},nr=()=>{!w()||sr()},rr=()=>{if(!w())return;const t=[...document.head.children].find(s=>s.id==="sap-ui-theme-sap.ui.core");if(!!t)return!!t.href.match(/\/css(-|_)variables\.css/)},or=()=>w()?window.sap.ui.require("sap/ui/core/Popup").getNextZIndex():void 0,ir=()=>{if(!w())return;window.sap.ui.require("sap/ui/core/Popup").setInitialZIndex(ds())},ar={isLoaded:Yn,init:Qn,getConfigurationSettingsObject:tr,getLocaleDataObject:er,attachListeners:nr,cssVariablesLoaded:rr,getNextZIndex:or,setInitialZIndex:ir};Os("OpenUI5Support",ar);const cr=()=>new Promise(e=>{document.body?e():document.addEventListener("DOMContentLoaded",()=>{e()})});var lr={packageName:"@ui5/webcomponents-base",fileName:"FontFace.css",content:`@font-face{font-family:"72";font-style:normal;font-weight:400;src:local("72"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents) format("woff")}@font-face{font-family:"72full";font-style:normal;font-weight:400;src:local('72-full'),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents) format("woff")}@font-face{font-family:"72";font-style:normal;font-weight:700;src:local('72-Bold'),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents) format("woff")}@font-face{font-family:"72full";font-style:normal;font-weight:700;src:local('72-Bold-full'),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents) format("woff")}@font-face{font-family:'72-Bold';font-style:normal;src:local('72-Bold'),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents) format("woff")}@font-face{font-family:'72-Boldfull';font-style:normal;src:url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents) format("woff")}@font-face{font-family:'72-Light';font-style:normal;src:local('72-Light'),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light.woff?ui5-webcomponents) format("woff")}@font-face{font-family:'72-Lightfull';font-style:normal;src:url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light-full.woff2?ui5-webcomponents) format("woff2"),url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light-full.woff?ui5-webcomponents) format("woff")}@font-face{font-family:"72Black";font-style:bold;font-weight:900;src:local('72Black'),url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2?ui5-webcomponents) format("woff2"),url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff?ui5-webcomponents) format("woff")}`},ur={packageName:"@ui5/webcomponents-base",fileName:"OverrideFontFace.css",content:"@font-face{font-family:'72override';unicode-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;src:local('Arial'),local('Helvetica'),local('sans-serif')}"};const dr=()=>{const e=_("OpenUI5Support");(!e||!e.isLoaded())&&hr(),fr()},hr=()=>{pt("data-ui5-font-face")||ft(lr,"data-ui5-font-face")},fr=()=>{pt("data-ui5-font-face-override")||ft(ur,"data-ui5-font-face-override")};var pr={packageName:"@ui5/webcomponents-base",fileName:"SystemCSSVars.css",content:":root{--_ui5_content_density:cozy}.sapUiSizeCompact,.ui5-content-density-compact,[data-ui5-compact-size]{--_ui5_content_density:compact}[dir=rtl]{--_ui5_dir:rtl}[dir=ltr]{--_ui5_dir:ltr}"};const gr=()=>{pt("data-ui5-system-css-vars")||ft(pr,"data-ui5-system-css-vars")};let Y;const mr=async()=>Y||(Y=new Promise(async e=>{Gs();const t=_("OpenUI5Support"),s=_("F6Navigation");t?await t.init():s&&s.init(),await cr(),await cs(gt()),t&&t.attachListeners(),dr(),gr(),e()}),Y);class D{static isValid(t){}static attributeToProperty(t){return t}static propertyToAttribute(t){return`${t}`}static valuesAreEqual(t,s){return t===s}static generateTypeAccessors(t){Object.keys(t).forEach(s=>{Object.defineProperty(this,s,{get(){return t[s]}})})}}const F=(e,t,s=!1)=>{if(typeof e!="function"||typeof t!="function")return!1;if(s&&e===t)return!0;let n=e;do n=Object.getPrototypeOf(n);while(n!==null&&n!==t);return n===t},Tt=new Map,Mt=new Map,be=e=>{if(!Tt.has(e)){const t=yr(e.split("-"));Tt.set(e,t)}return Tt.get(e)},hs=e=>{if(!Mt.has(e)){const t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();Mt.set(e,t)}return Mt.get(e)},yr=e=>e.map((t,s)=>s===0?t.toLowerCase():t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(""),_r=e=>{if(!(e instanceof HTMLElement))return"default";const t=e.getAttribute("slot");if(t){const s=t.match(/^(.+?)-\d+$/);return s?s[1]:t}return"default"},jt=e=>e&&e instanceof HTMLElement&&e.localName==="slot",fs=e=>jt(e)?e.assignedNodes({flatten:!0}).filter(t=>t instanceof HTMLElement):[e],wr=e=>{const t=(s,n)=>s.concat(fs(n));return e.reduce(t,[])};let vr,$e={include:[/^ui5-/],exclude:[]};const Lt=new Map,ps=()=>vr,Ft=e=>{if(!Lt.has(e)){const t=$e.include.some(s=>e.match(s))&&!$e.exclude.some(s=>e.match(s));Lt.set(e,t)}return Lt.get(e)},Vt=e=>{if(Ft(e))return ps()};class Sr{constructor(t){this.metadata=t}getInitialState(){if(Object.prototype.hasOwnProperty.call(this,"_initialState"))return this._initialState;const t={},s=this.slotsAreManaged(),n=this.getProperties();for(const r in n){const o=n[r].type,i=n[r].defaultValue;o===Boolean?(t[r]=!1,i!==void 0&&console.warn("The 'defaultValue' metadata key is ignored for all booleans properties, they would be initialized with 'false' by default")):n[r].multiple?t[r]=[]:o===Object?t[r]="defaultValue"in n[r]?n[r].defaultValue:{}:o===String?t[r]="defaultValue"in n[r]?n[r].defaultValue:"":t[r]=i}if(s){const r=this.getSlots();for(const[o,i]of Object.entries(r)){const a=i.propertyName||o;t[a]=[]}}return this._initialState=t,t}static validatePropertyValue(t,s){return s.multiple?t.map(r=>Ce(r,s)):Ce(t,s)}static validateSlotValue(t,s){return Ar(t,s)}getPureTag(){return this.metadata.tag}getTag(){const t=this.metadata.tag,s=Vt(t);return s?`${t}-${s}`:t}getAltTag(){const t=this.metadata.altTag;if(!t)return;const s=Vt(t);return s?`${t}-${s}`:t}hasAttribute(t){const s=this.getProperties()[t];return s.type!==Object&&!s.noAttribute&&!s.multiple}getPropertiesList(){return Object.keys(this.getProperties())}getAttributesList(){return this.getPropertiesList().filter(this.hasAttribute,this).map(hs)}getSlots(){return this.metadata.slots||{}}canSlotText(){const t=this.getSlots().default;return t&&t.type===Node}hasSlots(){return!!Object.entries(this.getSlots()).length}hasIndividualSlots(){return this.slotsAreManaged()&&Object.entries(this.getSlots()).some(([t,s])=>s.individualSlots)}slotsAreManaged(){return!!this.metadata.managedSlots}supportsF6FastNavigation(){return!!this.metadata.fastNavigation}getProperties(){return this.metadata.properties||{}}getEvents(){return this.metadata.events||{}}isLanguageAware(){return!!this.metadata.languageAware}isThemeAware(){return!!this.metadata.themeAware}shouldInvalidateOnChildChange(t,s,n){const r=this.getSlots()[t].invalidateOnChildChange;if(r===void 0)return!1;if(typeof r=="boolean")return r;if(typeof r=="object"){if(s==="property"){if(r.properties===void 0)return!1;if(typeof r.properties=="boolean")return r.properties;if(Array.isArray(r.properties))return r.properties.includes(n);throw new Error("Wrong format for invalidateOnChildChange.properties: boolean or array is expected")}if(s==="slot"){if(r.slots===void 0)return!1;if(typeof r.slots=="boolean")return r.slots;if(Array.isArray(r.slots))return r.slots.includes(n);throw new Error("Wrong format for invalidateOnChildChange.slots: boolean or array is expected")}}throw new Error("Wrong format for invalidateOnChildChange: boolean or object is expected")}}const Q=(e,t,s)=>{let n=s;const r=t.altTypes||[];for(let o=0;o<r.length;o++){const i=r[o];if(i===Boolean&&typeof e=="boolean"){n=e;break}else if(i===String&&(typeof e=="string"||typeof e=="undefined"||e===null)){n=e;break}else if(i===Object&&typeof e=="object"){n=e;break}else if(F(i,D)&&i.isValid(e)){n=e;break}}return n},Ce=(e,t)=>{const s=t.type;if(s===Boolean)return typeof e=="boolean"?e:Q(e,t,!1);if(s===String)return typeof e=="string"||typeof e=="undefined"||e===null?e:Q(e,t,e.toString());if(s===Object)return typeof e=="object"?e:Q(e,t,t.defaultValue);if(F(s,D))return s.isValid(e)?e:Q(e,t,t.defaultValue)},Ar=(e,t)=>(e&&fs(e).forEach(s=>{if(!(s instanceof t.type))throw new Error(`${s} is not of type ${t.type}`)}),e);customElements.get("ui5-static-area")||customElements.define("ui5-static-area",class extends HTMLElement{});const br=(e,t)=>{const s=$r(t),n=ps();return e(t,s,n)},$r=e=>{const t=e.constructor.getMetadata().getPureTag(),s=e.constructor.getUniqueDependencies().map(n=>n.getMetadata().getPureTag()).filter(Ft);return Ft(t)&&s.push(t),s},Cr=M("CustomStyle.eventProvider",new T),Er="CustomCSSChange",te=e=>{Cr.attachEvent(Er,e)},Ee=M("CustomStyle.customCSSFor",{});te(e=>{Xt({tag:e})});const Tr=e=>Ee[e]?Ee[e].join(""):"",Ot=e=>Array.isArray(e)?gs(e.filter(t=>!!t)).map(t=>typeof t=="string"?t:t.content).join(" "):typeof e=="string"?e:e.content,gs=e=>e.reduce((t,s)=>t.concat(Array.isArray(s)?gs(s):s),[]),nt=new Map;te(e=>{nt.delete(`${e}_normal`)});const ms=(e,t=!1)=>{const s=e.getMetadata().getTag(),n=`${s}_${t?"static":"normal"}`,r=_("OpenUI5Enablement");if(!nt.has(n)){let o,i="";if(r&&(i=Ot(r.getBusyIndicatorStyles())),t)o=Ot(e.staticAreaStyles);else{const a=Tr(s)||"";o=`${Ot(e.styles)} ${a}`}o=`${o} ${i}`,nt.set(n,o)}return nt.get(n)},rt=new Map;te(e=>{rt.delete(`${e}_normal`)});const Mr=(e,t=!1)=>{const n=`${e.getMetadata().getTag()}_${t?"static":"normal"}`;if(!rt.has(n)){const r=ms(e,t),o=new CSSStyleSheet;o.replaceSync(r),rt.set(n,[o])}return rt.get(n)},zt=(e,t=!1)=>{let s;const n=t?"staticAreaTemplate":"template",r=t?e.staticAreaItem.shadowRoot:e.shadowRoot,o=br(e.constructor[n],e);document.adoptedStyleSheets?r.adoptedStyleSheets=Mr(e.constructor,t):s=ms(e.constructor,t),e.constructor.render(o,r,s,t,{host:e})},Lr="--_ui5_content_density",Or=e=>getComputedStyle(e).getPropertyValue(Lr);var Pr=e=>{const t=/\$([-a-z0-9A-Z._]+)(?::([^$]*))?\$/.exec(e);return t&&t[2]?t[2].split(/,/):null};const Ir={iw:"he",ji:"yi",in:"id",sh:"sr"},Dr=Pr("$cldr-rtl-locales:ar,fa,he$")||[],Rr=e=>(e=e&&Ir[e]||e,Dr.indexOf(e)>=0),ys=()=>{const e=Ds();return e!==null?!!e:Rr(at()||Be())},xr="--_ui5_dir",_s=e=>{const t=window.document,s=["ltr","rtl"],n=getComputedStyle(e).getPropertyValue(xr);return s.includes(n)?n:s.includes(e.dir)?e.dir:s.includes(t.documentElement.dir)?t.documentElement.dir:s.includes(t.body.dir)?t.body.dir:ys()?"rtl":void 0};class V extends HTMLElement{constructor(){super(),this._rendered=!1,this.attachShadow({mode:"open"})}setOwnerElement(t){this.ownerElement=t,this.classList.add(this.ownerElement._id),this.ownerElement.hasAttribute("data-ui5-static-stable")&&this.setAttribute("data-ui5-stable",this.ownerElement.getAttribute("data-ui5-static-stable"))}update(){this._rendered&&(this._updateContentDensity(),this._updateDirection(),zt(this.ownerElement,!0))}_updateContentDensity(){Or(this.ownerElement)==="compact"?(this.classList.add("sapUiSizeCompact"),this.classList.add("ui5-content-density-compact")):(this.classList.remove("sapUiSizeCompact"),this.classList.remove("ui5-content-density-compact"))}_updateDirection(){const t=_s(this.ownerElement);t?this.setAttribute("dir",t):this.removeAttribute("dir")}async getDomRef(){return this._updateContentDensity(),this._rendered||(this._rendered=!0,zt(this.ownerElement,!0)),await Jt(),this.shadowRoot}static getTag(){const t="ui5-static-area-item",s=Vt(t);return s?`${t}-${s}`:t}static createInstance(){return customElements.get(V.getTag())||customElements.define(V.getTag(),V),document.createElement(this.getTag())}}const Wt=new WeakMap;let Nr=(e,t,s)=>{const n=new MutationObserver(t);return n.observe(e,s),n},Ur=e=>{e.disconnect()};const kr=(e,t,s)=>{const n=Nr(e,t,s);Wt.set(e,n)},Br=e=>{const t=Wt.get(e);t&&(Ur(t),Wt.delete(e))},Hr=["value-changed"],jr=e=>Hr.includes(e);let ot;const Fr=e=>{const t=ee();return!(t.events&&t.events.includes&&t.events.includes(e))},ee=()=>(ot===void 0&&(ot=Ns()),ot),Vr=e=>{const t=ee();return jr(e)?!1:t===!0?!0:!Fr(e)},zr=e=>{ot=e},Wr=["disabled","title","hidden","role","draggable"],Te=e=>Wr.includes(e)||e.startsWith("aria")?!0:![HTMLElement,Element,Node].some(s=>s.prototype.hasOwnProperty(e)),Me=(e,t)=>{if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(e[s]!==t[s])return!1;return!0},Zr=(e,t)=>class extends e{constructor(){super(),t&&t()}};let qr=0;const Le=new Map,Pt=new Map;function H(e){this._suppressInvalidation||(this.onInvalidation(e),this._changedState.push(e),Ye(this),this._eventProvider.fireEvent("invalidate",{...e,target:this}))}let Oe={};class L extends HTMLElement{constructor(){super(),this._changedState=[],this._suppressInvalidation=!0,this._inDOM=!1,this._fullyConnected=!1,this._childChangeListeners=new Map,this._slotChangeListeners=new Map,this._eventProvider=new T;let t;this._domRefReadyPromise=new Promise(s=>{t=s}),this._domRefReadyPromise._deferredResolve=t,this._initializeState(),this._upgradeAllProperties(),this.constructor._needsShadowDOM()&&this.attachShadow({mode:"open"})}get _id(){return this.__id||(this.__id=`ui5wc_${++qr}`),this.__id}async connectedCallback(){this.setAttribute(this.constructor.getMetadata().getPureTag(),""),this.constructor.getMetadata().supportsF6FastNavigation()&&this.setAttribute("data-sap-ui-fastnavgroup","true");const t=this.constructor.getMetadata().slotsAreManaged();this._inDOM=!0,t&&(this._startObservingDOMChildren(),await this._processChildren()),this._inDOM&&(Qe(this),this._domRefReadyPromise._deferredResolve(),this._fullyConnected=!0,typeof this.onEnterDOM=="function"&&this.onEnterDOM())}disconnectedCallback(){const t=this.constructor.getMetadata().slotsAreManaged();this._inDOM=!1,t&&this._stopObservingDOMChildren(),this._fullyConnected&&(typeof this.onExitDOM=="function"&&this.onExitDOM(),this._fullyConnected=!1),this.staticAreaItem&&this.staticAreaItem.parentElement&&this.staticAreaItem.parentElement.removeChild(this.staticAreaItem),rn(this)}_startObservingDOMChildren(){if(!this.constructor.getMetadata().hasSlots())return;const s=this.constructor.getMetadata().canSlotText(),n={childList:!0,subtree:s,characterData:s};kr(this,this._processChildren.bind(this),n)}_stopObservingDOMChildren(){Br(this)}async _processChildren(){this.constructor.getMetadata().hasSlots()&&await this._updateSlots()}async _updateSlots(){const t=this.constructor.getMetadata().getSlots(),s=this.constructor.getMetadata().canSlotText(),n=Array.from(s?this.childNodes:this.children),r=new Map,o=new Map;for(const[h,d]of Object.entries(t)){const u=d.propertyName||h;o.set(u,h),r.set(u,[...this._state[u]]),this._clearSlot(h,d)}const i=new Map,a=new Map,c=n.map(async(h,d)=>{const u=_r(h),p=t[u];if(p===void 0){const g=Object.keys(t).join(", ");console.warn(`Unknown slotName: ${u}, ignoring`,h,`Valid values are: ${g}`);return}if(p.individualSlots){const g=(i.get(u)||0)+1;i.set(u,g),h._individualSlot=`${u}-${g}`}if(h instanceof HTMLElement){const g=h.localName;if(g.includes("-")){if(!window.customElements.get(g)){const $s=window.customElements.whenDefined(g);let J=Le.get(g);J||(J=new Promise(Cs=>setTimeout(Cs,1e3)),Le.set(g,J)),await Promise.race([$s,J])}window.customElements.upgrade(h)}}h=this.constructor.getMetadata().constructor.validateSlotValue(h,p),h.isUI5Element&&p.invalidateOnChildChange&&(h.attachInvalidate||h._attachChange).bind(h)(this._getChildChangeListener(u)),jt(h)&&this._attachSlotChange(h,u);const v=p.propertyName||u;a.has(v)?a.get(v).push({child:h,idx:d}):a.set(v,[{child:h,idx:d}])});await Promise.all(c),a.forEach((h,d)=>{this._state[d]=h.sort((u,p)=>u.idx-p.idx).map(u=>u.child)});let l=!1;for(const[h,d]of Object.entries(t)){const u=d.propertyName||h;Me(r.get(u),this._state[u])||(H.call(this,{type:"slot",name:o.get(u),reason:"children"}),l=!0)}l||H.call(this,{type:"slot",name:"default",reason:"textcontent"})}_clearSlot(t,s){const n=s.propertyName||t;this._state[n].forEach(o=>{o&&o.isUI5Element&&(o.detachInvalidate||o._detachChange).bind(o)(this._getChildChangeListener(t)),jt(o)&&this._detachSlotChange(o,t)}),this._state[n]=[]}attachInvalidate(t){this._eventProvider.attachEvent("invalidate",t)}detachInvalidate(t){this._eventProvider.detachEvent("invalidate",t)}_onChildChange(t,s){!this.constructor.getMetadata().shouldInvalidateOnChildChange(t,s.type,s.name)||H.call(this,{type:"slot",name:t,reason:"childchange",child:s.target})}attributeChangedCallback(t,s,n){const r=this.constructor.getMetadata().getProperties(),o=t.replace(/^ui5-/,""),i=be(o);if(r.hasOwnProperty(i)){const a=r[i].type;a===Boolean?n=n!==null:F(a,D)&&(n=a.attributeToProperty(n)),this[i]=n}}_updateAttribute(t,s){if(!this.constructor.getMetadata().hasAttribute(t))return;const r=this.constructor.getMetadata().getProperties()[t].type,o=hs(t),i=this.getAttribute(o);r===Boolean?s===!0&&i===null?this.setAttribute(o,""):s===!1&&i!==null&&this.removeAttribute(o):F(r,D)?this.setAttribute(o,r.propertyToAttribute(s)):typeof s!="object"&&i!==s&&this.setAttribute(o,s)}_upgradeProperty(t){if(this.hasOwnProperty(t)){const s=this[t];delete this[t],this[t]=s}}_upgradeAllProperties(){this.constructor.getMetadata().getPropertiesList().forEach(this._upgradeProperty,this)}_initializeState(){this._state={...this.constructor.getMetadata().getInitialState()}}_getChildChangeListener(t){return this._childChangeListeners.has(t)||this._childChangeListeners.set(t,this._onChildChange.bind(this,t)),this._childChangeListeners.get(t)}_getSlotChangeListener(t){return this._slotChangeListeners.has(t)||this._slotChangeListeners.set(t,this._onSlotChange.bind(this,t)),this._slotChangeListeners.get(t)}_attachSlotChange(t,s){t.addEventListener("slotchange",this._getSlotChangeListener(s))}_detachSlotChange(t,s){t.removeEventListener("slotchange",this._getSlotChangeListener(s))}_onSlotChange(t){H.call(this,{type:"slot",name:t,reason:"slotchange"})}onInvalidation(t){}_render(){const t=this.constructor.getMetadata().hasIndividualSlots();this._suppressInvalidation=!0,typeof this.onBeforeRendering=="function"&&this.onBeforeRendering(),this._onComponentStateFinalized&&this._onComponentStateFinalized(),this._suppressInvalidation=!1,this._changedState=[],this.constructor._needsShadowDOM()&&zt(this),this.staticAreaItem&&this.staticAreaItem.update(),t&&this._assignIndividualSlotsToChildren(),typeof this.onAfterRendering=="function"&&this.onAfterRendering()}_assignIndividualSlotsToChildren(){Array.from(this.children).forEach(s=>{s._individualSlot&&s.setAttribute("slot",s._individualSlot)})}_waitForDomRef(){return this._domRefReadyPromise}getDomRef(){if(typeof this._getRealDomRef=="function")return this._getRealDomRef();if(!this.shadowRoot||this.shadowRoot.children.length===0)return;const t=[...this.shadowRoot.children].filter(s=>!["link","style"].includes(s.localName));return t.length!==1&&console.warn(`The shadow DOM for ${this.constructor.getMetadata().getTag()} does not have a top level element, the getDomRef() method might not work as expected`),t[0]}getFocusDomRef(){const t=this.getDomRef();if(t)return t.querySelector("[data-sap-focus-ref]")||t}async getFocusDomRefAsync(){return await this._waitForDomRef(),this.getFocusDomRef()}async focus(){await this._waitForDomRef();const t=this.getFocusDomRef();t&&typeof t.focus=="function"&&t.focus()}fireEvent(t,s,n=!1,r=!0){const o=this._fireEvent(t,s,n,r),i=be(t);return i!==t?o&&this._fireEvent(i,s,n):o}_fireEvent(t,s,n=!1,r=!0){const o=new CustomEvent(`ui5-${t}`,{detail:s,composed:!1,bubbles:r,cancelable:n}),i=this.dispatchEvent(o);if(Vr(t))return i;const a=new CustomEvent(t,{detail:s,composed:!1,bubbles:r,cancelable:n});return this.dispatchEvent(a)&&i}getSlottedNodes(t){return wr(this[t])}get effectiveDir(){return en(this.constructor),_s(this)}get isUI5Element(){return!0}static get observedAttributes(){return this.getMetadata().getAttributesList()}static _needsShadowDOM(){return!!this.template}static _needsStaticArea(){return!!this.staticAreaTemplate}getStaticAreaItemDomRef(){if(!this.constructor._needsStaticArea())throw new Error("This component does not use the static area");return this.staticAreaItem||(this.staticAreaItem=V.createInstance(),this.staticAreaItem.setOwnerElement(this)),this.staticAreaItem.parentElement||qe("ui5-static-area").appendChild(this.staticAreaItem),this.staticAreaItem.getDomRef()}static _generateAccessors(){const t=this.prototype,s=this.getMetadata().slotsAreManaged(),n=this.getMetadata().getProperties();for(const[r,o]of Object.entries(n)){if(Te(r)||console.warn(`"${r}" is not a valid property name. Use a name that does not collide with DOM APIs`),o.type===Boolean&&o.defaultValue)throw new Error(`Cannot set a default value for property "${r}". All booleans are false by default.`);if(o.type===Array)throw new Error(`Wrong type for property "${r}". Properties cannot be of type Array - use "multiple: true" and set "type" to the single value type, such as "String", "Object", etc...`);if(o.type===Object&&o.defaultValue)throw new Error(`Cannot set a default value for property "${r}". All properties of type "Object" are empty objects by default.`);if(o.multiple&&o.defaultValue)throw new Error(`Cannot set a default value for property "${r}". All multiple properties are empty arrays by default.`);Object.defineProperty(t,r,{get(){if(this._state[r]!==void 0)return this._state[r];const i=o.defaultValue;return o.type===Boolean?!1:o.type===String?i:o.multiple?[]:i},set(i){let a;i=this.constructor.getMetadata().constructor.validatePropertyValue(i,o);const c=this._state[r];o.multiple&&o.compareValues?a=!Me(c,i):F(o.type,D)?a=!o.type.valuesAreEqual(c,i):a=c!==i,a&&(this._state[r]=i,H.call(this,{type:"property",name:r,newValue:i,oldValue:c}),this._updateAttribute(r,i))}})}if(s){const r=this.getMetadata().getSlots();for(const[o,i]of Object.entries(r)){Te(o)||console.warn(`"${o}" is not a valid property name. Use a name that does not collide with DOM APIs`);const a=i.propertyName||o;Object.defineProperty(t,a,{get(){return this._state[a]!==void 0?this._state[a]:[]},set(){throw new Error("Cannot set slot content directly, use the DOM APIs (appendChild, removeChild, etc...)")}})}}}static get metadata(){return Oe}static set metadata(t){Oe=t}static get styles(){return""}static get staticAreaStyles(){return""}static get dependencies(){return[]}static getUniqueDependencies(){if(!Pt.has(this)){const t=this.dependencies.filter((s,n,r)=>r.indexOf(s)===n);Pt.set(this,t)}return Pt.get(this)}static whenDependenciesDefined(){return Promise.all(this.getUniqueDependencies().map(t=>t.define()))}static async onDefine(){return Promise.resolve()}static async define(){await mr(),await Promise.all([this.whenDependenciesDefined(),this.onDefine()]);const t=this.getMetadata().getTag(),s=this.getMetadata().getAltTag(),n=Xs(t),r=customElements.get(t);return r&&!n?Qs(t):r||(this._generateAccessors(),ce(t),window.customElements.define(t,this),s&&!customElements.get(s)&&(ce(s),window.customElements.define(s,Zr(this,()=>{console.log(`The ${s} tag is deprecated and will be removed in the next release, please use ${t} instead.`)})))),this}static getMetadata(){if(this.hasOwnProperty("_metadata"))return this._metadata;const t=[this.metadata];let s=this;for(;s!==L;)s=Object.getPrototypeOf(s),t.unshift(s.metadata);const n=qt({},...t);return this._metadata=new Sr(n),this._metadata}}/**
10
+ * @license
11
+ * Copyright 2017 Google LLC
12
+ * SPDX-License-Identifier: BSD-3-Clause
13
+ */var It;const N=globalThis.trustedTypes,Pe=N?N.createPolicy("lit-html",{createHTML:e=>e}):void 0,S=`lit$${(Math.random()+"").slice(9)}$`,ws="?"+S,Gr=`<${ws}>`,U=document,Z=(e="")=>U.createComment(e),q=e=>e===null||typeof e!="object"&&typeof e!="function",vs=Array.isArray,Kr=e=>{var t;return vs(e)||typeof((t=e)===null||t===void 0?void 0:t[Symbol.iterator])=="function"},j=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ie=/-->/g,De=/>/g,$=/>|[ \n \r](?:([^\s"'>=/]+)([ \n \r]*=[ \n \r]*(?:[^ \n \r"'`<>=]|("|')|))|$)/g,Re=/'/g,xe=/"/g,Ss=/^(?:script|style|textarea|title)$/i,Jr=e=>(t,...s)=>({_$litType$:e,strings:t,values:s}),Xr=Jr(1),k=Symbol.for("lit-noChange"),f=Symbol.for("lit-nothing"),Ne=new WeakMap,Yr=(e,t,s)=>{var n,r;const o=(n=s==null?void 0:s.renderBefore)!==null&&n!==void 0?n:t;let i=o._$litPart$;if(i===void 0){const a=(r=s==null?void 0:s.renderBefore)!==null&&r!==void 0?r:null;o._$litPart$=i=new K(t.insertBefore(Z(),a),a,void 0,s!=null?s:{})}return i._$AI(e),i},R=U.createTreeWalker(U,129,null,!1),Qr=(e,t)=>{const s=e.length-1,n=[];let r,o=t===2?"<svg>":"",i=j;for(let c=0;c<s;c++){const l=e[c];let h,d,u=-1,p=0;for(;p<l.length&&(i.lastIndex=p,d=i.exec(l),d!==null);)p=i.lastIndex,i===j?d[1]==="!--"?i=Ie:d[1]!==void 0?i=De:d[2]!==void 0?(Ss.test(d[2])&&(r=RegExp("</"+d[2],"g")),i=$):d[3]!==void 0&&(i=$):i===$?d[0]===">"?(i=r!=null?r:j,u=-1):d[1]===void 0?u=-2:(u=i.lastIndex-d[2].length,h=d[1],i=d[3]===void 0?$:d[3]==='"'?xe:Re):i===xe||i===Re?i=$:i===Ie||i===De?i=j:(i=$,r=void 0);const v=i===$&&e[c+1].startsWith("/>")?" ":"";o+=i===j?l+Gr:u>=0?(n.push(h),l.slice(0,u)+"$lit$"+l.slice(u)+S+v):l+S+(u===-2?(n.push(void 0),c):v)}const a=o+(e[s]||"<?>")+(t===2?"</svg>":"");if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return[Pe!==void 0?Pe.createHTML(a):a,n]};class G{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let o=0,i=0;const a=t.length-1,c=this.parts,[l,h]=Qr(t,s);if(this.el=G.createElement(l,n),R.currentNode=this.el.content,s===2){const d=this.el.content,u=d.firstChild;u.remove(),d.append(...u.childNodes)}for(;(r=R.nextNode())!==null&&c.length<a;){if(r.nodeType===1){if(r.hasAttributes()){const d=[];for(const u of r.getAttributeNames())if(u.endsWith("$lit$")||u.startsWith(S)){const p=h[i++];if(d.push(u),p!==void 0){const v=r.getAttribute(p.toLowerCase()+"$lit$").split(S),g=/([.?@])?(.*)/.exec(p);c.push({type:1,index:o,name:g[2],strings:v,ctor:g[1]==="."?eo:g[1]==="?"?no:g[1]==="@"?ro:mt})}else c.push({type:6,index:o})}for(const u of d)r.removeAttribute(u)}if(Ss.test(r.tagName)){const d=r.textContent.split(S),u=d.length-1;if(u>0){r.textContent=N?N.emptyScript:"";for(let p=0;p<u;p++)r.append(d[p],Z()),R.nextNode(),c.push({type:2,index:++o});r.append(d[u],Z())}}}else if(r.nodeType===8)if(r.data===ws)c.push({type:2,index:o});else{let d=-1;for(;(d=r.data.indexOf(S,d+1))!==-1;)c.push({type:7,index:o}),d+=S.length-1}o++}}static createElement(t,s){const n=U.createElement("template");return n.innerHTML=t,n}}function B(e,t,s=e,n){var r,o,i,a;if(t===k)return t;let c=n!==void 0?(r=s._$Cl)===null||r===void 0?void 0:r[n]:s._$Cu;const l=q(t)?void 0:t._$litDirective$;return(c==null?void 0:c.constructor)!==l&&((o=c==null?void 0:c._$AO)===null||o===void 0||o.call(c,!1),l===void 0?c=void 0:(c=new l(e),c._$AT(e,s,n)),n!==void 0?((i=(a=s)._$Cl)!==null&&i!==void 0?i:a._$Cl=[])[n]=c:s._$Cu=c),c!==void 0&&(t=B(e,c._$AS(e,t.values),c,n)),t}class to{constructor(t,s){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=s}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var s;const{el:{content:n},parts:r}=this._$AD,o=((s=t==null?void 0:t.creationScope)!==null&&s!==void 0?s:U).importNode(n,!0);R.currentNode=o;let i=R.nextNode(),a=0,c=0,l=r[0];for(;l!==void 0;){if(a===l.index){let h;l.type===2?h=new K(i,i.nextSibling,this,t):l.type===1?h=new l.ctor(i,l.name,l.strings,this,t):l.type===6&&(h=new oo(i,this,t)),this.v.push(h),l=r[++c]}a!==(l==null?void 0:l.index)&&(i=R.nextNode(),a++)}return o}m(t){let s=0;for(const n of this.v)n!==void 0&&(n.strings!==void 0?(n._$AI(t,n,s),s+=n.strings.length-2):n._$AI(t[s])),s++}}class K{constructor(t,s,n,r){var o;this.type=2,this._$AH=f,this._$AN=void 0,this._$AA=t,this._$AB=s,this._$AM=n,this.options=r,this._$Cg=(o=r==null?void 0:r.isConnected)===null||o===void 0||o}get _$AU(){var t,s;return(s=(t=this._$AM)===null||t===void 0?void 0:t._$AU)!==null&&s!==void 0?s:this._$Cg}get parentNode(){let t=this._$AA.parentNode;const s=this._$AM;return s!==void 0&&t.nodeType===11&&(t=s.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,s=this){t=B(this,t,s),q(t)?t===f||t==null||t===""?(this._$AH!==f&&this._$AR(),this._$AH=f):t!==this._$AH&&t!==k&&this.$(t):t._$litType$!==void 0?this.T(t):t.nodeType!==void 0?this.k(t):Kr(t)?this.S(t):this.$(t)}M(t,s=this._$AB){return this._$AA.parentNode.insertBefore(t,s)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.M(t))}$(t){this._$AH!==f&&q(this._$AH)?this._$AA.nextSibling.data=t:this.k(U.createTextNode(t)),this._$AH=t}T(t){var s;const{values:n,_$litType$:r}=t,o=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=G.createElement(r.h,this.options)),r);if(((s=this._$AH)===null||s===void 0?void 0:s._$AD)===o)this._$AH.m(n);else{const i=new to(o,this),a=i.p(this.options);i.m(n),this.k(a),this._$AH=i}}_$AC(t){let s=Ne.get(t.strings);return s===void 0&&Ne.set(t.strings,s=new G(t)),s}S(t){vs(this._$AH)||(this._$AH=[],this._$AR());const s=this._$AH;let n,r=0;for(const o of t)r===s.length?s.push(n=new K(this.M(Z()),this.M(Z()),this,this.options)):n=s[r],n._$AI(o),r++;r<s.length&&(this._$AR(n&&n._$AB.nextSibling,r),s.length=r)}_$AR(t=this._$AA.nextSibling,s){var n;for((n=this._$AP)===null||n===void 0||n.call(this,!1,!0,s);t&&t!==this._$AB;){const r=t.nextSibling;t.remove(),t=r}}setConnected(t){var s;this._$AM===void 0&&(this._$Cg=t,(s=this._$AP)===null||s===void 0||s.call(this,t))}}class mt{constructor(t,s,n,r,o){this.type=1,this._$AH=f,this._$AN=void 0,this.element=t,this.name=s,this._$AM=r,this.options=o,n.length>2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=f}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,s=this,n,r){const o=this.strings;let i=!1;if(o===void 0)t=B(this,t,s,0),i=!q(t)||t!==this._$AH&&t!==k,i&&(this._$AH=t);else{const a=t;let c,l;for(t=o[0],c=0;c<o.length-1;c++)l=B(this,a[n+c],s,c),l===k&&(l=this._$AH[c]),i||(i=!q(l)||l!==this._$AH[c]),l===f?t=f:t!==f&&(t+=(l!=null?l:"")+o[c+1]),this._$AH[c]=l}i&&!r&&this.C(t)}C(t){t===f?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t!=null?t:"")}}class eo extends mt{constructor(){super(...arguments),this.type=3}C(t){this.element[this.name]=t===f?void 0:t}}const so=N?N.emptyScript:"";class no extends mt{constructor(){super(...arguments),this.type=4}C(t){t&&t!==f?this.element.setAttribute(this.name,so):this.element.removeAttribute(this.name)}}class ro extends mt{constructor(t,s,n,r,o){super(t,s,n,r,o),this.type=5}_$AI(t,s=this){var n;if((t=(n=B(this,t,s,0))!==null&&n!==void 0?n:f)===k)return;const r=this._$AH,o=t===f&&r!==f||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,i=t!==f&&(r===f||o);o&&this.element.removeEventListener(this.name,this,r),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var s,n;typeof this._$AH=="function"?this._$AH.call((n=(s=this.options)===null||s===void 0?void 0:s.host)!==null&&n!==void 0?n:this.element,t):this._$AH.handleEvent(t)}}class oo{constructor(t,s,n){this.element=t,this.type=6,this._$AN=void 0,this._$AM=s,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(t){B(this,t)}}const Ue=window.litHtmlPolyfillSupport;Ue==null||Ue(G,K),((It=globalThis.litHtmlVersions)!==null&&It!==void 0?It:globalThis.litHtmlVersions=[]).push("2.2.2");/**
14
+ * @license
15
+ * Copyright 2017 Google LLC
16
+ * SPDX-License-Identifier: BSD-3-Clause
17
+ */const io={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6};class ao{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,s,n){this._$Ct=t,this._$AM=s,this._$Ci=n}_$AS(t,s){return this.update(t,s)}update(t,s){return this.render(...s)}}/**
18
+ * @license
19
+ * Copyright 2017 Google LLC
20
+ * SPDX-License-Identifier: BSD-3-Clause
21
+ */class ke extends ao{constructor(t){if(super(t),this.it=f,t.type!==io.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===f||t==null)return this.ft=void 0,this.it=t;if(t===k)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this.ft;this.it=t;const s=[t];return s.raw=s,this.ft={_$litType$:this.constructor.resultType,strings:s,values:[]}}}ke.directiveName="unsafeHTML",ke.resultType=1;const y=(...e)=>{const t=_("LitStatic");return(t?t.html:Xr)(...e)},yt=(e,t,s,n,{host:r}={})=>{const o=_("OpenUI5Enablement");o&&!n&&(e=o.wrapTemplateResultInBusyMarkup(y,r,e)),typeof s=="string"?e=y`<style>${s}</style>${e}`:Array.isArray(s)&&s.length&&(e=y`${s.map(i=>y`<link type="text/css" rel="stylesheet" href="${i}">`)}${e}`),Yr(e,t,{host:r})},co={tag:"ui5-test-generic",properties:{strProp:{type:String},boolProp:{type:Boolean},objectProp:{type:Object},noAttributeProp:{type:String,noAttribute:!0},multiProp:{type:String,multiple:!0},defaultValueProp:{type:String,defaultValue:"Hello"}},managedSlots:!0,slots:{default:{type:Node},other:{type:HTMLElement},individual:{type:HTMLElement,individualSlots:!0},named:{type:HTMLElement,propertyName:"items"}}};class As extends L{static get metadata(){return co}static get render(){return yt}static get template(){return t=>y`<div><p>
22
+ <slot></slot>
23
+ <slot name="other"></slot>
24
+ <slot name="individual-1"></slot>
25
+ <slot name="individual-2"></slot>
26
+ </p></div>`}static get styles(){return`:host {
27
+ display: inline-block;
28
+ border: 1px solid black;
29
+ color: var(--var1);
30
+ }`}onBeforeRendering(){}onAfterRendering(){}onEnterDOM(){}onExitDOM(){}}As.define();const lo={tag:"ui5-test-no-shadow"};class uo extends L{static get metadata(){return lo}}uo.define();const ho={tag:"ui5-test-parent",managedSlots:!0,slots:{default:{type:Node,invalidateOnChildChange:{properties:["prop1"]}},items:{type:HTMLElement,invalidateOnChildChange:{properties:!0}}}};class fo extends L{static get metadata(){return ho}static get render(){return yt}static get template(){return t=>y`<div>
31
+ <slot></slot>
32
+ </div>`}}fo.define();const po={tag:"ui5-test-child",properties:{prop1:{type:String},prop2:{type:String},prop3:{type:String}}};class go extends L{static get metadata(){return po}static get render(){return yt}static get template(){return t=>y`<div></div>`}}go.define();const mo={tag:"ui5-with-static-area",properties:{staticContent:{type:Boolean}},slots:{}};class yo extends L{static get metadata(){return mo}static get render(){return yt}static get template(){return t=>y`
33
+ <div dir=${t.effectiveDir}>
34
+ WithStaticArea works!
35
+ </div>`}static get staticAreaTemplate(){return t=>y`
36
+ <div class="ui5-with-static-area-content">
37
+ Static area content.
38
+ </div>`}static get styles(){return`
39
+ :host {
40
+ display: inline-block;
41
+ border: 1px solid black;
42
+ color: red;
43
+ }`}async addStaticArea(){if(!this.staticContent)return;const t=await this.getStaticAreaItemDomRef();return this.responsivePopover=t.querySelector(".ui5-with-static-area-content"),this.responsivePopover}onBeforeRendering(){this.addStaticArea()}onAfterRendering(){}onEnterDOM(){}onExitDOM(){}}yo.define();const _o={tag:"ui5-test-generic-ext",properties:{extProp:{type:String},strProp:{defaultValue:"Ext"}},slots:{extSlot:{type:HTMLElement}}};class wo extends As{static get metadata(){return _o}}wo.define();const vo=":root{ --var1: red; }",So=":root{ --var1: green; }",Ao=":root{ --var1: blue; }",bo=":root{ --var1: orange; }",$o=":root{ --var1: orange; }",Co=":root{ --var1: yellow; }",Eo=":root{ --var1: yellow; }";b("@ui5/webcomponents-base-test","sap_fiori_3",()=>vo);b("@ui5/webcomponents-base-test","sap_fiori_3_dark",()=>So);b("@ui5/webcomponents-base-test","sap_belize",()=>Ao);b("@ui5/webcomponents-base-test","sap_belize_hcb",()=>bo);b("@ui5/webcomponents-base-test","sap_belize_hcw",()=>$o);b("@ui5/webcomponents-base-test","sap_fiori_3_hcb",()=>Co);b("@ui5/webcomponents-base-test","sap_fiori_3_hcw",()=>Eo);const To=/('')|'([^']+(?:''[^']*)*)(?:'|$)|\{([0-9]+(?:\s*,[^{}]*)?)\}|[{}]/g,Mo=(e,t)=>(t=t||[],e.replace(To,(s,n,r,o,i)=>{if(n)return"'";if(r)return r.replace(/''/g,"'");if(o)return String(t[parseInt(o)]);throw new Error(`[i18n]: pattern syntax error at pos ${i}`)})),Dt=new Map;class Lo{constructor(t){this.packageName=t}getText(t,...s){if(typeof t=="string"&&(t={key:t,defaultText:t}),!t||!t.key)return"";const n=wn(this.packageName);n&&!n[t.key]&&console.warn(`Key ${t.key} not found in the i18n bundle, the default text will be used`);const r=n&&n[t.key]?n[t.key]:t.defaultText||t.key;return Mo(r,s)}}const Oo=e=>{if(Dt.has(e))return Dt.get(e);const t=new Lo(e);return Dt.set(e,t),t},Po=async e=>(await es(e),Oo(e));let Rt;const Io=()=>(Rt===void 0&&(Rt=Ps()),Rt),bs={Gregorian:"Gregorian",Islamic:"Islamic",Japanese:"Japanese",Buddhist:"Buddhist",Persian:"Persian"};class Zt extends D{static isValid(t){return!!bs[t]}}Zt.generateTypeAccessors(bs);let tt;const Do=()=>(tt===void 0&&(tt=Us()),Zt.isValid(tt)?tt:Zt.Gregorian);let xt;const Ro=()=>(xt===void 0&&(xt=ks()),xt.firstDayOfWeek),xo=new T,No="directionChange",Uo=()=>xo.fireEvent(No),ko=async()=>{const e=Uo();await Promise.all(e),await Xt({rtlAware:!0})};window.registerThemePropertiesLoader=b;window["sap-ui-webcomponents-bundle"]={configuration:{getAnimationMode:Io,getLanguage:at,getTheme:gt,setTheme:ls,getNoConflict:ee,setNoConflict:zr,getCalendarType:Do,getRTL:ys,getFirstDayOfWeek:Ro},getIconNames:Jn,registerI18nLoader:_n,getI18nBundle:Po,renderFinished:Jt,applyDirection:ko,EventProvider:T};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Supported icon collection names and aliases.
3
+ *
4
+ * Users might specify a collection, using both the key and the value in the following key-value pairs,
5
+ * e.g the following pairs are completely exchangeable:
6
+ * "SAP-icons-TNT/actor" and "tnt/actor", "BusinessSuiteInAppSymbols/3d" and "business-suite/3d",
7
+ * "SAP-icons-v5/accept" and "horizon/accept".
8
+ *
9
+ * Note: technically, in the code we maintain the collections under the "value" name - "tnt", "business-suite",
10
+ * SAP-icons-v5" and "SAP-icons"(which does not have an alias).
11
+ */
12
+ const IconCollectionsAlias = {
13
+ "SAP-icons-TNT": "tnt",
14
+ "BusinessSuiteInAppSymbols": "business-suite",
15
+ "horizon": "SAP-icons-v5",
16
+ };
17
+
18
+ export default IconCollectionsAlias;
@@ -0,0 +1,52 @@
1
+ import { getTheme, isThemeFamily } from "./Theme.js";
2
+
3
+ const IconCollectionConfiguration = new Map();
4
+
5
+ /**
6
+ * Sets the default icon collection (v4 or v5) per theme,
7
+ * which will be applied in case icon collection is not specified.
8
+ *
9
+ * Note: by default SAP-icons-v5 is used in SAP Horizon and SAP-icons-v4 for all the rest.
10
+ * @param {String} theme
11
+ * @param {String} collectionName
12
+ */
13
+ const setDefaultIconCollection = (theme, collectionName) => {
14
+ if (collectionName === "horizon") {
15
+ collectionName = "SAP-icons-v5";
16
+ }
17
+
18
+ IconCollectionConfiguration.set(theme, collectionName);
19
+ };
20
+
21
+ /**
22
+ * Returns the default icon collection (v4 or v5) for given theme,
23
+ * that is configured.
24
+ *
25
+ * @param {String} theme
26
+ * @returns {String}
27
+ */
28
+ const getDefaultIconCollection = theme => {
29
+ return IconCollectionConfiguration.get(theme);
30
+ };
31
+
32
+ /**
33
+ * Returns the effective icon collection that will be applied for icon web components
34
+ * whenever namespace is not specified.
35
+ * @returns {String}
36
+ */
37
+ const getEffectiveDefaultIconCollection = () => {
38
+ const currentTheme = getTheme();
39
+ const currentThemeConfiguration = IconCollectionConfiguration.get(currentTheme);
40
+
41
+ if (currentThemeConfiguration) {
42
+ return currentThemeConfiguration;
43
+ }
44
+
45
+ return isThemeFamily("sap_horizon") ? "SAP-icons-v5" : "SAP-icons";
46
+ };
47
+
48
+ export {
49
+ setDefaultIconCollection,
50
+ getDefaultIconCollection,
51
+ getEffectiveDefaultIconCollection,
52
+ };
@@ -1,4 +1,5 @@
1
1
  import { getTheme as getConfiguredTheme } from "../InitialConfiguration.js";
2
+ import { reRenderAllUI5Elements } from "../Render.js";
2
3
  import applyTheme from "../theming/applyTheme.js";
3
4
 
4
5
  let theme;
@@ -20,9 +21,33 @@ const setTheme = async newTheme => {
20
21
 
21
22
  // Update CSS Custom Properties
22
23
  await applyTheme(theme);
24
+ await reRenderAllUI5Elements({ themeAware: true });
25
+ };
26
+
27
+ /**
28
+ * Returns if the given theme name is the one currently applied.
29
+ * @private
30
+ * @param {String}
31
+ * @returns {boolean}
32
+ */
33
+ const isTheme = _theme => {
34
+ const currentTheme = getTheme();
35
+ return currentTheme === _theme || currentTheme === `${_theme}_exp`;
36
+ };
37
+
38
+ /**
39
+ * Returns if the current theme is part of given theme family
40
+ * @private
41
+ * @param {String} the theme family
42
+ * @returns {boolean}
43
+ */
44
+ const isThemeFamily = _theme => {
45
+ return getTheme().startsWith(_theme);
23
46
  };
24
47
 
25
48
  export {
26
49
  getTheme,
27
50
  setTheme,
51
+ isTheme,
52
+ isThemeFamily,
28
53
  };
@@ -0,0 +1,80 @@
1
+ .busy-indicator-wrapper {
2
+ position: relative;
3
+ height: 100%;
4
+ width: 100%;
5
+ }
6
+
7
+ .busy-indicator-overlay {
8
+ display: var(--ui5_web_components_busy_indicator_display);
9
+ position: absolute;
10
+ inset: 0;
11
+ background: var(--ui5_web_components_busy_indicator_background-color);
12
+ z-index: 99;
13
+ }
14
+
15
+ .busy-indicator-busy-area {
16
+ display: var(--ui5_web_components_busy_indicator_display);
17
+ position: absolute;
18
+ z-index: 99;
19
+ inset: 0;
20
+ justify-content: center;
21
+ align-items: center;
22
+ background-color: inherit;
23
+ flex-direction: column;
24
+ color: var(--_ui5_busy_indicator_color);
25
+ }
26
+
27
+ :host([__is-busy]) .busy-indicator-wrapper > :not(.busy-indicator-busy-area):not(.busy-indicator-overlay):not([busy-indicator-before-span]) {
28
+ --ui5_web_components_busy_indicator_display: none;
29
+ }
30
+
31
+ .busy-indicator-busy-area:focus {
32
+ outline: var(--_ui5_busy_indicator_focus_outline);
33
+ outline-offset: -.125rem;
34
+ }
35
+
36
+ .busy-indicator-circle {
37
+ width: 1rem;
38
+ height: 1rem;
39
+ display: inline-block;
40
+ background-color: currentColor;
41
+ border-radius: 50%;
42
+ }
43
+
44
+ .circle-animation-0 {
45
+ animation: grow 1.6s infinite cubic-bezier(0.32, 0.06, 0.85, 1.11);
46
+ }
47
+
48
+ .circle-animation-1 {
49
+ animation: grow 1.6s infinite cubic-bezier(0.32, 0.06, 0.85, 1.11);
50
+ animation-delay: 200ms;
51
+ }
52
+
53
+ .circle-animation-2 {
54
+ animation: grow 1.6s infinite cubic-bezier(0.32, 0.06, 0.85, 1.11);
55
+ animation-delay: 400ms;
56
+ }
57
+
58
+ .sapUiLocalBusy {
59
+ --ui5_web_components_busy_indicator_display: none;
60
+ }
61
+
62
+ .busy-indicator-wrapper [ui5-busy-indicator] {
63
+ display: none;
64
+ }
65
+
66
+ @keyframes grow {
67
+ 0%, 50%, 100% {
68
+ -webkit-transform: scale(0.5);
69
+ -moz-transform: scale(0.5);
70
+ -ms-transform: scale(0.5);
71
+ transform: scale(0.5);
72
+ }
73
+
74
+ 25% {
75
+ -webkit-transform: scale(1);
76
+ -moz-transform: scale(1);
77
+ -ms-transform: scale(1);
78
+ transform: scale(1);
79
+ }
80
+ }
@@ -0,0 +1,75 @@
1
+ @font-face {
2
+ font-family: "72";
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ src: local("72"),
6
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents) format("woff2"),
7
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents) format("woff");
8
+ }
9
+
10
+ @font-face {
11
+ font-family: "72full";
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ src: local('72-full'),
15
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents) format("woff2"),
16
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents) format("woff");
17
+
18
+ }
19
+
20
+ @font-face {
21
+ font-family: "72";
22
+ font-style: normal;
23
+ font-weight: 700;
24
+ src: local('72-Bold'),
25
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents) format("woff2"),
26
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents) format("woff");
27
+ }
28
+
29
+ @font-face {
30
+ font-family: "72full";
31
+ font-style: normal;
32
+ font-weight: 700;
33
+ src: local('72-Bold-full'),
34
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents) format("woff2"),
35
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents) format("woff");
36
+ }
37
+
38
+ @font-face {
39
+ font-family: '72-Bold';
40
+ font-style: normal;
41
+ src: local('72-Bold'),
42
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents) format("woff2"),
43
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents) format("woff");
44
+ }
45
+
46
+ @font-face {
47
+ font-family: '72-Boldfull';
48
+ font-style: normal;
49
+ src: url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents) format("woff2"),
50
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents) format("woff");
51
+ }
52
+
53
+ @font-face {
54
+ font-family: '72-Light';
55
+ font-style: normal;
56
+ src: local('72-Light'),
57
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light.woff2?ui5-webcomponents) format("woff2"),
58
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light.woff?ui5-webcomponents) format("woff");
59
+ }
60
+
61
+ @font-face {
62
+ font-family: '72-Lightfull';
63
+ font-style: normal;
64
+ src: url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light-full.woff2?ui5-webcomponents) format("woff2"),
65
+ url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Light-full.woff?ui5-webcomponents) format("woff");
66
+ }
67
+
68
+ @font-face {
69
+ font-family: "72Black";
70
+ font-style: bold;
71
+ font-weight: 900;
72
+ src: local('72Black'),
73
+ url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2?ui5-webcomponents) format("woff2"),
74
+ url(https://openui5nightly.hana.ondemand.com/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff?ui5-webcomponents) format("woff");
75
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Some diacritics are supported by the 72 font:
3
+ * * Grave
4
+ * * Acute
5
+ * * Circumflex
6
+ * * Tilde
7
+ *
8
+ * However, the following diacritics and the combination of multiple diacritics (including the supported ones) are not supported:
9
+ * * Breve
10
+ * * Horn
11
+ * * Dot below
12
+ * * Hook above
13
+ *
14
+ *
15
+ * Override for the characters that aren't covered by the '72' font to other system fonts
16
+ *
17
+ * U+0102-0103: A and a with Breve
18
+ * U+01A0-01A1: O and o with Horn
19
+ * U+01AF-01B0: U and u with Horn
20
+ * U+1EA0-1EB7: A and a with diacritics that are not supported by the font and combination of multiple diacritics
21
+ * U+1EB8-1EC7: E and e with diacritics that are not supported by the font and combination of multiple diacritics
22
+ * U+1EC8-1ECB: I and i with diacritics that are not supported by the font and combination of multiple diacritics
23
+ * U+1ECC-1EE3: O and o with diacritics that are not supported by the font and combination of multiple diacritics
24
+ * U+1EE4-1EF1: U and u with diacritics that are not supported by the font and combination of multiple diacritics
25
+ * U+1EF4-1EF7: Y and y with diacritics that are not supported by the font and combination of multiple diacritics
26
+ *
27
+ */
28
+ @font-face {
29
+ font-family: '72override';
30
+ unicode-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;
31
+ src: local('Arial'), local('Helvetica'), local('sans-serif');
32
+ }
@@ -0,0 +1,17 @@
1
+ :root {
2
+ --_ui5_content_density:cozy;
3
+ }
4
+
5
+ [data-ui5-compact-size],
6
+ .ui5-content-density-compact,
7
+ .sapUiSizeCompact {
8
+ --_ui5_content_density:compact;
9
+ }
10
+
11
+ [dir="rtl"] {
12
+ --_ui5_dir:rtl;
13
+ }
14
+
15
+ [dir="ltr"] {
16
+ --_ui5_dir:ltr;
17
+ }
@@ -5,6 +5,8 @@ import {
5
5
  isRight,
6
6
  isHome,
7
7
  isEnd,
8
+ isPageDown,
9
+ isPageUp,
8
10
  } from "../Keys.js";
9
11
  import getActiveElement from "../util/getActiveElement.js";
10
12
 
@@ -52,6 +54,7 @@ class ItemNavigation {
52
54
  * - currentIndex: the index of the item that will be initially selected (from which navigation will begin)
53
55
  * - navigationMode (Auto|Horizontal|Vertical): whether the items are displayed horizontally (Horizontal), vertically (Vertical) or as a matrix (Auto) meaning the user can navigate in both directions (up/down and left/right)
54
56
  * - rowSize: tells how many items per row there are when the items are not rendered as a flat list but rather as a matrix. Relevant for navigationMode=Auto
57
+ * - skipItemsSize: tells how many items upon PAGE_UP and PAGE_DOWN should be skipped to applying the focus on the next item
55
58
  * - behavior (Static|Cycling): tells what to do when trying to navigate beyond the first and last items
56
59
  * Static means that nothing happens if the user tries to navigate beyond the first/last item.
57
60
  * Cycling means that when the user navigates beyond the last item they go to the first and vice versa.
@@ -85,6 +88,7 @@ class ItemNavigation {
85
88
  this._behavior = options.behavior || ItemNavigationBehavior.Static;
86
89
  this._navigationMode = options.navigationMode || NavigationMode.Auto;
87
90
  this._affectedPropertiesNames = options.affectedPropertiesNames || [];
91
+ this._skipItemsSize = options.skipItemsSize || null;
88
92
  }
89
93
 
90
94
  /**
@@ -129,19 +133,28 @@ class ItemNavigation {
129
133
 
130
134
  const horizontalNavigationOn = this._navigationMode === NavigationMode.Horizontal || this._navigationMode === NavigationMode.Auto;
131
135
  const verticalNavigationOn = this._navigationMode === NavigationMode.Vertical || this._navigationMode === NavigationMode.Auto;
136
+ const isRTL = this.rootWebComponent.effectiveDir === "rtl";
132
137
 
133
- if (isUp(event) && verticalNavigationOn) {
134
- this._handleUp();
135
- } else if (isDown(event) && verticalNavigationOn) {
136
- this._handleDown();
138
+ if (isRTL && isLeft(event) && horizontalNavigationOn) {
139
+ this._handleRight();
140
+ } else if (isRTL && isRight(event) && horizontalNavigationOn) {
141
+ this._handleLeft();
137
142
  } else if (isLeft(event) && horizontalNavigationOn) {
138
143
  this._handleLeft();
139
144
  } else if (isRight(event) && horizontalNavigationOn) {
140
145
  this._handleRight();
146
+ } else if (isUp(event) && verticalNavigationOn) {
147
+ this._handleUp();
148
+ } else if (isDown(event) && verticalNavigationOn) {
149
+ this._handleDown();
141
150
  } else if (isHome(event)) {
142
151
  this._handleHome();
143
152
  } else if (isEnd(event)) {
144
153
  this._handleEnd();
154
+ } else if (isPageUp(event)) {
155
+ this._handlePageUp();
156
+ } else if (isPageDown(event)) {
157
+ this._handlePageDown();
145
158
  } else {
146
159
  return; // if none of the supported keys is pressed, we don't want to prevent the event or update the item navigation
147
160
  }
@@ -222,6 +235,64 @@ class ItemNavigation {
222
235
  this._currentIndex += (homeEndRange - 1 - this._currentIndex % homeEndRange); // eslint-disable-line
223
236
  }
224
237
 
238
+ _handlePageUp() {
239
+ if (this._rowSize > 1) {
240
+ // eslint-disable-next-line
241
+ // TODO: handle page up on matrix (grid) layout - ColorPalette, ProductSwitch.
242
+ return;
243
+ }
244
+ this._handlePageUpFlat();
245
+ }
246
+
247
+ _handlePageDown() {
248
+ if (this._rowSize > 1) {
249
+ // eslint-disable-next-line
250
+ // TODO: handle page up on matrix (grid) layout - ColorPalette, ProductSwitch.
251
+ return;
252
+ }
253
+ this._handlePageDownFlat();
254
+ }
255
+
256
+ /**
257
+ * Handles PAGE_UP in a flat list-like structure, both vertically and horizontally.
258
+ */
259
+ _handlePageUpFlat() {
260
+ if (this._skipItemsSize === null) {
261
+ // Move the focus to the very top (as Home).
262
+ this._currentIndex -= this._currentIndex;
263
+ }
264
+
265
+ if (this._currentIndex + 1 > this._skipItemsSize) {
266
+ // When there are more than "skipItemsSize" number of items to the top,
267
+ // move the focus up/left with the predefined number.
268
+ this._currentIndex -= this._skipItemsSize;
269
+ } else {
270
+ // Otherwise, move the focus to the very top (as Home).
271
+ this._currentIndex -= this._currentIndex;
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Handles PAGE_DOWN in a flat list-like structure, both vertically and horizontally.
277
+ */
278
+ _handlePageDownFlat() {
279
+ if (this._skipItemsSize === null) {
280
+ // Move the focus to the very bottom (as End).
281
+ this._currentIndex = this._getItems().length - 1;
282
+ }
283
+
284
+ const currentToEndRange = this._getItems().length - this._currentIndex - 1;
285
+
286
+ if (currentToEndRange > this._skipItemsSize) {
287
+ // When there are more than "skipItemsSize" number of items until the bottom,
288
+ // move the focus down/right with the predefined number.
289
+ this._currentIndex += this._skipItemsSize;
290
+ } else {
291
+ // Otherwise, move the focus to the very bottom (as End).
292
+ this._currentIndex = this._getItems().length - 1;
293
+ }
294
+ }
295
+
225
296
  _applyTabIndex() {
226
297
  const items = this._getItems();
227
298
  for (let i = 0; i < items.length; i++) {